pax_global_header00006660000000000000000000000064152054037070014515gustar00rootroot0000000000000052 comment=bc3819525711da27ec651f124db5165b1c737a7b NVIDIA-mig-parted-47bc938/000077500000000000000000000000001520540370700150635ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/.common-ci.yml000066400000000000000000000144111520540370700175460ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. default: image: docker:stable services: - name: docker:stable-dind command: ["--experimental"] variables: GIT_SUBMODULE_STRATEGY: recursive BUILD_MULTI_ARCH_IMAGES: "true" stages: - trigger - package-build - image-build - test - scan - release - ngc-publish .pipeline-trigger-rules: rules: # We trigger the pipeline if started manually - if: $CI_PIPELINE_SOURCE == "web" # We trigger the pipeline on the main branch - if: $CI_COMMIT_BRANCH == "main" # We trigger the pipeline on the release- branches - if: $CI_COMMIT_BRANCH =~ /^release-.*$/ # We trigger the pipeline on tags - if: $CI_COMMIT_TAG && $CI_COMMIT_TAG != "" workflow: rules: # We trigger the pipeline on a merge request - if: $CI_PIPELINE_SOURCE == 'merge_request_event' # We then add all the regular triggers - !reference [.pipeline-trigger-rules, rules] # The main or manual job is used to filter out distributions or architectures that are not required on # every build. .main-or-manual: rules: - !reference [.pipeline-trigger-rules, rules] - if: $CI_PIPELINE_SOURCE == "schedule" when: manual # The trigger-pipeline job adds a manualy triggered job to the pipeline on merge requests. trigger-pipeline: stage: trigger script: - echo "starting pipeline" rules: - !reference [.main-or-manual, rules] - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: manual allow_failure: false - when: always # Define the platform targets .platform-amd64: variables: PLATFORM: linux/amd64 .platform-arm64: variables: PLATFORM: linux/arm64 # Make buildx available as a docker CLI plugin .buildx-setup: before_script: - export BUILDX_VERSION=v0.6.3 - apk add --no-cache curl - mkdir -p ~/.docker/cli-plugins - curl -sSLo ~/.docker/cli-plugins/docker-buildx "https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64" - chmod a+x ~/.docker/cli-plugins/docker-buildx - docker buildx create --use --platform=linux/amd64,linux/arm64 - '[[ -n "${SKIP_QEMU_SETUP}" ]] || docker run --rm --privileged multiarch/qemu-user-static --reset -p yes' # The .scan step forms the base of the image scan operation performed before releasing # images. We implement a .scan-base job here to allow for the variable checks to be # exercised before internal releases. .scan-base: stage: scan variables: IMAGE: "${CI_REGISTRY_IMAGE}/k8s-mig-manager:${CI_COMMIT_SHORT_SHA}" IMAGE_ARCHIVE: "k8s-mig-manager.tar" except: variables: - $SKIP_SCANS && $SKIP_SCANS == "yes" before_script: - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" # TODO: We should specify the architecture here and scan all architectures - docker pull --platform="${PLATFORM}" "${IMAGE}" - docker save "${IMAGE}" -o "${IMAGE_ARCHIVE}" script: - > echo "Skipping scan of ${IMAGE}" .scan: extends: - .scan-base # Define the scan targets scan-image-amd64: extends: - .scan - .platform-amd64 needs: - image-distroless scan-image-arm64: extends: - .scan - .platform-arm64 needs: - image-distroless - scan-image-amd64 # Download the regctl binary for use in the release steps .regctl-setup: before_script: - export REGCTL_VERSION=v0.9.2 - apk add --no-cache curl - mkdir -p bin - curl -sSLo bin/regctl https://github.com/regclient/regclient/releases/download/${REGCTL_VERSION}/regctl-linux-amd64 - chmod a+x bin/regctl - export PATH=$(pwd)/bin:${PATH} # .release forms the base of the deployment jobs which push images to the CI registry. # This is extended with the version to be deployed (e.g. the SHA or TAG) and the # target os. .release: stage: release variables: # Define the source image for the release IMAGE_NAME: "${CI_REGISTRY_IMAGE}/k8s-mig-manager" VERSION: "${CI_COMMIT_SHORT_SHA}" # OUT_IMAGE_VERSION is overridden for external releases OUT_IMAGE_VERSION: "${CI_COMMIT_SHORT_SHA}" before_script: - !reference [.regctl-setup, before_script] # We ensure that the OUT_IMAGE_VERSION and OUT_IMAGE_NAME is set - 'echo "Version: ${OUT_IMAGE_VERSION}, Image: ${OUT_IMAGE_NAME}" ; [[ -n "${OUT_IMAGE_VERSION}" && -n "${OUT_IMAGE_NAME}" ]] || exit 1' # In the case where we are deploying a different version to the CI_COMMIT_SHA, we # need to tag the image. # Note: a leading 'v' is stripped from the version if present - apk add --no-cache make bash script: # Log in to the "output" registry, tag the image and push the image - 'echo "Logging in to CI registry ${CI_REGISTRY}"' - regctl registry login "${CI_REGISTRY}" -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" - '[ ${CI_REGISTRY} = ${OUT_REGISTRY} ] || echo "Logging in to output registry ${OUT_REGISTRY}"' - '[ ${CI_REGISTRY} = ${OUT_REGISTRY} ] || regctl registry login "${OUT_REGISTRY}" -u "${OUT_REGISTRY_USER}" -p "${OUT_REGISTRY_TOKEN}"' # Since OUT_IMAGE_NAME and OUT_IMAGE_VERSION are set, this will push the CI image to the # Target - make -f deployments/container/Makefile push-image # Define a staging release step that pushes an image to an internal "staging" repository # This is triggered for all pipelines (i.e. not only tags) to test the pipeline steps # outside of the release process. .release:staging: extends: - .release variables: OUT_REGISTRY_USER: "${NGC_REGISTRY_USER}" OUT_REGISTRY_TOKEN: "${NGC_REGISTRY_TOKEN}" OUT_REGISTRY: "${NGC_REGISTRY}" OUT_IMAGE_NAME: "${NGC_STAGING_REGISTRY}/k8s-mig-manager" release:staging: extends: - .release:staging needs: - image-distroless NVIDIA-mig-parted-47bc938/.github/000077500000000000000000000000001520540370700164235ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/.github/ISSUE_TEMPLATE/000077500000000000000000000000001520540370700206065ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000014131520540370700232770ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '[Bug]: ' labels: ["bug", "needs-triage"] --- _**Important Note: NVIDIA AI Enterprise customers can get support from NVIDIA Enterprise support. Please open a case [here](https://enterprise-support.nvidia.com/s/create-case)**._ **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Detailed steps to reproduce the issue. **Expected behavior** A clear and concise description of what you expected to happen. **Environment (please provide the following information):** - `mig-parted` version: [e.g. `v0.13.0`] - Host OS: [e.g. Ubuntu24.04] - Kernel Version: [e.g. 6.8.0-generic] - NVIDIA Driver Version: [e.g. 580.105.08] - GPU Model(s) [e.g. A100, L40, RTX 3090] NVIDIA-mig-parted-47bc938/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000000341520540370700225730ustar00rootroot00000000000000blank_issues_enabled: false NVIDIA-mig-parted-47bc938/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000006221520540370700243330ustar00rootroot00000000000000--- name: Feature request about: Submit a feature request title: "[Feature]: " labels: ["feature", "needs-triage", "lifecycle/frozen"] --- NVIDIA-mig-parted-47bc938/.github/ISSUE_TEMPLATE/question.md000066400000000000000000000003431520540370700227770ustar00rootroot00000000000000--- name: Question / General Discussion about: Ask a question or raise a discussion title: "[Question]: " labels: ["question"] --- NVIDIA-mig-parted-47bc938/.github/copy-pr-bot.yaml000066400000000000000000000001361520540370700214620ustar00rootroot00000000000000# https://docs.gha-runners.nvidia.com/platform/apps/copy-pr-bot/#configuration enabled: true NVIDIA-mig-parted-47bc938/.github/dependabot.yml000066400000000000000000000016721520540370700212610ustar00rootroot00000000000000# Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 updates: - package-ecosystem: "gomod" target-branch: main directory: "/" schedule: interval: "weekly" day: "sunday" labels: - dependencies groups: k8sio: patterns: - k8s.io/* exclude-patterns: - k8s.io/klog/* - package-ecosystem: "docker" directory: "/deployments/container" schedule: interval: "daily" - package-ecosystem: "github-actions" directory: "/" schedule: interval: "daily" - package-ecosystem: "gomod" target-branch: main directory: "deployments/devel" schedule: interval: "weekly" day: "sunday" - package-ecosystem: "docker" target-branch: main directory: "/deployments/devel" schedule: interval: "daily" NVIDIA-mig-parted-47bc938/.github/workflows/000077500000000000000000000000001520540370700204605ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/.github/workflows/build.yaml000066400000000000000000000032761520540370700224530ustar00rootroot00000000000000# Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Run this workflow on pull requests name: build on: push: branches: - main - release-* - "pull-request/[0-9]+" jobs: packages: strategy: matrix: arch: - amd64 - arm64 package: - deb - rpm - tarball fail-fast: false runs-on: linux-${{ matrix.arch }}-cpu4 steps: - uses: actions/checkout@v6 name: Check out code with: fetch-tags: true fetch-depth: 1024 - name: build ${{ matrix.package }} packages run: | sudo apt-get install -y coreutils build-essential sed git bash make echo "Building packages" make -f deployments/systemd/packages/Makefile ${{ matrix.package }}-${{ matrix.arch }} - name: 'Upload Artifacts' if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-') }} uses: actions/upload-artifact@v7 with: compression-level: 0 name: mig-parted-${{ matrix.package }}-${{ matrix.arch }}-${{ github.run_id }} path: ${{ github.workspace }}/dist/* NVIDIA-mig-parted-47bc938/.github/workflows/golang.yaml000066400000000000000000000047171520540370700226240ustar00rootroot00000000000000# Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: Golang on: push: branches: - main - "pull-request/[0-9]+" - release-* jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 name: Checkout code - name: Get Golang version id: vars run: | GOLANG_VERSION=$(./hack/golang-version.sh) echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION := }" >> $GITHUB_ENV - name: Install Go uses: actions/setup-go@v6 with: go-version: ${{ env.GOLANG_VERSION }} - name: Lint uses: golangci/golangci-lint-action@v9 with: args: -v --timeout 5m skip-cache: true - name: Check golang modules run: | make check-vendor make -C deployments/devel check-modules test: name: Unit test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v6 - name: Get Golang version id: vars run: | GOLANG_VERSION=$(./hack/golang-version.sh) echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION := }" >> $GITHUB_ENV - name: Install Go uses: actions/setup-go@v6 with: go-version: ${{ env.GOLANG_VERSION }} - run: make test build: name: Build runs-on: linux-amd64-cpu4 permissions: contents: read id-token: write steps: - name: Checkout code uses: actions/checkout@v6 - name: Get Golang version id: vars run: | GOLANG_VERSION=$(./hack/golang-version.sh) echo "GOLANG_VERSION=${GOLANG_VERSION##GOLANG_VERSION ?= }" >> $GITHUB_ENV - name: Install Go uses: actions/setup-go@v6 with: go-version: ${{ env.GOLANG_VERSION }} - name: Setup Go Proxy id: setup-go-proxy uses: nv-gha-runners/setup-artifactory-go-proxy@main - env: GOPROXY: ${{ steps.setup-go-proxy.outputs.goproxy-url }} run: | make build NVIDIA-mig-parted-47bc938/.github/workflows/image.yaml000066400000000000000000000105751520540370700224360ustar00rootroot00000000000000# Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Run this workflow on pull requests name: image on: push: branches: - main - "pull-request/[0-9]+" - release-* jobs: image: strategy: matrix: arch: - amd64 - arm64 runs-on: linux-${{ matrix.arch }}-cpu4 permissions: contents: read id-token: write packages: write steps: - uses: actions/checkout@v6 name: Check out code - name: Calculate build vars id: vars run: | echo "COMMIT_SHORT_SHA=${GITHUB_SHA:0:8}" >> $GITHUB_ENV echo "LOWERCASE_REPO_OWNER=$(echo "${GITHUB_REPOSITORY_OWNER}" | awk '{print tolower($0)}')" >> $GITHUB_ENV REPO_FULL_NAME="${{ github.event.pull_request.head.repo.full_name }}" echo "${REPO_FULL_NAME}" echo "LABEL_IMAGE_SOURCE=https://github.com/${REPO_FULL_NAME}" >> $GITHUB_ENV GENERATE_ARTIFACTS="false" if [[ "${{ github.actor }}" == "dependabot[bot]" ]]; then GENERATE_ARTIFACTS="false" elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.pull_request.head.repo.full_name }}" == "${{ github.repository }}" ]]; then GENERATE_ARTIFACTS="true" elif [[ "${{ github.event_name }}" == "push" ]]; then GENERATE_ARTIFACTS="true" fi echo "PUSH_ON_BUILD=${GENERATE_ARTIFACTS}" >> $GITHUB_ENV - name: Login to GitHub Container Registry uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Setup Go Proxy id: setup-go-proxy uses: nv-gha-runners/setup-artifactory-go-proxy@main - name: Build image env: IMAGE_NAME: ghcr.io/${LOWERCASE_REPO_OWNER}/k8s-mig-manager VERSION: ${COMMIT_SHORT_SHA}-${{ matrix.arch }} GOPROXY: ${{ steps.setup-go-proxy.outputs.goproxy-url }} DOCKER_BUILD_PLATFORM_OPTIONS: "--platform=linux/${{ matrix.arch }}" run: | echo "${VERSION}" make -f deployments/container/Makefile build create-manifest: needs: [ image ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 name: Check out code - name: Calculate build vars id: vars run: | echo "COMMIT_SHORT_SHA=${GITHUB_SHA:0:8}" >> $GITHUB_ENV echo "LOWERCASE_REPO_OWNER=$(echo "${GITHUB_REPOSITORY_OWNER}" | awk '{print tolower($0)}')" >> $GITHUB_ENV GENERATE_ARTIFACTS="false" if [[ "${{ github.actor }}" == "dependabot[bot]" ]]; then GENERATE_ARTIFACTS="false" elif [[ "${{ github.event_name }}" == "pull_request" && "${{ github.event.pull_request.head.repo.full_name }}" == "${{ github.repository }}" ]]; then GENERATE_ARTIFACTS="true" elif [[ "${{ github.event_name }}" == "push" ]]; then GENERATE_ARTIFACTS="true" fi echo "GENERATE_ARTIFACTS=${GENERATE_ARTIFACTS}" >> $GITHUB_ENV - name: Login to GitHub Container Registry if: ${{ env.GENERATE_ARTIFACTS == 'true' }} uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build Manifest if: ${{ env.GENERATE_ARTIFACTS == 'true' }} env: MULTIARCH_IMAGE: ghcr.io/${{ env.LOWERCASE_REPO_OWNER }}/k8s-mig-manager:${{ env.COMMIT_SHORT_SHA }} run: | docker manifest create \ ${MULTIARCH_IMAGE} \ ghcr.io/${{ env.LOWERCASE_REPO_OWNER }}/k8s-mig-manager:${{ env.COMMIT_SHORT_SHA }}-amd64 \ ghcr.io/${{ env.LOWERCASE_REPO_OWNER }}/k8s-mig-manager:${{ env.COMMIT_SHORT_SHA }}-arm64 docker manifest push ${MULTIARCH_IMAGE} NVIDIA-mig-parted-47bc938/.github/workflows/stale.yaml000066400000000000000000000015541520540370700224610ustar00rootroot00000000000000name: Stale issues on: workflow_dispatch: schedule: - cron: "21 4 * * *" jobs: stale: permissions: actions: write issues: write runs-on: ubuntu-latest steps: - uses: actions/stale@v10 with: stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. This issue will be closed in 30 days unless new comments are made or the stale label is removed. To skip these checks, apply the "feature, enhancement or lifecycle/frozen" labels.' stale-issue-label: 'lifecycle/stale' exempt-issue-labels: 'lifecycle/frozen,feature,enhancement' days-before-stale: 90 close-issue-message: 'This issue was automatically closed due to inactivity.' days-before-issue-close: 30 remove-stale-when-updated: true operations-per-run: 300 NVIDIA-mig-parted-47bc938/.gitignore000066400000000000000000000000331520540370700170470ustar00rootroot00000000000000*.swp *.swo dist/ .vscode/ NVIDIA-mig-parted-47bc938/.gitlab-ci.yml000066400000000000000000000024541520540370700175240ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. include: - .common-ci.yml # Define the image build targets .image-build: stage: image-build variables: IMAGE_NAME: "${CI_REGISTRY_IMAGE}/k8s-mig-manager" VERSION: "${CI_COMMIT_SHORT_SHA}" PUSH_ON_BUILD: "true" before_script: - !reference [.buildx-setup, before_script] - apk add --no-cache bash make git - 'echo "Logging in to CI registry ${CI_REGISTRY}"' - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}" script: - make -f deployments/container/Makefile build-image needs: - trigger-pipeline image-ubi9: extends: - .image-build - .dist-ubi9 image-ubuntu20.04: extends: - .image-build - .dist-ubuntu20.04 NVIDIA-mig-parted-47bc938/.golangci.yml000066400000000000000000000016431520540370700174530ustar00rootroot00000000000000version: "2" linters: enable: - contextcheck - gocritic - gosec - misspell - unconvert exclusions: generated: lax presets: - comments - common-false-positives - legacy - std-error-handling rules: - linters: - gosec path: pkg/mig/config/config_test.go text: G404 # TODO: remove this when shell command invocations are replaced with Go method calls - linters: - gosec path: pkg/mig/reconfigure/reconfigure.go text: G204 - path: (.+)\.go$ text: 'G115: integer overflow conversion(.+)' paths: - third_party$ - builtin$ - examples$ formatters: enable: - gofmt - goimports settings: goimports: local-prefixes: - github.com/NVIDIA/mig-parted exclusions: generated: lax paths: - third_party$ - builtin$ - examples$ NVIDIA-mig-parted-47bc938/.nvidia-ci.yml000066400000000000000000000131371520540370700175340ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. include: - local: '.common-ci.yml' default: tags: - cnt - container-dev - docker/multi-arch - docker/privileged - os/linux - type/docker variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "/certs" # Release "devel"-tagged images off the main branch RELEASE_DEVEL_BRANCH: "main" DEVEL_RELEASE_IMAGE_VERSION: "devel" # On the multi-arch builder we don't need the qemu setup. SKIP_QEMU_SETUP: "1" # Define the public staging registry STAGING_REGISTRY: ghcr.io/nvidia STAGING_VERSION: ${CI_COMMIT_SHORT_SHA} .image-pull: stage: image-build variables: IN_REGISTRY: "${STAGING_REGISTRY}" IN_IMAGE_NAME: k8s-mig-manager IN_VERSION: "${STAGING_VERSION}" OUT_REGISTRY_USER: "${CI_REGISTRY_USER}" OUT_REGISTRY_TOKEN: "${CI_REGISTRY_PASSWORD}" OUT_REGISTRY: "${CI_REGISTRY}" OUT_IMAGE_NAME: "${CI_REGISTRY_IMAGE}/k8s-mig-manager" PUSH_MULTIPLE_TAGS: "false" # We delay the job start to allow the public pipeline to generate the required images. when: delayed start_in: 30 minutes timeout: 30 minutes retry: max: 2 when: - job_execution_timeout - stuck_or_timeout_failure before_script: - !reference [.regctl-setup, before_script] - apk add --no-cache make bash - > regctl manifest get ${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION} --list > /dev/null && echo "${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}" || ( echo "${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION} does not exist" && sleep infinity ) script: - regctl registry login "${OUT_REGISTRY}" -u "${OUT_REGISTRY_USER}" -p "${OUT_REGISTRY_TOKEN}" - make -f deployments/container/Makefile IMAGE=${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION} OUT_IMAGE=${OUT_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA} push-image image-distroless: extends: - .image-pull # We skip the integration tests for the internal CI: .integration: stage: test before_script: - echo "Skipped in internal CI" script: - echo "Skipped in internal CI" # The .scan step forms the base of the image scan operation performed before releasing # images. .scan: extends: - .scan-base stage: scan image: "${PULSE_IMAGE}" script: - AuthHeader=$(echo -n $SSA_CLIENT_ID:$SSA_CLIENT_SECRET | base64 -w0) - > export SSA_TOKEN=$(curl --request POST --header "Authorization: Basic $AuthHeader" --header "Content-Type: application/x-www-form-urlencoded" ${SSA_ISSUER_URL} | jq ".access_token" | tr -d '"') - if [ -z "$SSA_TOKEN" ]; then exit 1; else echo "SSA_TOKEN set!"; fi - pulse-cli -n $NSPECT_ID --ssa $SSA_TOKEN scan -i $IMAGE_ARCHIVE -p $CONTAINER_POLICY -o artifacts: when: always expire_in: 1 week paths: - pulse-cli.log - licenses.json - sbom.json - vulns.json - policy_evaluation.json .ngc-publish-variables: before_script: - | if [ -n "${CI_COMMIT_TAG}" ]; then echo "${CI_COMMIT_SHORT_SHA} ${CI_COMMIT_TAG}" > build-info-${CI_PIPELINE_ID}.txt else echo "${CI_COMMIT_SHORT_SHA} ${CI_COMMIT_SHORT_SHA}" > build-info-${CI_PIPELINE_ID}.txt fi .update-nspect: stage: ngc-publish needs: - job: release:staging extends: - .ngc-publish-variables image: name: "${CNT_NGC_PUBLISH_IMAGE}" pull_policy: always variables: PROJECT_NAME: "mig-parted" REPO_URL: "https://github.com/NVIDIA/mig-parted.git" script: - | cnt-ngc-publish nspect --versions-file "build-info-${CI_PIPELINE_ID}.txt" # Update the nspect staging environment to test the nspect publishing logic update-nspect-staging: extends: - .update-nspect except: - tags variables: ENV: "stage" RELEASE_VERSION: "test" NSPECT_CLIENT_ID: "${NSPECT_STAGING_CLIENT_ID}" NSPECT_CLIENT_SECRET: "${NSPECT_STAGING_CLIENT_SECRET}" # Update the nspect production environment with the new release update-nspect: extends: - .update-nspect rules: - if: $CI_COMMIT_TAG variables: OSRB_BUG_ID: "${OSRB_BUG_ID}" ENV: "prod" RELEASE_VERSION: "${CI_COMMIT_TAG}" NSPECT_CLIENT_ID: "${NSPECT_PROD_CLIENT_ID}" NSPECT_CLIENT_SECRET: "${NSPECT_PROD_CLIENT_SECRET}" .publish-images: stage: ngc-publish extends: - .ngc-publish-variables image: name: "${CNT_NGC_PUBLISH_IMAGE}" pull_policy: always variables: GITLAB_ACCESS_TOKEN: "${CNT_GITLAB_TOKEN}" script: - cnt-ngc-publish render --project-name "mig-parted" --versions-file "build-info-${CI_PIPELINE_ID}.txt" --output mig-parted.yaml - cnt-ngc-publish merge-request --files "mig-parted.yaml" # Raise an MR to publish the image to NGC ngc-image-publish: extends: - .publish-images rules: - if: $CI_COMMIT_TAG needs: - job: update-nspect variables: NGC_PUBLISHING_PROJECT_PATH: "${NGC_PUBLISHING_PROD_PROJECT_PATH}" # Create a dummy MR that exercises the publishing logic mock-image-publish: extends: - .publish-images except: - tags needs: - job: update-nspect-staging variables: NGC_PUBLISHING_PROJECT_PATH: "${NGC_PUBLISHING_TEST_PROJECT_PATH}" NVIDIA-mig-parted-47bc938/CHANGELOG.md000066400000000000000000000215171520540370700167020ustar00rootroot00000000000000# NVIDIA MIG Manager Changelog ## v0.14.2 - Persist MIG_PARTED_CONFIG_FILE and MIG_PARTED_HOOKS_FILE across reboots - Bump NVIDIA Container Toolkit version to v1.19.1 - Bump golang.org/x/net to v0.54.0 - Bump distroless base image version to v4.0.6-dev - Bump golang version to 1.26.3 ## v0.14.1 - Reduce redundant NVML Init/Shutdown cycles - Switch build base image from ubi9 to ubi8 to fix glibc compatibility - Bump distroless base image version to v4.0.4-dev - Bump CUDA base image version to 13.2.1-base-ubi8 - Bump k8s golang dependencies - Bump golang version to 1.26.2 ## v0.14.0 - Remove references to deprecated dcgm.service - Add support for dynamic MIG config generation - Extend the functionality of apply-exit to refresh CDI config - Bump distroless base image version to v4.0.2-dev - Bump CUDA base image version 13.1.1-base-ubi9 - Fix hooks not running when invoked via systemd service - Fix to use management mode when generating CDI spec - Bump NVIDIA Container Toolkit version to v1.19.0 - Bump k8s golang dependencies to v0.35.2 - Bump golang version to 1.26.1 ## v0.13.1 - Update k8s-mig-manager to use PATCH instead of UPDATE when updating node labels - Bump NVIDIA Container Toolkit to v1.18.1 - Bump distroless base image to v3.2.1-dev - Bump golang version to 1.25.4 - Bump k8s golang dependencies to 0.34.2 ## v0.13.0 - Fix device-filter for all-1g.24gb mig-parted config - Port reconfigure-mig.sh to Go - Move to distroless as the base image for nvidia-mig-manager - Add MIG profiles for B300 and GB300 in the mig-parted config - Bump NVIDIA Container Toolkit to v1.18.0 - Bump github.com/NVIDIA/go-nvlib from 0.7.4 to 0.8.1 ## v0.12.3 - Use the correct MIG profiles for GB200 - Add MIG profiles for RTX PRO 6000 Blackwell - Bump golang version to 1.24.6 - Bump go-nvlib to 0.7.4 - Update libxml2 and sqlite-libs packages in ubi9 image to resolve CVEs ## v0.12.2 - Add %posttrans to the rpm spec to ensure symlinks for config.yaml and hooks.yaml are maintained during an upgrade - Bump golang version to v1.24.5 - Bump golang/x/net to v0.38.0 - Bump k8s.io/{api,api-machinery,client-go} dependencies to v0.33.3 - Bump CUDA base image version to 12.9.1 - Bump NVIDIA Container Toolkit to v1.17.8 - Bump go-nvlib to 0.7.3 - Bump go-nvml to 0.12.9-0 ## v0.12.1 - Add the 4g.90gb MIG profile for the B200 GPU - Bump golang/x/net to v0.36.0 - Bump k8s.io/{api,api-machinery,client-go} dependencies to v0.32.3 - Bump CUDA base image version to 12.8.1 - Bump NVIDIA Container Toolkit to v1.17.5 ## v0.12.0 - Add support for the HGX GB200 GPU with PCI Device ID 2941 - Bump golang version to v1.24.1 - Bump go-nvlib to 0.7.1 - Bump k8s.io/{api,api-machinery,client-go} dependencies to v0.32.2 - Bump matryer/moq to v0.5.3 - Bump github.com/urfave/cli/v2 to 2.27.6 ## v0.11.0 - Add support for the B200 GPU with PCI Device ID 2901 - Bump golang version to v1.23.5 - Bump golang/x/net to v0.33.0 - Bump nvidia-ctk version to v1.17.4 - Bump CUDA base image version to 12.8.0 - Bump go-nvml to 0.12.4-1 - Bump k8s.io/{api,api-machinery,client-go} dependencies to v0.32.1 - Bump matryer/moq to v0.5.1 - Fix rpm spec to maintain the config.yaml and hooks.yaml symlinks during an update - Point the QEMU artifacts image to the most recent tag - `tonistiigi/binfmt:master` ## v0.10.0 - Add GH200 144G HBM3e with PCI ID x234810DE - Bump Golang version to v1.23.2 - Bump CUDA base image version to 12.6.2 - Switch to the UBI9 CUDA base image - Bump nvidia-ctk version to v1.16.2 - Bump go-nvlib to 0.7.0 - Bump vendored go dependencies ## v0.9.1 - Add H200 with PCI ID 0x233510DE - Fix bug with nvidia-gpu-reset.target setup - Bump Golang version to v1.23.1 - Bump CUDA base image version to 12.6.1 ## v0.9.0 - Bump go-nvlib to 0.6.1 - Fix the H100 NVL mig profile configuration in the example file - Add arm64 packages - Add a new nvidia-gpu-services.target to ensure proper startup order - Add H800 with PCI ID 232410DE - Bump Golang version to 1.23.0 - Bump nvidia-ctk version to v1.16.1 - Bump CUDA base image version to 12.6.0 ## v0.8.0 - Add H200 141GB to the example config file - Bump CUDA base image version to 12.5.1 ## v0.8.0-rc.2 - Add --nvidia-cdi-hook flag to mig-manager - Bump nvidia-ctk version to v1.16.0-rc.2 - Bump Golang version to 1.22.5 ## v0.8.0-rc.1 - Update to latest CUDA base image 12.5.0 - Bump Golang version to 1.22.4 - Bump go-nvml to 0.12.0-5 - Bump go-nvlib to 0.3.0 - Update to incorporate go-nvml updates to expose interface types - Align nvidia driver root envvar names with other components - Add support for H100 NVL 94GB - Add dev-root option to mig-manager container - Bump nvidia-ctk version to v1.16.0-rc.1 ## v0.7.0 - Update to latest CUDA base image 12.4.1 - Bump Golang version to 1.22.2 - Update vendored go dependencies ## v0.6.0 - Update to latest CUDA base image 12.3.2 - Migrate to using github.com/NVIDIA/go-nvlib - Bump Golang version to 1.20.5 - Bump nvidia-ctk version used by k8s-mig-manager to 1.14.6 - Update vendored go dependencies - Minor code improvements and refactoring ## v0.5.5 - Update to latest CUDA base image 12.2.2 ## v0.5.4 - Update MIG config for Hopper with device ID of H100 80GB HBM3 SKU ## v0.5.3 - Update to latest CUDA image 12.2.0 - Update example config for Hopper with H100 NVL and H800 NVL ## v0.5.2 - Update to latest CUDA image 12.1.0 - Update k8s-mig-manager to support CDI - Add two new example configs for the newly supported profiles on A100 - Update MIG profile code to rely on go-nvlib - Update vendored go-nvlib to latest - Update NVML wrapper to include MIG profiles from NVML v12.0 ## v0.5.1 - Update to latest CUDA image 12.0.1 - Add newer MIG profiles supported with NVML 12.0 to default config.yaml files - Add profiles with media extensions for A30-24GB to default config.yaml files - Add H100 and H800 profiles to default config.yaml files - Add A800 profiles to default config.yaml files - Update all calls to enumerate GPUs to use NVML or PCI as appropriate - Bump vendored go-nvml to v12.0 - Bump Golang version to 1.20.1 ## v0.5.0 - Bump CUDA base image to 11.7.1 - Remove CUDA compat libs from mig-manager in favor of libs installed by the Driver - Use symlink for config.yaml instead of static config file - Add k8s-mig-manager-example for Hopper - Update k8s-mig-manager-example with standalone RBAC objects - Explicitly delete pods launched by operator validator before reconfig - Allow missing GPUClients file in k8s-mig-manager - Add hooks-minimal.yaml that gets linked if on Hopper or above - Use symlink for hooks.yaml instead of static config file - Update install script to use go 1.16.4 - Update hooks.sh to split out start/stop of k8s services from k8s pods - Explicitly clear all MIG configurations before disabling MIG mode ## v0.4.3 - Update calculation for GB in MIG profile name - Make the systemd-mig-manager a dependency of systemd-resolved.service ## v0.4.2 - Update CUDA image to 11.7.0 - Add extra assert in k8s-mig-manager to double check mig-mode change applied - Update mig-manager image to use NGC DL license ## v0.4.1 - Keep NVML alive across all mig-parted commands (except GPU reset) - Remove unnecessary services from hooks.sh ## v0.4.0 - Update nvidia-mig-parted.sh to include MIG_PARTED_CHECKPOINT_FILE - Add checkpoint / restore commands to mig-parted CLI - Update golang version to 1.16.4 - Support instantiation of *_PROFILE_6_SLICE GIs and CIs - Update cyrus-sasl-lib to address CVE-2022-24407 - Add support for MIG profiles with +me as an attribute extension - Support Compute Instances in mig-parted config such that CI != GI - Update go-nvml to v0.11.6 - Change semantics of 'all' to mean 'all-mig-capable' in mig-parted config ## v0.3.0 - k8s-mig-manager: Add support for multi-arch images - k8s-mig-manager: Handle eviction of NVSM pod when applying MIG changes ## v0.2.0 - nvidia-mig-parted: Support passing newer GI and CI profile enums on older drivers - k8s-mig-manager: Rename nvcr.io/nvidia to nvcr.io/nvidia/cloud-native - k8s-mig-manager: Add support for pre-installed drivers - systemd-mig-manager: Update logic to remove 'containerd' containers in utils.sh - systemd-mig-manager: Update logic to shutdown only active systemd services in list - ci-infrastructure: Rework build and CI to align with other projects - ci-infrastructure: Use pulse instead of contamer for scans ## v0.1.3 - Add default configs for the PG506-96GB card - Remove CombinedMigManager and add wrappers for Mode/Config Managers - Add a function to check the minimum NVML version required - Add SystemGetNVMLVersion() to the NVML interface - Fix small bug in assert logic for non MIG-capable GPUs ## v0.1.2 - Do not start nvidia-mig-manager.service when installing the .deb - Restore lost assert_gpu_reset_available() function - Add nvidia-dcgm.service to driver_services array - Split dcgm, and dcgm-exporter in k8s-mig-manager ## v0.1.1 - Update packaged config.yaml to include more supported devices ## v0.1.0 - Initial release of rpm package for v0.1.0 NVIDIA-mig-parted-47bc938/CONTRIBUTING.md000066400000000000000000000044151520540370700173200ustar00rootroot00000000000000# Contribute to the NVIDIA `mig-parted` Project Want to contribute to the NVIDIA `mig-parted` project? Awesome! We only require you to sign your work as described in the following section. ## Sign your work The sign-off is a simple signature at the end of the description for the patch. Your signature certifies that you wrote the patch or otherwise have the right to pass it on as an open-source patch. The rules are pretty simple, and sign-off means that you certify the DCO below (from [developercertificate.org](http://developercertificate.org/)): ``` Developer Certificate of Origin Version 1.1 Copyright (C) 2004, 2006 The Linux Foundation and its contributors. 1 Letterman Drive Suite D4700 San Francisco, CA, 94129 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Developer's Certificate of Origin 1.1 By making a contribution to this project, I certify that: (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. ``` To sign off, you just add the following line to every git commit message: Signed-off-by: Joe Smith You must use your real name (sorry, no pseudonyms or anonymous contributions). If you set your `user.name` and `user.email` using git config, you can sign your commit automatically with `git commit -s`. NVIDIA-mig-parted-47bc938/LICENSE000066400000000000000000000261361520540370700161000ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/Makefile000066400000000000000000000101141520540370700165200ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. DOCKER ?= docker include $(CURDIR)/versions.mk ifeq ($(IMAGE),) REGISTRY ?= nvidia IMAGE_NAME=$(REGISTRY)/mig-parted endif EXAMPLES := $(patsubst ./examples/%/,%,$(sort $(dir $(wildcard ./examples/*/)))) EXAMPLE_TARGETS := $(patsubst %,example-%,$(EXAMPLES)) CMDS := $(patsubst ./cmd/%/,%,$(sort $(dir $(wildcard ./cmd/*/)))) CMD_TARGETS := $(patsubst %,cmd-%, $(CMDS)) CHECK_TARGETS := lint MAKE_TARGETS := binaries build check fmt lint-internal test examples cmds coverage generate vendor check-vendor $(CHECK_TARGETS) TARGETS := $(MAKE_TARGETS) $(EXAMPLE_TARGETS) $(CMD_TARGETS) DOCKER_TARGETS := $(patsubst %, docker-%, $(TARGETS)) .PHONY: $(TARGETS) $(DOCKER_TARGETS) GOOS := linux ifeq ($(VERSION),) CLI_VERSION = $(LIB_VERSION)$(if $(LIB_TAG),-$(LIB_TAG)) else CLI_VERSION = $(VERSION) endif CLI_VERSION_PACKAGE = $(MODULE)/internal/info binaries: cmds ifneq ($(PREFIX),) cmd-%: COMMAND_BUILD_OPTIONS = -o $(PREFIX)/$(*) endif cmds: $(CMD_TARGETS) $(CMD_TARGETS): cmd-%: GOOS=$(GOOS) go build -ldflags "-extldflags=-Wl,-z,lazy -s -w -X $(CLI_VERSION_PACKAGE).gitCommit=$(GIT_COMMIT) -X $(CLI_VERSION_PACKAGE).version=$(CLI_VERSION)" $(COMMAND_BUILD_OPTIONS) $(MODULE)/cmd/$(*) build: GOOS=$(GOOS) go build $(MODULE)/... examples: $(EXAMPLE_TARGETS) $(EXAMPLE_TARGETS): example-%: GOOS=$(GOOS) go build ./examples/$(*) all: check test build binary check: $(CHECK_TARGETS) # Apply go fmt to the codebase fmt: go list -f '{{.Dir}}' $(MODULE)/... \ | xargs gofmt -s -l -w goimports: go list -f {{.Dir}} $(MODULE)/... \ | xargs goimports -local $(MODULE) -w lint: golangci-lint run ./... vendor: go mod tidy go mod vendor go mod verify check-vendor: vendor git diff --quiet HEAD -- go.mod go.sum vendor COVERAGE_FILE := coverage.out test: build cmds go test -v -coverprofile=$(COVERAGE_FILE) $(MODULE)/cmd/... $(MODULE)/internal/... $(MODULE)/api/... $(MODULE)/pkg/... coverage: test cat $(COVERAGE_FILE) | grep -v "_mock.go" > $(COVERAGE_FILE).no-mocks go tool cover -func=$(COVERAGE_FILE).no-mocks generate: go generate $(MODULE)/... # Generate an image for containerized builds # Note: This image is local only .PHONY: .build-image .build-image: make -f deployments/devel/Makefile .build-image ifeq ($(BUILD_DEVEL_IMAGE),yes) $(DOCKER_TARGETS): .build-image .shell: .build-image endif $(DOCKER_TARGETS): docker-%: @echo "Running 'make $(*)' in container image $(BUILDIMAGE)" $(DOCKER) run \ --rm \ -e GOCACHE=/tmp/.cache/go \ -e GOMODCACHE=/tmp/.cache/gomod \ -e GOLANGCI_LINT_CACHE=/tmp/.cache/golangci-lint \ -v $(PWD):/work \ -w /work \ --user $$(id -u):$$(id -g) \ $(BUILDIMAGE) \ make $(*) # Start an interactive shell using the development image. PHONY: .shell .shell: $(DOCKER) run \ --rm \ -ti \ -e GOCACHE=/tmp/.cache/go \ -e GOMODCACHE=/tmp/.cache/gomod \ -v $(PWD):/work \ -w /work \ --user $$(id -u):$$(id -g) \ $(BUILDIMAGE) # Deployment targets are forwarded to the Makefile in the following directory DEPLOYMENT_DIR = deployments/container DEPLOYMENT_TARGETS = ubuntu20.04 ubi9 BUILD_DEPLOYMENT_TARGETS := $(patsubst %,build-%,$(DEPLOYMENT_TARGETS)) PUSH_DEPLOYMENT_TARGETS := $(patsubst %,push-%,$(DEPLOYMENT_TARGETS)) .PHONY: $(DEPLOYMENT_TARGETS) $(BUILD_DEPLOYMENT_TARGETS) $(PUSH_DEPLOYMENT_TARGETS) $(BUILD_DEPLOYMENT_TARGETS): build-%: @echo "Running 'make $(*)' in $(DEPLOYMENT_DIR)" make -f $(DEPLOYMENT_DIR)/Makefile $(*) $(PUSH_DEPLOYMENT_TARGETS): %: @echo "Running 'make $(*)' in $(DEPLOYMENT_DIR)" make -f $(DEPLOYMENT_DIR)/Makefile $(*) NVIDIA-mig-parted-47bc938/README.md000066400000000000000000000176201520540370700163500ustar00rootroot00000000000000# MIG ***Part***iton ***Ed***itor for NVIDIA GPUs MIG (short for Multi-Instance GPU) is a mode of operation in the newest generation of NVIDIA Ampere GPUs. It allows one to partition a GPU into a set of "MIG Devices", each of which appears to the software consuming them as a mini-GPU with a fixed partition of memory and a fixed partition of compute resources. Please refer to the [MIG User Guide](https://docs.nvidia.com/datacenter/tesla/mig-user-guide/index.html) for a detailed explanation of MIG and the features it provides. The MIG ***Part***iton ***Ed***itor (`nvidia-mig-parted`) is a tool designed for system administrators to make working with MIG partitions easier. It allows administrators to ***declaratively*** define a set of possible MIG configurations they would like applied to all GPUs on a node. At runtime, they then point `nvidia-mig-parted` at one of these configurations, and `nvidia-mig-parted` takes care of applying it. In this way, the same configuration file can be spread across all nodes in a cluster, and a runtime flag (or environment variable) can be used to decide which of these configurations to actually apply to a node at any given time. As an example, consider the following configuration for an NVIDIA DGX-A100 node (found in the `examples/config.yaml` file of this repo): ``` version: v1 mig-configs: all-disabled: - devices: all mig-enabled: false all-enabled: - devices: all mig-enabled: true mig-devices: {} all-1g.5gb: - devices: all mig-enabled: true mig-devices: "1g.5gb": 7 all-2g.10gb: - devices: all mig-enabled: true mig-devices: "2g.10gb": 3 all-3g.20gb: - devices: all mig-enabled: true mig-devices: "3g.20gb": 2 all-balanced: - devices: all mig-enabled: true mig-devices: "1g.5gb": 2 "2g.10gb": 1 "3g.20gb": 1 custom-config: - devices: [0,1,2,3] mig-enabled: false - devices: [4] mig-enabled: true mig-devices: "1g.5gb": 7 - devices: [5] mig-enabled: true mig-devices: "2g.10gb": 3 - devices: [6] mig-enabled: true mig-devices: "3g.20gb": 2 - devices: [7] mig-enabled: true mig-devices: "1g.5gb": 2 "2g.10gb": 1 "3g.20gb": 1 ``` Each of the sections under `mig-configs` is user-defined, with custom labels used to refer to them. For example, the `all-disabled` label refers to the MIG configuration that disables MIG for all GPUs on the node. Likewise, the `all-1g.5gb` label refers to the MIG configuration that slices all GPUs on the node into `1g.5gb` devices. Finally, the `custom-config` label defines a completely custom configuration which disables MIG on the first 4 GPUs on the node, and applies a mix of MIG devices across the rest. Using this tool the following commands can be run to apply each of these configs, in turn: ``` $ nvidia-mig-parted apply -f examples/config.yaml -c all-disabled $ nvidia-mig-parted apply -f examples/config.yaml -c all-1g.5gb $ nvidia-mig-parted apply -f examples/config.yaml -c all-2g.10gb $ nvidia-mig-parted apply -f examples/config.yaml -c all-3g.20gb $ nvidia-mig-parted apply -f examples/config.yaml -c all-balanced $ nvidia-mig-parted apply -f examples/config.yaml -c custom-config ``` The currently applied configuration can then be looked up with: ``` $ nvidia-mig-parted export version: v1 mig-configs: current: - devices: all mig-enabled: true mig-devices: 1g.5gb: 2 2g.10gb: 1 3g.20gb: 1 ``` And asserted with: ``` $ nvidia-mig-parted assert -f examples/config.yaml -c all-balanced Selected MIG configuration currently applied $ echo $? 0 $ nvidia-mig-parted assert -f examples/config.yaml -c all-1g.5gb ERRO[0000] Assertion failure: selected configuration not currently applied $ echo $? 1 ``` **Note:** The `nvidia-mig-parted` tool alone does not take care of making sure that your node is in a state where MIG mode changes and MIG device configurations will apply cleanly. Moreover, it does not ensure that MIG device configurations will persist across node reboots. To help with this, a `systemd` service and a set of support scripts have been developed to wrap `nvidia-mig-parted` and provide these much desired features. Please see the README.md under [deployments/systemd](deployments/systemd) for more details. ## Installing `nvidia-mig-parted` At the moment, there is no common distribution platform for `nvidia-mig-parted`. However, we do build `deb`, `rpm` and `tarball` packages and distribute them as assets with every release. Please see our release page [here](https://github.com/NVIDIA/mig-parted/releases) to download them and install them. To build from source, please follow one of the methods below. #### Use `docker` with `go install`: ``` docker run \ --rm \ -v $(pwd):/dest \ golang:1.20.1 \ sh -c " go install github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted@latest mv /go/bin/nvidia-mig-parted /dest/nvidia-mig-parted " ``` #### Run `go get` and `go install` directly: ``` GO111MODULE=off go get -u github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted GOBIN=$(pwd) go install github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted ``` #### Clone the repo and build it: ``` git clone http://github.com/NVIDIA/mig-parted cd mig-parted go build ./cmd/nvidia-mig-parted ``` When followed exactly, any of these methods should generate a binary called `nvidia-mig-parted` in your current directory. Once this is done, it is advised that you move this binary to somewhere in your path, so you can follow the commands below verbatim. ## Quick Start Before going into the details of every possible option for `nvidia-mig-parted` it's useful to walk through a few examples of its most common usage. All commands below use the example configuration file found under `examples/config.yaml` of this repo. #### Apply a specific MIG config from a configuration file ``` nvidia-mig-parted apply -f examples/config.yaml -c all-1g.5gb ``` #### Apply a config to ***only*** change the MIG mode settings of a config ``` nvidia-mig-parted apply --mode-only -f examples/config.yaml -c all-1g.5gb ``` #### Apply a MIG config with debug output ``` nvidia-mig-parted -d apply -f examples/config.yaml -c all-1g.5gb ``` #### Apply a one-off MIG config without a configuration file ``` cat < 0 { return fmt.Errorf("unable to parse with missing 'version' field") } result := Spec{} for k, v := range spec { if k == "version" { var version string err := json.Unmarshal(v, &version) if err != nil { return err } result.Version = version } } if result.Version != Version { return fmt.Errorf("unknown version: %v", result.Version) } delete(spec, "version") for k, v := range spec { switch k { case "mig-configs": configs := map[string]MigConfigSpecSlice{} err := json.Unmarshal(v, &configs) if err != nil { return err } if len(configs) == 0 { return fmt.Errorf("at least one entry in '%v' is required", k) } for c, s := range configs { if len(s) == 0 { return fmt.Errorf("at least one entry in '%v' is required", c) } } result.MigConfigs = configs default: return fmt.Errorf("unexpected field: %v", k) } } *s = result return nil } // UnmarshalJSON unmarshals raw bytes into a 'MigConfigSpec'. func (s *MigConfigSpec) UnmarshalJSON(b []byte) error { spec := make(map[string]json.RawMessage) err := json.Unmarshal(b, &spec) if err != nil { return err } required := []string{"devices", "mig-enabled"} for _, r := range required { if !containsKey(spec, r) { return fmt.Errorf("missing required field: %v", r) } } result := MigConfigSpec{} for k, v := range spec { switch k { case "device-filter": var str string err1 := json.Unmarshal(v, &str) if err1 == nil { result.DeviceFilter = str break } var strslice []string err2 := json.Unmarshal(v, &strslice) if err2 == nil { result.DeviceFilter = strslice break } return fmt.Errorf("(%v, %v)", err1, err2) case "devices": var str string err1 := json.Unmarshal(v, &str) if err1 == nil { if str != "all" { return fmt.Errorf("invalid string input for '%v': %v", k, str) } result.Devices = str break } var intslice []int err2 := json.Unmarshal(v, &intslice) if err2 == nil { result.Devices = intslice break } return fmt.Errorf("(%v, %v)", err1, err2) case "mig-enabled": var enabled bool err := json.Unmarshal(v, &enabled) if err != nil { return err } result.MigEnabled = enabled case "mig-devices": devices := make(types.MigConfig) err := json.Unmarshal(v, &devices) if err != nil { return err } err = devices.AssertValidFormat() if err != nil { return fmt.Errorf("error validating values in '%v' field: %v", k, err) } result.MigDevices = devices default: return fmt.Errorf("unexpected field: %v", k) } } if result.MigEnabled && result.MigDevices == nil { return fmt.Errorf("missing required field 'mig-devices' when 'mig-enabled' is true") } if !result.MigEnabled && len(result.MigDevices) != 0 { return fmt.Errorf("MIG devices included when 'mig-enabled' is false") } *s = result return nil } func containsKey(m map[string]json.RawMessage, s string) bool { _, exists := m[s] return exists } NVIDIA-mig-parted-47bc938/api/spec/v1/spec_test.go000066400000000000000000000156641520540370700214500ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package v1 import ( "testing" "github.com/stretchr/testify/require" "sigs.k8s.io/yaml" "github.com/NVIDIA/mig-parted/pkg/types" ) func TestMarshallUnmarshall(t *testing.T) { spec := Spec{ Version: "v1", MigConfigs: map[string]MigConfigSpecSlice{ "valid-format-non-existent-devices": []MigConfigSpec{ { Devices: "all", MigEnabled: true, MigDevices: types.MigConfig{ "0g.0gb": 100, }, }, }, "all-disabled": []MigConfigSpec{ { DeviceFilter: "A100-SXM4-40GB", Devices: "all", MigEnabled: false, }, }, "all-1-slice": []MigConfigSpec{ { DeviceFilter: "A100-SXM4-40GB", Devices: "all", MigEnabled: true, MigDevices: types.MigConfig{ "1g.5gb": 7, }, }, }, "all-2-slice": []MigConfigSpec{ { DeviceFilter: "A100-SXM4-40GB", Devices: "all", MigEnabled: true, MigDevices: types.MigConfig{ "2g.10gb": 3, }, }, }, "all-3-slice": []MigConfigSpec{ { DeviceFilter: "A100-SXM4-40GB", Devices: "all", MigEnabled: true, MigDevices: types.MigConfig{ "3g.20gb": 2, }, }, }, "all-balanced-slices": []MigConfigSpec{ { DeviceFilter: "A100-SXM4-40GB", Devices: "all", MigEnabled: true, MigDevices: types.MigConfig{ "1g.5gb": 2, "2g.10gb": 1, "3g.20gb": 1, }, }, }, "half-disabled-half-balanced-slices": []MigConfigSpec{ { DeviceFilter: "A100-SXM4-40GB", Devices: []int{0, 1, 2, 3}, MigEnabled: false, }, { DeviceFilter: "A100-SXM4-40GB", Devices: []int{4, 5, 6, 7}, MigEnabled: true, MigDevices: types.MigConfig{ "1g.5gb": 2, "2g.10gb": 1, "3g.20gb": 1, }, }, }, "multi-device-filter": []MigConfigSpec{ { DeviceFilter: []string{"A100-SXM4-40GB", "A100-PCIE-40GB"}, Devices: []int{0, 1, 2, 3}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-40GB", "A100-PCIE-40GB"}, Devices: []int{4, 5, 6, 7}, MigEnabled: true, MigDevices: types.MigConfig{ "1g.5gb": 2, "2g.10gb": 1, "3g.20gb": 1, }, }, }, }, } types.SetMockNVdevlib() y, err := yaml.Marshal(spec) require.Nil(t, err, "Unexpected failure yaml.Marshal") s := Spec{} err = yaml.Unmarshal(y, &s) require.Nil(t, err, "Unexpected failure yaml.Unmarshal") require.Equal(t, spec, s) } func TestSpec(t *testing.T) { testCases := []struct { Description string Spec string expectedFailure bool }{ { "Empty", "", false, }, { "Well formed", `{ "version": "v1", "mig-configs": { "all-disabled": [{ "devices": "all", "mig-enabled": false }] } }`, false, }, { "Only version field", `{ "version": "v1" }`, false, }, { "Well formed - wrong version", `{ "version": "v2", "mig-configs": { "all-disabled": [{ "devices": "all", "mig-enabled": false }] } }`, true, }, { "Only version field - wrong versiomn", `{ "version": "v2" }`, true, }, { "Missing version field", `{ "mig-configs": { "all-disabled": [{ "devices": "all", "mig-enabled": false }] } }`, true, }, { "Erroneous field", `{ "bogus": "field", "version": "v1", "mig-configs": { "all-disabled": [{ "devices": "all", "mig-enabled": false }] } }`, true, }, { "Empty 'mig-configs'", `{ "version": "v1", "mig-configs": {} }`, true, }, } for _, tc := range testCases { t.Run(tc.Description, func(t *testing.T) { s := Spec{} err := yaml.Unmarshal([]byte(tc.Spec), &s) if tc.expectedFailure { require.NotNil(t, err, "Unexpected success yaml.Unmarshal") } else { require.Nil(t, err, "Unexpected failure yaml.Unmarshal") } }) } } func TestMigConfigSpec(t *testing.T) { testCases := []struct { Description string Spec string expectedFailure bool }{ { "Empty", "", false, }, { "Well formed", `{ "devices": "all", "mig-enabled": true, "mig-devices": { "1g.5gb": 2 } }`, false, }, { "Well formed with filter", `{ "device-filter": "MODEL", "devices": "all", "mig-enabled": true, "mig-devices": { "1g.5gb": 2 } }`, false, }, { "Well formed with multi-filter", `{ "device-filter": ["MODEL1", "MODEL2"], "devices": "all", "mig-enabled": true, "mig-devices": { "1g.5gb": 2 } }`, false, }, { "Missing 'devices'", `{ "mig-enabled": true, "mig-devices": { "1g.5gb": 2 } }`, true, }, { "Missing 'mig-enabled'", `{ "devices": "all", "mig-devices": { "1g.5gb": 2 } }`, true, }, { "Missing 'mig-devices', enabled: false", `{ "devices": "all", "mig-enabled": false, }`, false, }, { "Missing 'mig-devices', enabled: true", `{ "devices": "all", "mig-enabled": true, }`, true, }, { "'mig-devices' formatted correctly", `{ "devices": "all", "mig-enabled": true, "mig-devices": { "1g.5gb": 2 } }`, false, }, { "'mig-devices' formatted incorrectly", `{ "devices": "all", "mig-enabled": true, "mig-devices": { "bogus": 2 } }`, true, }, { "Erroneous field", `{ "bogus": "field", "devices": "all", "mig-enabled": false, }`, true, }, { "'devices' string == all", `{ "devices": "all", "mig-enabled": false, }`, false, }, { "'devices' string != all", `{ "devices": "bogus", "mig-enabled": false, }`, true, }, { "'devices' []int", `{ "devices": [0,1,2,3], "mig-enabled": false, }`, false, }, { "'devices' not string for []int", `{ "devices": {}, "mig-enabled": false, }`, true, }, } for _, tc := range testCases { t.Run(tc.Description, func(t *testing.T) { var s MigConfigSpec err := yaml.Unmarshal([]byte(tc.Spec), &s) if tc.expectedFailure { require.NotNil(t, err, "Unexpected success yaml.Unmarshal") } else { require.Nil(t, err, "Unexpected failure yaml.Unmarshal") } }) } } NVIDIA-mig-parted-47bc938/cmd/000077500000000000000000000000001520540370700156265ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-manager/000077500000000000000000000000001520540370700212625ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-manager/find.go000066400000000000000000000046171520540370700225410ustar00rootroot00000000000000/* # Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. */ package main import ( "fmt" "path/filepath" ) type root string // getDriverLibraryPath returns path to `libnvidia-ml.so.1` in the driver root. // The folder for this file is also expected to be the location of other driver files. func (r root) getDriverLibraryPath() (string, error) { librarySearchPaths := []string{ "/usr/lib64", "/usr/lib/x86_64-linux-gnu", "/usr/lib/aarch64-linux-gnu", "/lib64", "/lib/x86_64-linux-gnu", "/lib/aarch64-linux-gnu", } libraryPath, err := r.findFile("libnvidia-ml.so.1", librarySearchPaths...) if err != nil { return "", err } return libraryPath, nil } // getNvidiaSMIPath returns path to the `nvidia-smi` executable in the driver root. func (r root) getNvidiaSMIPath() (string, error) { binarySearchPaths := []string{ "/usr/bin", "/usr/sbin", "/bin", "/sbin", } binaryPath, err := r.findFile("nvidia-smi", binarySearchPaths...) if err != nil { return "", err } return binaryPath, nil } // findFile searches the root for a specified file. // A number of folders can be specified to search in addition to the root itself. // If the file represents a symlink, this is resolved and the final path is returned. func (r root) findFile(name string, searchIn ...string) (string, error) { for _, d := range append([]string{"/"}, searchIn...) { l := filepath.Join(string(r), d, name) candidate, err := resolveLink(l) if err != nil { continue } return candidate, nil } return "", fmt.Errorf("error locating %q", name) } // resolveLink finds the target of a symlink or the file itself in the // case of a regular file. // This is equivalent to running `readlink -f ${l}`. func resolveLink(l string) (string, error) { resolved, err := filepath.EvalSymlinks(l) if err != nil { return "", fmt.Errorf("error resolving link '%s': %w", l, err) } return resolved, nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-manager/main.go000066400000000000000000000515261520540370700225460ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package main import ( "context" "errors" "fmt" "os" "path/filepath" "strings" "sync" log "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" "sigs.k8s.io/yaml" "github.com/NVIDIA/mig-parted/internal/info" "github.com/NVIDIA/mig-parted/pkg/mig/builder" "github.com/NVIDIA/mig-parted/pkg/mig/discovery" "github.com/NVIDIA/mig-parted/pkg/mig/reconfigure" ) const ( ResourceNodes = "nodes" MigConfigLabel = "nvidia.com/mig.config" DefaultReconfigureScript = "/usr/bin/reconfigure-mig.sh" DefaultHostRootMount = "/host" DefaultHostNvidiaDir = "/usr/local/nvidia" DefaultHostMigManagerStateFile = "/etc/systemd/system/nvidia-mig-manager.service.d/override.conf" DefaultHostKubeletSystemdService = "kubelet.service" DefaultGPUClientsNamespace = "default" DefaultNvidiaDriverRoot = "/run/nvidia/driver" DefaultDriverRootCtrPath = "/run/nvidia/driver" DefaultNvidiaCDIHookPath = "/usr/local/nvidia/toolkit/nvidia-cdi-hook" DefaultGeneratedConfigFile = "/etc/nvidia-mig-manager/generated-config.yaml" ) var ( kubeconfigFlag string nodeNameFlag string configFileFlag string reconfigureScriptFlag string withRebootFlag bool withShutdownHostGPUClientsFlag bool gpuClientsFileFlag string hostRootMountFlag string hostNvidiaDirFlag string hostMigManagerStateFileFlag string hostKubeletSystemdServiceFlag string defaultGPUClientsNamespaceFlag string cdiEnabledFlag bool driverRoot string driverRootCtrPath string devRoot string devRootCtrPath string nvidiaCDIHookPath string ) type GPUClients struct { Version string `json:"version" yaml:"version"` SystemdServices []string `json:"systemd-services" yaml:"systemd-services"` } type SyncableMigConfig struct { cond *sync.Cond mutex sync.Mutex current string lastRead string } func NewSyncableMigConfig() *SyncableMigConfig { var m SyncableMigConfig m.cond = sync.NewCond(&m.mutex) return &m } func (m *SyncableMigConfig) Set(value string) { m.mutex.Lock() defer m.mutex.Unlock() m.current = value if m.current != "" { m.cond.Broadcast() } } func (m *SyncableMigConfig) Get() string { m.mutex.Lock() defer m.mutex.Unlock() if m.lastRead == m.current { m.cond.Wait() } m.lastRead = m.current return m.lastRead } func main() { c := cli.NewApp() c.Before = validateFlags c.Action = start c.Version = info.GetVersionString() c.Flags = []cli.Flag{ &cli.StringFlag{ Name: "kubeconfig", Value: "", Usage: "absolute path to the kubeconfig file", Destination: &kubeconfigFlag, EnvVars: []string{"KUBECONFIG"}, }, &cli.StringFlag{ Name: "node-name", Aliases: []string{"n"}, Value: "", Usage: "the name of the node to watch for label changes on", Destination: &nodeNameFlag, EnvVars: []string{"NODE_NAME"}, }, &cli.StringFlag{ Name: "config-file", Aliases: []string{"f"}, Value: "", Usage: "the path to the MIG parted configuration file", Destination: &configFileFlag, EnvVars: []string{"CONFIG_FILE"}, }, &cli.StringFlag{ Name: "reconfigure-script", Aliases: []string{"s"}, Value: DefaultReconfigureScript, Usage: "script to run to do the actual MIG reconfiguration", Destination: &reconfigureScriptFlag, EnvVars: []string{"RECONFIGURE_SCRIPT"}, }, &cli.StringFlag{ Name: "host-root-mount", Aliases: []string{"m"}, Value: DefaultHostRootMount, Usage: "container path where host root directory is mounted", Destination: &hostRootMountFlag, EnvVars: []string{"HOST_ROOT_MOUNT"}, }, &cli.StringFlag{ Name: "host-nvidia-dir", Aliases: []string{"i"}, Value: DefaultHostNvidiaDir, Usage: "host path of the directory where NVIDIA managed software directory is typically located", Destination: &hostNvidiaDirFlag, EnvVars: []string{"HOST_NVIDIA_DIR"}, }, &cli.StringFlag{ Name: "host-mig-manager-state-file", Aliases: []string{"o"}, Value: DefaultHostMigManagerStateFile, Usage: "host path where the host's systemd mig-manager state file is located", Destination: &hostMigManagerStateFileFlag, EnvVars: []string{"HOST_MIG_MANAGER_STATE_FILE"}, }, &cli.StringFlag{ Name: "host-kubelet-systemd-service", Aliases: []string{"k"}, Value: DefaultHostKubeletSystemdService, Usage: "name of the host's 'kubelet' systemd service which may need to be shutdown/restarted across a MIG mode reconfiguration", Destination: &hostKubeletSystemdServiceFlag, EnvVars: []string{"HOST_KUBELET_SYSTEMD_SERVICE"}, }, &cli.StringFlag{ Name: "gpu-clients-file", Aliases: []string{"g"}, Value: "", Usage: "the path to the file listing the GPU clients that need to be shutdown across a MIG configuration", Destination: &gpuClientsFileFlag, EnvVars: []string{"GPU_CLIENTS_FILE"}, }, &cli.BoolFlag{ Name: "with-reboot", Aliases: []string{"r"}, Value: false, Usage: "reboot the node if changing the MIG mode fails for any reason", Destination: &withRebootFlag, EnvVars: []string{"WITH_REBOOT"}, }, &cli.BoolFlag{ Name: "with-shutdown-host-gpu-clients", Aliases: []string{"d"}, Value: false, Usage: "shutdown/restart any required host GPU clients across a MIG configuration", Destination: &withShutdownHostGPUClientsFlag, EnvVars: []string{"WITH_SHUTDOWN_HOST_GPU_CLIENTS"}, }, &cli.StringFlag{ Name: "default-gpu-clients-namespace", Aliases: []string{"p"}, Value: DefaultGPUClientsNamespace, Usage: "Default name of the Kubernetes namespace in which the GPU client Pods are installed in", Destination: &defaultGPUClientsNamespaceFlag, EnvVars: []string{"DEFAULT_GPU_CLIENTS_NAMESPACE"}, }, &cli.StringFlag{ Name: "nvidia-driver-root", Aliases: []string{"driver-root", "t"}, Value: DefaultNvidiaDriverRoot, Usage: "Root path to the NVIDIA driver installation. Only used if --cdi-enabled is set.", Destination: &driverRoot, EnvVars: []string{"NVIDIA_DRIVER_ROOT", "DRIVER_ROOT"}, }, &cli.StringFlag{ Name: "driver-root-ctr-path", Aliases: []string{"a"}, Value: DefaultDriverRootCtrPath, Usage: "Root path to the NVIDIA driver installation mounted in the container. Only used if --cdi-enabled is set.", Destination: &driverRootCtrPath, EnvVars: []string{"DRIVER_ROOT_CTR_PATH"}, }, &cli.BoolFlag{ Name: "cdi-enabled", Usage: "Enable CDI support", Destination: &cdiEnabledFlag, EnvVars: []string{"CDI_ENABLED"}, }, &cli.StringFlag{ Name: "dev-root", Aliases: []string{"b"}, Value: "", Usage: "Root path to the NVIDIA device nodes. Only used if --cdi-enabled is set.", Destination: &devRoot, EnvVars: []string{"NVIDIA_DEV_ROOT"}, }, &cli.StringFlag{ Name: "dev-root-ctr-path", Aliases: []string{"j"}, Value: "", Usage: "Root path to the NVIDIA device nodes mounted in the container. Only used if --cdi-enabled is set.", Destination: &devRootCtrPath, EnvVars: []string{"DEV_ROOT_CTR_PATH"}, }, &cli.StringFlag{ Name: "nvidia-cdi-hook-path", Value: DefaultNvidiaCDIHookPath, Usage: "Path to nvidia-cdi-hook binary on the host.", Destination: &nvidiaCDIHookPath, EnvVars: []string{"NVIDIA_CDI_HOOK_PATH"}, }, } err := c.Run(os.Args) if err != nil { log.SetOutput(os.Stderr) log.Printf("Error: %v", err) os.Exit(1) } } func validateFlags(c *cli.Context) error { if nodeNameFlag == "" { return fmt.Errorf("invalid -n flag: must not be empty string") } return nil } func createNodeConfigMap(ctx context.Context, clientset *kubernetes.Clientset, nodeName string, configYAML []byte) error { namespace := os.Getenv("POD_NAMESPACE") if namespace == "" { return fmt.Errorf("POD_NAMESPACE environment variable not set") } podName := os.Getenv("POD_NAME") if podName == "" { return fmt.Errorf("POD_NAME environment variable not set") } configMapName := fmt.Sprintf("%s-mig-config", nodeName) pod, err := clientset.CoreV1().Pods(namespace).Get(ctx, podName, metav1.GetOptions{}) if err != nil { return fmt.Errorf("failed to get current pod: %w", err) } configMap := &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: configMapName, Namespace: namespace, Labels: map[string]string{ "app.kubernetes.io/component": "nvidia-mig-manager", "nvidia.com/node-name": nodeName, }, OwnerReferences: []metav1.OwnerReference{ { APIVersion: "v1", Kind: "Pod", Name: pod.Name, UID: pod.UID, }, }, }, Data: map[string]string{ "config.yaml": string(configYAML), }, } _, err = clientset.CoreV1().ConfigMaps(namespace).Create(ctx, configMap, metav1.CreateOptions{}) if apierrors.IsAlreadyExists(err) { existing, err := clientset.CoreV1().ConfigMaps(namespace).Get(ctx, configMapName, metav1.GetOptions{}) if err != nil { return fmt.Errorf("failed to get existing ConfigMap: %w", err) } configMap.ResourceVersion = existing.ResourceVersion _, err = clientset.CoreV1().ConfigMaps(namespace).Update(ctx, configMap, metav1.UpdateOptions{}) if err != nil { return fmt.Errorf("failed to update ConfigMap: %w", err) } } else if err != nil { return fmt.Errorf("failed to create ConfigMap: %w", err) } log.Infof("Created/updated ConfigMap: %s/%s", namespace, configMapName) return nil } func writeGeneratedConfig() ([]byte, error) { configYAML, err := builder.GenerateConfigYAML() if err != nil { return nil, err } header := []byte("# DO NOT EDIT: Auto-generated MIG configuration from GPU hardware.\n" + "# Generated by \"nvidia-mig-manager\".\n") configYAML = append(header, configYAML...) if err := os.MkdirAll(filepath.Dir(DefaultGeneratedConfigFile), 0755); err != nil { return nil, err } if err := os.WriteFile(DefaultGeneratedConfigFile, configYAML, 0600); err != nil { return nil, err } return configYAML, nil } // setupMigConfig uses custom config if provided, otherwise generates MIG config from hardware. // If dynamic generation fails with ErrNoProfilesDiscovered, falls back to DEFAULT_CONFIG_FILE. func setupMigConfig(ctx context.Context, clientset *kubernetes.Clientset) (string, error) { // Use custom config if provided if configFileFlag != "" { if _, err := os.Stat(configFileFlag); err != nil { return "", fmt.Errorf("failed to read custom config %s: %w", configFileFlag, err) } log.Infof("Using custom config: %s", configFileFlag) return configFileFlag, nil } // Generate config from hardware log.Info("Generating MIG configuration from hardware...") configYAML, err := writeGeneratedConfig() if err != nil { if errors.Is(err, discovery.ErrNoProfilesDiscovered) { log.Warn("No MIG profiles discovered. Checking for default config") defaultPath := os.Getenv("DEFAULT_CONFIG_FILE") if defaultPath != "" { var statErr error if _, statErr = os.Stat(defaultPath); statErr == nil { //nolint:gosec // path from trusted env var set by operator log.Infof("Using default config: %s", defaultPath) return defaultPath, nil } log.Warnf("Default config file %s not found: %v", defaultPath, statErr) } return "", fmt.Errorf("dynamic generation failed and no default config available: %w", err) } return "", fmt.Errorf("failed to generate MIG config: %w", err) } log.Infof("Generated config: %s", DefaultGeneratedConfigFile) if err := createNodeConfigMap(ctx, clientset, nodeNameFlag, configYAML); err != nil { log.Warnf("Failed to create node ConfigMap: %v", err) } return DefaultGeneratedConfigFile, nil } func start(c *cli.Context) error { config, err := clientcmd.BuildConfigFromFlags("", kubeconfigFlag) if err != nil { return fmt.Errorf("error building kubernetes clientcmd config: %w", err) } clientset, err := kubernetes.NewForConfig(config) if err != nil { return fmt.Errorf("error building kubernetes clientset from config: %w", err) } // Setup MIG configuration (generate from hardware or use custom config) configPath, err := setupMigConfig(c.Context, clientset) if err != nil { return fmt.Errorf("failed to setup MIG config: %w", err) } // Update configFileFlag for rest of mig-manager code configFileFlag = configPath driverLibraryPath, nvidiaSMIPath, err := getPathsForCDI() if err != nil { return fmt.Errorf("failed to get paths required for cdi: %w", err) } migConfig := NewSyncableMigConfig() stop := ContinuouslySyncMigConfigChanges(clientset, migConfig) defer close(stop) for { log.Infof("Waiting for change to '%s' label", MigConfigLabel) value := migConfig.Get() log.Infof("Updating to MIG config: %s", value) err := migReconfigure(c.Context, value, clientset, driverLibraryPath, nvidiaSMIPath) if err != nil { log.Errorf("Error: %s", err) continue } log.Infof("Successfully updated to MIG config: %s", value) } } // getPathsForCDI discovers the paths to libnvidia-ml.so.1 and nvidia-smi // when required. // // After applying a MIG configuration but before generating a CDI spec, // it is required to run nvidia-smi to create the nvidia-cap* device nodes. // If driverRoot != devRoot, we must discover the paths to libnvidia-ml.so.1 and // nvidia-smi in order to run nvidia-smi. We discover the paths here once and // pass these as arguments to reconfigure-mig.sh // // Currently, driverRoot != devRoot only when devRoot='/'. Since mig-manager // has rw access to the host rootFS (at hostRootMountFlag), reconfigure-mig.sh // will first chroot into the host rootFS before invoking nvidia-smi, so the // device nodes get created at '/dev' on the host. func getPathsForCDI() (string, string, error) { if !cdiEnabledFlag || (driverRoot == devRoot) { return "", "", nil } driverRoot := root(filepath.Join(hostRootMountFlag, driverRoot)) driverLibraryPath, err := driverRoot.getDriverLibraryPath() if err != nil { return "", "", fmt.Errorf("failed to locate driver libraries: %w", err) } // Strip the leading '/host' so that the path is relative to the host rootFS driverLibraryPath = filepath.Clean(strings.TrimPrefix(driverLibraryPath, hostRootMountFlag)) nvidiaSMIPath, err := driverRoot.getNvidiaSMIPath() if err != nil { return "", "", fmt.Errorf("failed to locate nvidia-smi: %w", err) } // Strip the leading '/host' so that the path is relative to the host rootFS nvidiaSMIPath = filepath.Clean(strings.TrimPrefix(nvidiaSMIPath, hostRootMountFlag)) return driverLibraryPath, nvidiaSMIPath, nil } func parseGPUCLientsFile(file string) (*GPUClients, error) { var err error var yamlBytes []byte if file == "" { return &GPUClients{}, nil } yamlBytes, err = os.ReadFile(file) if err != nil { return nil, fmt.Errorf("read error: %w", err) } var clients GPUClients err = yaml.Unmarshal(yamlBytes, &clients) if err != nil { return nil, fmt.Errorf("unmarshal error: %w", err) } return &clients, nil } func migReconfigure(ctx context.Context, migConfigValue string, clientset *kubernetes.Clientset, driverLibraryPath string, nvidiaSMIPath string) error { gpuClients, err := parseGPUCLientsFile(gpuClientsFileFlag) if err != nil { return fmt.Errorf("error parsing host's GPU clients file: %w", err) } opts := &reconfigure.Options{ NodeName: nodeNameFlag, MigConfigFile: configFileFlag, SelectedMigConfig: migConfigValue, HostRootMount: hostRootMountFlag, HostNvidiaDir: hostNvidiaDirFlag, HostMigManagerStateFile: hostMigManagerStateFileFlag, HostGPUClientServices: strings.Join(gpuClients.SystemdServices, ","), HostKubeletService: hostKubeletSystemdServiceFlag, DefaultGPUClientsNamespace: defaultGPUClientsNamespaceFlag, WithReboot: withRebootFlag, WithShutdownHostGPUClients: withShutdownHostGPUClientsFlag, } if cdiEnabledFlag { opts.CDIEnabled = true opts.DriverRoot = driverRoot opts.DriverRootCtrPath = driverRootCtrPath opts.DevRoot = devRoot opts.DevRootCtrPath = devRootCtrPath opts.DriverLibraryPath = driverLibraryPath opts.NvidiaSMIPath = nvidiaSMIPath opts.NvidiaCDIHookPath = nvidiaCDIHookPath } migPartedBinary := []string{"nvidia-mig-parted"} if withShutdownHostGPUClientsFlag { hostMigPartedBinary, err := copyMigPartedToHost(hostRootMountFlag, hostNvidiaDirFlag, configFileFlag) if err != nil { return fmt.Errorf("failed to copy nvidia-mig-parted to host: %w", err) } migPartedBinary = strings.Split(hostMigPartedBinary, " ") opts.MigConfigFile = filepath.Join(hostNvidiaDirFlag, "mig-manager", "config.yaml") } rcfg, err := reconfigure.New(ctx, clientset, migPartedBinary, opts) if err != nil { return fmt.Errorf("error creating reconfigure instance: %w", err) } return rcfg.Run() } func ContinuouslySyncMigConfigChanges(clientset *kubernetes.Clientset, migConfig *SyncableMigConfig) chan struct{} { listWatch := cache.NewListWatchFromClient( clientset.CoreV1().RESTClient(), ResourceNodes, v1.NamespaceAll, fields.OneTermEqualSelector("metadata.name", nodeNameFlag), ) _, controller := cache.NewInformerWithOptions(cache.InformerOptions{ ListerWatcher: listWatch, ObjectType: &v1.Node{}, ResyncPeriod: 0, Handler: cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { migConfig.Set(obj.(*v1.Node).Labels[MigConfigLabel]) }, UpdateFunc: func(oldObj, newObj interface{}) { oldLabel := oldObj.(*v1.Node).Labels[MigConfigLabel] newLabel := newObj.(*v1.Node).Labels[MigConfigLabel] if oldLabel != newLabel { migConfig.Set(newLabel) } }, }, }) stop := make(chan struct{}) go controller.Run(stop) return stop } // copyMigPartedToHost copies the "nvidia-mig-parted" binary from the container's root filesystem over to that of the host's. // After copying the binary, it aliases the "nvidia-mig-parted" command to the binary located in the host. // This ensures that all subsequent "nvidia-mig-parted" calls are executed from the host root filesystem. func copyMigPartedToHost(hostRootMount, hostNvidiaDir, migConfigFile string) (string, error) { // Create directory dir := filepath.Join(hostRootMount, hostNvidiaDir, "mig-manager") if err := os.MkdirAll(dir, 0755); err != nil { return "", fmt.Errorf("failed to create directory: %w", err) } // Copy the nvidia-mig-parted binary sourceBinary := "/usr/bin/nvidia-mig-parted" // Assuming it's in PATH destBinary := filepath.Join(dir, "nvidia-mig-parted") if err := copyFile(sourceBinary, destBinary); err != nil { return "", fmt.Errorf("failed to copy nvidia-mig-parted: %w", err) } // Copy the mig config file configDst := filepath.Join(dir, "config.yaml") if err := copyFile(migConfigFile, configDst); err != nil { return "", fmt.Errorf("failed to copy config file: %w", err) } hostMigPartedBinaryPath := filepath.Join(hostNvidiaDir, "mig-manager", "nvidia-mig-parted") hostMigPartedBinary := fmt.Sprintf("chroot %s %s", hostRootMount, hostMigPartedBinaryPath) return hostMigPartedBinary, nil } // copyFile is a helper method to perform a copy of file located at the source "src" over to the destination "dst" func copyFile(src, dst string) error { sourceFile, err := os.Open(src) if err != nil { return err } defer sourceFile.Close() destFile, err := os.Create(dst) if err != nil { return err } defer destFile.Close() _, err = destFile.ReadFrom(sourceFile) if err != nil { return err } // Get source file info to retrieve permissions sourceInfo, err := sourceFile.Stat() if err != nil { return err } // Explicitly set permissions on the destination file (in case OpenFile didn't fully apply them) err = os.Chmod(dst, sourceInfo.Mode().Perm()) //nolint:gosec // dst is from internal callers with known paths if err != nil { return err } return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/000077500000000000000000000000001520540370700211275ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/apply/000077500000000000000000000000001520540370700222545ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/apply/apply.go000066400000000000000000000210641520540370700237330ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package apply import ( "fmt" "os" "reflect" "github.com/sirupsen/logrus" cli "github.com/urfave/cli/v2" "github.com/NVIDIA/go-nvml/pkg/nvml" hooks "github.com/NVIDIA/mig-parted/api/hooks/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/assert" "sigs.k8s.io/yaml" ) var log = logrus.New() // GetLogger returns the 'logrus.Logger' instance used by this package. func GetLogger() *logrus.Logger { return log } // Flags holds variables that represent the set of flags that can be passed to the 'apply' subcommand. type Flags struct { assert.Flags HooksFile string } // Context holds the state we want to pass around between functions associated with the 'apply' subcommand. type Context struct { assert.Context Flags *Flags } // MigConfigApplier is an interface representing the set of functions required to "Apply" a MIG configuration to a node. type MigConfigApplier interface { AssertMigMode() error ApplyMigMode() error AssertMigConfig() error ApplyMigConfig() error } // BuildCommand builds the 'apply' subcommand for injection into the main mig-parted CLI. func BuildCommand() *cli.Command { // Create a flags struct to hold our flags applyFlags := Flags{} // Create the 'apply' command apply := cli.Command{} apply.Name = "apply" apply.Usage = "Apply changes (if necessary) for a specific MIG configuration from a configuration file" apply.Action = func(c *cli.Context) error { return applyWrapper(c, &applyFlags) } // Setup the flags for this command apply.Flags = []cli.Flag{ &cli.StringFlag{ Name: "config-file", Aliases: []string{"f"}, Usage: "Path to the configuration file", Destination: &applyFlags.ConfigFile, EnvVars: []string{"MIG_PARTED_CONFIG_FILE"}, }, &cli.StringFlag{ Name: "selected-config", Aliases: []string{"c"}, Usage: "The label of the mig-config from the config file to apply to the node", Destination: &applyFlags.SelectedConfig, EnvVars: []string{"MIG_PARTED_SELECTED_CONFIG"}, }, &cli.StringFlag{ Name: "hooks-file", Aliases: []string{"k"}, Usage: "Path to the hooks file", Destination: &applyFlags.HooksFile, EnvVars: []string{"MIG_PARTED_HOOKS_FILE"}, }, &cli.BoolFlag{ Name: "skip-reset", Aliases: []string{"s"}, Usage: "Skip the GPU reset operation after applying the desired MIG mode to all GPUs", Destination: &applyFlags.SkipReset, EnvVars: []string{"MIG_PARTED_SKIP_RESET"}, }, &cli.BoolFlag{ Name: "mode-only", Aliases: []string{"m"}, Usage: "Only change the MIG enabled setting from the config, not configure any MIG devices", Destination: &applyFlags.ModeOnly, EnvVars: []string{"MIG_PARTED_MODE_CHANGE_ONLY"}, }, } return &apply } // CheckFlags ensures that any required flags are provided and ensures they are well-formed. func CheckFlags(f *Flags) error { return assert.CheckFlags(&f.Flags) } // ParseHooksFile parses a hoosk file and unmarshals it into a 'hooks.Spec'. func ParseHooksFile(hooksFile string) (*hooks.Spec, error) { var err error var hooksYaml []byte hooksYaml, err = os.ReadFile(hooksFile) if err != nil { return nil, fmt.Errorf("read error: %v", err) } var spec hooks.Spec err = yaml.Unmarshal(hooksYaml, &spec) if err != nil { return nil, fmt.Errorf("unmarshal error: %v", err) } return &spec, nil } // GetHooksEnvsMap builds a 'hooks.EnvsMap' from the set of environment variables set when the CLI was envoked by the user. // These environment variables are then made available to all hooks when thex are executed later on. func GetHooksEnvsMap(c *cli.Context) hooks.EnvsMap { envs := make(hooks.EnvsMap) for _, flag := range c.Command.Flags { fv := reflect.ValueOf(flag) for fv.Kind() == reflect.Pointer { fv = reflect.Indirect(fv) } value := fv.FieldByName("Destination") for value.Kind() == reflect.Pointer { value = reflect.Indirect(value) } for _, name := range fv.FieldByName("EnvVars").Interface().([]string) { envs[name] = fmt.Sprintf("%v", value) } } return envs } // AssertMigMode reuses calls from the 'assert' subcommand to ensures that the MIG mode settings of a given MIG config are currently applied. // The 'MigConfig' being checked is embedded in the 'Context' struct itself. func (c *Context) AssertMigMode() error { return assert.AssertMigMode(&c.Context) } // ApplyMigMode applies the MIG mode settings of the config embedded in the 'Context' to the set of GPUs on the node. func (c *Context) ApplyMigMode() error { return ApplyMigMode(c) } // AssertMigMode reuses calls from the 'assert' subcommand to ensures that all MIG settings of a given MIG config are currently applied. // The 'MigConfig' being checked is embedded in the 'Context' struct itself. func (c *Context) AssertMigConfig() error { return assert.AssertMigConfig(&c.Context) } // ApplyMigConfig applies the full MIG config embedded in the 'Context' to the set of GPUs on the node. func (c *Context) ApplyMigConfig() error { return ApplyMigConfig(c) } func applyWrapper(c *cli.Context, f *Flags) error { err := CheckFlags(f) if err != nil { _ = cli.ShowSubcommandHelp(c) return err } log.Debugf("Parsing config file...") spec, err := assert.ParseConfigFile(&f.Flags) if err != nil { return fmt.Errorf("error parsing config file: %v", err) } log.Debugf("Selecting specific MIG config...") migConfig, err := assert.GetSelectedMigConfig(&f.Flags, spec) if err != nil { return fmt.Errorf("error selecting MIG config: %v", err) } hooksSpec := &hooks.Spec{} if f.HooksFile != "" { log.Debugf("Parsing Hooks file...") hooksSpec, err = ParseHooksFile(f.HooksFile) if err != nil { return fmt.Errorf("error parsing hooks file: %v", err) } } hooks := NewApplyHooks(hooksSpec.Hooks) context := Context{ Flags: f, Context: assert.Context{ Context: c, Flags: &f.Flags, MigConfig: migConfig, Nvml: nvml.New(), }, } err = ApplyMigConfigWithHooks(log, c, f.ModeOnly, hooks, &context) if err != nil { return fmt.Errorf("error applying MIG configuration with hooks: %v", err) } fmt.Println("MIG configuration applied successfully") return nil } // ApplyMigConfigWithHooks orchestrates the calls of a 'MigConfigApplier' between a set of 'ApplyHooks' to the set MIG configuration of a node. // If 'modeOnly' is 'true', then only the MIG mode settings embedded in the 'Context' are applied. func ApplyMigConfigWithHooks(logger *logrus.Logger, context *cli.Context, modeOnly bool, hooks ApplyHooks, applier MigConfigApplier) (rerr error) { logger.Debugf("Running apply-start hook") err := hooks.ApplyStart(GetHooksEnvsMap(context), context.Bool("debug")) if err != nil { return fmt.Errorf("error running apply-start hook: %v", err) } defer func() { logger.Debugf("Running apply-exit hook") err := hooks.ApplyExit(GetHooksEnvsMap(context), context.Bool("debug")) if rerr == nil && err != nil { rerr = fmt.Errorf("error running apply-exit hook: %v", err) return } if err != nil { logger.Errorf("Error running apply-exit hook: %v", err) } }() logger.Debugf("Checking current MIG mode...") err = applier.AssertMigMode() if err != nil { logger.Debugf("Running pre-apply-mode hook") err := hooks.PreApplyMode(GetHooksEnvsMap(context), context.Bool("debug")) if err != nil { return fmt.Errorf("error running pre-apply-mode hook: %v", err) } logger.Debugf("Applying MIG mode change...") err = applier.ApplyMigMode() if err != nil { return err } } if modeOnly { return nil } logger.Debugf("Checking current MIG device configuration...") err = applier.AssertMigConfig() if err != nil { logger.Debugf("Running pre-apply-config hook") err := hooks.PreApplyConfig(GetHooksEnvsMap(context), context.Bool("debug")) if err != nil { return fmt.Errorf("error running pre-apply-config hook: %v", err) } logger.Debugf("Applying MIG device configuration...") err = applier.ApplyMigConfig() if err != nil { return err } } return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/apply/config.go000066400000000000000000000056451520540370700240620ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package apply import ( "fmt" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/assert" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/mig/mode" "github.com/NVIDIA/mig-parted/pkg/types" ) func ApplyMigConfig(c *Context) error { err := util.NvmlInit(c.Nvml) if err != nil { return fmt.Errorf("error initializing NVML: %v", err) } defer util.TryNvmlShutdown(c.Nvml) modeManager, err := util.NewMigModeManager(c.Nvml) if err != nil { return fmt.Errorf("error creating MIG mode Manager: %w", err) } configManager, err := util.NewMigConfigManager(c.Nvml) if err != nil { return fmt.Errorf("error creating MIG config Manager: %w", err) } return assert.WalkSelectedMigConfigForEachGPU(c.MigConfig, func(mc *v1.MigConfigSpec, i int, d types.DeviceID) error { capable, err := modeManager.IsMigCapable(i) if err != nil { return fmt.Errorf("error checking MIG capable: %v", err) } log.Debugf(" MIG capable: %v\n", capable) if !capable && mc.MatchesAllDevices() { log.Debugf(" Skipping -- non MIG-capable GPU") return nil } if !capable && !mc.MigEnabled { log.Debugf(" Skipping -- non MIG-capable GPU with MIG mode disabled") return nil } if !capable && mc.MigEnabled { return fmt.Errorf("cannot set MIG config on non MIG-capable GPU") } m, err := modeManager.GetMigMode(i) if err != nil { return fmt.Errorf("error getting MIG mode: %v", err) } if mc.MigEnabled && m == mode.Disabled { return fmt.Errorf("unable to apply MIG config with MIG mode disabled") } if !mc.MigEnabled && m == mode.Enabled { return fmt.Errorf("MIG mode is currently enabled, but the configuration specifies it should be disabled") } if !mc.MigEnabled { log.Debugf(" Skipping MIG config -- MIG disabled") return nil } current, err := configManager.GetMigConfig(i) if err != nil { return fmt.Errorf("error getting MIGConfig: %v", err) } log.Debugf(" Updating MIG config: %v", mc.MigDevices) if current.Equals(mc.MigDevices) { log.Debugf(" Skipping -- already set to desired value") return nil } err = configManager.SetMigConfig(i, mc.MigDevices) if err != nil { return fmt.Errorf("error setting MIGConfig: %v", err) } return nil }) } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/apply/hooks.go000066400000000000000000000033551520540370700237340ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package apply import ( hooks "github.com/NVIDIA/mig-parted/api/hooks/v1" ) const ( applyStartHook = "apply-start" preApplyModeHook = "pre-apply-mode" preApplyConfigHook = "pre-apply-config" applyExitHook = "apply-exit" ) type applyHooks struct { hooks.HooksMap } type ApplyHooks interface { ApplyStart(envs hooks.EnvsMap, output bool) error PreApplyMode(envs hooks.EnvsMap, output bool) error PreApplyConfig(envs hooks.EnvsMap, output bool) error ApplyExit(envs hooks.EnvsMap, output bool) error } var _ ApplyHooks = (*applyHooks)(nil) func NewApplyHooks(hooksMap hooks.HooksMap) ApplyHooks { return &applyHooks{hooksMap} } func (h *applyHooks) ApplyStart(envs hooks.EnvsMap, output bool) error { return h.Run(applyStartHook, envs, output) } func (h *applyHooks) PreApplyMode(envs hooks.EnvsMap, output bool) error { return h.Run(preApplyModeHook, envs, output) } func (h *applyHooks) PreApplyConfig(envs hooks.EnvsMap, output bool) error { return h.Run(preApplyConfigHook, envs, output) } func (h *applyHooks) ApplyExit(envs hooks.EnvsMap, output bool) error { return h.Run(applyExitHook, envs, output) } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/apply/mode.go000066400000000000000000000071071520540370700235340ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package apply import ( "fmt" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/assert" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/mig/config" "github.com/NVIDIA/mig-parted/pkg/mig/mode" "github.com/NVIDIA/mig-parted/pkg/types" ) func ApplyMigMode(c *Context) error { nvidiaModuleLoaded, err := util.IsNvidiaModuleLoaded() if err != nil { return fmt.Errorf("error checking if nvidia module loaded: %v", err) } if nvidiaModuleLoaded { err := util.NvmlInit(c.Nvml) if err != nil { return fmt.Errorf("error initializing NVML: %v", err) } } deviceIDs, err := util.GetGPUDeviceIDs() if err != nil { return fmt.Errorf("error enumerating GPUs: %v", err) } modeManager, err := util.NewMigModeManager(c.Nvml) if err != nil { return fmt.Errorf("error creating MIG mode Manager: %w", err) } configManager := config.NewNvmlMigConfigManager(c.Nvml) pending := make([]bool, len(deviceIDs)) err = assert.WalkSelectedMigConfigForEachGPU(c.MigConfig, func(mc *v1.MigConfigSpec, i int, d types.DeviceID) error { desiredMode := mode.Disabled if mc.MigEnabled { desiredMode = mode.Enabled } capable, err := modeManager.IsMigCapable(i) if err != nil { return fmt.Errorf("error checking MIG capable: %v", err) } log.Debugf(" MIG capable: %v\n", capable) if !capable && mc.MatchesAllDevices() { log.Debugf(" Skipping -- non MIG-capable GPU") return nil } if !capable && !mc.MigEnabled { log.Debugf(" Skipping -- non MIG-capable GPU with MIG mode disabled") return nil } if !capable && mc.MigEnabled { return fmt.Errorf("cannot set MIG mode on non MIG-capable GPU") } currentMode, err := modeManager.GetMigMode(i) if err != nil { return fmt.Errorf("error getting MIG mode: %v", err) } log.Debugf(" Current MIG mode: %v", currentMode) if nvidiaModuleLoaded && currentMode != mode.Disabled { log.Debugf(" Clearing existing MIG configuration") err := configManager.ClearMigConfig(i) if err != nil { return fmt.Errorf("error clearing existing MIG configurations: %v", err) } } log.Debugf(" Updating MIG mode: %v", desiredMode) err = modeManager.SetMigMode(i, desiredMode) if err != nil { return fmt.Errorf("error setting MIG mode: %v", err) } pending[i], err = modeManager.IsMigModeChangePending(i) if err != nil { return fmt.Errorf("error checking pending MIG mode change: %v", err) } log.Debugf(" Mode change pending: %v", pending[i]) return nil }) if nvidiaModuleLoaded { util.TryNvmlShutdown(c.Nvml) } if err != nil { return err } if c.Flags.SkipReset || !util.Any(pending) { return nil } log.Debugf("At least one mode change pending") log.Debugf("Resetting all GPUs...") output, err := util.ResetAllGPUs() if err != nil { log.Errorf("\n%v", output) return fmt.Errorf("error resetting all GPUs: %v", err) } log.Debugf("\n%v", output) return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/assert/000077500000000000000000000000001520540370700224305ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/assert/assert.go000066400000000000000000000143241520540370700242640ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package assert import ( "bufio" "fmt" "os" "strings" "github.com/sirupsen/logrus" cli "github.com/urfave/cli/v2" "github.com/NVIDIA/go-nvml/pkg/nvml" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/types" "sigs.k8s.io/yaml" ) var log = logrus.New() func GetLogger() *logrus.Logger { return log } type Flags struct { ConfigFile string SelectedConfig string SkipReset bool ModeOnly bool ValidConfig bool } type Context struct { *cli.Context Flags *Flags MigConfig v1.MigConfigSpecSlice Nvml nvml.Interface } func BuildCommand() *cli.Command { // Create a flags struct to hold our flags assertFlags := Flags{} // Create the 'assert' command assert := cli.Command{} assert.Name = "assert" assert.Usage = "Assert that a specific MIG configuration is currently applied to the node" assert.Action = func(c *cli.Context) error { return assertWrapper(c, &assertFlags) } // Setup the flags for this command assert.Flags = []cli.Flag{ &cli.StringFlag{ Name: "config-file", Aliases: []string{"f"}, Usage: "Path to the configuration file", Destination: &assertFlags.ConfigFile, EnvVars: []string{"MIG_PARTED_CONFIG_FILE"}, }, &cli.StringFlag{ Name: "selected-config", Aliases: []string{"c"}, Usage: "The label of the mig-config from the config file to assert is applied to the node", Destination: &assertFlags.SelectedConfig, EnvVars: []string{"MIG_PARTED_SELECTED_CONFIG"}, }, &cli.BoolFlag{ Name: "mode-only", Aliases: []string{"m"}, Usage: "Only assert the MIG mode setting from the selected config, not the configured MIG devices", Destination: &assertFlags.ModeOnly, EnvVars: []string{"MIG_PARTED_MODE_CHANGE_ONLY"}, }, &cli.BoolFlag{ Name: "valid-config", Aliases: []string{"a"}, Usage: "Only assert that the config file is valid and the selected config is present in it", Destination: &assertFlags.ValidConfig, EnvVars: []string{"MIG_PARTED_VALID_CONFIG"}, }, } return &assert } func assertWrapper(c *cli.Context, f *Flags) error { err := CheckFlags(f) if err != nil { _ = cli.ShowSubcommandHelp(c) return err } log.Debugf("Parsing config file...") spec, err := ParseConfigFile(f) if err != nil { return fmt.Errorf("error parsing config file: %v", err) } log.Debugf("Selecting specific MIG config...") migConfig, err := GetSelectedMigConfig(f, spec) if err != nil { return fmt.Errorf("error selecting MIG config: %v", err) } if f.ValidConfig { fmt.Println("Selected MIG configuration is valid") return nil } context := Context{ Context: c, Flags: f, MigConfig: migConfig, Nvml: nvml.New(), } log.Debugf("Asserting MIG mode configuration...") err = AssertMigMode(&context) if err != nil { log.Debug(util.Capitalize(err.Error())) return fmt.Errorf("assertion failure: selected configuration not currently applied") } if f.ModeOnly { fmt.Println("Selected MIG mode settings from configuration currently applied") return nil } log.Debugf("Asserting MIG device configuration...") err = AssertMigConfig(&context) if err != nil { log.Debug(util.Capitalize(err.Error())) return fmt.Errorf("assertion failure: selected configuration not currently applied") } fmt.Println("Selected MIG configuration currently applied") return nil } func CheckFlags(f *Flags) error { var missing []string if f.ConfigFile == "" { missing = append(missing, "config-file") } if len(missing) > 0 { return fmt.Errorf("missing required flags '%v'", strings.Join(missing, ", ")) } return nil } func ParseConfigFile(f *Flags) (*v1.Spec, error) { var err error var configYaml []byte if f.ConfigFile == "-" { scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { configYaml = append(configYaml, scanner.Bytes()...) configYaml = append(configYaml, '\n') } } else { configYaml, err = os.ReadFile(f.ConfigFile) if err != nil { return nil, fmt.Errorf("read error: %v", err) } } var spec v1.Spec err = yaml.Unmarshal(configYaml, &spec) if err != nil { return nil, fmt.Errorf("unmarshal error: %v", err) } return &spec, nil } func GetSelectedMigConfig(f *Flags, spec *v1.Spec) (v1.MigConfigSpecSlice, error) { if len(spec.MigConfigs) > 1 && f.SelectedConfig == "" { return nil, fmt.Errorf("missing required flag 'selected-config' when more than one config available") } if len(spec.MigConfigs) == 1 && f.SelectedConfig == "" { for c := range spec.MigConfigs { f.SelectedConfig = c } } if _, exists := spec.MigConfigs[f.SelectedConfig]; !exists { return nil, fmt.Errorf("selected mig-config not present: %v", f.SelectedConfig) } return spec.MigConfigs[f.SelectedConfig], nil } func WalkSelectedMigConfigForEachGPU(migConfig v1.MigConfigSpecSlice, f func(*v1.MigConfigSpec, int, types.DeviceID) error) error { deviceIDs, err := util.GetGPUDeviceIDs() if err != nil { return fmt.Errorf("error enumerating GPU device IDs: %v", err) } for _, mc := range migConfig { if mc.DeviceFilter == nil { log.Debugf("Walking MigConfig for (devices=%v)", mc.Devices) } else { log.Debugf("Walking MigConfig for (device-filter=%v, devices=%v)", mc.DeviceFilter, mc.Devices) } for i, deviceID := range deviceIDs { if !mc.MatchesDeviceFilter(deviceID) { continue } if !mc.MatchesDevices(i) { continue } log.Debugf(" GPU %v: %v", i, deviceID) migConfigSpec := mc err = f(&migConfigSpec, i, deviceID) if err != nil { return err } } } return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/assert/config.go000066400000000000000000000046431520540370700242330ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package assert import ( "fmt" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/mig/mode" "github.com/NVIDIA/mig-parted/pkg/types" ) func AssertMigConfig(c *Context) error { err := util.NvmlInit(c.Nvml) if err != nil { return fmt.Errorf("error initializing NVML: %v", err) } defer util.TryNvmlShutdown(c.Nvml) deviceIDs, err := util.GetGPUDeviceIDs() if err != nil { return fmt.Errorf("error enumerating GPUs: %v", err) } modeManager, err := util.NewMigModeManager(c.Nvml) if err != nil { return fmt.Errorf("error creating MIG Mode Manager: %w", err) } configManager, err := util.NewMigConfigManager(c.Nvml) if err != nil { return fmt.Errorf("error creating MIG Config Manager: %w", err) } matched := make([]bool, len(deviceIDs)) err = WalkSelectedMigConfigForEachGPU(c.MigConfig, func(mc *v1.MigConfigSpec, i int, d types.DeviceID) error { capable, err := modeManager.IsMigCapable(i) if err != nil { return fmt.Errorf("error checking MIG capable: %v", err) } if !capable && !mc.MigEnabled { matched[i] = true return nil } m, err := modeManager.GetMigMode(i) if err != nil { return fmt.Errorf("error getting MIG mode: %v", err) } if !mc.MigEnabled && m == mode.Disabled { matched[i] = true return nil } current, err := configManager.GetMigConfig(i) if err != nil { return fmt.Errorf("error getting MIGConfig: %v", err) } log.Debugf(" Asserting MIG config: %v", mc.MigDevices) if current.Equals(mc.MigDevices) { matched[i] = true return nil } matched[i] = false return nil }) if err != nil { return err } if util.CountTrue(matched) != len(deviceIDs) { return fmt.Errorf("not all GPUs match the specified config") } return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/assert/mode.go000066400000000000000000000045161520540370700237110ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package assert import ( "fmt" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/mig/mode" "github.com/NVIDIA/mig-parted/pkg/types" ) func AssertMigMode(c *Context) error { nvidiaModuleLoaded, err := util.IsNvidiaModuleLoaded() if err != nil { return fmt.Errorf("error checking if nvidia module loaded: %v", err) } if nvidiaModuleLoaded { err := util.NvmlInit(c.Nvml) if err != nil { return fmt.Errorf("error initializing NVML: %v", err) } defer util.TryNvmlShutdown(c.Nvml) } manager, err := util.NewMigModeManager(c.Nvml) if err != nil { return fmt.Errorf("error creating MIG mode Manager: %w", err) } return WalkSelectedMigConfigForEachGPU(c.MigConfig, func(mc *v1.MigConfigSpec, i int, d types.DeviceID) error { if mc.MigEnabled { log.Debugf(" Asserting MIG mode: %v", mode.Enabled) } else { log.Debugf(" Asserting MIG mode: %v", mode.Disabled) } capable, err := manager.IsMigCapable(i) if err != nil { return fmt.Errorf("error checking MIG capable: %v", err) } log.Debugf(" MIG capable: %v\n", capable) if !capable && mc.MigEnabled { return fmt.Errorf("unable to assert MIG mode enabled on non MIG-capable GPU") } if !capable && !mc.MigEnabled { return nil } m, err := manager.GetMigMode(i) if err != nil { return fmt.Errorf("error getting MIG mode: %v", err) } log.Debugf(" Current MIG mode: %v", m) if mc.MigEnabled && m == mode.Disabled { return fmt.Errorf("current mode different than mode being asserted") } if !mc.MigEnabled && m == mode.Enabled { return fmt.Errorf("current mode different than mode being asserted") } return nil }) } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/checkpoint/000077500000000000000000000000001520540370700232565ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/checkpoint/checkpoint.go000066400000000000000000000057641520540370700257500ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package checkpoint import ( "encoding/json" "fmt" "os" "strings" "github.com/sirupsen/logrus" cli "github.com/urfave/cli/v2" "github.com/NVIDIA/go-nvml/pkg/nvml" checkpoint "github.com/NVIDIA/mig-parted/api/checkpoint/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/mig/state" ) var log = logrus.New() func GetLogger() *logrus.Logger { return log } type Flags struct { CheckpointFile string } func BuildCommand() *cli.Command { // Create a flags struct to hold our flags checkpointFlags := Flags{} // Create the 'checkpoint' command checkpoint := cli.Command{} checkpoint.Name = "checkpoint" checkpoint.Usage = "Checkpoint MIG state to a checkpoint file" checkpoint.Action = func(c *cli.Context) error { return checkpointWrapper(c, &checkpointFlags) } // Setup the flags for this command checkpoint.Flags = []cli.Flag{ &cli.StringFlag{ Name: "checkpoint-file", Aliases: []string{"f"}, Usage: "Path to the checkpoint file", Destination: &checkpointFlags.CheckpointFile, EnvVars: []string{"MIG_PARTED_CHECKPOINT_FILE"}, }, } return &checkpoint } func CheckFlags(f *Flags) error { var missing []string if f.CheckpointFile == "" { missing = append(missing, "checkpoint-file") } if len(missing) > 0 { return fmt.Errorf("missing required flags '%v'", strings.Join(missing, ", ")) } return nil } func checkpointWrapper(c *cli.Context, f *Flags) error { err := CheckFlags(f) if err != nil { _ = cli.ShowSubcommandHelp(c) return err } nvml := nvml.New() err = util.NvmlInit(nvml) if err != nil { return fmt.Errorf("error initializing NVML: %v", err) } defer util.TryNvmlShutdown(nvml) migState, err := state.NewMigStateManager(nvml).Fetch() if err != nil { return fmt.Errorf("error fetching MIG state: %v", err) } state := checkpoint.State{ Version: checkpoint.Version, MigState: *migState, } j, err := json.Marshal(state) if err != nil { return fmt.Errorf("error marshalling MIG state to json: %v", err) } checkpointFile, err := os.Create(f.CheckpointFile) if err != nil { return fmt.Errorf("error creating checkpoint file: %w", err) } defer checkpointFile.Close() if _, err := checkpointFile.Write(j); err != nil { return fmt.Errorf("error writing checkpoint file: %v", err) } fmt.Println("MIG configuration checkpointed successfully") return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/export/000077500000000000000000000000001520540370700224505ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/export/config.go000066400000000000000000000133001520540370700242410ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package export import ( "fmt" "sort" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/mig/mode" "github.com/NVIDIA/mig-parted/pkg/types" ) func ExportMigConfigs(c *Context) (*v1.Spec, error) { err := util.NvmlInit(c.Nvml) if err != nil { return nil, fmt.Errorf("error initializing NVML: %v", err) } defer util.TryNvmlShutdown(c.Nvml) deviceIDs, err := util.GetGPUDeviceIDs() if err != nil { return nil, fmt.Errorf("error enumerating GPUs: %v", err) } modeManager, err := util.NewMigModeManager(c.Nvml) if err != nil { return nil, fmt.Errorf("error creating MIG Mode Manager: %w", err) } configManager, err := util.NewMigConfigManager(c.Nvml) if err != nil { return nil, fmt.Errorf("error creating MIG Config Manager: %w", err) } configSpecs := make(v1.MigConfigSpecSlice, len(deviceIDs)) for i, deviceID := range deviceIDs { deviceFilter := deviceID.String() enabled := false capable, err := modeManager.IsMigCapable(i) if err != nil { return nil, fmt.Errorf("error checking MIG capable: %v", err) } if capable { m, err := modeManager.GetMigMode(i) if err != nil { return nil, fmt.Errorf("error checking MIG capable: %v", err) } enabled = (m == mode.Enabled) } migDevices := types.MigConfig{} if enabled { migDevices, err = configManager.GetMigConfig(i) if err != nil { return nil, fmt.Errorf("error getting MIGConfig: %v", err) } } configSpecs[i] = v1.MigConfigSpec{ DeviceFilter: []string{deviceFilter}, Devices: []int{i}, MigEnabled: enabled, MigDevices: migDevices, } } spec := v1.Spec{ Version: v1.Version, MigConfigs: map[string]v1.MigConfigSpecSlice{ c.Flags.ConfigLabel: mergeMigConfigSpecs(configSpecs), }, } return &spec, nil } // mergeMigConfigSpecs merges the specs from a MigConfigSpecsSlice into a more // compact form for better display. // // We assume the 'specs' argument is passed in from the ExportMigConfigs(), so we know // that the 'interface{}' types for '.DeviceFilter' and '.Devices' are both // slices and not strings. // // We also know that every device on the node is represented and that each spec // has a single device set in '.Devices' and a single filter set in // '.DeviceFilter'. // // This allows us to simplify the logic below significantly. func mergeMigConfigSpecs(specs v1.MigConfigSpecSlice) v1.MigConfigSpecSlice { // Merge the incoming specs by comparing their MigEnabled and MigDevices fields. // For any two specs, if both of these are equal, then we merge them // together and concatenate their device filter and devices lists. merged := []v1.MigConfigSpec{} OUTER: for _, s := range specs { if len(merged) == 0 { merged = append(merged, s) continue } for i, m := range merged { if s.MigEnabled != m.MigEnabled { continue } if !s.MigDevices.Equals(m.MigDevices) { continue } merged[i].Devices = mergeAndSortIntSlices(m.Devices.([]int), s.Devices.([]int)) merged[i].DeviceFilter = mergeAndSortStringSlices(m.DeviceFilter.([]string), s.DeviceFilter.([]string)) continue OUTER } merged = append(merged, s) } // Get the set of devices per unique device filter. // This assumes the incoming MigConfigSpecSlice has // a single entry in the device filter for each spec. dfDevices := make(map[string][]int) for _, s := range specs { df := s.DeviceFilter.([]string)[0] dfDevices[df] = mergeAndSortIntSlices(dfDevices[df], s.Devices.([]int)) } // Run back over the merged list to see if we can: // (1) Change its list of device filters to a single string or nil it out. // (2) Convert its list of devices to the special keyword 'all'. for i, m := range merged { if len(dfDevices) == 1 { merged[i].DeviceFilter = nil } else if len(m.DeviceFilter.([]string)) == 1 { merged[i].DeviceFilter = m.DeviceFilter.([]string)[0] } var specDevices []int for _, df := range m.DeviceFilter.([]string) { specDevices = mergeAndSortIntSlices(specDevices, dfDevices[df]) } if !equalSortedIntSlices(m.Devices.([]int), specDevices) { continue } merged[i].Devices = "all" } // If there is only a single entry in the end, // remove the device filter completely. if len(merged) == 1 { merged[0].DeviceFilter = nil } return merged } func mergeAndSortIntSlices(slices ...[]int) []int { set := make(map[int]struct{}) for _, s := range slices { for _, e := range s { set[e] = struct{}{} } } var out []int for e := range set { out = append(out, e) } sort.Ints(out) return out } func mergeAndSortStringSlices(slices ...[]string) []string { set := make(map[string]struct{}) for _, s := range slices { for _, e := range s { set[e] = struct{}{} } } var out []string for e := range set { out = append(out, e) } sort.Strings(out) return out } func equalSortedIntSlices(slices ...[]int) bool { if len(slices) < 2 { return true } s0 := slices[0] for _, s1 := range slices[1:] { if len(s0) != len(s1) { return false } for i := range s0 { if s0[i] != s1[i] { return false } } } return true } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/export/export.go000066400000000000000000000064651520540370700243330ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package export import ( "encoding/json" "fmt" "io" "os" "github.com/sirupsen/logrus" cli "github.com/urfave/cli/v2" "github.com/NVIDIA/go-nvml/pkg/nvml" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" yaml "gopkg.in/yaml.v2" ) var log = logrus.New() func GetLogger() *logrus.Logger { return log } const ( JSONFormat = "json" YAMLFormat = "yaml" DefaultConfigLabel = "current" ) type Flags struct { OutputFormat string ConfigLabel string } type Context struct { *cli.Context Flags *Flags Nvml nvml.Interface } func BuildCommand() *cli.Command { // Create a flags struct to hold our flags exportFlags := Flags{} // Create the 'export' command export := cli.Command{} export.Name = "export" export.Usage = "Export the MIG configuration from all GPUs in a compatible format" export.Action = func(c *cli.Context) error { return exportWrapper(c, &exportFlags) } // Setup the flags for this command export.Flags = []cli.Flag{ &cli.StringFlag{ Name: "output-format", Aliases: []string{"o"}, Usage: "Format for the output [json | yaml]", Destination: &exportFlags.OutputFormat, Value: YAMLFormat, EnvVars: []string{"MIG_PARTED_OUTPUT_FORMAT"}, }, &cli.StringFlag{ Name: "config-label", Aliases: []string{"l"}, Usage: "Label to apply to the exported config", Destination: &exportFlags.ConfigLabel, Value: DefaultConfigLabel, EnvVars: []string{"MIG_PARTED_CONFIG_LABEL"}, }, } return &export } func exportWrapper(c *cli.Context, f *Flags) error { err := CheckFlags(f) if err != nil { _ = cli.ShowSubcommandHelp(c) return err } context := Context{ Context: c, Flags: f, Nvml: nvml.New(), } spec, err := ExportMigConfigs(&context) if err != nil { return err } err = WriteOutput(os.Stdout, spec, f) if err != nil { return err } return nil } func CheckFlags(f *Flags) error { switch f.OutputFormat { case JSONFormat: case YAMLFormat: default: return fmt.Errorf("unrecognized 'output-format': %v", f.OutputFormat) } return nil } func WriteOutput(w io.Writer, spec *v1.Spec, f *Flags) error { switch f.OutputFormat { case YAMLFormat: output, err := yaml.Marshal(spec) if err != nil { return fmt.Errorf("error unmarshaling MIG config to YAML: %v", err) } if _, err := w.Write(output); err != nil { return fmt.Errorf("error writing YAML output: %w", err) } case JSONFormat: output, err := json.MarshalIndent(spec, "", " ") if err != nil { return fmt.Errorf("error unmarshaling MIG config to JSON: %v", err) } if _, err := w.Write(output); err != nil { return fmt.Errorf("error writing JSON output: %w", err) } } return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/export/export_test.go000066400000000000000000000104521520540370700253610ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package export import ( "testing" "github.com/stretchr/testify/require" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" ) func TestMergeConfigSpecs(t *testing.T) { testCases := []struct { Description string Input v1.MigConfigSpecSlice Output v1.MigConfigSpecSlice }{ { "Empty", v1.MigConfigSpecSlice{}, v1.MigConfigSpecSlice{}, }, { "Single Device", v1.MigConfigSpecSlice{ { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{0}, MigEnabled: false, }, }, v1.MigConfigSpecSlice{ { Devices: "all", MigEnabled: false, }, }, }, { "Single Filter - Multi Device - Same Config", v1.MigConfigSpecSlice{ { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{0}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{1}, MigEnabled: false, }, }, v1.MigConfigSpecSlice{ { Devices: "all", MigEnabled: false, }, }, }, { "Single Filter - Multi Device - Different Config", v1.MigConfigSpecSlice{ { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{0}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{1}, MigEnabled: true, }, }, v1.MigConfigSpecSlice{ { Devices: []int{0}, MigEnabled: false, }, { Devices: []int{1}, MigEnabled: true, }, }, }, { "Multi Filter - Same Config", v1.MigConfigSpecSlice{ { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{0}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-80GB"}, Devices: []int{1}, MigEnabled: false, }, }, v1.MigConfigSpecSlice{ { Devices: "all", MigEnabled: false, }, }, }, { "Multi Filter - Same config per filter", v1.MigConfigSpecSlice{ { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{0}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{1}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-80GB"}, Devices: []int{2}, MigEnabled: true, }, { DeviceFilter: []string{"A100-SXM4-80GB"}, Devices: []int{3}, MigEnabled: true, }, }, v1.MigConfigSpecSlice{ { DeviceFilter: "A100-SXM4-40GB", Devices: "all", MigEnabled: false, }, { DeviceFilter: "A100-SXM4-80GB", Devices: "all", MigEnabled: true, }, }, }, { "Multi Filter - Different config per filter - Common config across devices", v1.MigConfigSpecSlice{ { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{0}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-40GB"}, Devices: []int{1}, MigEnabled: true, }, { DeviceFilter: []string{"A100-SXM4-80GB"}, Devices: []int{2}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-80GB"}, Devices: []int{3}, MigEnabled: true, }, }, v1.MigConfigSpecSlice{ { DeviceFilter: []string{"A100-SXM4-40GB", "A100-SXM4-80GB"}, Devices: []int{0, 2}, MigEnabled: false, }, { DeviceFilter: []string{"A100-SXM4-40GB", "A100-SXM4-80GB"}, Devices: []int{1, 3}, MigEnabled: true, }, }, }, } for _, tc := range testCases { t.Run(tc.Description, func(t *testing.T) { merged := mergeMigConfigSpecs(tc.Input) require.Equal(t, tc.Output, merged) }) } } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/generateconfig/000077500000000000000000000000001520540370700241075ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/generateconfig/generate_config.go000066400000000000000000000056171520540370700275660ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package generateconfig import ( "fmt" "io" "os" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" "github.com/NVIDIA/mig-parted/pkg/mig/builder" ) var log = logrus.New() func GetLogger() *logrus.Logger { return log } const ( JSONFormat = "json" YAMLFormat = "yaml" ) type Flags struct { OutputFile string OutputFormat string } func BuildCommand() *cli.Command { generateConfigFlags := Flags{} generateConfig := cli.Command{} generateConfig.Name = "generate-config" generateConfig.Usage = "Generate MIG configuration by discovering available MIG profiles on the system" generateConfig.Action = func(c *cli.Context) error { return runGenerateConfig(c, &generateConfigFlags) } generateConfig.Flags = []cli.Flag{ &cli.StringFlag{ Name: "output-file", Aliases: []string{"f"}, Usage: "Output file path (default: stdout)", Destination: &generateConfigFlags.OutputFile, Value: "", EnvVars: []string{"MIG_PARTED_OUTPUT_FILE"}, }, &cli.StringFlag{ Name: "output-format", Aliases: []string{"o"}, Usage: "Format for the output [json | yaml]", Destination: &generateConfigFlags.OutputFormat, Value: YAMLFormat, EnvVars: []string{"MIG_PARTED_OUTPUT_FORMAT"}, }, } return &generateConfig } func runGenerateConfig(c *cli.Context, f *Flags) error { err := checkFlags(f) if err != nil { _ = cli.ShowSubcommandHelp(c) return err } writer := io.Writer(os.Stdout) if f.OutputFile != "" { file, err := os.Create(f.OutputFile) if err != nil { return fmt.Errorf("error creating output file: %w", err) } defer file.Close() writer = file } var output []byte switch f.OutputFormat { case YAMLFormat: output, err = builder.GenerateConfigYAML() if err != nil { return fmt.Errorf("error generating MIG config: %w", err) } case JSONFormat: output, err = builder.GenerateConfigJSON() if err != nil { return fmt.Errorf("error generating MIG config: %w", err) } } if _, err := writer.Write(output); err != nil { return fmt.Errorf("error writing output: %w", err) } return nil } func checkFlags(f *Flags) error { switch f.OutputFormat { case JSONFormat: case YAMLFormat: default: return fmt.Errorf("unrecognized 'output-format': %s", f.OutputFormat) } return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/main.go000066400000000000000000000054751520540370700224150ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package main import ( "os" log "github.com/sirupsen/logrus" cli "github.com/urfave/cli/v2" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/apply" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/assert" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/checkpoint" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/export" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/generateconfig" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/restore" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/internal/info" ) // Flags holds variables that represent the set of top level flags that can be passed to the mig-parted CLI. type Flags struct { Debug bool } func main() { // Create a flags struct to hold our flags flags := Flags{} // Create the top-level CLI c := cli.NewApp() c.UseShortOptionHandling = true c.EnableBashCompletion = true c.Usage = "Manage MIG partitions across the full set of NVIDIA GPUs on a node" c.Version = info.GetVersionString() // Setup the flags for this command c.Flags = []cli.Flag{ &cli.BoolFlag{ Name: "debug", Aliases: []string{"d"}, Usage: "Enable debug-level logging", Destination: &flags.Debug, EnvVars: []string{"MIG_PARTED_DEBUG"}, }, } // Register the subcommands with the top-level CLI c.Commands = []*cli.Command{ apply.BuildCommand(), assert.BuildCommand(), export.BuildCommand(), generateconfig.BuildCommand(), checkpoint.BuildCommand(), restore.BuildCommand(), } // Set log-level for all subcommands c.Before = func(c *cli.Context) error { logLevel := log.InfoLevel if flags.Debug { logLevel = log.DebugLevel } applyLog := apply.GetLogger() applyLog.SetLevel(logLevel) assertLog := assert.GetLogger() assertLog.SetLevel(logLevel) exportLog := export.GetLogger() exportLog.SetLevel(logLevel) generateConfigLog := generateconfig.GetLogger() generateConfigLog.SetLevel(logLevel) checkpointLog := export.GetLogger() checkpointLog.SetLevel(logLevel) restoreLog := export.GetLogger() restoreLog.SetLevel(logLevel) return nil } // Run the CLI err := c.Run(os.Args) if err != nil { log.Fatal(util.Capitalize(err.Error())) } } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/restore/000077500000000000000000000000001520540370700226125ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/restore/restore.go000066400000000000000000000117071520540370700246320ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package restore import ( "encoding/json" "fmt" "os" "reflect" "strings" "github.com/sirupsen/logrus" cli "github.com/urfave/cli/v2" "github.com/NVIDIA/go-nvml/pkg/nvml" checkpoint "github.com/NVIDIA/mig-parted/api/checkpoint/v1" hooks "github.com/NVIDIA/mig-parted/api/hooks/v1" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/apply" "github.com/NVIDIA/mig-parted/pkg/mig/state" "github.com/NVIDIA/mig-parted/pkg/types" ) var log = logrus.New() func GetLogger() *logrus.Logger { return log } type Flags struct { CheckpointFile string HooksFile string ModeOnly bool } type Context struct { *cli.Context Flags *Flags Hooks apply.ApplyHooks MigState *types.MigState MigStateManager state.Manager } func BuildCommand() *cli.Command { // Create a flags struct to hold our flags restoreFlags := Flags{} // Create the 'restore' command restore := cli.Command{} restore.Name = "restore" restore.Usage = "Restore MIG state from a checkpoint file" restore.Action = func(c *cli.Context) error { return restoreWrapper(c, &restoreFlags) } // Setup the flags for this command restore.Flags = []cli.Flag{ &cli.StringFlag{ Name: "checkpoint-file", Aliases: []string{"f"}, Usage: "Path to the checkpoint file", Destination: &restoreFlags.CheckpointFile, EnvVars: []string{"MIG_PARTED_CHECKPOINT_FILE"}, }, &cli.StringFlag{ Name: "hooks-file", Aliases: []string{"k"}, Usage: "Path to the hooks file", Destination: &restoreFlags.HooksFile, EnvVars: []string{"MIG_PARTED_HOOKS_FILE"}, }, &cli.BoolFlag{ Name: "mode-only", Aliases: []string{"m"}, Usage: "Only change the MIG enabled setting from the checkpoint file, not configure any MIG devices", Destination: &restoreFlags.ModeOnly, EnvVars: []string{"MIG_PARTED_MODE_CHANGE_ONLY"}, }, } return &restore } func CheckFlags(f *Flags) error { var missing []string if f.CheckpointFile == "" { missing = append(missing, "checkpoint-file") } if len(missing) > 0 { return fmt.Errorf("missing required flags '%v'", strings.Join(missing, ", ")) } return nil } func ParseCheckpointFile(f *Flags) (*checkpoint.State, error) { checkpointJson, err := os.ReadFile(f.CheckpointFile) if err != nil { return nil, fmt.Errorf("read error: %v", err) } var state checkpoint.State err = json.Unmarshal(checkpointJson, &state) if err != nil { return nil, fmt.Errorf("unmarshal error: %v", err) } return &state, nil } func (c *Context) AssertMigMode() error { current, err := c.MigStateManager.Fetch() if err != nil { return fmt.Errorf("error fetching MIG state: %v", err) } for i := range c.MigState.Devices { if current.Devices[i].MigMode != c.MigState.Devices[i].MigMode { return fmt.Errorf("current mode different than mode being asserted") } } return nil } func (c *Context) AssertMigConfig() error { current, err := c.MigStateManager.Fetch() if err != nil { return fmt.Errorf("error fetching MIG state: %v", err) } if !reflect.DeepEqual(current, c.MigState) { return fmt.Errorf("checkpoint contents do not match the current MIG state") } return nil } func (c *Context) ApplyMigMode() error { return c.MigStateManager.RestoreMode(c.MigState) } func (c *Context) ApplyMigConfig() error { return c.MigStateManager.RestoreConfig(c.MigState) } func restoreWrapper(c *cli.Context, f *Flags) error { err := CheckFlags(f) if err != nil { _ = cli.ShowSubcommandHelp(c) return err } log.Debugf("Parsing checkpoint file...") checkpoint, err := ParseCheckpointFile(f) if err != nil { return fmt.Errorf("error parsing checkpoint file: %v", err) } hooksSpec := &hooks.Spec{} if f.HooksFile != "" { log.Debugf("Parsing Hooks file...") hooksSpec, err = apply.ParseHooksFile(f.HooksFile) if err != nil { return fmt.Errorf("error parsing hooks file: %v", err) } } context := Context{ Context: c, Flags: f, Hooks: apply.NewApplyHooks(hooksSpec.Hooks), MigState: &checkpoint.MigState, MigStateManager: state.NewMigStateManager(nvml.New()), } err = apply.ApplyMigConfigWithHooks(log, c, f.ModeOnly, context.Hooks, &context) if err != nil { return fmt.Errorf("error applying MIG configuration with hooks: %v", err) } fmt.Println("MIG configuration restored successfully") return nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/util/000077500000000000000000000000001520540370700221045ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/util/device.go000066400000000000000000000071501520540370700236750ustar00rootroot00000000000000/* * Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package util import ( "fmt" "os/exec" "strings" "github.com/NVIDIA/go-nvlib/pkg/nvpci" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/mig-parted/pkg/types" ) func GetGPUDeviceIDs() ([]types.DeviceID, error) { nvidiaModuleLoaded, err := IsNvidiaModuleLoaded() if err != nil { return nil, fmt.Errorf("error checking if nvidia module loaded: %v", err) } if nvidiaModuleLoaded { return nvmlGetGPUDeviceIDs() } return pciGetGPUDeviceIDs() } func ResetAllGPUs() (string, error) { nvidiaModuleLoaded, err := IsNvidiaModuleLoaded() if err != nil { return "", fmt.Errorf("error checking if nvidia module loaded: %v", err) } if nvidiaModuleLoaded { return nvmlResetAllGPUs() } return pciResetAllGPUs() } func pciVisitGPUs(visit func(*nvpci.NvidiaPCIDevice) error) error { nvpci := nvpci.New() gpus, err := nvpci.GetGPUs() if err != nil { return fmt.Errorf("error enumerating GPUs: %v", err) } for _, gpu := range gpus { err := visit(gpu) if err != nil { return err } } return nil } func pciGetGPUDeviceIDs() ([]types.DeviceID, error) { var ids []types.DeviceID err := pciVisitGPUs(func(gpu *nvpci.NvidiaPCIDevice) error { ids = append(ids, types.NewDeviceID(gpu.Device, gpu.Vendor)) return nil }) if err != nil { return nil, err } return ids, nil } func nvmlGetGPUDeviceIDs() ([]types.DeviceID, error) { nvmlLib := nvml.New() err := NvmlInit(nvmlLib) if err != nil { return nil, fmt.Errorf("error initializing NVML: %v", err) } defer TryNvmlShutdown(nvmlLib) var ids []types.DeviceID err = pciVisitGPUs(func(gpu *nvpci.NvidiaPCIDevice) error { _, ret := nvmlLib.DeviceGetHandleByPciBusId(gpu.Address) if ret != nvml.SUCCESS { return nil } ids = append(ids, types.NewDeviceID(gpu.Device, gpu.Vendor)) return nil }) if err != nil { return nil, err } return ids, nil } func pciResetAllGPUs() (string, error) { err := pciVisitGPUs(func(gpu *nvpci.NvidiaPCIDevice) error { err := gpu.Reset() if err != nil { return fmt.Errorf("error resetting GPU %v: %v", gpu.Address, err) } return nil }) return "", err } func nvmlGetGPUPciBusIds() ([]string, error) { nvmlLib := nvml.New() err := NvmlInit(nvmlLib) if err != nil { return nil, fmt.Errorf("error initializing NVML: %v", err) } defer TryNvmlShutdown(nvmlLib) var ids []string err = pciVisitGPUs(func(gpu *nvpci.NvidiaPCIDevice) error { if !gpu.Is3DController() { return nil } _, ret := nvmlLib.DeviceGetHandleByPciBusId(gpu.Address) if ret != nvml.SUCCESS { return nil } ids = append(ids, gpu.Address) return nil }) if err != nil { return nil, err } return ids, nil } func nvmlResetAllGPUs() (string, error) { pciBusIDs, err := nvmlGetGPUPciBusIds() if err != nil { return "", fmt.Errorf("error getting GPU pci bus IDs: %v", err) } if len(pciBusIDs) == 0 { return "No GPUs to reset...", nil } cmd := exec.Command("nvidia-smi", "-r", "-i", strings.Join(pciBusIDs, ",")) //nolint:gosec output, err := cmd.CombinedOutput() return string(output), err } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/util/mig.go000066400000000000000000000036411520540370700232130ustar00rootroot00000000000000/* * Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package util import ( "fmt" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/mig-parted/pkg/mig/config" "github.com/NVIDIA/mig-parted/pkg/mig/mode" ) func NewMigModeManager(nvmlLib nvml.Interface) (mode.Manager, error) { nvidiaModuleLoaded, err := IsNvidiaModuleLoaded() if err != nil { return nil, fmt.Errorf("error checking if nvidia module loaded: %v", err) } if !nvidiaModuleLoaded { return mode.NewPciMigModeManager(), nil } nvmlSupported, err := IsNVMLVersionSupported(nvmlLib) if err != nil { return nil, fmt.Errorf("error checking NVML version: %v", err) } if !nvmlSupported { return mode.NewPciMigModeManager(), nil } return mode.NewNvmlMigModeManager(nvmlLib), nil } func NewMigConfigManager(nvmlLib nvml.Interface) (config.Manager, error) { nvidiaModuleLoaded, err := IsNvidiaModuleLoaded() if err != nil { return nil, fmt.Errorf("error checking if nvidia module loaded: %v", err) } if !nvidiaModuleLoaded { return nil, fmt.Errorf("nvidia module not loaded") } nvmlSupported, err := IsNVMLVersionSupported(nvmlLib) if err != nil { return nil, fmt.Errorf("error checking NVML version: %v", err) } if !nvmlSupported { return nil, fmt.Errorf("NVML version unsupported for performing MIG operations") } return config.NewNvmlMigConfigManager(nvmlLib), nil } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/util/nvml.go000066400000000000000000000040721520540370700234120ustar00rootroot00000000000000/* * Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package util import ( "fmt" "os" "strconv" "strings" log "github.com/sirupsen/logrus" "github.com/NVIDIA/go-nvml/pkg/nvml" ) const ( minSupportedNVML = 11 ) func IsNvidiaModuleLoaded() (bool, error) { modules, err := os.ReadFile("/proc/modules") if err != nil { return false, fmt.Errorf("unable to read /proc/modules: %v", err) } for _, line := range strings.Split(strings.TrimSpace(string(modules)), "\n") { fields := strings.Fields(line) if fields[0] == "nvidia" { return true, nil } } return false, nil } func IsNVMLVersionSupported(nvmlLib nvml.Interface) (bool, error) { sversion, ret := nvmlLib.SystemGetNVMLVersion() if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting getting version: %v", ret) } split := strings.Split(sversion, ".") if len(split) == 0 { return false, fmt.Errorf("unexpected empty version string") } iversion, err := strconv.Atoi(split[0]) if err != nil { return false, fmt.Errorf("malformed version string '%s': %v", sversion, err) } if iversion < minSupportedNVML { return false, nil } return true, nil } func NvmlInit(nvmlLib nvml.Interface) error { if nvmlLib == nil { nvmlLib = nvml.New() } ret := nvmlLib.Init() if ret != nvml.SUCCESS { return ret } return nil } func TryNvmlShutdown(nvmlLib nvml.Interface) { if nvmlLib == nil { nvmlLib = nvml.New() } ret := nvmlLib.Shutdown() if ret != nvml.SUCCESS { log.Warnf("error shutting down NVML: %v", ret) } } NVIDIA-mig-parted-47bc938/cmd/nvidia-mig-parted/util/util.go000066400000000000000000000017001520540370700234060ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package util import ( "strings" ) func Any(set []bool) bool { for _, s := range set { if s { return true } } return false } func CountTrue(set []bool) int { count := 0 for _, s := range set { if s { count++ } } return count } func Capitalize(s string) string { return strings.ToUpper(s[0:1]) + s[1:] } NVIDIA-mig-parted-47bc938/deployments/000077500000000000000000000000001520540370700174265ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/container/000077500000000000000000000000001520540370700214105ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/container/Dockerfile000066400000000000000000000052511520540370700234050ustar00rootroot00000000000000# Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. FROM nvcr.io/nvidia/cuda:13.2.1-base-ubi8 as build SHELL ["/bin/bash", "-c"] RUN yum install -y \ wget make git gcc \ && \ rm -rf /var/cache/yum/* ARG GOLANG_VERSION=1.22.8 RUN set -eux; \ \ arch="$(uname -m)"; \ case "${arch##*-}" in \ x86_64 | amd64) ARCH='amd64' ;; \ ppc64el | ppc64le) ARCH='ppc64le' ;; \ aarch64 | arm64) ARCH='arm64' ;; \ *) echo "unsupported architecture" ; exit 1 ;; \ esac; \ wget -nv -O - https://go.dev/dl/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz \ | tar -C /usr/local -xz ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH ARG GOPROXY="https://proxy.golang.org,direct" ENV GOPROXY=$GOPROXY WORKDIR /build COPY . . RUN mkdir /artifacts ARG VERSION="N/A" ARG GIT_COMMIT="unknown" RUN make PREFIX=/artifacts cmds # Install the nvidia-ctk binary as a go executable # TODO: Once we can consume a golang API from reconfigure.sh we can remove this. ARG NVIDIA_CTK_VERSION=main RUN go install -ldflags "-extldflags=-Wl,-z,lazy -s -w" \ github.com/NVIDIA/nvidia-container-toolkit/cmd/nvidia-ctk@${NVIDIA_CTK_VERSION} \ && cp ${GOPATH}/bin/nvidia-ctk /artifacts/nvidia-ctk FROM nvcr.io/nvidia/distroless/go:v4.0.6-dev USER 0:0 SHELL ["/busybox/sh", "-c"] RUN ln -s /busybox/sh /bin/sh && \ # delete /var/run as it's an empty dir rm -r /var/run && \ # and symlink it to /run instead to emulate other distros ln -s /run /var/run COPY --from=build /artifacts/nvidia-mig-parted /usr/bin/nvidia-mig-parted COPY --from=build /artifacts/nvidia-mig-manager /usr/bin/nvidia-mig-manager COPY --from=build /artifacts/nvidia-ctk /usr/bin/nvidia-ctk ENV NVIDIA_DISABLE_REQUIRE="true" ENV NVIDIA_VISIBLE_DEVICES=all ENV NVIDIA_MIG_CONFIG_DEVICES=all ENV NVIDIA_DRIVER_CAPABILITIES=utility LABEL version="${VERSION}" LABEL release="N/A" LABEL vendor="NVIDIA" LABEL io.k8s.display-name="NVIDIA MIG Manager for Kubernetes" LABEL name="NVIDIA MIG Manager for Kubernetes" LABEL summary="NVIDIA MIG Manager for Kubernetes" LABEL description="See summary" ENTRYPOINT ["nvidia-mig-manager"] NVIDIA-mig-parted-47bc938/deployments/container/Makefile000066400000000000000000000046101520540370700230510ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. BUILD_MULTI_ARCH_IMAGES ?= no DOCKER ?= docker MKDIR ?= mkdir DIST_DIR ?= $(CURDIR)/dist ##### Global variables ##### include $(CURDIR)/versions.mk ifeq ($(IMAGE_NAME),) REGISTRY ?= nvcr.io/nvidia/cloud-native IMAGE_NAME := $(REGISTRY)/k8s-mig-manager endif IMAGE_VERSION := $(VERSION) IMAGE_TAG ?= $(VERSION) IMAGE = $(IMAGE_NAME):$(IMAGE_TAG) OUT_IMAGE_NAME ?= $(IMAGE_NAME) OUT_IMAGE_VERSION ?= $(IMAGE_VERSION) OUT_IMAGE_TAG = $(OUT_IMAGE_VERSION) OUT_IMAGE = $(OUT_IMAGE_NAME):$(OUT_IMAGE_TAG) GOPROXY ?= https://proxy.golang.org,direct ##### Public rules ##### DEFAULT_PUSH_TARGET := image DISTRIBUTIONS := $(DEFAULT_PUSH_TARGET) IMAGE_TARGETS := $(patsubst %,image-%,$(DISTRIBUTIONS)) BUILD_TARGETS := $(patsubst %,build-%,$(DISTRIBUTIONS)) PUSH_TARGETS := $(patsubst %,push-%,$(DISTRIBUTIONS)) TEST_TARGETS := $(patsubst %,test-%, $(DISTRIBUTIONS)) .PHONY: $(DISTRIBUTIONS) $(PUSH_TARGETS) $(BUILD_TARGETS) $(TEST_TARGETS) $(IMAGE_TARGETS) ifneq ($(BUILD_MULTI_ARCH_IMAGES),true) include $(CURDIR)/deployments/container/native-only.mk else include $(CURDIR)/deployments/container/multi-arch.mk endif DOCKERFILE = $(CURDIR)/deployments/container/Dockerfile # Use a generic image target to build the relevant images $(IMAGE_TARGETS): image-%: $(ARTIFACTS_ROOT) $(DOCKER) build --pull \ $(DOCKER_BUILD_OPTIONS) \ $(DOCKER_BUILD_PLATFORM_OPTIONS) \ --tag $(IMAGE) \ --build-arg GOLANG_VERSION="$(GOLANG_VERSION)" \ --build-arg VERSION="$(vVERSION)" \ --build-arg GIT_COMMIT="$(GIT_COMMIT)" \ --build-arg NVIDIA_CTK_VERSION=$(NVIDIA_CTK_VERSION) \ --build-arg CVE_UPDATES="$(CVE_UPDATES)" \ --build-arg GOPROXY="$(GOPROXY)" \ -f $(DOCKERFILE) \ $(CURDIR) # Handle the default build target. .PHONY: build build: $(DEFAULT_PUSH_TARGET) $(DEFAULT_PUSH_TARGET): build-$(DEFAULT_PUSH_TARGET) NVIDIA-mig-parted-47bc938/deployments/container/multi-arch.mk000066400000000000000000000020641520540370700240100ustar00rootroot00000000000000# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. PUSH_ON_BUILD ?= false ATTACH_ATTESTATIONS ?= false DOCKER_BUILD_OPTIONS = --output=type=image,push=$(PUSH_ON_BUILD) --provenance=$(ATTACH_ATTESTATIONS) --sbom=$(ATTACH_ATTESTATIONS) DOCKER_BUILD_PLATFORM_OPTIONS ?= --platform=linux/amd64,linux/arm64 REGCTL ?= regctl $(PUSH_TARGETS): push-%: $(REGCTL) \ image copy \ $(IMAGE) $(OUT_IMAGE) push-short: $(REGCTL) \ image copy \ $(IMAGE) $(OUT_IMAGE_NAME):$(OUT_IMAGE_VERSION) NVIDIA-mig-parted-47bc938/deployments/container/native-only.mk000066400000000000000000000023561520540370700242140ustar00rootroot00000000000000# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. PUSH_ON_BUILD ?= false ATTACH_ATTESTATIONS ?= false DOCKER_BUILD_OPTIONS = --output=type=image,push=$(PUSH_ON_BUILD) --provenance=$(ATTACH_ATTESTATIONS) --sbom=$(ATTACH_ATTESTATIONS) DOCKER_BUILD_PLATFORM_OPTIONS ?= --platform=linux/amd64 ifeq ($(PUSH_ON_BUILD),true) $(BUILD_TARGETS): build-%: image-% $(DOCKER) push "$(IMAGE)" else $(BUILD_TARGETS): build-%: image-% endif $(PUSH_TARGETS): push-%: $(DOCKER) tag "$(IMAGE)" "$(OUT_IMAGE)" $(DOCKER) push "$(OUT_IMAGE)" push-short: $(DOCKER) tag "$(IMAGE_NAME):$(VERSION)-$(DEFAULT_PUSH_TARGET)" "$(OUT_IMAGE_NAME):$(OUT_IMAGE_VERSION)" $(DOCKER) push "$(OUT_IMAGE_NAME):$(OUT_IMAGE_VERSION)" NVIDIA-mig-parted-47bc938/deployments/container/nvidia-mig-manager-example-hopper-blackwell.yaml000066400000000000000000000242531520540370700326200ustar00rootroot00000000000000--- apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-mig-manager namespace: default labels: app: nvidia-mig-manager spec: selector: matchLabels: app: nvidia-mig-manager template: metadata: labels: app: nvidia-mig-manager spec: hostPID: true hostIPC: true nodeSelector: nvidia.com/gpu.deploy.mig-manager: "true" serviceAccount: nvidia-mig-manager-service-account serviceAccountName: nvidia-mig-manager-service-account containers: - name: nvidia-mig-manager image: nvcr.io/nvidia/cloud-native/k8s-mig-manager:v0.14.2 imagePullPolicy: IfNotPresent env: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: CONFIG_FILE value: "/mig-parted-config/config.yaml" - name: HOST_ROOT_MOUNT value: "/host" - name: HOST_NVIDIA_DIR value: "/usr/local/nvidia" - name: HOST_MIG_MANAGER_STATE_FILE value: "/etc/systemd/system/nvidia-mig-manager.service.d/override.conf" - name: DEFAULT_GPU_CLIENTS_NAMESPACE value: "gpu-operator" - name: WITH_REBOOT value: "false" securityContext: privileged: true volumeMounts: - mountPath: /host name: host-root - mountPath: /sys name: host-sys - mountPath: /mig-parted-config name: mig-parted-config volumes: - name: host-root hostPath: path: / type: Directory - name: host-sys hostPath: path: /sys type: Directory - name: gpu-clients configMap: name: gpu-clients - name: mig-parted-config configMap: name: mig-parted-config --- apiVersion: v1 kind: ServiceAccount metadata: name: nvidia-mig-manager-service-account --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: nvidia-mig-manager-role rules: - apiGroups: [""] resources: ["*"] verbs: ["*"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: nvidia-mig-manager-role-binding subjects: - kind: ServiceAccount name: nvidia-mig-manager-service-account namespace: default roleRef: kind: ClusterRole name: nvidia-mig-manager-role apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: ConfigMap metadata: name: mig-parted-config namespace: default data: config.yaml: | version: v1 mig-configs: all-disabled: - devices: all mig-enabled: false # H200-141GB all-1g.18gb: - devices: all mig-enabled: true mig-devices: "1g.18gb": 7 all-1g.18gb.me: - devices: all mig-enabled: true mig-devices: "1g.18gb+me": 1 all-1g.23gb: - devices: all mig-enabled: true mig-devices: "1g.23gb": 7 all-1g.23gb.me: - devices: all mig-enabled: true mig-devices: "1g.23gb+me": 1 all-1g.35gb: # H200-141GB - device-filter: ["0x233510DE"] devices: all mig-enabled: true mig-devices: "1g.35gb": 4 # GB300 - device-filter: ["0x31C210DE"] devices: all mig-enabled: true mig-devices: "1g.35gb": 7 all-1g.45gb: - devices: all mig-enabled: true mig-devices: "1g.45gb": 4 all-2g.35gb: - devices: all mig-enabled: true mig-devices: "2g.35gb": 3 all-2g.45gb: - devices: all mig-enabled: true mig-devices: "2g.45gb": 3 all-3g.71gb: - devices: all mig-enabled: true mig-devices: "3g.71gb": 2 all-3g.90gb: - devices: all mig-enabled: true mig-devices: "3g.90gb": 2 all-4g.71gb: - devices: all mig-enabled: true mig-devices: "4g.71gb": 1 all-4g.90gb: - devices: all mig-enabled: true mig-devices: "4g.90gb": 1 all-7g.141gb: - devices: all mig-enabled: true mig-devices: "7g.141gb": 1 all-7g.180gb: - devices: all mig-enabled: true mig-devices: "7g.180gb": 1 # H100-80GB, H800-80GB all-1g.10gb: - devices: all mig-enabled: true mig-devices: "1g.10gb": 7 all-1g.10gb.me: - devices: all mig-enabled: true mig-devices: "1g.10gb+me": 1 all-1g.20gb: - devices: all mig-enabled: true mig-devices: "1g.20gb": 4 all-2g.20gb: - devices: all mig-enabled: true mig-devices: "2g.20gb": 3 all-3g.40gb: - devices: all mig-enabled: true mig-devices: "3g.40gb": 2 all-7g.80gb: - devices: all mig-enabled: true mig-devices: "7g.80gb": 1 # H100 NVL, H800 NVL all-1g.12gb: - devices: all mig-enabled: true mig-devices: "1g.12gb": 7 all-1g.12gb.me: - devices: all mig-enabled: true mig-devices: "1g.12gb+me": 1 all-1g.24gb: # H100 NVL - device-filter: ["0x232110DE"] devices: all mig-enabled: true mig-devices: "1g.24gb": 4 all-2g.24gb: - devices: all mig-enabled: true mig-devices: "2g.24gb": 3 all-3g.47gb: - devices: all mig-enabled: true mig-devices: "3g.47gb": 2 all-7g.94gb: - devices: all mig-enabled: true mig-devices: "7g.94gb": 1 all-1g.24gb.me: - devices: all mig-enabled: true mig-devices: "1g.24gb+me": 1 all-1g.34gb: - devices: all mig-enabled: true mig-devices: "1g.34gb": 7 all-1g.34gb.me: - devices: all mig-enabled: true mig-devices: "1g.34gb+me": 1 all-1g.35gb.me: - devices: all mig-enabled: true mig-devices: "1g.35gb+me": 1 all-1g.47gb: - devices: all mig-enabled: true mig-devices: "1g.47gb": 4 all-1g.67gb: - devices: all mig-enabled: true mig-devices: "1g.67gb": 4 all-1g.70gb: - devices: all mig-enabled: true mig-devices: "1g.70gb": 4 all-2g.47gb: - devices: all mig-enabled: true mig-devices: "2g.47gb": 3 all-2g.67gb: - devices: all mig-enabled: true mig-devices: "2g.67gb": 3 all-2g.70gb: - devices: all mig-enabled: true mig-devices: "2g.70gb": 3 all-3g.93gb: - devices: all mig-enabled: true mig-devices: "3g.93gb": 2 all-4g.93gb: - devices: all mig-enabled: true mig-devices: "4g.93gb": 1 all-3g.95gb: - devices: all mig-enabled: true mig-devices: "3g.95gb": 2 all-3g.135gb: - devices: all mig-enabled: true mig-devices: "3g.135gb": 2 all-3g.139gb: - devices: all mig-enabled: true mig-devices: "3g.139gb": 2 all-4g.95gb: - devices: all mig-enabled: true mig-devices: "4g.95gb": 1 all-4g.135gb: - devices: all mig-enabled: true mig-devices: "4g.135gb": 1 all-4g.139gb: - devices: all mig-enabled: true mig-devices: "4g.139gb": 1 all-7g.186gb: - devices: all mig-enabled: true mig-devices: "7g.186gb": 1 all-7g.189gb: - devices: all mig-enabled: true mig-devices: "7g.189gb": 1 all-7g.269gb: - devices: all mig-enabled: true mig-devices: "7g.269gb": 1 all-7g.278gb: - devices: all mig-enabled: true mig-devices: "7g.278gb": 1 # GB200 HGX, B200, H100-80GB, H100-NVL, H800-80GB, H800-NVL all-balanced: # GB200 HGX - device-filter: ["0x294110DE"] devices: all mig-enabled: true mig-devices: "1g.23gb": 2 "2g.47gb": 1 "3g.93gb": 1 # B200 - device-filter: ["0x290110DE"] devices: all mig-enabled: true mig-devices: "1g.23gb": 2 "2g.45gb": 1 "3g.90gb": 1 # H200 141GB, H200 NVL - device-filter: ["0x233510DE", "0x233B10DE"] devices: all mig-enabled: true mig-devices: "1g.18gb": 2 "2g.35gb": 1 "3g.71gb": 1 # H100-80GB, H800-80GB - device-filter: ["0x233110DE", "0x233010DE", "0x232210DE"] devices: all mig-enabled: true mig-devices: "1g.10gb": 2 "2g.20gb": 1 "3g.40gb": 1 # H100 NVL, H800 NVL - device-filter: ["0x232110DE", "0x233A10DE"] devices: all mig-enabled: true mig-devices: "1g.12gb": 1 "2g.24gb": 1 "3g.47gb": 1 # B300 - device-filter: ["0x318210DE"] devices: all mig-enabled: true mig-devices: "1g.34gb": 2 "2g.67gb": 1 "3g.135gb": 1 # GB300 - device-filter: ["0x31C210DE"] devices: all mig-enabled: true mig-devices: "1g.35gb": 2 "2g.70gb": 1 "3g.139gb": 1 NVIDIA-mig-parted-47bc938/deployments/container/nvidia-mig-manager-example.yaml000066400000000000000000000170351520540370700273670ustar00rootroot00000000000000--- apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-mig-manager namespace: default labels: app: nvidia-mig-manager spec: selector: matchLabels: app: nvidia-mig-manager template: metadata: labels: app: nvidia-mig-manager spec: hostPID: true hostIPC: true nodeSelector: nvidia.com/gpu.deploy.mig-manager: "true" serviceAccount: nvidia-mig-manager-service-account serviceAccountName: nvidia-mig-manager-service-account containers: - name: nvidia-mig-manager image: nvcr.io/nvidia/cloud-native/k8s-mig-manager:v0.14.2 imagePullPolicy: IfNotPresent env: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: CONFIG_FILE value: "/mig-parted-config/config.yaml" - name: GPU_CLIENTS_FILE value: "/gpu-clients/clients.yaml" - name: HOST_ROOT_MOUNT value: "/host" - name: HOST_NVIDIA_DIR value: "/usr/local/nvidia" - name: HOST_KUBELET_SYSTEMD_SERVICE value: "kubelet.service" - name: HOST_MIG_MANAGER_STATE_FILE value: "/etc/systemd/system/nvidia-mig-manager.service.d/override.conf" - name: DEFAULT_GPU_CLIENTS_NAMESPACE value: "gpu-operator" - name: WITH_SHUTDOWN_HOST_GPU_CLIENTS value: "true" - name: WITH_REBOOT value: "false" securityContext: privileged: true volumeMounts: - mountPath: /host name: host-root - mountPath: /sys name: host-sys - mountPath: /gpu-clients name: gpu-clients - mountPath: /mig-parted-config name: mig-parted-config volumes: - name: host-root hostPath: path: / type: Directory - name: host-sys hostPath: path: /sys type: Directory - name: gpu-clients configMap: name: gpu-clients - name: mig-parted-config configMap: name: mig-parted-config --- apiVersion: v1 kind: ServiceAccount metadata: name: nvidia-mig-manager-service-account --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: nvidia-mig-manager-role rules: - apiGroups: [""] resources: ["*"] verbs: ["*"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: nvidia-mig-manager-role-binding subjects: - kind: ServiceAccount name: nvidia-mig-manager-service-account namespace: default roleRef: kind: ClusterRole name: nvidia-mig-manager-role apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: ConfigMap metadata: name: gpu-clients namespace: default data: clients.yaml: | version: v1 systemd-services: - nvsm.service - nvsm-mqtt.service - nvsm-core.service - nvsm-api-gateway.service - nvsm-notifier.service - nv_peer_mem.service - nvidia-dcgm.service - dcgm-exporter.service --- apiVersion: v1 kind: ConfigMap metadata: name: mig-parted-config namespace: default data: config.yaml: | version: v1 mig-configs: all-disabled: - devices: all mig-enabled: false # A100-40GB, A800-40GB all-1g.5gb: - devices: all mig-enabled: true mig-devices: "1g.5gb": 7 # A100-40GB, A800-40GB all-1g.5gb.me: - devices: all mig-enabled: true mig-devices: "1g.5gb+me": 1 all-2g.10gb: - devices: all mig-enabled: true mig-devices: "2g.10gb": 3 all-3g.20gb: - devices: all mig-enabled: true mig-devices: "3g.20gb": 2 all-4g.20gb: - devices: all mig-enabled: true mig-devices: "4g.20gb": 1 all-7g.40gb: - devices: all mig-enabled: true mig-devices: "7g.40gb": 1 # A100-80GB, A800-80GB, A100-40GB, A800-40GB all-1g.10gb: # A100-80GB, A800-80GB - device-filter: ["0x20B210DE", "0x20B510DE", "0x20F310DE", "0x20F510DE"] devices: all mig-enabled: true mig-devices: "1g.10gb": 7 # A100-40GB, A800-40GB - device-filter: ["0x20B010DE", "0x20B110DE", "0x20F110DE", "0x20F610DE"] devices: all mig-enabled: true mig-devices: "1g.10gb": 4 # A100-80GB, A800-80GB all-1g.10gb.me: - devices: all mig-enabled: true mig-devices: "1g.10gb+me": 1 # A100-80GB, A800-80GB all-1g.20gb: - devices: all mig-enabled: true mig-devices: "1g.20gb": 4 all-2g.20gb: - devices: all mig-enabled: true mig-devices: "2g.20gb": 3 all-3g.40gb: - devices: all mig-enabled: true mig-devices: "3g.40gb": 2 all-4g.40gb: - devices: all mig-enabled: true mig-devices: "4g.40gb": 1 all-7g.80gb: - devices: all mig-enabled: true mig-devices: "7g.80gb": 1 # A30-24GB all-1g.6gb: - devices: all mig-enabled: true mig-devices: "1g.6gb": 4 all-1g.6gb.me: - devices: all mig-enabled: true mig-devices: "1g.6gb+me": 1 all-2g.12gb: - devices: all mig-enabled: true mig-devices: "2g.12gb": 2 all-2g.12gb.me: - devices: all mig-enabled: true mig-devices: "2g.12gb+me": 1 all-4g.24gb: - devices: all mig-enabled: true mig-devices: "4g.24gb": 1 # PG506-96GB all-1g.12gb: - devices: all mig-enabled: true mig-devices: "1g.12gb": 7 all-2g.24gb: - devices: all mig-enabled: true mig-devices: "2g.24gb": 3 all-3g.48gb: - devices: all mig-enabled: true mig-devices: "3g.48gb": 2 all-7g.96gb: - devices: all mig-enabled: true mig-devices: "7g.96gb": 1 # A100-40GB, A100-80GB, A800-40GB, A800-80GB, A30-24GB, PG506-96GB all-balanced: # A100-40GB, A800-40GB - device-filter: ["0x20B010DE", "0x20B110DE", "0x20F110DE", "0x20F610DE"] devices: all mig-enabled: true mig-devices: "1g.5gb": 2 "2g.10gb": 1 "3g.20gb": 1 # A100-80GB, A800-80GB - device-filter: ["0x20B210DE", "0x20B510DE", "0x20F310DE", "0x20F510DE"] devices: all mig-enabled: true mig-devices: "1g.10gb": 2 "2g.20gb": 1 "3g.40gb": 1 # A30-24GB - device-filter: "0x20B710DE" devices: all mig-enabled: true mig-devices: "1g.6gb": 2 "2g.12gb": 1 # PG506-96GB - device-filter: "0x20B610DE" devices: all mig-enabled: true mig-devices: "1g.12gb": 2 "2g.24gb": 1 "3g.48gb": 1 NVIDIA-mig-parted-47bc938/deployments/container/reconfigure-mig.sh000077500000000000000000000564561520540370700250510ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. WITH_REBOOT="false" WITH_SHUTDOWN_HOST_GPU_CLIENTS="false" HOST_ROOT_MOUNT="" HOST_NVIDIA_DIR="" HOST_MIG_MANAGER_STATE_FILE="" HOST_GPU_CLIENT_SERVICES="" HOST_KUBELET_SERVICE="" NODE_NAME="" MIG_CONFIG_FILE="" SELECTED_MIG_CONFIG="" DEFAULT_GPU_CLIENTS_NAMESPACE="" CDI_ENABLED="false" DRIVER_ROOT="" DRIVER_ROOT_CTR_PATH="" DEV_ROOT="" DEV_ROOT_CTR_PATH="" DRIVER_LIBRARY_PATH="" NVIDIA_SMI_PATH="" NVIDIA_CDI_HOOK_PATH="" export SYSTEMD_LOG_LEVEL="info" function usage() { echo "USAGE:" echo " ${0} -h " echo " ${0} -n -f -c -p [-e -t -a -b -j -l -q -s ] [ -m -i -o -g -k -r -s ]" echo "" echo "OPTIONS:" echo " -h Display this help message" echo " -r Automatically reboot the node if changing the MIG mode fails for any reason" echo " -d Automatically shutdown/restart any required host GPU clients across a MIG configuration" echo " -e Enable CDI support" echo " -n The kubernetes node to change the MIG configuration on" echo " -f The mig-parted configuration file" echo " -c The selected mig-parted configuration to apply to the node" echo " -m Container path where host root directory is mounted" echo " -i Host path of the directory where NVIDIA managed software directory is typically located" echo " -o Host path where the systemd mig-manager state file is located" echo " -g Comma separated list of host systemd services to shutdown/restart across a MIG reconfiguration" echo " -k Name of the host's 'kubelet' systemd service which may need to be shutdown/restarted across a MIG mode reconfiguration" echo " -p Default name of the Kubernetes Namespace in which the GPU client Pods are installed in" echo " -t Root path to the NVIDIA driver installation" echo " -a Root path to the NVIDIA driver installation mounted in the container" echo " -b Root path to the NVIDIA device nodes" echo " -j Root path to the NVIDIA device nodes mounted in the container" echo " -l Path to libnvidia-ml.so.1 in the container" echo " -q Path to nvidia-smi in the container" echo " -s Path to nvidia-cdi-hook on the host" } while getopts "hrden:f:c:m:i:o:g:k:p:t:a:b:j:l:q:s:" opt; do case ${opt} in h ) # process option h usage; exit 0 ;; r ) # process option r WITH_REBOOT="true" ;; d ) # process option d WITH_SHUTDOWN_HOST_GPU_CLIENTS="true" ;; e) # process option e CDI_ENABLED="true" ;; n ) # process option n NODE_NAME=${OPTARG} ;; f ) # process option f MIG_CONFIG_FILE=${OPTARG} ;; c ) # process option c SELECTED_MIG_CONFIG=${OPTARG} ;; m ) # process option m HOST_ROOT_MOUNT=${OPTARG} ;; i ) # process option i HOST_NVIDIA_DIR=${OPTARG} ;; o ) # process option o HOST_MIG_MANAGER_STATE_FILE=${OPTARG} ;; g ) # process option g HOST_GPU_CLIENT_SERVICES=${OPTARG} ;; k ) # process option k HOST_KUBELET_SERVICE=${OPTARG} ;; p ) # process option p DEFAULT_GPU_CLIENTS_NAMESPACE=${OPTARG} ;; t ) # process option t DRIVER_ROOT=${OPTARG} ;; a ) # process option a DRIVER_ROOT_CTR_PATH=${OPTARG} ;; b ) # process option b DEV_ROOT=${OPTARG} ;; j ) # process option j DEV_ROOT_CTR_PATH=${OPTARG} ;; l ) # process option l DRIVER_LIBRARY_PATH=${OPTARG} ;; q ) # process option q NVIDIA_SMI_PATH=${OPTARG} ;; s ) # process option s NVIDIA_CDI_HOOK_PATH=${OPTARG} ;; \? ) echo "Usage: ${0} -n -f -c -p [-e -t -a -b -j -l -q -s ] [ -m -i -o -g -k -r -s ]" ;; esac done if [ "${NODE_NAME}" = "" ]; then echo "ERROR: missing -n flag" usage; exit 1 fi if [ "${MIG_CONFIG_FILE}" = "" ]; then echo "Error: missing -f flag" usage; exit 1 fi if [ "${SELECTED_MIG_CONFIG}" = "" ]; then echo "Error: missing -c flag" usage; exit 1 fi if [ "${DEFAULT_GPU_CLIENTS_NAMESPACE}" = "" ]; then echo "Error: missing -p flag" usage; exit 1 fi if [ "${CDI_ENABLED}" = "true" ]; then if [ "${DRIVER_ROOT}" = "" ]; then echo "Error: missing -t flag" usage; exit 1 fi if [ "${DRIVER_ROOT_CTR_PATH}" = "" ]; then echo "Error: missing -a flag" usage; exit 1 fi if [ "${DEV_ROOT}" == "" ]; then DEV_ROOT="${DRIVER_ROOT}" fi if [ "${DEV_ROOT_CTR_PATH}" == "" ]; then DEV_ROOT_CTR_PATH="${DRIVER_ROOT_CTR_PATH}" fi if [ "${DRIVER_ROOT_CTR_PATH}" != "${DEV_ROOT_CTR_PATH}" ]; then if [ "${DRIVER_LIBRARY_PATH}" = "" ]; then echo "Error: missing -l flag" usage; exit 1 fi if [ "${NVIDIA_SMI_PATH}" = "" ]; then echo "Error: missing -q flag" usage; exit 1 fi fi if [ "${NVIDIA_CDI_HOOK_PATH}" = "" ]; then echo "Error: missing -s flag" usage; exit 1 fi fi HOST_GPU_CLIENT_SERVICES=(${HOST_GPU_CLIENT_SERVICES//,/ }) HOST_GPU_CLIENT_SERVICES_STOPPED=() if [ "${WITH_SHUTDOWN_HOST_GPU_CLIENTS}" = "true" ]; then mkdir -p "${HOST_ROOT_MOUNT}/${HOST_NVIDIA_DIR}/mig-manager/" cp "$(which nvidia-mig-parted)" "${HOST_ROOT_MOUNT}/${HOST_NVIDIA_DIR}/mig-manager/" cp "${MIG_CONFIG_FILE}" "${HOST_ROOT_MOUNT}/${HOST_NVIDIA_DIR}/mig-manager/config.yaml" shopt -s expand_aliases alias nvidia-mig-parted="chroot ${HOST_ROOT_MOUNT} ${HOST_NVIDIA_DIR}/mig-manager/nvidia-mig-parted" MIG_CONFIG_FILE="${HOST_NVIDIA_DIR}/mig-manager/config.yaml" fi function __set_state_and_exit() { local state="${1}" local exit_code="${2}" if [ "${WITH_SHUTDOWN_HOST_GPU_CLIENTS}" = "true" ]; then if [ "${NO_RESTART_HOST_SYSTEMD_SERVICES_ON_EXIT}" != "true" ]; then echo "Restarting any GPU clients previously shutdown on the host by restarting their systemd services" host_start_systemd_services if [ "${?}" != "0" ]; then echo "Unable to restart host systemd services" exit_code=1 fi fi fi if [ "${NO_RESTART_K8S_DAEMONSETS_ON_EXIT}" != "true" ]; then echo "Restarting any GPU clients previously shutdown in Kubernetes by reenabling their component-specific nodeSelector labels" kubectl label --overwrite \ node ${NODE_NAME} \ nvidia.com/gpu.deploy.device-plugin=$(maybe_set_true ${PLUGIN_DEPLOYED}) \ nvidia.com/gpu.deploy.gpu-feature-discovery=$(maybe_set_true ${GFD_DEPLOYED}) \ nvidia.com/gpu.deploy.dcgm-exporter=$(maybe_set_true ${DCGM_EXPORTER_DEPLOYED}) \ nvidia.com/gpu.deploy.dcgm=$(maybe_set_true ${DCGM_DEPLOYED}) if [ "${?}" != "0" ]; then echo "Unable to bring up GPU client pods by setting their daemonset labels" exit_code=1 fi fi echo "Changing the 'nvidia.com/mig.config.state' node label to '${state}'" kubectl label --overwrite \ node ${NODE_NAME} \ nvidia.com/mig.config.state="${state}" if [ "${?}" != "0" ]; then echo "Unable to set 'nvidia.com/mig.config.state' to \'${state}\'" echo "Exiting with incorrect value in 'nvidia.com/mig.config.state'" exit_code=1 fi exit ${exit_code} } function exit_success() { __set_state_and_exit "success" 0 } function exit_failed() { __set_state_and_exit "failed" 1 } # Only return 'paused-*' if the value passed in is != 'false'. It should only # be 'false' if some external entity has forced it to this value, at which point # we want to honor it's existing value and not change it. function maybe_set_paused() { local current_value="${1}" if [ "${current_value}" = "false" ]; then echo "false" else echo "paused-for-mig-change" fi } # Only return 'true' if the value passed in is != 'false'. It should only # be 'false' if some external entity has forced it to this value, at which point # we want to honor it's existing value and not change it. function maybe_set_true() { local current_value="${1}" if [ "${current_value}" = "false" ]; then echo "false" else echo "true" fi } function host_stop_systemd_services() { for s in ${HOST_GPU_CLIENT_SERVICES[@]}; do # If the service is "active"" we will attempt to shut it down and (if # successful) we will track it to restart it later. chroot ${HOST_ROOT_MOUNT} systemctl -q is-active "${s}" if [ "${?}" = "0" ]; then echo "Stopping "${s}" (active, will-restart)" chroot ${HOST_ROOT_MOUNT} systemctl stop "${s}" if [ "${?}" != "0" ]; then return 1 fi HOST_GPU_CLIENT_SERVICES_STOPPED=("${s}" ${HOST_GPU_CLIENT_SERVICES_STOPPED[@]}) continue fi # If the service is inactive, then we may or may not still want to track # it to restart it later. The logic below decides when we should or not. local err="$(chroot ${HOST_ROOT_MOUNT} systemctl -q is-enabled "${s}" 2>&1)" if [ "${err}" != "" ]; then echo "Skipping "${s}" (no-exist)" continue fi chroot ${HOST_ROOT_MOUNT} systemctl -q is-failed "${s}" if [ "${?}" = "0" ]; then echo "Skipping "${s}" (is-failed, will-restart)" HOST_GPU_CLIENT_SERVICES_STOPPED=("${s}" ${HOST_GPU_CLIENT_SERVICES_STOPPED[@]}) continue fi chroot ${HOST_ROOT_MOUNT} systemctl -q is-enabled "${s}" if [ "${?}" != "0" ]; then echo "Skipping "${s}" (disabled)" continue fi local type="$(chroot ${HOST_ROOT_MOUNT} systemctl show --property=Type "${s}")" if [ "${type}" = "Type=oneshot" ]; then echo "Skipping "${s}" (inactive, oneshot, no-restart)" continue fi echo "Skipping "${s}" (inactive, will-restart)" HOST_GPU_CLIENT_SERVICES_STOPPED=("${s}" ${HOST_GPU_CLIENT_SERVICES_STOPPED[@]}) done return 0 } function host_start_systemd_services() { local ret=0 # If HOST_GPU_CLIENT_SERVICES_STOPPED is empty, then it's possible that # host_stop_systemd_services was never called, so let's double check to see # if there's anything we should actually restart. if [ "${#HOST_GPU_CLIENT_SERVICES_STOPPED[@]}" = "0" ]; then for s in ${HOST_GPU_CLIENT_SERVICES[@]}; do chroot ${HOST_ROOT_MOUNT} systemctl -q is-active "${s}" if [ "${?}" = "0" ]; then continue fi local err="$(chroot ${HOST_ROOT_MOUNT} systemctl -q is-enabled "${s}" 2>&1)" if [ "${err}" != "" ]; then continue fi chroot ${HOST_ROOT_MOUNT} systemctl -q is-failed "${s}" if [ "${?}" = "0" ]; then HOST_GPU_CLIENT_SERVICES_STOPPED=("${s}" ${HOST_GPU_CLIENT_SERVICES_STOPPED[@]}) continue fi chroot ${HOST_ROOT_MOUNT} systemctl -q is-enabled "${s}" if [ "${?}" != "0" ]; then continue fi local type="$(chroot ${HOST_ROOT_MOUNT} systemctl show --property=Type "${s}")" if [ "${type}" = "Type=oneshot" ]; then continue fi HOST_GPU_CLIENT_SERVICES_STOPPED=("${s}" ${HOST_GPU_CLIENT_SERVICES_STOPPED[@]}) done fi for s in ${HOST_GPU_CLIENT_SERVICES_STOPPED[@]}; do echo "Starting "${s}"" chroot ${HOST_ROOT_MOUNT} systemctl start "${s}" if [ "${?}" != "0" ]; then echo "Error Starting "${s}": skipping, but continuing..." ret=1 fi done return ${ret} } function host_persist_config() { local config=$(cat << EOF [Service] Environment="MIG_PARTED_SELECTED_CONFIG=${SELECTED_MIG_CONFIG}" EOF ) chroot ${HOST_ROOT_MOUNT} bash -c " echo \"${config}\" > ${HOST_MIG_MANAGER_STATE_FILE}; systemctl daemon-reload" if [ "${?}" != "0" ]; then return 1 fi return 0 } function run_nvidia_smi() { if [ "${DRIVER_ROOT_CTR_PATH}" = "${DEV_ROOT_CTR_PATH}" ]; then chroot ${DRIVER_ROOT_CTR_PATH} nvidia-smi >/dev/null if [ "${?}" != "0" ]; then return 1 fi return 0 fi LD_PRELOAD=$DRIVER_LIBRARY_PATH chroot $HOST_ROOT_MOUNT $NVIDIA_SMI_PATH >/dev/null 2>&1 if [ "${?}" != "0" ]; then return 1 fi return 0 } echo "Getting current value of the 'nvidia.com/gpu.deploy.device-plugin' node label" PLUGIN_DEPLOYED=$(kubectl get nodes ${NODE_NAME} -o=jsonpath='{$.metadata.labels.nvidia\.com/gpu\.deploy\.device-plugin}') if [ "${?}" != "0" ]; then echo "Unable to get the value of the 'nvidia.com/gpu.deploy.device-plugin' label" exit_failed fi echo "Current value of 'nvidia.com/gpu.deploy.device-plugin=${PLUGIN_DEPLOYED}'" echo "Getting current value of the 'nvidia.com/gpu.deploy.gpu-feature-discovery' node label" GFD_DEPLOYED=$(kubectl get nodes ${NODE_NAME} -o=jsonpath='{$.metadata.labels.nvidia\.com/gpu\.deploy\.gpu-feature-discovery}') if [ "${?}" != "0" ]; then echo "Unable to get the value of the 'nvidia.com/gpu.deploy.gpu-feature-discovery' label" exit_failed fi echo "Current value of 'nvidia.com/gpu.deploy.gpu-feature-discovery=${GFD_DEPLOYED}'" echo "Getting current value of the 'nvidia.com/gpu.deploy.dcgm-exporter' node label" DCGM_EXPORTER_DEPLOYED=$(kubectl get nodes ${NODE_NAME} -o=jsonpath='{$.metadata.labels.nvidia\.com/gpu\.deploy\.dcgm-exporter}') if [ "${?}" != "0" ]; then echo "Unable to get the value of the 'nvidia.com/gpu.deploy.dcgm-exporter' label" exit_failed fi echo "Current value of 'nvidia.com/gpu.deploy.dcgm-exporter=${DCGM_EXPORTER_DEPLOYED}'" echo "Getting current value of the 'nvidia.com/gpu.deploy.dcgm' node label" DCGM_DEPLOYED=$(kubectl get nodes ${NODE_NAME} -o=jsonpath='{$.metadata.labels.nvidia\.com/gpu\.deploy\.dcgm}') if [ "${?}" != "0" ]; then echo "Unable to get the value of the 'nvidia.com/gpu.deploy.dcgm' label" exit_failed fi echo "Current value of 'nvidia.com/gpu.deploy.dcgm=${DCGM_DEPLOYED}'" echo "Getting current value of the 'nvidia.com/gpu.deploy.nvsm' node label" NVSM_DEPLOYED=$(kubectl get nodes ${NODE_NAME} -o=jsonpath='{$.metadata.labels.nvidia\.com/gpu\.deploy\.nvsm}') if [ "${?}" != "0" ]; then echo "Unable to get the value of the 'nvidia.com/gpu.deploy.nvsm' label" exit_failed fi echo "Current value of 'nvidia.com/gpu.deploy.nvsm=${NVSM_DEPLOYED}'" echo "Asserting that the requested configuration is present in the configuration file" nvidia-mig-parted assert --valid-config -f ${MIG_CONFIG_FILE} -c ${SELECTED_MIG_CONFIG} if [ "${?}" != "0" ]; then echo "Unable to validate the selected MIG configuration" exit_failed fi echo "Getting current value of the 'nvidia.com/mig.config.state' node label" STATE=$(kubectl get node "${NODE_NAME}" -o=jsonpath='{.metadata.labels.nvidia\.com/mig\.config\.state}') if [ "${?}" != "0" ]; then echo "Unable to get the value of the 'nvidia.com/mig.config.state' label" exit_failed fi echo "Current value of 'nvidia.com/mig.config.state=${STATE}'" echo "Checking if the selected MIG config is currently applied or not" nvidia-mig-parted assert -f ${MIG_CONFIG_FILE} -c ${SELECTED_MIG_CONFIG} if [ "${?}" = "0" ]; then exit_success fi if [ "${HOST_ROOT_MOUNT}" != "" ] && [ "${HOST_MIG_MANAGER_STATE_FILE}" != "" ]; then if [ -f "${HOST_ROOT_MOUNT}/${HOST_MIG_MANAGER_STATE_FILE}" ]; then echo "Persisting ${SELECTED_MIG_CONFIG} to ${HOST_MIG_MANAGER_STATE_FILE}" host_persist_config if [ "${?}" != "0" ]; then echo "Unable to persist ${SELECTED_MIG_CONFIG} to ${HOST_MIG_MANAGER_STATE_FILE}" exit_failed fi fi fi echo "Checking if the MIG mode setting in the selected config is currently applied or not" echo "If the state is 'rebooting', we expect this to always return true" nvidia-mig-parted assert --mode-only -f ${MIG_CONFIG_FILE} -c ${SELECTED_MIG_CONFIG} if [ "${?}" != "0" ]; then if [ "${STATE}" = "rebooting" ]; then echo "MIG mode change did not take effect after rebooting" exit_failed fi if [ "${WITH_SHUTDOWN_HOST_GPU_CLIENTS}" = "true" ]; then HOST_GPU_CLIENT_SERVICES+=(${HOST_KUBELET_SERVICE}) fi MIG_MODE_CHANGE_REQUIRED="true" fi echo "Changing the 'nvidia.com/mig.config.state' node label to 'pending'" kubectl label --overwrite \ node ${NODE_NAME} \ nvidia.com/mig.config.state="pending" if [ "${?}" != "0" ]; then echo "Unable to set the value of 'nvidia.com/mig.config.state' to 'pending'" exit_failed fi echo "Shutting down all GPU clients in Kubernetes by disabling their component-specific nodeSelector labels" kubectl label --overwrite \ node ${NODE_NAME} \ nvidia.com/gpu.deploy.device-plugin=$(maybe_set_paused ${PLUGIN_DEPLOYED}) \ nvidia.com/gpu.deploy.gpu-feature-discovery=$(maybe_set_paused ${GFD_DEPLOYED}) \ nvidia.com/gpu.deploy.dcgm-exporter=$(maybe_set_paused ${DCGM_EXPORTER_DEPLOYED}) \ nvidia.com/gpu.deploy.dcgm=$(maybe_set_paused ${DCGM_DEPLOYED}) \ nvidia.com/gpu.deploy.nvsm=$(maybe_set_paused ${NVSM_DEPLOYED}) if [ "${?}" != "0" ]; then echo "Unable to tear down GPU client pods by setting their daemonset labels" exit_failed fi echo "Waiting for the device-plugin to shutdown" kubectl wait --for=delete pod \ --timeout=5m \ --field-selector "spec.nodeName=${NODE_NAME}" \ -n "${DEFAULT_GPU_CLIENTS_NAMESPACE}" \ -l app=nvidia-device-plugin-daemonset echo "Waiting for gpu-feature-discovery to shutdown" kubectl wait --for=delete pod \ --timeout=5m \ --field-selector "spec.nodeName=${NODE_NAME}" \ -n "${DEFAULT_GPU_CLIENTS_NAMESPACE}" \ -l app=gpu-feature-discovery echo "Waiting for dcgm-exporter to shutdown" kubectl wait --for=delete pod \ --timeout=5m \ --field-selector "spec.nodeName=${NODE_NAME}" \ -n "${DEFAULT_GPU_CLIENTS_NAMESPACE}" \ -l app=nvidia-dcgm-exporter echo "Waiting for dcgm to shutdown" kubectl wait --for=delete pod \ --timeout=5m \ --field-selector "spec.nodeName=${NODE_NAME}" \ -n "${DEFAULT_GPU_CLIENTS_NAMESPACE}" \ -l app=nvidia-dcgm echo "Removing the cuda-validator pod" kubectl delete pod \ --field-selector "spec.nodeName=${NODE_NAME}" \ -n "${DEFAULT_GPU_CLIENTS_NAMESPACE}" \ -l app=nvidia-cuda-validator echo "Removing the plugin-validator pod" kubectl delete pod \ --field-selector "spec.nodeName=${NODE_NAME}" \ -n "${DEFAULT_GPU_CLIENTS_NAMESPACE}" \ -l app=nvidia-device-plugin-validator if [ "${WITH_SHUTDOWN_HOST_GPU_CLIENTS}" = "true" ]; then echo "Shutting down all GPU clients on the host by stopping their systemd services" host_stop_systemd_services if [ "${?}" != "0" ]; then echo "Unable to shutdown GPU clients on host by stopping their systemd services" exit_failed fi if [ "${MIG_MODE_CHANGE_REQUIRED}" = "true" ]; then # This is a hack to accommodate for observed behaviour. Once we shut # down the above services, there appears to be some settling time # before we are able to reconnect to the fabric-manager to run the # required GPU reset when changing MIG mode. It is unknown why this # problem only appears when shutting down systemd services on the host # with pre-installed drivers, and not when running with operator # managed drivers. sleep 30 fi fi echo "Applying the MIG mode change from the selected config to the node (and double checking it took effect)" echo "If the -r option was passed, the node will be automatically rebooted if this is not successful" nvidia-mig-parted -d apply --mode-only -f ${MIG_CONFIG_FILE} -c ${SELECTED_MIG_CONFIG} nvidia-mig-parted -d assert --mode-only -f ${MIG_CONFIG_FILE} -c ${SELECTED_MIG_CONFIG} if [ "${?}" != "0" ] && [ "${WITH_REBOOT}" = "true" ]; then echo "Changing the 'nvidia.com/mig.config.state' node label to 'rebooting'" kubectl label --overwrite \ node ${NODE_NAME} \ nvidia.com/mig.config.state="rebooting" if [ "${?}" != "0" ]; then echo "Unable to set the value of 'nvidia.com/mig.config.state' to 'rebooting'" echo "Exiting so as not to reboot multiple times unexpectedly" exit_failed fi chroot ${HOST_ROOT_MOUNT} reboot exit 0 fi echo "Applying the selected MIG config to the node" nvidia-mig-parted -d apply -f ${MIG_CONFIG_FILE} -c ${SELECTED_MIG_CONFIG} if [ "${?}" != "0" ]; then exit_failed fi if [ "${CDI_ENABLED}" = "true" ]; then echo "Running nvidia-smi" run_nvidia_smi if [ "${?}" != "0" ]; then echo "Failed to run nvidia-smi" exit_failed fi echo "Creating NVIDIA control device nodes" nvidia-ctk system create-device-nodes \ --control-devices \ --dev-root=${DEV_ROOT_CTR_PATH} if [ "${?}" != "0" ]; then exit_failed fi echo "Creating management CDI spec" nvidia-ctk cdi generate --mode=management \ --driver-root=${DRIVER_ROOT_CTR_PATH} \ --dev-root=${DEV_ROOT_CTR_PATH} \ --vendor="management.nvidia.com" \ --class="gpu" \ --nvidia-cdi-hook-path=${NVIDIA_CDI_HOOK_PATH} | \ nvidia-ctk cdi transform root \ --from=$DRIVER_ROOT_CTR_PATH \ --to=$DRIVER_ROOT \ --input="-" | \ nvidia-ctk cdi transform root \ --from=$DEV_ROOT_CTR_PATH \ --to=$DEV_ROOT \ --input="-" \ --output="/var/run/cdi/management.nvidia.com-gpu.yaml" if [ "${?}" != "0" ]; then exit_failed fi fi if [ "${WITH_SHUTDOWN_HOST_GPU_CLIENTS}" = "true" ]; then echo "Restarting all GPU clients previously shutdown on the host by restarting their systemd services" NO_RESTART_HOST_SYSTEMD_SERVICES_ON_EXIT=true host_start_systemd_services if [ "${?}" != "0" ]; then echo "Unable to restart GPU clients on host by restarting their systemd services" exit_failed fi fi echo "Restarting validator pod to re-run all validations" kubectl delete pod \ --field-selector "spec.nodeName=${NODE_NAME}" \ -n "${DEFAULT_GPU_CLIENTS_NAMESPACE}" \ -l app=nvidia-operator-validator echo "Restarting all GPU clients previously shutdown in Kubernetes by reenabling their component-specific nodeSelector labels" NO_RESTART_K8S_DAEMONSETS_ON_EXIT=true kubectl label --overwrite \ node ${NODE_NAME} \ nvidia.com/gpu.deploy.device-plugin=$(maybe_set_true ${PLUGIN_DEPLOYED}) \ nvidia.com/gpu.deploy.gpu-feature-discovery=$(maybe_set_true ${GFD_DEPLOYED}) \ nvidia.com/gpu.deploy.dcgm-exporter=$(maybe_set_true ${DCGM_EXPORTER_DEPLOYED}) \ nvidia.com/gpu.deploy.dcgm=$(maybe_set_true ${DCGM_DEPLOYED}) \ nvidia.com/gpu.deploy.nvsm=$(maybe_set_true ${NVSM_DEPLOYED}) if [ "${?}" != "0" ]; then echo "Unable to bring up GPU client components by setting their daemonset labels" exit_failed fi exit_success NVIDIA-mig-parted-47bc938/deployments/devel/000077500000000000000000000000001520540370700205255ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/devel/Dockerfile000066400000000000000000000017601520540370700225230ustar00rootroot00000000000000# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This Dockerfile is also used to define the golang version used in this project # This allows dependabot to manage this version in addition to other images. FROM golang:1.26.3 WORKDIR /work COPY * . RUN make install-tools # We need to set the /work directory as a safe directory. # This allows git commands to run in the container. RUN git config --file=/.gitconfig --add safe.directory /work NVIDIA-mig-parted-47bc938/deployments/devel/Makefile000066400000000000000000000023131520540370700221640ustar00rootroot00000000000000# Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. download: @echo Download go.mod dependencies @go mod download install-tools: download @echo Installing tools from tools.go @cat tools.go | grep _ | awk -F'"' '{print $$2}' | xargs -tI % go install % DOCKER ?= docker -include $(CURDIR)/versions.mk DOCKERFILE_DEVEL = deployments/devel/Dockerfile DOCKERFILE_CONTEXT = deployments/devel .PHONY: .build-image .build-image: $(DOCKER) build \ --progress=plain \ --build-arg GOLANG_VERSION=$(GOLANG_VERSION) \ --tag $(BUILDIMAGE) \ -f $(DOCKERFILE_DEVEL) \ $(DOCKERFILE_CONTEXT) modules: go mod tidy go mod verify check-modules: modules git diff --quiet HEAD -- go.mod go.sum NVIDIA-mig-parted-47bc938/deployments/devel/go.mod000066400000000000000000000027711520540370700216420ustar00rootroot00000000000000module devel go 1.26 require ( github.com/NVIDIA/nvidia-container-toolkit v1.19.1 github.com/matryer/moq v0.7.1 ) require ( cyphar.com/go-pathrs v0.2.4 // indirect github.com/NVIDIA/go-nvlib v0.9.1-0.20251202135446-d0f42ba016dd // indirect github.com/NVIDIA/go-nvml v0.13.0-1.0.20260212130905-92cf8c963449 // indirect github.com/cyphar/filepath-securejoin v0.6.1 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/moby/sys/capability v0.4.0 // indirect github.com/moby/sys/mountinfo v0.7.2 // indirect github.com/moby/sys/reexec v0.1.0 // indirect github.com/moby/sys/symlink v0.3.0 // indirect github.com/opencontainers/cgroups v0.0.6 // indirect github.com/opencontainers/runc v1.4.2 // indirect github.com/opencontainers/runtime-spec v1.3.0 // indirect github.com/opencontainers/runtime-tools v0.9.1-0.20251114084447-edf4cb3d2116 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/prometheus/procfs v0.19.2 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/urfave/cli-altsrc/v3 v3.1.0 // indirect github.com/urfave/cli/v3 v3.6.2 // indirect golang.org/x/mod v0.33.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/tools v0.41.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect tags.cncf.io/container-device-interface v1.1.0 // indirect tags.cncf.io/container-device-interface/specs-go v1.1.0 // indirect ) NVIDIA-mig-parted-47bc938/deployments/devel/go.sum000066400000000000000000000166741520540370700216760ustar00rootroot00000000000000cyphar.com/go-pathrs v0.2.4 h1:iD/mge36swa1UFKdINkr1Frkpp6wZsy3YYEildj9cLY= cyphar.com/go-pathrs v0.2.4/go.mod h1:y8f1EMG7r+hCuFf/rXsKqMJrJAUoADZGNh5/vZPKcGc= github.com/NVIDIA/go-nvlib v0.9.1-0.20251202135446-d0f42ba016dd h1:MC1w/VYuo9Zt0se4SSx9BVid4a46ai+voN3knRvVWjE= github.com/NVIDIA/go-nvlib v0.9.1-0.20251202135446-d0f42ba016dd/go.mod h1:7mzx9FSdO9fXWP9NKuZmWkCwhkEcSWQFe2tmFwtLb9c= github.com/NVIDIA/go-nvml v0.13.0-1.0.20260212130905-92cf8c963449 h1:UrArFAaPhj9av2yzEN35CvzWw68BeQjp2MaQFUIoJSU= github.com/NVIDIA/go-nvml v0.13.0-1.0.20260212130905-92cf8c963449/go.mod h1:ahi2psRYoa+wYUBIrZPRO+wJs9lcvMhxSSkjjvsJJNQ= github.com/NVIDIA/nvidia-container-toolkit v1.19.1 h1:1sV4ddFrBccqL9Lbzcdu50w2j5FhyNJpN5hXTfCsjps= github.com/NVIDIA/nvidia-container-toolkit v1.19.1/go.mod h1:yGsZ4s2lMjfE4r8/DMUPVpaFhRGkWvo2H++/Dy84nVc= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/cyphar/filepath-securejoin v0.6.1 h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE= github.com/cyphar/filepath-securejoin v0.6.1/go.mod h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/matryer/moq v0.7.1 h1:/QaXqMAdOrLqlshW2z7SMS21jDi7aVrbW0wJrR+hhJk= github.com/matryer/moq v0.7.1/go.mod h1:IabIiFkaKCyHxej25INgFR+fnOxSZFMv2LYrU+ioyDs= github.com/moby/sys/capability v0.4.0 h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCndZoHk= github.com/moby/sys/capability v0.4.0/go.mod h1:4g9IK291rVkms3LKCDOoYlnV8xKwoDTpIrNEE35Wq0I= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/moby/sys/reexec v0.1.0 h1:RrBi8e0EBTLEgfruBOFcxtElzRGTEUkeIFaVXgU7wok= github.com/moby/sys/reexec v0.1.0/go.mod h1:EqjBg8F3X7iZe5pU6nRZnYCMUTXoxsjiIfHup5wYIN8= github.com/moby/sys/symlink v0.3.0 h1:GZX89mEZ9u53f97npBy4Rc3vJKj7JBDj/PN2I22GrNU= github.com/moby/sys/symlink v0.3.0/go.mod h1:3eNdhduHmYPcgsJtZXW1W4XUJdZGBIkttZ8xKqPUJq0= github.com/opencontainers/cgroups v0.0.6 h1:tfZFWTIIGaUUFImTyuTg+Mr5x8XRiSdZESgEBW7UxuI= github.com/opencontainers/cgroups v0.0.6/go.mod h1:oWVzJsKK0gG9SCRBfTpnn16WcGEqDI8PAcpMGbqWxcs= github.com/opencontainers/runc v1.4.2 h1:/AEjjXuVH9lTRl9ZyUFQj7oWBM7Xv00qFV6Vx9q5N3o= github.com/opencontainers/runc v1.4.2/go.mod h1:ufk5PTTsy5pnGBAvTh50e+eqGk01pYH2YcVxh557Qlk= github.com/opencontainers/runtime-spec v1.3.0 h1:YZupQUdctfhpZy3TM39nN9Ika5CBWT5diQ8ibYCRkxg= github.com/opencontainers/runtime-spec v1.3.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.9.1-0.20251114084447-edf4cb3d2116 h1:tAKu3NkKWZYpqBSOJKwTxT1wIGueiF7gcmcNgr5pNTY= github.com/opencontainers/runtime-tools v0.9.1-0.20251114084447-edf4cb3d2116/go.mod h1:DKDEfzxvRkoQ6n9TGhxQgg2IM1lY4aM0eaQP4e3oElw= github.com/opencontainers/selinux v1.13.0 h1:Zza88GWezyT7RLql12URvoxsbLfjFx988+LGaWfbL84= github.com/opencontainers/selinux v1.13.0/go.mod h1:XxWTed+A/s5NNq4GmYScVy+9jzXhGBVEOAyucdRUY8s= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/urfave/cli-altsrc/v3 v3.1.0 h1:6E5+kXeAWmRxXlPgdEVf9VqVoTJ2MJci0UMpUi/w/bA= github.com/urfave/cli-altsrc/v3 v3.1.0/go.mod h1:VcWVTGXcL3nrXUDJZagHAeUX702La3PKeWav7KpISqA= github.com/urfave/cli/v3 v3.6.2 h1:lQuqiPrZ1cIz8hz+HcrG0TNZFxU70dPZ3Yl+pSrH9A8= github.com/urfave/cli/v3 v3.6.2/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= tags.cncf.io/container-device-interface v1.1.0 h1:RnxNhxF1JOu6CJUVpetTYvrXHdxw9j9jFYgZpI+anSY= tags.cncf.io/container-device-interface v1.1.0/go.mod h1:76Oj0Yqp9FwTx/pySDc8Bxjpg+VqXfDb50cKAXVJ34Q= tags.cncf.io/container-device-interface/specs-go v1.1.0 h1:QRZVeAceQM+zTZe12eyfuJuuzp524EKYwhmvLd+h+yQ= tags.cncf.io/container-device-interface/specs-go v1.1.0/go.mod h1:u86hoFWqnh3hWz3esofRFKbI261bUlvUfLKGrDhJkgQ= NVIDIA-mig-parted-47bc938/deployments/devel/tools.go000066400000000000000000000014401520540370700222130ustar00rootroot00000000000000//go:build tools // +build tools /** # Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package main // Define the tooling required to build the device plugin. import ( _ "github.com/NVIDIA/nvidia-container-toolkit/cmd/nvidia-ctk" _ "github.com/matryer/moq" ) NVIDIA-mig-parted-47bc938/deployments/systemd/000077500000000000000000000000001520540370700211165ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/systemd/README.md000066400000000000000000000227161520540370700224050ustar00rootroot00000000000000# The `nvidia-mig-manager.service` The `nvidia-mig-manager.service` is a `systemd` service and a set of support hooks that extend `nvidia-mig-parted` to provide the following features: 1. When applying a MIG mode change, shutdown (and restart) a *user-specific* set of NVIDIA driver clients so that a GPU reset can be applied to persist the MIG mode setting. A list of common clients is provided by default, but users can customize this list to their own particular needs. Please see the provided `hooks.sh` and `hooks.yaml` files for details on what is run and how to change it. 1. When applying a MIG device configuration, shutdown (and restart) a *user-specific* set of services so that they will pick up any MIG device changes once they come back online. Common services such as the `k8s-device-plugin`, `gpu-feature-discovery` and `dcgm-exporter` are provided by default, but this list can be customized as needed. Please see the provided `hooks.sh` and `hooks.yaml` files for details on what is run and how to change it. 1. Persist MIG device configurations across node reboots. So long as the provided `hooks.yaml` file is used when performing any desired MIG configurations, those changes will be reapplied every time the node reboots. 1. Apply MIG mode changes ***without*** requiring the NVIDIA driver to be installed or loaded. Situations where this is important are outlined in more detail [below](#switching-mig-mode-without-the-nvidia-driver-loaded). 1. When a node is first coming online, automatically reboot it (if required) to force MIG mode changes to take effect when GPU reset is unavailable (i.e. under GPU Passthrough virtualization). A failsafe is in place to ensure that such reboots only happen *once* without manual interventions if things go wrong. To install the `nvidia-mig-manager.service` simply run `./install.sh` from the directory where this README is located. **Note:** At the moment, `docker` is a prerequisite to this installation because it runs a container with `go` in it to download and build the latest `nvidia-mig-parted` before installing it. We plan to relax this requirement in the near future. **Note:** When the `nvidia-mig-manager.service` is installed, an additional target, `nvidia-gpu-reset.target` is also installed. This new target is used to ensure the `nvidia-mig-manager.service` is started after the `nvidia-fabricmanager.service` and `nvidia-persistenced.service`. In addition, this target allows applications like dcgm and nvsm to be started only after the `nvidia-mig-manager.service` has started. The following files will be added as part of this installation: * `/usr/bin/nvidia-mig-parted` * `/usr/lib/systemd/system/nvidia-mig-manager.service` * `/usr/lib/systemd/system/nvidia-gpu-reset.target` * `/etc/systemd/system/nvidia-mig-manager.service.d/override.conf` * `/etc/profile.d/nvidia-mig-parted.sh` * `/etc/nvidia-mig-manager/utils.sh` * `/etc/nvidia-mig-manager/service.sh` * `/etc/nvidia-mig-manager/hooks.sh` * `/etc/nvidia-mig-manager/hooks.yaml` * `/etc/nvidia-mig-manager/config.yaml` The `config.yaml` file is auto-generated from GPU hardware on every boot. Users who want to provide a custom MIG configuration can set the `MIG_PARTED_CONFIG_FILE` environment variable to point to their own config file. Users may also need to customize the `hooks.sh` and `hooks.yaml` files to add any user-specific services that need to be shutdown and restarted when applying a MIG configuration. Once installed, new MIG configurations can be applied at any time by running `nvidia-mig-parted apply` and pointing it at the `config.yaml` and `hooks.yaml` files in `/etc/nvidia-mig-manager`. By default, environment variables for the config and hooks files are set in `/etc/profile.d/nvidia-mig-parted.sh` as part of this installation. Meaning that once this service is installed, anytime you login, these variables should be set for you: ``` export MIG_PARTED_CONFIG_FILE=/etc/nvidia-mig-manager/config.yaml export MIG_PARTED_HOOKS_FILE=/etc/nvidia-mig-manager/hooks.yaml ``` **NOTE:** The files in `/etc/profile.d/` are not sourced when running commands under `sudo`. If elevated permissions are required to run `nvidia-mig-manager` the `--config-file` (`-f`) and `--hooks-file` (`-k`) options must be explicitly specified as follows: ```bash nvidia-mig-parted apply -f /etc/nvidia-mig-manager/config.yaml -k /etc/nvidia-mig-manager/hooks.yaml ``` (An alternative is to ensure that the required environment variables are passed to `sudo` by using `sudo -E` instead) As noted above, these hooks do everything they can to ensure that the services are started and stopped so that the new configuration is applied cleanly. If for some reason the config just won't seem to apply (because the full set of services that need to be stopped / started are too difficult to enumerate), the node can always be rebooted (as a *very* last resort), at which point the config should now be in place. Below are some examples of how one might run this in a production setting: ``` # Using ansible - name: Apply a new MIG configuration environment: MIG_PARTED_DEBUG: false MIG_PARTED_HOOKS_FILE: /etc/nvidia-mig-manager/hooks.yaml MIG_PARTED_CONFIG_FILE: /etc/nvidia-mig-manager/config.yaml MIG_PARTED_SELECTED_CONFIG: all-1g.5gb command: /usr/bin/nvidia-mig-parted apply # Using docker docker run \ --rm \ --privileged \ --ipc=host \ --pid=host \ -v /:/host \ -e MIG_PARTED_DEBUG=false \ -e MIG_PARTED_HOOKS_FILE=/etc/nvidia-mig-manager/hooks.yaml \ -e MIG_PARTED_CONFIG_FILE=/etc/nvidia-mig-manager/config.yaml \ -e MIG_PARTED_SELECTED_CONFIG=all-1g.5gb \ library/alpine \ sh -c "exec chroot /host /usr/bin/nvidia-mig-parted apply" # Using kubernetes cat </dev/null 2>&1 && pwd)" source ${CURRDIR}/utils.sh driver_services=( nvsm.service nvidia-dcgm.service ) k8s_services=( dcgm-exporter.service kubelet.service ) k8s_pod_images=( k8s-device-plugin gpu-feature-discovery dcgm-exporter ) function apply-start() { local selected_config="${1}" nvidia-mig-manager::service::persist_config_across_reboot ${selected_config} if [ "${?}" != "0" ]; then return 1 fi return 0 } function pre-apply-mode() { stop_k8s_services if [ "${?}" != "0" ]; then return 1 fi stop_k8s_pods if [ "${?}" != "0" ]; then return 1 fi stop_driver_services if [ "${?}" != "0" ]; then return 1 fi return 0 } function pre-apply-config() { stop_k8s_services if [ "${?}" != "0" ]; then return 1 fi stop_k8s_pods if [ "${?}" != "0" ]; then return 1 fi return 0 } function apply-exit() { start_driver_services if [ "${?}" != "0" ]; then return 1 fi start_k8s_services if [ "${?}" != "0" ]; then return 1 fi } function stop_driver_services() { local services=() nvidia-mig-manager::service::reverse_array \ driver_services \ services nvidia-mig-manager::service::stop_systemd_services services return ${?} } function start_driver_services() { nvidia-mig-manager::service::start_systemd_services driver_services return ${?} } function stop_k8s_services() { local services=() nvidia-mig-manager::service::reverse_array \ k8s_services \ services nvidia-mig-manager::service::stop_systemd_services services return ${?} } function start_k8s_services() { nvidia-mig-manager::service::start_systemd_services k8s_services return ${?} } function stop_k8s_pods() { nvidia-mig-manager::service::kill_k8s_containers_via_docker_by_image k8s_pod_images if [ "${?}" != "0" ]; then return 1 fi nvidia-mig-manager::service::kill_k8s_containers_via_containerd_by_image k8s_pod_images if [ "${?}" != "0" ]; then return 1 fi return 0 } # refresh-cdi triggers the nvidia-cdi-refresh service to regenerate CDI # specifications, making updated GPU devices available to container runtimes. function refresh-cdi() { # Check if nvidia-cdi-refresh.service exists if systemctl list-unit-files nvidia-cdi-refresh.service --quiet; then echo "Found nvidia-cdi-refresh.service, calling systemctl..." >&2 if ! systemctl restart nvidia-cdi-refresh.service; then echo "Error: Failed to start nvidia-cdi-refresh.service" >&2 fi fi } NVIDIA-mig-parted-47bc938/deployments/systemd/install.sh000077500000000000000000000060561520540370700231320ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. DEPLOYMENT_SYSTEMD_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" HACK_DIR=${DEPLOYMENT_SYSTEMD_DIR}/../../hack # Extract the golang version from the script. . ${HACK_DIR}/golang-version.sh : ${DOCKER:=docker} SERVICE_ROOT="nvidia-mig-manager" SERVICE_NAME="${SERVICE_ROOT}.service" GPU_TARGET_ROOT="nvidia-gpu-reset" GPU_TARGET_NAME="${GPU_TARGET_ROOT}.target" MIG_PARTED_NAME="nvidia-mig-parted" MIG_PARTED_GO_GET_PATH="github.com/NVIDIA/mig-parted/cmd/${MIG_PARTED_NAME}" BINARY_DIR="/usr/bin" SYSTEMD_DIR="/usr/lib/systemd/system" DATA_DIR="/var/lib/${SERVICE_ROOT}" CONFIG_DIR="/etc/${SERVICE_ROOT}" OVERRIDE_DIR="/etc/systemd/system/${SERVICE_NAME}.d" PROFILED_DIR="/etc/profile.d" mkdir -p ${BINARY_DIR} mkdir -p ${SYSTEMD_DIR} mkdir -p ${DATA_DIR} mkdir -p ${CONFIG_DIR} mkdir -p ${OVERRIDE_DIR} mkdir -p ${PROFILED_DIR} chmod a+rx ${BINARY_DIR} chmod a+rx ${SYSTEMD_DIR} chmod a+rx ${DATA_DIR} chmod a+rx ${CONFIG_DIR} chmod a+rx ${OVERRIDE_DIR} chmod a+rx ${PROFILED_DIR} ${DOCKER} run --rm \ -v ${BINARY_DIR}:/dest \ golang${GOLANG_VERSION:+":${GOLANG_VERSION}"} \ sh -c " go install $MIG_PARTED_GO_GET_PATH@latest mv /go/bin/nvidia-mig-parted /dest/nvidia-mig-parted " cp ${SERVICE_NAME} ${SYSTEMD_DIR} cp ${GPU_TARGET_NAME} ${SYSTEMD_DIR} cp ${MIG_PARTED_NAME}.sh ${PROFILED_DIR} cp override.conf ${OVERRIDE_DIR} cp service.sh ${CONFIG_DIR} cp utils.sh ${CONFIG_DIR} cp hooks.sh ${CONFIG_DIR} cp hooks-default.yaml ${CONFIG_DIR} cp hooks-minimal.yaml ${CONFIG_DIR} chmod a+r ${SYSTEMD_DIR}/${SERVICE_NAME} chmod a+r ${SYSTEMD_DIR}/${GPU_TARGET_NAME} chmod a+r ${PROFILED_DIR}/${MIG_PARTED_NAME}.sh chmod a+r ${OVERRIDE_DIR}/override.conf chmod a+r ${CONFIG_DIR}/service.sh chmod a+r ${CONFIG_DIR}/utils.sh chmod a+r ${CONFIG_DIR}/hooks.sh chmod a+r ${CONFIG_DIR}/hooks-default.yaml chmod a+r ${CONFIG_DIR}/hooks-minimal.yaml chmod ug+x ${CONFIG_DIR}/service.sh systemctl daemon-reload systemctl enable ${SERVICE_NAME} function maybe_add_hooks_symlink() { if [ -e ${CONFIG_DIR}/hooks.yaml ]; then return fi which nvidia-smi > /dev/null 2>&1 if [ "${?}" != 0 ]; then return fi local compute_cap=$(nvidia-smi -i 0 --query-gpu=compute_cap --format=csv,noheader) if [ "${compute_cap/./}" -ge "90" ] 2> /dev/null; then ln -s hooks-minimal.yaml ${CONFIG_DIR}/hooks.yaml else ln -s hooks-default.yaml ${CONFIG_DIR}/hooks.yaml fi } maybe_add_hooks_symlink NVIDIA-mig-parted-47bc938/deployments/systemd/nvidia-gpu-reset.target000066400000000000000000000016571520540370700255220ustar00rootroot00000000000000# Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This new target is used to ensure the nvidia-mig-manager.service is started # after the nvidia-fabricmanager.service`and nvidia-persistenced.service. # In addition, this target allows applications like dcgm and nvsm # to be started only after the nvidia-mig-manager.service has started. [Unit] Description=Nvidia GPU Reset Target NVIDIA-mig-parted-47bc938/deployments/systemd/nvidia-mig-manager.service000066400000000000000000000016261520540370700261410ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. [Unit] Description=Configure MIG on NVIDIA GPUs DefaultDependencies=no After=nvidia-persistenced.service nvidia-fabricmanager.service Before=nvidia-gpu-reset.target [Service] Type=oneshot ExecStart=-/bin/bash /etc/nvidia-mig-manager/service.sh [Install] WantedBy=multi-user.target nvidia-gpu-reset.target NVIDIA-mig-parted-47bc938/deployments/systemd/nvidia-mig-parted.sh000066400000000000000000000003201520540370700247460ustar00rootroot00000000000000export MIG_PARTED_CONFIG_FILE=/etc/nvidia-mig-manager/config.yaml export MIG_PARTED_HOOKS_FILE=/etc/nvidia-mig-manager/hooks.yaml export MIG_PARTED_CHECKPOINT_FILE=/var/lib/nvidia-mig-manager/checkpoint.json NVIDIA-mig-parted-47bc938/deployments/systemd/override.conf000066400000000000000000000001001520540370700235730ustar00rootroot00000000000000[Service] Environment="MIG_PARTED_SELECTED_CONFIG=all-disabled" NVIDIA-mig-parted-47bc938/deployments/systemd/packages/000077500000000000000000000000001520540370700226745ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/systemd/packages/.gitignore000066400000000000000000000000061520540370700246600ustar00rootroot00000000000000dist/ NVIDIA-mig-parted-47bc938/deployments/systemd/packages/Dockerfile.deb000066400000000000000000000056451520540370700254310ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # build go binary ARG BASE_IMAGE=undefined ARG GOLANG_VERSION=undefined FROM ${BASE_IMAGE} as go-build ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ ca-certificates \ git \ build-essential \ dh-make \ fakeroot \ devscripts \ lsb-release && \ rm -rf /var/lib/apt/lists/* ARG GOLANG_VERSION=0.0.0 RUN set -eux; \ \ arch="$(uname -m)"; \ case "${arch##*-}" in \ x86_64 | amd64) ARCH='amd64' ;; \ ppc64el | ppc64le) ARCH='ppc64le' ;; \ aarch64 | arm64) ARCH='arm64' ;; \ *) echo "unsupported architecture" ; exit 1 ;; \ esac; \ wget -nv -O - https://go.dev/dl/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz \ | tar -C /usr/local -xz ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH WORKDIR /build COPY . . RUN mkdir /artifacts ARG VERSION="N/A" ARG GIT_COMMIT="unknown" RUN make PREFIX=/artifacts cmds # build package FROM ${BASE_IMAGE} ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y devscripts debhelper # envs for packaging ENV DEBFULLNAME "NVIDIA CORPORATION" ENV DEBEMAIL "cudatools@nvidia.com" ARG PACKAGE_NAME=undefined ARG PACKAGE_VERSION=undefined ARG PACKAGE_REVISION=undefined ENV PACKAGE_NAME ${PACKAGE_NAME} ENV PACKAGE_VERSION ${PACKAGE_VERSION} ENV PACKAGE_REVISION ${PACKAGE_REVISION} ENV PACKAGE_VERSION_STRING "${PACKAGE_VERSION}-${PACKAGE_REVISION}" ENV SECTION "" # working directory WORKDIR /tmp/${PACKAGE_NAME}-${PACKAGE_VERSION_STRING} # sources COPY ./LICENSE . COPY --from=go-build /artifacts/nvidia-mig-parted . COPY ./deployments/systemd . COPY ./deployments/systemd/packages/debian ./debian COPY ./deployments/systemd/packages/debian/Makefile . # output directory RUN mkdir -p /dist RUN dch --create --package="${PACKAGE_NAME}" \ --newversion "${PACKAGE_VERSION_STRING##v}" \ "See https://github.com/NVIDIA/mig-parted/-/blob/${GIT_COMMIT}/CHANGELOG.md for the changelog" && \ dch -r "" && \ if [ "${PACKAGE_VERSION_STRING##v}" != "$(dpkg-parsechangelog --show-field=Version)" ]; then exit 1; fi # build command CMD export DISTRIB=$(lsb_release -c -s) && \ debuild -eDISTRIB -eSECTION \ --dpkg-buildpackage-hook='sh debian/prepare' -i -us -uc -b && \ mv /tmp/*.deb /dist NVIDIA-mig-parted-47bc938/deployments/systemd/packages/Dockerfile.rpm000066400000000000000000000056361520540370700254750ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # build go binary ARG BASE_IMAGE=undefined ARG GOLANG_VERSION=undefined FROM ${BASE_IMAGE} as go-build RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" \ -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" \ /etc/yum.repos.d/CentOS-* RUN yum install -y \ ca-certificates \ gcc \ wget \ git \ make \ rpm-build && \ rm -rf /var/cache/yum/* ARG GOLANG_VERSION=0.0.0 RUN set -eux; \ \ arch="$(uname -m)"; \ case "${arch##*-}" in \ x86_64 | amd64) ARCH='amd64' ;; \ ppc64el | ppc64le) ARCH='ppc64le' ;; \ aarch64 | arm64) ARCH='arm64' ;; \ *) echo "unsupported architecture"; exit 1 ;; \ esac; \ wget -nv -O - https://go.dev/dl/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz \ | tar -C /usr/local -xz ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH WORKDIR /build COPY . . RUN mkdir /artifacts ARG VERSION="N/A" ARG GIT_COMMIT="unknown" RUN make PREFIX=/artifacts cmds # build package FROM ${BASE_IMAGE} RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" \ -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" \ /etc/yum.repos.d/CentOS-* RUN yum install -y rpm-build # envs for packaging ARG PACKAGE_NAME=undefined ARG PACKAGE_VERSION=undefined ARG PACKAGE_REVISION=undefined ENV PACKAGE_NAME ${PACKAGE_NAME} ENV PACKAGE_VERSION ${PACKAGE_VERSION} ENV PACKAGE_REVISION ${PACKAGE_REVISION} ENV PACKAGE_VERSION_STRING "${PACKAGE_VERSION}-${PACKAGE_REVISION}" # working directory WORKDIR /tmp/${PACKAGE_NAME}-${PACKAGE_VERSION_STRING} # specs RUN mkdir -p ./SPECS COPY ./deployments/systemd/packages/rpm/SPECS ./SPECS # sources RUN mkdir -p ./SOURCES COPY ./LICENSE ./SOURCES COPY --from=go-build /artifacts/nvidia-mig-parted ./SOURCES COPY ./deployments/systemd ./SOURCES # envs for rpmbuild ENV DIST_DIR=${PWD}/SOURCES # output directory RUN mkdir -p /dist # build command CMD arch=$(uname -m) && \ rpmbuild --clean --target=$arch -bb \ -D "_topdir ${PWD}" \ -D "version ${PACKAGE_VERSION}" \ -D "revision ${PACKAGE_REVISION}" \ -D "git_commit ${GIT_COMMIT}" \ -D "release_date $(date +'%a %b %d %Y')" \ SPECS/${PACKAGE_NAME}.spec && \ mv RPMS/$arch/*.rpm /dist NVIDIA-mig-parted-47bc938/deployments/systemd/packages/Dockerfile.tarball000066400000000000000000000061471520540370700263160ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # build go binary ARG BASE_IMAGE=undefined ARG GOLANG_VERSION=undefined FROM ${BASE_IMAGE} as go-build ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ ca-certificates \ git \ build-essential \ dh-make \ fakeroot \ devscripts \ lsb-release && \ rm -rf /var/lib/apt/lists/* ARG GOLANG_VERSION=0.0.0 RUN set -eux; \ \ arch="$(uname -m)"; \ case "${arch##*-}" in \ x86_64 | amd64) ARCH='amd64' ;; \ ppc64el | ppc64le) ARCH='ppc64le' ;; \ aarch64 | arm64) ARCH='arm64' ;; \ *) echo "unsupported architecture" ; exit 1 ;; \ esac; \ wget -nv -O - https://go.dev/dl/go${GOLANG_VERSION}.linux-${ARCH}.tar.gz \ | tar -C /usr/local -xz ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH WORKDIR /build COPY . . RUN mkdir /artifacts ARG VERSION="N/A" ARG GIT_COMMIT="unknown" RUN make PREFIX=/artifacts cmds # build package FROM ${BASE_IMAGE} ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y devscripts debhelper # envs for packaging ENV DEBFULLNAME "NVIDIA CORPORATION" ENV DEBEMAIL "cudatools@nvidia.com" ARG PACKAGE_NAME=undefined ARG PACKAGE_VERSION=undefined ARG PACKAGE_REVISION=undefined ENV PACKAGE_NAME ${PACKAGE_NAME} ENV PACKAGE_VERSION ${PACKAGE_VERSION} ENV PACKAGE_REVISION ${PACKAGE_REVISION} ENV PACKAGE_VERSION_STRING "${PACKAGE_VERSION}-${PACKAGE_REVISION}" ENV SECTION "" # destination to put tarball files WORKDIR /${PACKAGE_NAME}-${PACKAGE_VERSION_STRING} ENV DESTDIR=/${PACKAGE_NAME}-${PACKAGE_VERSION_STRING} # collect tarball files COPY ./LICENSE . COPY --from=go-build /artifacts/nvidia-mig-parted . COPY ./deployments/systemd/packages/tarball/install.sh ${DESTDIR} COPY ./deployments/systemd/hooks.sh ${DESTDIR} COPY ./deployments/systemd/hooks-default.yaml ${DESTDIR} COPY ./deployments/systemd/hooks-minimal.yaml ${DESTDIR} COPY ./deployments/systemd/config-default.yaml ${DESTDIR} COPY ./deployments/systemd/nvidia-mig-manager.service ${DESTDIR} COPY ./deployments/systemd/nvidia-gpu-reset.target ${DESTDIR} COPY ./deployments/systemd/nvidia-mig-parted.sh ${DESTDIR} COPY ./deployments/systemd/override.conf ${DESTDIR} COPY ./deployments/systemd/service.sh ${DESTDIR} COPY ./deployments/systemd/uninstall.sh ${DESTDIR} COPY ./deployments/systemd/utils.sh ${DESTDIR} # output directory RUN mkdir -p /dist # build command WORKDIR / CMD arch=$(uname -m) && \ tar -zcvf /dist/${DESTDIR}.${arch}.tar.gz .${DESTDIR} NVIDIA-mig-parted-47bc938/deployments/systemd/packages/Makefile000066400000000000000000000047141520540370700243420ustar00rootroot00000000000000# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. NAME = nvidia-mig-manager REVISION ?= 1 DOCKER ?= docker DIST_DIR ?= $(CURDIR)/dist ##### Global variables ##### include $(CURDIR)/versions.mk ifeq ($(IMAGE),) REGISTRY ?= nvcr.io/nvidia IMAGE := $(REGISTRY)/$(NAME) endif # strip 'v' from version string PACKAGE_VERSION := $(VERSION:v%=%) # replace '-' with '~' in the version string # e.g. 'x.y.z-rc.1' gets represented as 'x.y.z~rc.1' PACKAGE_VERSION := $(subst -,~,$(PACKAGE_VERSION)) deb-%: BASE_IMAGE = ubuntu:18.04 deb-%: ARTIFACTS_DIR = $(DIST_DIR)/deb/$(ARCH) deb-%: DOCKERFILE = $(CURDIR)/deployments/systemd/packages/Dockerfile.deb rpm-%: BASE_IMAGE = centos:7 rpm-%: ARTIFACTS_DIR = $(DIST_DIR)/rpm/$(ARCH) rpm-%: DOCKERFILE = $(CURDIR)/deployments/systemd/packages/Dockerfile.rpm tarball-%: BASE_IMAGE = ubuntu:18.04 tarball-%: ARTIFACTS_DIR = $(DIST_DIR)/tarball/$(ARCH) tarball-%: DOCKERFILE = $(CURDIR)/deployments/systemd/packages/Dockerfile.tarball ##### Public rules ##### TARGETS = tarball deb rpm AMD64_TARGETS = $(patsubst %,%-amd64,$(TARGETS)) ARM64_TARGETS = $(patsubst %,%-arm64,$(TARGETS)) $(AMD64_TARGETS): ARCH = amd64 $(ARM64_TARGETS): ARCH = arm64 VALID_TARGETS = $(AMD64_TARGETS) $(ARM64_TARGETS) all: $(VALID_TARGETS) .PHONY: all $(VALID_TARGETS) $(TARGETS) $(VALID_TARGETS): %: @echo "Building for $(TARGET_PLATFORM)" docker pull --platform=linux/$(ARCH) $(BASE_IMAGE) $(DOCKER) build --pull \ --platform=linux/$(ARCH) \ --build-arg BASE_IMAGE=$(BASE_IMAGE) \ --build-arg GOLANG_VERSION=$(GOLANG_VERSION) \ --build-arg VERSION=$(VERSION) \ --build-arg GIT_COMMIT=$(GIT_COMMIT) \ --build-arg PACKAGE_NAME=$(NAME) \ --build-arg PACKAGE_VERSION=$(PACKAGE_VERSION) \ --build-arg PACKAGE_REVISION=$(REVISION) \ --tag $(IMAGE):$(VERSION)-$(*) \ --file $(DOCKERFILE) \ $(CURDIR) $(DOCKER) run \ --platform=linux/$(ARCH) \ -v $(ARTIFACTS_DIR):/dist \ $(IMAGE):$(VERSION)-$(*) NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/000077500000000000000000000000001520540370700241165ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/Makefile000066400000000000000000000035771520540370700255720ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. SOURCE1 = nvidia-mig-parted SOURCE2 = nvidia-mig-manager.service SOURCE3 = nvidia-mig-parted.sh SOURCE4 = override.conf SOURCE5 = service.sh SOURCE6 = utils.sh SOURCE7 = hooks.sh SOURCE8 = hooks-default.yaml SOURCE9 = hooks-minimal.yaml SOURCE10 = config-default.yaml SOURCE11 = nvidia-gpu-reset.target build: install: mkdir -p $(DESTDIR)/usr/bin mkdir -p $(DESTDIR)/lib/systemd/system mkdir -p $(DESTDIR)/etc/profile.d mkdir -p $(DESTDIR)/etc/systemd/system/nvidia-mig-manager.service.d mkdir -p $(DESTDIR)/etc/nvidia-mig-manager mkdir -p $(DESTDIR)/var/lib/nvidia-mig-manager install -m 755 -t $(DESTDIR)/usr/bin $(SOURCE1) install -m 644 -t $(DESTDIR)/lib/systemd/system $(SOURCE2) install -m 644 -t $(DESTDIR)/etc/profile.d $(SOURCE3) install -m 644 -t $(DESTDIR)/etc/systemd/system/nvidia-mig-manager.service.d $(SOURCE4) install -m 755 -t $(DESTDIR)/etc/nvidia-mig-manager $(SOURCE5) install -m 644 -t $(DESTDIR)/etc/nvidia-mig-manager $(SOURCE6) install -m 644 -t $(DESTDIR)/etc/nvidia-mig-manager $(SOURCE7) install -m 644 -t $(DESTDIR)/etc/nvidia-mig-manager $(SOURCE8) install -m 644 -t $(DESTDIR)/etc/nvidia-mig-manager $(SOURCE9) install -m 644 -t $(DESTDIR)/etc/nvidia-mig-manager $(SOURCE10) install -m 644 -t $(DESTDIR)/lib/systemd/system $(SOURCE11) NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/changelog.old000066400000000000000000000150371520540370700265530ustar00rootroot00000000000000# Note: as of 0.6.1 this file is no longer updated, with a changelog # entry for a given release generated as part of the packaging step. nvidia-mig-manager (0.6.0-1) UNRELEASED; urgency=medium * Update to latest CUDA base image 12.3.2 * Migrate to using github.com/NVIDIA/go-nvlib * Bump Golang version to 1.20.5 * Bump nvidia-ctk version used by k8s-mig-manager to 1.14.6 * Update vendored go dependencies * Minor code improvements and refactoring -- NVIDIA CORPORATION Wed, 28 Feb 2024 21:57:59 +0200 nvidia-mig-manager (0.5.5-1) UNRELEASED; urgency=medium * Update to latest CUDA base image 12.2.2 -- NVIDIA CORPORATION Thu, 18 Oct 2023 02:16:57 +0200 nvidia-mig-manager (0.5.4-1) UNRELEASED; urgency=medium * Update MIG config for Hopper with device ID of H100 80GB HBM3 SKU -- NVIDIA CORPORATION Thu, 7 Sep 2023 21:27:44 +0200 nvidia-mig-manager (0.5.3-1) UNRELEASED; urgency=medium * Update to latest CUDA image 12.2.0 * Update example config for Hopper with H100 NVL and H800 NVL -- NVIDIA CORPORATION Wed, 12 Jul 2023 11:06:03 +0200 nvidia-mig-manager (0.5.2-1) UNRELEASED; urgency=medium * Update to latest CUDA image 12.1.0 * Update k8s-mig-manager to support CDI * Add two new example configs for the newly supported profiles on A100 * Update MIG profile code to rely on go-nvlib * Update vendored go-nvlib to latest * Update NVML wrapper to include MIG profiles from NVML v12.0 -- NVIDIA CORPORATION Tue, 28 Mar 2023 13:36:29 +0200 nvidia-mig-manager (0.5.1-1) UNRELEASED; urgency=medium * Update to latest CUDA image 12.0.1 * Add newer MIG profiles supported with NVML 12.0 to default config.yaml files * Add profiles with media extensions for A30-24GB to default config.yaml files * Add H100 and H800 profiles to default config.yaml files * Add A800 profiles to default config.yaml files * Update all calls to enumerate GPUs to use NVML or PCI as appropriate * Bump vendored go-nvml to v12.0 * Bump Golang version to 1.20.1 -- NVIDIA CORPORATION Thu, 09 Mar 2023 11:12:52 +0200 nvidia-mig-manager (0.5.0-1) UNRELEASED; urgency=medium * Bump CUDA base image to 11.7.1 * Remove CUDA compat libs from mig-manager in favor of libs installed by the Driver * Use symlink for config.yaml instead of static config file * Add k8s-mig-manager-example for Hopper * Update k8s-mig-manager-example with standalone RBAC objects * Explicitly delete pods launched by operator validator before reconfig * Allow missing GPUClients file in k8s-mig-manager * Add hooks-minimal.yaml that gets linked if on Hopper or above * Use symlink for hooks.yaml instead of static config file * Update install script to use go 1.16.4 * Update hooks.sh to split out start/stop of k8s services from k8s pods * Explicitly clear all MIG configurations before disabling MIG mode -- NVIDIA CORPORATION Thu, 08 Sep 2022 17:11:39 +0200 nvidia-mig-manager (0.4.3-1) UNRELEASED; urgency=medium * Update calculation for GB in MIG profile name * Make the systemd-mig-manager a dependency of systemd-resolved.service -- NVIDIA CORPORATION Wed, 10 Aug 2022 13:25:11 +0200 nvidia-mig-manager (0.4.2-1) UNRELEASED; urgency=medium * Update CUDA image to 11.7.0 * Add extra assert in k8s-mig-manager to double check mig-mode change applied * Update mig-manager image to use NGC DL license -- NVIDIA CORPORATION Thu, 16 Jun 2022 16:49:39 +0200 nvidia-mig-manager (0.4.1-1) UNRELEASED; urgency=medium * Keep NVML alive across all mig-parted commands (except GPU reset) * Remove unnecessary services from hooks.sh -- NVIDIA CORPORATION Mon, 30 May 2022 11:45:10 +0200 nvidia-mig-manager (0.4.0-1) UNRELEASED; urgency=medium * Update nvidia-mig-parted.sh to include MIG_PARTED_CHECKPOINT_FILE * Add checkpoint / restore commands to mig-parted CLI * Update golang version to 1.16.4 * Support instantiation of *_PROFILE_6_SLICE GIs and CIs * Update cyrus-sasl-lib to address CVE-2022-24407 * Add support for MIG profiles with +me as an attribute extension * Support Compute Instances in mig-parted config such that CI != GI * Update go-nvml to v0.11.6 * Change semantics of 'all' to mean 'all-mig-capable' in mig-parted config -- NVIDIA CORPORATION Tue, 05 Apr 2022 13:55:46 +0200 nvidia-mig-manager (0.3.0-1) UNRELEASED; urgency=medium * k8s-mig-manager: Add support for multi-arch images * k8s-mig-manager: Handle eviction of NVSM pod when applying MIG changes -- NVIDIA CORPORATION Fri, 18 Mar 2022 06:59:30 +0200 nvidia-mig-manager (0.2.0-1) UNRELEASED; urgency=medium * nvidia-mig-parted: Support passing newer GI and CI profile enums on older drivers * k8s-mig-manager: Rename nvcr.io/nvidia to nvcr.io/nvidia/cloud-native * k8s-mig-manager: Add support for pre-installed drivers * systemd-mig-manager: Update logic to remove 'containerd' containers in utils.sh * systemd-mig-manager: Update logic to shutdown only active systemd services in list * ci-infrastructure: Rework build and CI to align with other projects * ci-infrastructure: Use pulse instead of contamer for scans -- NVIDIA CORPORATION Wed, 17 Nov 2021 12:07:35 +0000 nvidia-mig-manager (0.1.3-1) UNRELEASED; urgency=medium * Add default configs for the PG506-96GB card * Remove CombinedMigManager and add wrappers for Mode/Config Managers * Add a function to check the minimum NVML version required * Add SystemGetNVMLVersion() to the NVML interface * Fix small bug in assert logic for non MIG-capable GPUs -- NVIDIA CORPORATION Mon, 20 Sep 2021 17:16:26 +0000 nvidia-mig-manager (0.1.2-1) UNRELEASED; urgency=medium * Do not start nvidia-mig-manager.service when installing the .deb * Restore lost assert_gpu_reset_available() function * Add nvidia-dcgm.service to driver_services array * Split dcgm, and dcgm-exporter in k8s-mig-manager -- NVIDIA CORPORATION Thu, 05 Aug 2021 23:00:41 +0000 nvidia-mig-manager (0.1.1-1) UNRELEASED; urgency=medium * Update packaged config.yaml to include more supported devices -- NVIDIA CORPORATION Wed, 19 May 2021 14:08:28 +0000 nvidia-mig-manager (0.1.0-1) UNRELEASED; urgency=medium * Initial release of debian package for v0.1.0 -- NVIDIA CORPORATION Fri, 07 May 2021 03:58:16 +0000 NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/compat000066400000000000000000000000031520540370700253150ustar00rootroot0000000000000010 NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/conffiles000066400000000000000000000000771520540370700260150ustar00rootroot00000000000000/etc/systemd/system/nvidia-mig-manager.service.d/override.conf NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/control000066400000000000000000000022201520540370700255150ustar00rootroot00000000000000Source: nvidia-mig-manager Section: @SECTION@utils Priority: optional Maintainer: NVIDIA CORPORATION Standards-Version: 3.9.8 Homepage: https://github.com/NVIDIA/mig-parted/deployments/systemd Vcs-Git: https://github.com/NVIDIA/mig-parted Vcs-Browser: https://github.com/NVIDIA/mig-parted Build-Depends: debhelper (>= 9) Package: nvidia-mig-manager Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: NVIDIA MIG Partition Editor and Systemd Service The NVIDIA MIG Partition Editor allows administrators to declaratively define a set of possible MIG configurations they would like applied to all GPUs on a node. At runtime, they then point nvidia-mig-parted at one of these configurations, and nvidia-mig-parted takes care of applying it. In this way, the same configuration file can be spread across all nodes in a cluster, and a runtime flag (or environment variable) can be used to decide which of these configurations to actually apply to a node at any given time. . The nvidia-mig-manager.service is a systemd service and a set of support hooks that extend nvidia-mig-parted to provide additional features. NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/copyright000066400000000000000000000004051520540370700260500ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: nvidia-mig-manager Source: https://github.com/NVIDIA/mig-parted/deployments/systemd Files: * Copyright: 2021 NVIDIA CORPORATION License: Apache-2.0 NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/nvidia-mig-manager.lintian-overrides000066400000000000000000000002711520540370700331320ustar00rootroot00000000000000file-in-etc-not-marked-as-conffile binary-without-manpage systemd-service-file-refers-to-unusual-wantedby-target script-not-executable new-package-should-close-itp-bug hardening-no-pie NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/postinst000066400000000000000000000016651520540370700257340ustar00rootroot00000000000000#!/bin/bash set -e # source debconf library . /usr/share/debconf/confmodule function maybe_add_hooks_symlink() { if [ -e /etc/nvidia-mig-manager/hooks.yaml ]; then return fi if ! which nvidia-smi > /dev/null 2>&1; then ln -s hooks-default.yaml /etc/nvidia-mig-manager/hooks.yaml return fi local compute_cap=$(nvidia-smi -i 0 --query-gpu=compute_cap --format=csv,noheader) if [ "${compute_cap/./}" -ge "90" ] 2> /dev/null; then ln -s hooks-minimal.yaml /etc/nvidia-mig-manager/hooks.yaml else ln -s hooks-default.yaml /etc/nvidia-mig-manager/hooks.yaml fi } case "${1}" in configure) maybe_add_hooks_symlink ;; abort-upgrade|abort-remove|abort-deconfigure) exit 0 ;; *) echo "postinst called with unknown argument \`${1}'" >&2 exit 1 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# db_stop exit 0 NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/postrm000066400000000000000000000015461520540370700253730ustar00rootroot00000000000000#!/bin/bash set -e # source debconf library . /usr/share/debconf/confmodule function maybe_remove_hooks_symlink() { local target=$(readlink -f /etc/nvidia-mig-manager/hooks.yaml) if [ "${target}" = "/etc/nvidia-mig-manager/hooks-minimal.yaml" ]; then rm -rf /etc/nvidia-mig-manager/hooks.yaml fi if [ "${target}" = "/etc/nvidia-mig-manager/hooks-default.yaml" ]; then rm -rf /etc/nvidia-mig-manager/hooks.yaml fi } case "${1}" in purge) maybe_remove_hooks_symlink # Remove runtime-generated config (not tracked by dpkg) rm -f /etc/nvidia-mig-manager/config.yaml ;; remove|upgrade|disappear) exit 0 ;; *) echo "postrm called with unknown argument \`${1}'" >&2 exit 1 ;; esac # dh_installdeb will replace this with shell code automatically # generated by other debhelper scripts. #DEBHELPER# db_stop exit 0 NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/prepare000077500000000000000000000002601520540370700255000ustar00rootroot00000000000000#!/usr/bin/env bash set -e if [ -n "${DISTRIB}" ]; then sed -i "s;UNRELEASED;${DISTRIB};" debian/changelog fi sed -i "s;@SECTION@;${SECTION:+$SECTION/};g" debian/control NVIDIA-mig-parted-47bc938/deployments/systemd/packages/debian/rules000077500000000000000000000011061520540370700251740ustar00rootroot00000000000000#!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1 #export DEB_BUILD_MAINT_OPTIONS = hardening=+all #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ --with systemd override_dh_shlibdeps: dh_shlibdeps --dpkg-shlibdeps-params=--warnings=6 override_dh_systemd_start: # Do not start nvidia-mig-manager.service when installing this package override_dh_installdeb: dh_installdeb cp ${CURDIR}/debian/conffiles $$(find ${CURDIR}/debian/*/DEBIAN -name conffiles) NVIDIA-mig-parted-47bc938/deployments/systemd/packages/rpm/000077500000000000000000000000001520540370700234725ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/systemd/packages/rpm/SPECS/000077500000000000000000000000001520540370700243475ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/systemd/packages/rpm/SPECS/changelog.old000066400000000000000000000123711520540370700270020ustar00rootroot00000000000000# Note: as of 0.6.0-1 this file is no longer updated, with a changelog # entry for a given release generated as part of the packaging step. * Wed Feb 28 2024 NVIDIA CORPORATION 0.6.0-1 - Update to latest CUDA base image 12.3.2 - Migrate to using github.com/NVIDIA/go-nvlib - Bump Golang version to 1.20.5 - Bump nvidia-ctk version used by k8s-mig-manager to 1.14.6 - Update vendored go dependencies - Minor code improvements and refactoring * Thu Oct 18 2023 NVIDIA CORPORATION 0.5.5-1 - Update to latest CUDA base image 12.2.2 * Thu Sep 7 2023 NVIDIA CORPORATION 0.5.4-1 - Update MIG config for Hopper with device ID of H100 80GB HBM3 SKU * Wed Jul 12 2023 NVIDIA CORPORATION 0.5.3-1 - Update to latest CUDA image 12.2.0 - Update example config for Hopper with H100 NVL and H800 NVL * Tue Mar 28 2023 NVIDIA CORPORATION 0.5.2-1 - Update to latest CUDA image 12.1.0 - Update k8s-mig-manager to support CDI - Add two new example configs for the newly supported profiles on A100 - Update MIG profile code to rely on go-nvlib - Update vendored go-nvlib to latest - Update NVML wrapper to include MIG profiles from NVML v12.0 * Thu Mar 09 2023 NVIDIA CORPORATION 0.5.1-1 - Update to latest CUDA image 12.0.1 - Add newer MIG profiles supported with NVML 12.0 to default config.yaml files - Add profiles with media extensions for A30-24GB to default config.yaml files - Add H100 and H800 profiles to default config.yaml files - Add A800 profiles to default config.yaml files - Update all calls to enumerate GPUs to use NVML or PCI as appropriate - Bump vendored go-nvml to v12.0 - Bump Golang version to 1.20.1 * Thu Sep 08 2022 NVIDIA CORPORATION 0.5.0-1 - Bump CUDA base image to 11.7.1 - Remove CUDA compat libs from mig-manager in favor of libs installed by the Driver - Use symlink for config.yaml instead of static config file - Add k8s-mig-manager-example for Hopper - Update k8s-mig-manager-example with standalone RBAC objects - Explicitly delete pods launched by operator validator before reconfig - Allow missing GPUClients file in k8s-mig-manager - Add hooks-minimal.yaml that gets linked if on Hopper or above - Use symlink for hooks.yaml instead of static config file - Update install script to use go 1.16.4 - Update hooks.sh to split out start/stop of k8s services from k8s pods - Explicitly clear all MIG configurations before disabling MIG mode * Wed Aug 10 2022 NVIDIA CORPORATION 0.4.3-1 - Update calculation for GB in MIG profile name - Make the systemd-mig-manager a dependency of systemd-resolved.service * Thu Jun 16 2022 NVIDIA CORPORATION 0.4.2-1 - Update CUDA image to 11.7.0 - Add extra assert in k8s-mig-manager to double check mig-mode change applied - Update mig-manager image to use NGC DL license * Mon May 30 2022 NVIDIA CORPORATION 0.4.1-1 - Keep NVML alive across all mig-parted commands (except GPU reset) - Remove unnecessary services from hooks.sh * Tue Apr 05 2022 NVIDIA CORPORATION 0.4.0-1 - Update nvidia-mig-parted.sh to include MIG_PARTED_CHECKPOINT_FILE - Add checkpoint / restore commands to mig-parted CLI - Update golang version to 1.16.4 - Support instantiation of *_PROFILE_6_SLICE GIs and CIs - Update cyrus-sasl-lib to address CVE-2022-24407 - Add support for MIG profiles with +me as an attribute extension - Support Compute Instances in mig-parted config such that CI != GI - Update go-nvml to v0.11.6 - Change semantics of 'all' to mean 'all-mig-capable' in mig-parted config * Fri Mar 18 2022 NVIDIA CORPORATION 0.3.0-1 - k8s-mig-manager: Add support for multi-arch images - k8s-mig-manager: Handle eviction of NVSM pod when applying MIG changes * Wed Nov 17 2021 NVIDIA CORPORATION 0.2.0-1 - nvidia-mig-parted: Support passing newer GI and CI profile enums on older drivers - k8s-mig-manager: Rename nvcr.io/nvidia to nvcr.io/nvidia/cloud-native - k8s-mig-manager: Add support for pre-installed drivers - systemd-mig-manager: Update logic to remove 'containerd' containers in utils.sh - systemd-mig-manager: Update logic to shutdown only active systemd services in list - ci-infrastructure: Rework build and CI to align with other projects - ci-infrastructure: Use pulse instead of contamer for scans * Mon Sep 20 2021 NVIDIA CORPORATION 0.1.3-1 - Add default configs for the PG506-96GB card - Remove CombinedMigManager and add wrappers for Mode/Config Managers - Add a function to check the minimum NVML version required - Add SystemGetNVMLVersion() to the NVML interface - Fix small bug in assert logic for non MIG-capable GPUs * Thu Aug 05 2021 NVIDIA CORPORATION 0.1.2-1 - Do not start nvidia-mig-manager.service when installing the .deb - Restore lost assert_gpu_reset_available() function - Add nvidia-dcgm.service to driver_services array - Split dcgm, and dcgm-exporter in k8s-mig-manager * Wed May 19 2021 NVIDIA CORPORATION 0.1.1-1 - Update packaged config.yaml to include more supported devices * Fri May 07 2021 NVIDIA CORPORATION 0.1.0-1 - Initial release of rpm package for v0.1.0NVIDIA-mig-parted-47bc938/deployments/systemd/packages/rpm/SPECS/nvidia-mig-manager.spec000066400000000000000000000107211520540370700306600ustar00rootroot00000000000000Name: nvidia-mig-manager Summary: NVIDIA MIG Partition Editor and Systemd Service Version: %{version} Release: %{revision} Group: Development/Tools License: Apache Software License 2.0 Vendor: NVIDIA CORPORATION Packager: NVIDIA CORPORATION URL: https://github.com/NVIDIA/mig-parted/deployments/systemd Source0: LICENSE Source1: nvidia-mig-parted Source2: nvidia-mig-manager.service Source3: nvidia-mig-parted.sh Source4: override.conf Source5: service.sh Source6: utils.sh Source7: hooks.sh Source8: hooks-default.yaml Source9: hooks-minimal.yaml Source10: config-default.yaml Source11: nvidia-gpu-reset.target %description The NVIDIA MIG Partition Editor allows administrators to declaratively define a set of possible MIG configurations they would like applied to all GPUs on a node. At runtime, they then point nvidia-mig-parted at one of these configurations, and nvidia-mig-parted takes care of applying it. In this way, the same configuration file can be spread across all nodes in a cluster, and a runtime flag (or environment variable) can be used to decide which of these configurations to actually apply to a node at any given time. The nvidia-mig-manager.service is a systemd service and a set of support hooks that extend nvidia-mig-parted to provide additional features. %prep cp %{SOURCE0} %{SOURCE1} \ %{SOURCE2} %{SOURCE3} \ %{SOURCE4} %{SOURCE5} \ %{SOURCE6} %{SOURCE7} \ %{SOURCE8} %{SOURCE9} \ %{SOURCE10} %{SOURCE11} \ . %install mkdir -p %{buildroot}/usr/bin mkdir -p %{buildroot}/usr/lib/systemd/system mkdir -p %{buildroot}/etc/profile.d mkdir -p %{buildroot}/etc/systemd/system/nvidia-mig-manager.service.d mkdir -p %{buildroot}/etc/nvidia-mig-manager mkdir -p %{buildroot}/var/lib/nvidia-mig-manager install -m 755 -t %{buildroot}/usr/bin %{SOURCE1} install -m 644 -t %{buildroot}/usr/lib/systemd/system %{SOURCE2} install -m 644 -t %{buildroot}/etc/profile.d %{SOURCE3} install -m 644 -t %{buildroot}/etc/systemd/system/nvidia-mig-manager.service.d %{SOURCE4} install -m 755 -t %{buildroot}/etc/nvidia-mig-manager %{SOURCE5} install -m 644 -t %{buildroot}/etc/nvidia-mig-manager %{SOURCE6} install -m 644 -t %{buildroot}/etc/nvidia-mig-manager %{SOURCE7} install -m 644 -t %{buildroot}/etc/nvidia-mig-manager %{SOURCE8} install -m 644 -t %{buildroot}/etc/nvidia-mig-manager %{SOURCE9} install -m 644 -t %{buildroot}/etc/nvidia-mig-manager %{SOURCE10} install -m 644 -t %{buildroot}/usr/lib/systemd/system %{SOURCE11} %files %license LICENSE /usr/bin/nvidia-mig-parted /usr/lib/systemd/system/nvidia-mig-manager.service %config /etc/profile.d/nvidia-mig-parted.sh %config /etc/systemd/system/nvidia-mig-manager.service.d/override.conf /etc/nvidia-mig-manager/service.sh /etc/nvidia-mig-manager/utils.sh /etc/nvidia-mig-manager/hooks.sh /etc/nvidia-mig-manager/hooks-default.yaml /etc/nvidia-mig-manager/hooks-minimal.yaml /etc/nvidia-mig-manager/config-default.yaml %dir /etc/systemd/system/nvidia-mig-manager.service.d %dir /etc/nvidia-mig-manager/ %dir /var/lib/nvidia-mig-manager /usr/lib/systemd/system/nvidia-gpu-reset.target %posttrans systemctl daemon-reload systemctl enable nvidia-mig-manager.service function maybe_add_hooks_symlink() { if [ -e /etc/nvidia-mig-manager/hooks.yaml ]; then return fi if ! which nvidia-smi > /dev/null 2>&1; then ln -s hooks-default.yaml /etc/nvidia-mig-manager/hooks.yaml return fi local compute_cap=$(nvidia-smi -i 0 --query-gpu=compute_cap --format=csv,noheader) if [ "${compute_cap/./}" -ge "90" ] 2> /dev/null; then ln -s hooks-minimal.yaml /etc/nvidia-mig-manager/hooks.yaml else ln -s hooks-default.yaml /etc/nvidia-mig-manager/hooks.yaml fi } maybe_add_hooks_symlink %preun function maybe_remove_hooks_symlink() { local target=$(readlink -f /etc/nvidia-mig-manager/hooks.yaml) if [ "${target}" = "/etc/nvidia-mig-manager/hooks-minimal.yaml" ]; then rm -rf /etc/nvidia-mig-manager/hooks.yaml fi if [ "${target}" = "/etc/nvidia-mig-manager/hooks-default.yaml" ]; then rm -rf /etc/nvidia-mig-manager/hooks.yaml fi } if [ $1 -eq 0 ] then systemctl disable nvidia-mig-manager.service systemctl daemon-reload maybe_remove_hooks_symlink # Remove runtime-generated config (not tracked by RPM) rm -f /etc/nvidia-mig-manager/config.yaml fi %changelog # As of 0.6.0-1 we generate the release information automatically * %{release_date} NVIDIA CORPORATION %{version}-%{release} - See https://github.com/NVIDIA/mig-parted/-/blob/%{git_commit}/CHANGELOG.md NVIDIA-mig-parted-47bc938/deployments/systemd/packages/tarball/000077500000000000000000000000001520540370700243155ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/deployments/systemd/packages/tarball/install.sh000077500000000000000000000051121520540370700263210ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. : ${DOCKER:=docker} SERVICE_ROOT="nvidia-mig-manager" SERVICE_NAME="${SERVICE_ROOT}.service" MIG_PARTED_NAME="nvidia-mig-parted" BINARY_DIR="/usr/bin" SYSTEMD_DIR="/usr/lib/systemd/system" DATA_DIR="/var/lib/${SERVICE_ROOT}" CONFIG_DIR="/etc/${SERVICE_ROOT}" OVERRIDE_DIR="/etc/systemd/system/${SERVICE_NAME}.d" PROFILED_DIR="/etc/profile.d" mkdir -p ${BINARY_DIR} mkdir -p ${SYSTEMD_DIR} mkdir -p ${DATA_DIR} mkdir -p ${CONFIG_DIR} mkdir -p ${OVERRIDE_DIR} mkdir -p ${PROFILED_DIR} chmod a+rx ${BINARY_DIR} chmod a+rx ${SYSTEMD_DIR} chmod a+rx ${DATA_DIR} chmod a+rx ${CONFIG_DIR} chmod a+rx ${OVERRIDE_DIR} chmod a+rx ${PROFILED_DIR} cp ${SERVICE_NAME} ${SYSTEMD_DIR} cp ${MIG_PARTED_NAME} ${BINARY_DIR} cp ${MIG_PARTED_NAME}.sh ${PROFILED_DIR} cp override.conf ${OVERRIDE_DIR} cp service.sh ${CONFIG_DIR} cp utils.sh ${CONFIG_DIR} cp hooks.sh ${CONFIG_DIR} cp hooks-default.yaml ${CONFIG_DIR} cp hooks-minimal.yaml ${CONFIG_DIR} cp config-default.yaml ${CONFIG_DIR} chmod a+r ${SYSTEMD_DIR}/${SERVICE_NAME} chmod a+r ${PROFILED_DIR}/${MIG_PARTED_NAME}.sh chmod a+r ${OVERRIDE_DIR}/override.conf chmod a+r ${CONFIG_DIR}/service.sh chmod a+r ${CONFIG_DIR}/utils.sh chmod a+r ${CONFIG_DIR}/hooks.sh chmod a+r ${CONFIG_DIR}/hooks-default.yaml chmod a+r ${CONFIG_DIR}/hooks-minimal.yaml chmod a+r ${CONFIG_DIR}/config-default.yaml chmod a+x ${BINARY_DIR}/${MIG_PARTED_NAME} chmod ug+x ${CONFIG_DIR}/service.sh systemctl daemon-reload systemctl enable ${SERVICE_NAME} function maybe_add_hooks_symlink() { if [ -e ${CONFIG_DIR}/hooks.yaml ]; then return fi which nvidia-smi > /dev/null 2>&1 if [ "${?}" != 0 ]; then return fi local compute_cap=$(nvidia-smi -i 0 --query-gpu=compute_cap --format=csv,noheader) if [ "${compute_cap/./}" -ge "90" ] 2> /dev/null; then ln -s hooks-minimal.yaml ${CONFIG_DIR}/hooks.yaml else ln -s hooks-default.yaml ${CONFIG_DIR}/hooks.yaml fi } maybe_add_hooks_symlink NVIDIA-mig-parted-47bc938/deployments/systemd/service.sh000066400000000000000000000067401520540370700231210ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. CURRDIR="$(cd "$( dirname $(readlink -f "${BASH_SOURCE[0]}"))" >/dev/null 2>&1 && pwd)" source ${CURRDIR}/utils.sh CONFIG_FILE="${CURRDIR}/config.yaml" DEFAULT_CONFIG_FILE="${CURRDIR}/config-default.yaml" # Remove legacy symlink (older packages created config.yaml -> config-default.yaml). # Writing to a symlink on successful config generation would overwrite config-default.yaml. if [ -L "${CONFIG_FILE}" ]; then rm -f "${CONFIG_FILE}" fi if nvidia-mig-parted generate-config -f "${CONFIG_FILE}.tmp"; then { echo "# DO NOT EDIT: Auto-generated from hardware on every boot." echo "# To use a custom config, set MIG_PARTED_CONFIG_FILE." echo "" cat "${CONFIG_FILE}.tmp" } > "${CONFIG_FILE}" elif [ -f "${CONFIG_FILE}" ]; then echo "Warning: Config generation failed, using existing ${CONFIG_FILE}" >&2 elif [ -f "${DEFAULT_CONFIG_FILE}" ]; then echo "Warning: Config generation failed, using fallback ${DEFAULT_CONFIG_FILE}" >&2 cp "${DEFAULT_CONFIG_FILE}" "${CONFIG_FILE}" else echo "Error: No config available and generation failed" >&2 exit 1 fi rm -f "${CONFIG_FILE}.tmp" : "${MIG_PARTED_CONFIG_FILE:=${CONFIG_FILE}}" : "${MIG_PARTED_HOOKS_FILE:=${CURRDIR}/hooks.yaml}" : "${MIG_PARTED_SELECTED_CONFIG:?Environment variable must be set before calling this script}" export MIG_PARTED_CONFIG_FILE export MIG_PARTED_HOOKS_FILE export MIG_PARTED_SELECTED_CONFIG set -x # Check if the desired MIG mode is already applied nvidia-mig-parted assert --mode-only # If it is not, then go through the process of applying it if [ "${?}" != 0 ]; then # Apply MIG mode, without issuing a GPU reset nvidia-mig-parted apply --mode-only --skip-reset if [ "${?}" != 0 ]; then (set +x; echo "Error applying MIG mode") exit 1 fi # If GPU reset is not available (e.g. GPU passthrough virtualization), # then issue a reboot. The reboot will only occur once. If the MIG mode is # still not applied after reboot, this script will error out. nvidia-mig-manager::service::assert_gpu_reset_available if [ "${?}" != 0 ]; then (set +x; echo "GPU reset capabilities are not available" echo "Attempting reboot") nvidia-mig-manager::service::reboot exit "${?}" fi # Since the desired MIG mode is already applied, the # following will just do a GPU reset under the hood nvidia-mig-parted apply --mode-only if [ "${?}" != 0 ]; then (set +x; echo "Error issuing GPU reset") exit 1 fi fi # In case a reboot was issued by a previous iteration of this script, we clear # the reboot state so that the next next MIG mode change + reboot will succeed. nvidia-mig-manager::service::clear_reboot_state nvidia-mig-manager::service::assert_module_loaded "nvidia" if [ "${?}" != 0 ]; then (set +x; echo "No nvidia module loaded, skipping MIG device config") exit 0 fi nvidia-mig-parted apply if [ "${?}" != 0 ]; then (set +x; echo "Error applying MIG config") exit 1 fi nvidia-mig-parted export NVIDIA-mig-parted-47bc938/deployments/systemd/uninstall.sh000077500000000000000000000025511520540370700234710ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. SERVICE_ROOT="nvidia-mig-manager" SERVICE_NAME="${SERVICE_ROOT}.service" GPU_TARGET_ROOT="nvidia-gpu-reset" GPU_TARGET_NAME="${GPU_TARGET_ROOT}.target" MIG_PARTED_NAME="nvidia-mig-parted" MIG_PARTED_GO_GET_PATH="github.com/NVIDIA/mig-parted/cmd/${MIG_PARTED_NAME}" BINARY_DIR="/usr/bin" SYSTEMD_DIR="/usr/lib/systemd/system" DATA_DIR="/var/lib/${SERVICE_ROOT}" CONFIG_DIR="/etc/${SERVICE_ROOT}" OVERRIDE_DIR="/etc/systemd/system/${SERVICE_NAME}.d" PROFILED_DIR="/etc/profile.d" systemctl disable ${SERVICE_NAME} systemctl daemon-reload rm -rf ${DATA_DIR} rm -rf ${CONFIG_DIR} rm -rf ${OVERRIDE_DIR} rm ${BINARY_DIR}/${MIG_PARTED_NAME} rm ${SYSTEMD_DIR}/${SERVICE_NAME} rm ${SYSTEMD_DIR}/${GPU_TARGET_NAME} rm ${PROFILED_DIR}/${MIG_PARTED_NAME}.sh NVIDIA-mig-parted-47bc938/deployments/systemd/utils.sh000066400000000000000000000111411520540370700226100ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. function nvidia-mig-manager::service::reverse_array() { # first argument is the array to reverse # second is the reversed array local -n arr="${1}" local -n rev="${2}" for i in "${arr[@]}"; do rev=("${i}" "${rev[@]}") done } function nvidia-mig-manager::service::assert_module_loaded() { local module="${1}" cat /proc/modules | grep -e "^${module} " if [ "${?}" == "0" ]; then return 0 fi return 1 } function nvidia-mig-manager::service::assert_gpu_reset_available() { local devices_path="/sys/bus/pci/devices" for d in $(ls "${devices_path}"); do local vendor="$(cat "${devices_path}/${d}/vendor")" if [ "${vendor}" != "0x10de" ]; then continue fi local class="$(cat "${devices_path}/${d}/class")" if [ "${class}" != "0x030200" ]; then continue fi if [ ! -f "${devices_path}/${d}/reset" ]; then return 1 fi done return 0 } function nvidia-mig-manager::service::reboot() { local statedir="/var/lib/nvidia-mig-manager" mkdir -p "${statedir}" if [ ! -f "${statedir}/reboot_attempted" ]; then touch "${statedir}/reboot_attempted" reboot return ${?} fi (set +x; echo "Machine already rebooted once -- not attempting again" echo "You must manually remove the following file to enable automatic reboots again:" echo " ${statedir}/reboot_attempted") return 1 } function nvidia-mig-manager::service::clear_reboot_state() { local statedir="/var/lib/nvidia-mig-manager" rm -rf "${statedir}/reboot_attempted" } function nvidia-mig-manager::service::persist_config_across_reboot() { local selected_config="${1}" { echo "[Service]" if [ -n "${MIG_PARTED_CONFIG_FILE}" ]; then echo "Environment=\"MIG_PARTED_CONFIG_FILE=${MIG_PARTED_CONFIG_FILE}\"" fi if [ -n "${MIG_PARTED_HOOKS_FILE}" ]; then echo "Environment=\"MIG_PARTED_HOOKS_FILE=${MIG_PARTED_HOOKS_FILE}\"" fi echo "Environment=\"MIG_PARTED_SELECTED_CONFIG=${selected_config}\"" } > /etc/systemd/system/nvidia-mig-manager.service.d/override.conf systemctl daemon-reload } function nvidia-mig-manager::service::start_systemd_services() { local -n __services="${1}" for s in ${__services[@]}; do systemctl list-unit-files --state=enabled,generated | grep -F "${s}" if [ "${?}" != "0" ]; then continue fi systemctl start "${s}" if [ "${?}" != "0" ]; then return 1 fi done return 0 } function nvidia-mig-manager::service::stop_systemd_services() { local -n __services="${1}" for s in ${__services[@]}; do systemctl -q is-active "${s}" if [ "${?}" != "0" ]; then continue fi systemctl stop "${s}" if [ "${?}" != "0" ]; then return 1 fi done return 0 } function nvidia-mig-manager::service::kill_k8s_containers_via_docker_by_image() { local images=() local -n __image_names="${1}" for i in ${__image_names[@]}; do images+=("${i}") images+=("$(docker images --format "{{.ID}} {{.Repository}}" | grep "${i}" | cut -d' ' -f1 | tr '\n' ' ')") done for i in ${images[@]}; do local containers="$(docker ps --format "{{.ID}} {{.Image}}" | grep "${i}" | cut -d' ' -f1 | tr '\n' ' ')" if [ "${containers}" != "" ]; then docker kill ${containers} if [ "${?}" != "0" ]; then return 1 fi sleep 10 docker rm ${containers} if [ "${?}" != "0" ]; then return 1 fi fi done return 0 } function nvidia-mig-manager::service::kill_k8s_containers_via_containerd_by_image() { local images=() local -n __image_names="${1}" for i in ${__image_names[@]}; do images+=("${i}") images+=("$(ctr -n k8s.io image ls | grep "${i}" | tr -s ' ' | cut -d' ' -f1 | tr '\n' ' ')") done for i in ${images[@]}; do local containers="$(ctr -n k8s.io container ls "image~=${i}" -q)" if [ "${containers}" != "" ]; then ctr -n k8s.io task kill -a -s SIGKILL ${containers} || true if [ "${?}" != "0" ]; then return 1 fi sleep 10 ctr -n k8s.io task rm -f ${containers} || true if [ "${?}" != "0" ]; then return 1 fi ctr -n k8s.io container rm ${containers} if [ "${?}" != "0" ]; then return 1 fi fi done return 0 } NVIDIA-mig-parted-47bc938/examples/000077500000000000000000000000001520540370700167015ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/examples/config.yaml000066400000000000000000000023341520540370700210340ustar00rootroot00000000000000version: v1 mig-configs: all-disabled: - devices: all mig-enabled: false all-enabled: - devices: all mig-enabled: true mig-devices: {} all-1g.5gb: - devices: all mig-enabled: true mig-devices: "1g.5gb": 7 all-1g.5gb.me: - devices: all mig-enabled: true mig-devices: "1g.5gb+me": 1 all-1g.10gb: - devices: all mig-enabled: true mig-devices: "1g.10gb": 4 all-2g.10gb: - devices: all mig-enabled: true mig-devices: "2g.10gb": 3 all-3g.20gb: - devices: all mig-enabled: true mig-devices: "3g.20gb": 2 all-balanced: - devices: all mig-enabled: true mig-devices: "1g.5gb": 2 "2g.10gb": 1 "3g.20gb": 1 custom-config: - devices: [0,1,2,3] mig-enabled: false - devices: [4] mig-enabled: true mig-devices: "1g.5gb": 7 - devices: [5] mig-enabled: true mig-devices: "2g.10gb": 3 - devices: [6] mig-enabled: true mig-devices: "3g.20gb": 2 - devices: [7] mig-enabled: true mig-devices: "1g.5gb": 2 "2g.10gb": 1 "3g.20gb": 1 NVIDIA-mig-parted-47bc938/examples/dgx-station-80gb-config.yaml000066400000000000000000000052521520540370700240330ustar00rootroot00000000000000version: v1 mig-configs: all-disabled-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: false mig-devices: {} - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} all-enabled-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: true mig-devices: {} - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} all-1g.10gb-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: true mig-devices: "1g.10gb": 7 - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} all-2g.20gb-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: true mig-devices: "2g.20gb": 3 - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} all-3g.40gb-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: true mig-devices: "3g.40gb": 2 - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} all-4g.40gb-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: true mig-devices: "4g.40gb": 1 - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} all-7g.80gb-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: true mig-devices: "7g.80gb": 1 - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} all-balanced-dgx-station-80: - device-filter: "0x20B210DE" devices: all mig-enabled: true mig-devices: "1g.10gb": 2 "2g.20gb": 1 "3g.40gb": 1 - device-filter: "0x1FB010DE" devices: all mig-enabled: false mig-devices: {} balanced-k8s-dgx-station-80: # Training - device-filter: "0x20B210DE" devices: [0] mig-enabled: false mig-devices: {} # Training & Fine-tuning - device-filter: "0x20B210DE" devices: [1] mig-enabled: true mig-devices: "3g.40gb": 2 # Development & Fine-tuning - device-filter: "0x20B210DE" devices: [2] mig-enabled: true mig-devices: "2g.20gb": 3 "1g.10gb": 1 # Inference & Development - device-filter: "0x20B210DE" devices: [4] mig-enabled: true mig-devices: "1g.10gb": 7 - device-filter: "0x1FB010DE" devices: [3] mig-enabled: false mig-devices: {} NVIDIA-mig-parted-47bc938/go.mod000066400000000000000000000047301520540370700161750ustar00rootroot00000000000000module github.com/NVIDIA/mig-parted go 1.26.0 require ( github.com/NVIDIA/go-nvlib v0.8.1 github.com/NVIDIA/go-nvml v0.13.0-1 github.com/coreos/go-systemd/v22 v22.7.0 github.com/sirupsen/logrus v1.9.4 github.com/stretchr/testify v1.11.1 github.com/urfave/cli/v2 v2.27.7 gopkg.in/yaml.v2 v2.4.0 k8s.io/api v0.36.0 k8s.io/apimachinery v0.36.0 k8s.io/client-go v0.36.0 sigs.k8s.io/yaml v1.6.0 ) require ( github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.13.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.23.0 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/google/gnostic-models v0.7.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/spf13/pflag v1.0.9 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/net v0.54.0 // indirect golang.org/x/oauth2 v0.34.0 // indirect golang.org/x/sys v0.44.0 // indirect golang.org/x/term v0.43.0 // indirect golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.14.0 // indirect google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/klog/v2 v2.140.0 // indirect k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a // indirect k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 // indirect sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/structured-merge-diff/v6 v6.3.2 // indirect ) NVIDIA-mig-parted-47bc938/go.sum000066400000000000000000000276521520540370700162320ustar00rootroot00000000000000github.com/NVIDIA/go-nvlib v0.8.1 h1:OPEHVvn3zcV5OXB68A7WRpeCnYMRSPl7LdeJH/d3gZI= github.com/NVIDIA/go-nvlib v0.8.1/go.mod h1:7mzx9FSdO9fXWP9NKuZmWkCwhkEcSWQFe2tmFwtLb9c= github.com/NVIDIA/go-nvml v0.13.0-1 h1:OLX8Jq3dONuPOQPC7rndB6+iDmDakw0XTYgzMxObkEw= github.com/NVIDIA/go-nvml v0.13.0-1/go.mod h1:+KNA7c7gIBH7SKSJ1ntlwkfN80zdx8ovl4hrK3LmPt4= github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj9KI28KA= github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes= github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI= google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo= gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= k8s.io/api v0.36.0 h1:SgqDhZzHdOtMk40xVSvCXkP9ME0H05hPM3p9AB1kL80= k8s.io/api v0.36.0/go.mod h1:m1LVrGPNYax5NBHdO+QuAedXyuzTt4RryI/qnmNvs34= k8s.io/apimachinery v0.36.0 h1:jZyPzhd5Z+3h9vJLt0z9XdzW9VzNzWAUw+P1xZ9PXtQ= k8s.io/apimachinery v0.36.0/go.mod h1:FklypaRJt6n5wUIwWXIP6GJlIpUizTgfo1T/As+Tyxc= k8s.io/client-go v0.36.0 h1:pOYi7C4RHChYjMiHpZSpSbIM6ZxVbRXBy7CuiIwqA3c= k8s.io/client-go v0.36.0/go.mod h1:ZKKcpwF0aLYfkHFCjillCKaTK/yBkEDHTDXCFY6AS9Y= k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc= k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0= k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a h1:xCeOEAOoGYl2jnJoHkC3hkbPJgdATINPMAxaynU2Ovg= k8s.io/kube-openapi v0.0.0-20260317180543-43fb72c5454a/go.mod h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0= k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU= k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= sigs.k8s.io/structured-merge-diff/v6 v6.3.2 h1:kwVWMx5yS1CrnFWA/2QHyRVJ8jM6dBA80uLmm0wJkk8= sigs.k8s.io/structured-merge-diff/v6 v6.3.2/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= NVIDIA-mig-parted-47bc938/hack/000077500000000000000000000000001520540370700157715ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/hack/benchmark-perf.sh000077500000000000000000000360651520540370700212260ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # benchmark-perf.sh — Benchmark nvidia-mig-parted performance. # # Captures wall time, CPU time (user + sys), peak RSS, and dynamic # linker activity (dlsym/dlopen/dlclose counts via ltrace) across # five scenarios: # # 1. assert --mode-only Individual command # 2. apply --mode-only --skip-reset Individual command # 3. apply Individual command # 4. export Individual command # 5. service.sh (full sequence) Replicates the exact command # sequence from # deployments/systemd/service.sh: # assert → conditional apply # --mode-only → apply → export. # This directly maps to the CPU # time seen during # systemctl start nvidia-mig-manager. # # The dlsym count is the key correlating metric: each redundant # nvml.Init()/Shutdown() cycle triggers a dlopen of libnvidia-ml.so.1 # followed by ~24 dlsym calls to resolve versioned API symbols, then # a dlclose. Eliminating redundant cycles reduces dlsym calls # proportionally to the CPU time improvement. # # Each scenario runs N times (default 3) for CPU timing. The ltrace # pass runs once per scenario (dlsym counts are deterministic) and # has a timeout to avoid hangs with some Go runtime/ltrace versions. # # Prerequisites (on target GPU system): # - nvidia-smi, GNU time (/usr/bin/time) # - ltrace (optional, for dlsym/dlopen/dlclose counts) # # Usage: # ./hack/benchmark-perf.sh [runs] # # Example: # ./hack/benchmark-perf.sh ./nvidia-mig-parted ./examples/config.yaml all-disabled # ./hack/benchmark-perf.sh ./nvidia-mig-parted ./examples/config.yaml all-disabled 5 set -euo pipefail BINARY="${1:?Usage: $0 [runs]}" CONFIG_FILE="${2:?Usage: $0 [runs]}" CONFIG_LABEL="${3:?Usage: $0 [runs]}" NUM_RUNS="${4:-3}" LTRACE_TIMEOUT=30 # seconds; kill ltrace if it hangs # ── Helpers ────────────────────────────────────────────────────────── die() { echo "ERROR: $*" >&2; exit 1; } info() { echo ">>> $*"; } check_prereqs() { [[ -x "${BINARY}" ]] || die "Binary not found or not executable: ${BINARY}" [[ -f "${CONFIG_FILE}" ]] || die "Config file not found: ${CONFIG_FILE}" command -v nvidia-smi >/dev/null 2>&1 || die "nvidia-smi not found" command -v ltrace >/dev/null 2>&1 || HAVE_LTRACE=false command -v jq >/dev/null 2>&1 || HAVE_JQ=false # GNU time is required for CPU time + RSS capture. # On most Linux systems this is /usr/bin/time. if /usr/bin/time --version 2>&1 | grep -q GNU; then GNU_TIME="/usr/bin/time" elif command -v gtime >/dev/null 2>&1; then GNU_TIME="gtime" else die "GNU time not found (/usr/bin/time or gtime). Install with: apt install time" fi } gpu_info() { local count name count=$(nvidia-smi --query-gpu=count --format=csv,noheader,nounits | head -1) name=$(nvidia-smi --query-gpu=name --format=csv,noheader | head -1) echo "${count}x ${name}" } # Run a single command, capture timing metrics. # Sets: _wall _user _sys _rss _exit_code run_once() { local cmd=("$@") local timefile timefile=$(mktemp /tmp/bench-time.XXXXXX) # Capture wall/user/sys/RSS via GNU time. # GNU time prints "Command exited with non-zero status N" to its # output file when the command fails, so we use a unique format # prefix "METRICS:" and grep for it to extract only the numbers. _exit_code=0 ${GNU_TIME} -f "METRICS: %e %U %S %M" -o "${timefile}" \ "${cmd[@]}" >/dev/null 2>/dev/null || _exit_code=$? local metrics_line metrics_line=$(grep '^METRICS:' "${timefile}" 2>/dev/null || true) if [[ -n "${metrics_line}" ]]; then read -r _ _wall _user _sys _rss <<< "${metrics_line}" else _wall=0; _user=0; _sys=0; _rss=0 fi rm -f "${timefile}" } # Run a single ltrace pass for a command (with timeout). # Sets: _dlsym _dlopen _dlclose # dlsym counts are deterministic, so this only needs to run once # per scenario. Uses a timeout to avoid hangs with some Go # runtime / ltrace version combinations. run_ltrace() { local cmd=("$@") local ltracefile ltracefile=$(mktemp /tmp/bench-ltrace.XXXXXX) _dlsym="-"; _dlopen="-"; _dlclose="-" # Run ltrace with a timeout. ltrace 0.7.3 can deadlock on # heavily-threaded Go binaries, so we kill it if it hangs. timeout "${LTRACE_TIMEOUT}" \ ltrace -e dlsym+dlopen+dlclose -c -f -o "${ltracefile}" \ "${cmd[@]}" >/dev/null 2>/dev/null || true # ltrace -c outputs a summary table like: # % time seconds usecs/call calls function # ------ ----------- ----------- --------- -------------------- # 87.59 1.212403 2119 572 dlsym # Extract the 'calls' column for each function. _dlsym=$(awk '$NF == "dlsym" {print $4}' "${ltracefile}" 2>/dev/null) || _dlsym=0 [[ -z "${_dlsym}" ]] && _dlsym=0 _dlopen=$(awk '$NF == "dlopen" {print $4}' "${ltracefile}" 2>/dev/null) || _dlopen=0 [[ -z "${_dlopen}" ]] && _dlopen=0 _dlclose=$(awk '$NF == "dlclose" {print $4}' "${ltracefile}" 2>/dev/null) || _dlclose=0 [[ -z "${_dlclose}" ]] && _dlclose=0 rm -f "${ltracefile}" } # ── service.sh sequence wrapper ────────────────────────────────────── # # Replicates the exact nvidia-mig-parted invocation sequence from # deployments/systemd/service.sh (happy path: mode already applied). # This is what systemctl start nvidia-mig-manager actually runs. write_service_script() { local script="$1" cat > "${script}" < $2) ? $1 : $2}" } # ── Main ───────────────────────────────────────────────────────────── HAVE_LTRACE=true HAVE_JQ=true check_prereqs GPU_INFO=$(gpu_info) TIMESTAMP=$(date +%Y%m%d-%H%M%S) RESULT_FILE="benchmark-results-${TIMESTAMP}.json" info "nvidia-mig-parted performance benchmark" info "Binary: ${BINARY}" info "Config: ${CONFIG_FILE} (${CONFIG_LABEL})" info "GPUs: ${GPU_INFO}" info "Runs: ${NUM_RUNS} per scenario" info "ltrace: ${HAVE_LTRACE}" info "" # Associative arrays keyed by scenario index. declare -A sum_wall sum_user sum_sys sum_rss declare -A min_wall max_wall min_user max_user min_sys max_sys declare -A min_rss max_rss declare -A dl_sym dl_open dl_close NUM_SCENARIOS=${#SCENARIO_NAMES[@]} for (( s=0; s "${RESULT_FILE}" < result[deviceID].totalSlots { result[deviceID].totalSlots = gValue } // Only store 1g, 2g, 3g profiles for balanced formula if gValue < 1 || gValue > 3 { continue } // Keep the profile with the highest MaxCount for each G value. // This gives us the smallest memory footprint (more flexible) option. // e.g., prefer 1g.10gb (max 7) over 1g.20gb (max 4) existing, exists := result[deviceID].profiles[gValue] if !exists || pInfo.MaxCount > existing.MaxCount { result[deviceID].profiles[gValue] = pInfo } } } return result } // buildAllBalancedConfig creates the "all-balanced" config entry. // Returns nil if no devices can support a balanced config. func buildAllBalancedConfig(deviceProfiles discovery.DeviceProfiles, allDeviceIDs map[string]bool) migspec.MigConfigSpecSlice { deviceSets := groupProfilesByDevice(deviceProfiles) var configSpecs migspec.MigConfigSpecSlice // Get sorted device IDs for consistent output sortedDeviceIDs := slices.Sorted(maps.Keys(deviceSets)) for _, deviceID := range sortedDeviceIDs { dps := deviceSets[deviceID] if !dps.canBuildBalanced() { log.Warnf("Device %s missing required profiles for all-balanced config, skipping", deviceID) continue } spec := migspec.MigConfigSpec{ Devices: "all", MigEnabled: true, MigDevices: dps.buildMigDevices(), } // Add device-filter if multiple device types exist if len(allDeviceIDs) > 1 { spec.DeviceFilter = []string{deviceID} } configSpecs = append(configSpecs, spec) log.Infof("Generated all-balanced config for device %s (max slots: %d)", deviceID, dps.totalSlots) } return configSpecs } NVIDIA-mig-parted-47bc938/pkg/mig/builder/balanced_test.go000066400000000000000000000130151520540370700231650ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package builder import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/NVIDIA/mig-parted/pkg/mig/discovery" "github.com/NVIDIA/mig-parted/pkg/types" ) // expectedBalanced defines the all-balanced config for each GPU type. // Formula: 7-slot: 2×1g + 1×2g + 1×3g, 4-slot: 2×1g + 1×2g var expectedBalanced = map[string]types.MigConfig{ "A30-24GB": {"1g.6gb": 2, "2g.12gb": 1}, "A100-40GB": {"1g.5gb": 2, "2g.10gb": 1, "3g.20gb": 1}, "A100-80GB": {"1g.10gb": 2, "2g.20gb": 1, "3g.40gb": 1}, "H100-80GB": {"1g.10gb": 2, "2g.20gb": 1, "3g.40gb": 1}, "H100-94GB": {"1g.12gb": 2, "2g.24gb": 1, "3g.47gb": 1}, "H100-96GB": {"1g.12gb": 2, "2g.24gb": 1, "3g.48gb": 1}, "H200-141GB": {"1g.18gb": 2, "2g.35gb": 1, "3g.71gb": 1}, "B200-180GB": {"1g.23gb": 2, "2g.45gb": 1, "3g.90gb": 1}, "RTX-PRO-6000": {"1g.24gb": 2, "2g.48gb": 1}, // Note: RTX-PRO-5000 cannot generate all-balanced (no base 2g profile) } func TestBuildAllBalancedConfig(t *testing.T) { testCases := []struct { name string deviceProfiles discovery.DeviceProfiles wantNumConfigs int wantMigDevices []types.MigConfig wantDeviceIDs []string }{ { name: "7-slot GPU", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["A100-80GB"]}, wantNumConfigs: 1, wantMigDevices: []types.MigConfig{expectedBalanced["A100-80GB"]}, }, { name: "4-slot GPU", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["A30-24GB"]}, wantNumConfigs: 1, wantMigDevices: []types.MigConfig{expectedBalanced["A30-24GB"]}, }, { name: "heterogeneous GPUs", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["A100-80GB"], 1: gpuProfiles["A30-24GB"]}, wantNumConfigs: 2, wantMigDevices: []types.MigConfig{expectedBalanced["A100-80GB"], expectedBalanced["A30-24GB"]}, wantDeviceIDs: []string{idA100_80GB, idA30}, }, { name: "only attributed profiles - no balanced config", deviceProfiles: discovery.DeviceProfiles{ 0: { {Name: "1g.10gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(1, 10, []string{"me"}, nil)}, {Name: "2g.20gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(2, 20, []string{"me"}, nil)}, }, }, wantNumConfigs: 0, wantMigDevices: nil, }, { name: "missing 2g profile - no balanced config", deviceProfiles: discovery.DeviceProfiles{ 0: { {Name: "1g.10gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(1, 10, nil, nil)}, {Name: "3g.40gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(3, 40, nil, nil)}, }, }, wantNumConfigs: 0, wantMigDevices: nil, }, { name: "2-slot GPU - no balanced config", deviceProfiles: discovery.DeviceProfiles{ 0: { {Name: "1g.16gb", MaxCount: 2, DeviceID: mockDeviceID(0x2BB610DE), Profile: mockProfile(1, 16, nil, nil)}, {Name: "2g.32gb", MaxCount: 1, DeviceID: mockDeviceID(0x2BB610DE), Profile: mockProfile(2, 32, nil, nil)}, }, }, wantNumConfigs: 0, wantMigDevices: nil, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { // Build allDeviceIDs from deviceProfiles allDeviceIDs := make(map[string]bool) for _, profiles := range tc.deviceProfiles { for _, p := range profiles { allDeviceIDs[p.DeviceID.String()] = true } } result := buildAllBalancedConfig(tc.deviceProfiles, allDeviceIDs) require.Len(t, result, tc.wantNumConfigs, "unexpected number of config specs") if tc.wantNumConfigs == 0 { return } // Verify each expected mig-devices config exists in results for _, wantMigDevices := range tc.wantMigDevices { found := false for _, spec := range result { if spec.MigDevices.Equals(wantMigDevices) { found = true assert.Equal(t, "all", spec.Devices) assert.True(t, spec.MigEnabled) break } } assert.True(t, found, "expected mig-devices %v not found in result", wantMigDevices) } // Verify device-filter is set for heterogeneous (multiple device types) if len(allDeviceIDs) > 1 { // Collect all device IDs from filters foundDeviceIDs := make(map[string]bool) for _, spec := range result { filter, ok := spec.DeviceFilter.([]string) require.True(t, ok, "device-filter should be set for heterogeneous devices") require.Len(t, filter, 1, "device-filter should have one device ID") foundDeviceIDs[filter[0]] = true } // Verify expected device IDs are present for _, wantID := range tc.wantDeviceIDs { assert.True(t, foundDeviceIDs[wantID], "expected device ID %s not found in filters", wantID) } } else { // Single device type - no device-filter for _, spec := range result { assert.Nil(t, spec.DeviceFilter, "device-filter should not be set for single device type") } } }) } } NVIDIA-mig-parted-47bc938/pkg/mig/builder/builder.go000066400000000000000000000130511520540370700220230ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package builder import ( "encoding/json" "fmt" "maps" "slices" "strings" log "github.com/sirupsen/logrus" "gopkg.in/yaml.v2" migspec "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/pkg/mig/discovery" "github.com/NVIDIA/mig-parted/pkg/types" ) // normalizeProfileName converts profile names to config-friendly format // Replaces '+' with '.' for attributes like +me, +gfx, +me.all // Examples: "1g.24gb+me" -> "1g.24gb.me", "4g.96gb+gfx" -> "4g.96gb.gfx" func normalizeProfileName(profileStr string) string { return strings.ReplaceAll(profileStr, "+", ".") } // buildMigConfigSpec creates a v1.Spec from discovered profiles. // This is an internal function - use GenerateConfigSpec() instead. func buildMigConfigSpec(deviceProfiles discovery.DeviceProfiles) (*migspec.Spec, error) { // Group profiles by profile name across all devices // map[profileName]map[deviceID]discovery.ProfileInfo profileGroups := make(map[string]map[string]discovery.ProfileInfo) // Track all unique device IDs in the system allDeviceIDs := make(map[string]bool) for _, profiles := range deviceProfiles { for _, pInfo := range profiles { deviceIDStr := pInfo.DeviceID.String() allDeviceIDs[deviceIDStr] = true if profileGroups[pInfo.Name] == nil { profileGroups[pInfo.Name] = make(map[string]discovery.ProfileInfo) } profileGroups[pInfo.Name][deviceIDStr] = pInfo } } // Create config entries configs := map[string]migspec.MigConfigSpecSlice{} // Add base configs that should always be present configs["all-disabled"] = migspec.MigConfigSpecSlice{ { Devices: "all", MigEnabled: false, }, } configs["all-enabled"] = migspec.MigConfigSpecSlice{ { Devices: "all", MigEnabled: true, MigDevices: types.MigConfig{}, }, } // Build all-balanced config if balancedSpecs := buildAllBalancedConfig(deviceProfiles, allDeviceIDs); len(balancedSpecs) > 0 { configs["all-balanced"] = balancedSpecs } // Get sorted profile names for consistent output profileNames := slices.Sorted(maps.Keys(profileGroups)) for _, profileName := range profileNames { devicesWithProfile := profileGroups[profileName] // Group devices by their max count for this profile // Some devices may support different max counts for the same profile countToDevices := make(map[int][]string) for deviceIDStr, pInfo := range devicesWithProfile { countToDevices[pInfo.MaxCount] = append(countToDevices[pInfo.MaxCount], deviceIDStr) } // Sort counts for consistent output counts := slices.Sorted(maps.Keys(countToDevices)) normalizedProfile := normalizeProfileName(profileName) configName := fmt.Sprintf("all-%s", normalizedProfile) configSpecs := make(migspec.MigConfigSpecSlice, 0) // Create a spec for each unique count for _, maxCount := range counts { deviceIDs := countToDevices[maxCount] slices.Sort(deviceIDs) migDevices := types.MigConfig{profileName: maxCount} spec := migspec.MigConfigSpec{ Devices: "all", MigEnabled: true, MigDevices: migDevices, } // Add device-filter for heterogeneous GPU systems. // When multiple GPU types exist, each config entry specifies which devices // it applies to. This handles: // - Different GPU types with different profiles (e.g., A100 vs A30) // - Same profile name with different max counts across GPU types // - Same profile grouped together when max counts match // // Homogeneous systems (single GPU type) don't need device-filter since // all devices support the same profiles with the same max counts. if len(allDeviceIDs) > 1 { spec.DeviceFilter = deviceIDs } configSpecs = append(configSpecs, spec) log.Infof("Generated config '%s' for profile '%s' with max count %d (devices: %v)", configName, profileName, maxCount, deviceIDs) } configs[configName] = configSpecs } return &migspec.Spec{ Version: migspec.Version, MigConfigs: configs, }, nil } // GenerateConfigSpec discovers MIG profiles from hardware and builds a config spec. func GenerateConfigSpec() (*migspec.Spec, error) { deviceProfiles, err := discovery.DiscoverMIGProfiles() if err != nil { return nil, fmt.Errorf("failed to discover MIG profiles: %w", err) } return buildMigConfigSpec(deviceProfiles) } // GenerateConfigYAML discovers MIG profiles and generates the full config as YAML bytes. func GenerateConfigYAML() ([]byte, error) { spec, err := GenerateConfigSpec() if err != nil { return nil, err } yamlData, err := yaml.Marshal(spec) if err != nil { return nil, fmt.Errorf("failed to marshal config to YAML: %w", err) } return yamlData, nil } // GenerateConfigJSON discovers MIG profiles and generates the full config as JSON bytes. func GenerateConfigJSON() ([]byte, error) { spec, err := GenerateConfigSpec() if err != nil { return nil, err } jsonData, err := json.MarshalIndent(spec, "", " ") if err != nil { return nil, fmt.Errorf("failed to marshal config to JSON: %w", err) } return jsonData, nil } NVIDIA-mig-parted-47bc938/pkg/mig/builder/builder_test.go000066400000000000000000000446671520540370700231030ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package builder import ( "slices" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" nvdev "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" v1 "github.com/NVIDIA/mig-parted/api/spec/v1" "github.com/NVIDIA/mig-parted/pkg/mig/discovery" "github.com/NVIDIA/mig-parted/pkg/types" ) func mockProfile(g, gb int, attrs, negAttrs []string) nvdev.MigProfile { return nvdev.MigProfileInfo{ C: g, G: g, GB: gb, Attributes: attrs, NegAttributes: negAttrs, } } func mockDeviceID(id uint32) types.DeviceID { device := uint16(id >> 16) vendor := uint16(id & 0xFFFF) return types.NewDeviceID(device, vendor) } // elementsMatch checks if two string slices contain the same elements (order-independent) func elementsMatch(a, b []string) bool { if len(a) != len(b) { return false } aCopy := slices.Clone(a) bCopy := slices.Clone(b) slices.Sort(aCopy) slices.Sort(bCopy) return slices.Equal(aCopy, bCopy) } const ( deviceIDA30 = 0x20B710DE // A30-24GB deviceIDA100_40GB = 0x20B010DE // A100-SXM4-40GB deviceIDA100_80GB = 0x20B510DE // A100-SXM4-80GB deviceIDH100_80GB = 0x233110DE // H100-80GB deviceIDH100_94GB = 0x233210DE // H100-94GB (placeholder ID) deviceIDH100_96GB = 0x233510DE // H100-96GB on GH200 (placeholder ID) deviceIDH200 = 0x233310DE // H200-141GB (placeholder ID) deviceIDB200 = 0x233410DE // B200-180GB (placeholder ID) deviceIDRTXPRO5 = 0x2BB410DE // RTX PRO 5000 Blackwell (placeholder ID) deviceIDRTXPRO6 = 0x2BB510DE // RTX PRO 6000 Blackwell ) // String versions of device IDs for use in device-filter assertions var ( idA30 = mockDeviceID(deviceIDA30).String() idA100_80GB = mockDeviceID(deviceIDA100_80GB).String() idH100_80GB = mockDeviceID(deviceIDH100_80GB).String() idOther = mockDeviceID(0x20B210DE).String() // hypothetical second GPU ) // Reference: https://docs.nvidia.com/datacenter/tesla/mig-user-guide/supported-mig-profiles.html var gpuProfiles = map[string][]discovery.ProfileInfo{ "A30-24GB": { {Name: "1g.6gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDA30), Profile: mockProfile(1, 6, nil, nil)}, {Name: "1g.6gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA30), Profile: mockProfile(1, 6, []string{"me"}, nil)}, {Name: "2g.12gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDA30), Profile: mockProfile(2, 12, nil, nil)}, {Name: "2g.12gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA30), Profile: mockProfile(2, 12, []string{"me"}, nil)}, {Name: "4g.24gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA30), Profile: mockProfile(4, 24, nil, nil)}, }, "A100-40GB": { {Name: "1g.5gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDA100_40GB), Profile: mockProfile(1, 5, nil, nil)}, {Name: "1g.5gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_40GB), Profile: mockProfile(1, 5, []string{"me"}, nil)}, {Name: "1g.10gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDA100_40GB), Profile: mockProfile(1, 10, nil, nil)}, {Name: "2g.10gb", MaxCount: 3, DeviceID: mockDeviceID(deviceIDA100_40GB), Profile: mockProfile(2, 10, nil, nil)}, {Name: "3g.20gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDA100_40GB), Profile: mockProfile(3, 20, nil, nil)}, {Name: "4g.20gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_40GB), Profile: mockProfile(4, 20, nil, nil)}, {Name: "7g.40gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_40GB), Profile: mockProfile(7, 40, nil, nil)}, }, "A100-80GB": { {Name: "1g.10gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(1, 10, nil, nil)}, {Name: "1g.10gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(1, 10, []string{"me"}, nil)}, {Name: "1g.20gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(1, 20, nil, nil)}, {Name: "2g.20gb", MaxCount: 3, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(2, 20, nil, nil)}, {Name: "3g.40gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(3, 40, nil, nil)}, {Name: "4g.40gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(4, 40, nil, nil)}, {Name: "7g.80gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(7, 80, nil, nil)}, }, "H100-80GB": { {Name: "1g.10gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDH100_80GB), Profile: mockProfile(1, 10, nil, nil)}, {Name: "1g.10gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_80GB), Profile: mockProfile(1, 10, []string{"me"}, nil)}, {Name: "1g.20gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDH100_80GB), Profile: mockProfile(1, 20, nil, nil)}, {Name: "2g.20gb", MaxCount: 3, DeviceID: mockDeviceID(deviceIDH100_80GB), Profile: mockProfile(2, 20, nil, nil)}, {Name: "3g.40gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDH100_80GB), Profile: mockProfile(3, 40, nil, nil)}, {Name: "4g.40gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_80GB), Profile: mockProfile(4, 40, nil, nil)}, {Name: "7g.80gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_80GB), Profile: mockProfile(7, 80, nil, nil)}, }, "H100-94GB": { {Name: "1g.12gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDH100_94GB), Profile: mockProfile(1, 12, nil, nil)}, {Name: "1g.12gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_94GB), Profile: mockProfile(1, 12, []string{"me"}, nil)}, {Name: "1g.24gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDH100_94GB), Profile: mockProfile(1, 24, nil, nil)}, {Name: "2g.24gb", MaxCount: 3, DeviceID: mockDeviceID(deviceIDH100_94GB), Profile: mockProfile(2, 24, nil, nil)}, {Name: "3g.47gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDH100_94GB), Profile: mockProfile(3, 47, nil, nil)}, {Name: "4g.47gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_94GB), Profile: mockProfile(4, 47, nil, nil)}, {Name: "7g.94gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_94GB), Profile: mockProfile(7, 94, nil, nil)}, }, "H100-96GB": { {Name: "1g.12gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDH100_96GB), Profile: mockProfile(1, 12, nil, nil)}, {Name: "1g.12gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_96GB), Profile: mockProfile(1, 12, []string{"me"}, nil)}, {Name: "1g.24gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDH100_96GB), Profile: mockProfile(1, 24, nil, nil)}, {Name: "2g.24gb", MaxCount: 3, DeviceID: mockDeviceID(deviceIDH100_96GB), Profile: mockProfile(2, 24, nil, nil)}, {Name: "3g.48gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDH100_96GB), Profile: mockProfile(3, 48, nil, nil)}, {Name: "4g.48gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_96GB), Profile: mockProfile(4, 48, nil, nil)}, {Name: "7g.96gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH100_96GB), Profile: mockProfile(7, 96, nil, nil)}, }, "H200-141GB": { {Name: "1g.18gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDH200), Profile: mockProfile(1, 18, nil, nil)}, {Name: "1g.18gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH200), Profile: mockProfile(1, 18, []string{"me"}, nil)}, {Name: "1g.35gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDH200), Profile: mockProfile(1, 35, nil, nil)}, {Name: "2g.35gb", MaxCount: 3, DeviceID: mockDeviceID(deviceIDH200), Profile: mockProfile(2, 35, nil, nil)}, {Name: "3g.71gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDH200), Profile: mockProfile(3, 71, nil, nil)}, {Name: "4g.71gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH200), Profile: mockProfile(4, 71, nil, nil)}, {Name: "7g.141gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDH200), Profile: mockProfile(7, 141, nil, nil)}, }, "B200-180GB": { {Name: "1g.23gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDB200), Profile: mockProfile(1, 23, nil, nil)}, {Name: "1g.23gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDB200), Profile: mockProfile(1, 23, []string{"me"}, nil)}, {Name: "1g.45gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDB200), Profile: mockProfile(1, 45, nil, nil)}, {Name: "2g.45gb", MaxCount: 3, DeviceID: mockDeviceID(deviceIDB200), Profile: mockProfile(2, 45, nil, nil)}, {Name: "3g.90gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDB200), Profile: mockProfile(3, 90, nil, nil)}, {Name: "4g.90gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDB200), Profile: mockProfile(4, 90, nil, nil)}, {Name: "7g.180gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDB200), Profile: mockProfile(7, 180, nil, nil)}, }, "RTX-PRO-5000": { {Name: "1g.12gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO5), Profile: mockProfile(1, 12, nil, nil)}, {Name: "1g.12gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO5), Profile: mockProfile(1, 12, []string{"me"}, nil)}, {Name: "1g.12gb+gfx", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO5), Profile: mockProfile(1, 12, []string{"gfx"}, nil)}, {Name: "1g.12gb-me", MaxCount: 3, DeviceID: mockDeviceID(deviceIDRTXPRO5), Profile: mockProfile(1, 12, nil, []string{"me"})}, {Name: "2g.24gb-me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO5), Profile: mockProfile(2, 24, nil, []string{"me"})}, {Name: "4g.48gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO5), Profile: mockProfile(4, 48, nil, nil)}, {Name: "4g.48gb+gfx", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO5), Profile: mockProfile(4, 48, []string{"gfx"}, nil)}, }, "RTX-PRO-6000": { {Name: "1g.24gb", MaxCount: 4, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(1, 24, nil, nil)}, {Name: "1g.24gb+me", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(1, 24, []string{"me"}, nil)}, {Name: "1g.24gb+gfx", MaxCount: 4, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(1, 24, []string{"gfx"}, nil)}, {Name: "1g.24gb+me.all", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(1, 24, []string{"me.all"}, nil)}, {Name: "1g.24gb-me", MaxCount: 4, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(1, 24, nil, []string{"me"})}, {Name: "2g.48gb", MaxCount: 2, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(2, 48, nil, nil)}, {Name: "2g.48gb+gfx", MaxCount: 2, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(2, 48, []string{"gfx"}, nil)}, {Name: "2g.48gb+me.all", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(2, 48, []string{"me.all"}, nil)}, {Name: "2g.48gb-me", MaxCount: 2, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(2, 48, nil, []string{"me"})}, {Name: "4g.96gb", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(4, 96, nil, nil)}, {Name: "4g.96gb+gfx", MaxCount: 1, DeviceID: mockDeviceID(deviceIDRTXPRO6), Profile: mockProfile(4, 96, []string{"gfx"}, nil)}, }, } func TestNormalizeProfileName(t *testing.T) { testCases := []struct { input string expected string }{ {"1g.10gb", "1g.10gb"}, {"1g.10gb+me", "1g.10gb.me"}, {"4g.96gb+gfx", "4g.96gb.gfx"}, {"1g.24gb+me.all", "1g.24gb.me.all"}, {"1g.24gb-me", "1g.24gb-me"}, } for _, tc := range testCases { t.Run(tc.input, func(t *testing.T) { result := normalizeProfileName(tc.input) assert.Equal(t, tc.expected, result) }) } } type wantConfig struct { configName string // e.g., "all-1g.10gb" profileName string // e.g., "1g.10gb" count int deviceFilter []string // expected device IDs in filter, nil = no filter } func TestBuildMigConfigSpec(t *testing.T) { testCases := []struct { name string deviceProfiles discovery.DeviceProfiles wantConfigs []wantConfig }{ { name: "A100-80GB", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["A100-80GB"]}, wantConfigs: []wantConfig{ // Balanced {"all-balanced", "1g.10gb", 2, nil}, {"all-balanced", "2g.20gb", 1, nil}, {"all-balanced", "3g.40gb", 1, nil}, // Per-profile {"all-1g.10gb", "1g.10gb", 7, nil}, {"all-1g.10gb.me", "1g.10gb+me", 1, nil}, {"all-1g.20gb", "1g.20gb", 4, nil}, {"all-2g.20gb", "2g.20gb", 3, nil}, {"all-3g.40gb", "3g.40gb", 2, nil}, {"all-4g.40gb", "4g.40gb", 1, nil}, {"all-7g.80gb", "7g.80gb", 1, nil}, }, }, { name: "A30-24GB (4-slot)", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["A30-24GB"]}, wantConfigs: []wantConfig{ // Balanced {"all-balanced", "1g.6gb", 2, nil}, {"all-balanced", "2g.12gb", 1, nil}, // Per-profile {"all-1g.6gb", "1g.6gb", 4, nil}, {"all-1g.6gb.me", "1g.6gb+me", 1, nil}, {"all-2g.12gb", "2g.12gb", 2, nil}, {"all-2g.12gb.me", "2g.12gb+me", 1, nil}, {"all-4g.24gb", "4g.24gb", 1, nil}, }, }, { name: "heterogeneous A100 + H100 (same profiles, grouped)", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["A100-80GB"], 1: gpuProfiles["H100-80GB"]}, wantConfigs: []wantConfig{ // Balanced - each GPU gets its own entry with device-filter {"all-balanced", "1g.10gb", 2, []string{idA100_80GB}}, {"all-balanced", "2g.20gb", 1, []string{idA100_80GB}}, {"all-balanced", "3g.40gb", 1, []string{idA100_80GB}}, {"all-balanced", "1g.10gb", 2, []string{idH100_80GB}}, {"all-balanced", "2g.20gb", 1, []string{idH100_80GB}}, {"all-balanced", "3g.40gb", 1, []string{idH100_80GB}}, // Per-profile - grouped with both device IDs in filter {"all-1g.10gb", "1g.10gb", 7, []string{idA100_80GB, idH100_80GB}}, {"all-1g.10gb.me", "1g.10gb+me", 1, []string{idA100_80GB, idH100_80GB}}, {"all-1g.20gb", "1g.20gb", 4, []string{idA100_80GB, idH100_80GB}}, {"all-2g.20gb", "2g.20gb", 3, []string{idA100_80GB, idH100_80GB}}, {"all-3g.40gb", "3g.40gb", 2, []string{idA100_80GB, idH100_80GB}}, {"all-4g.40gb", "4g.40gb", 1, []string{idA100_80GB, idH100_80GB}}, {"all-7g.80gb", "7g.80gb", 1, []string{idA100_80GB, idH100_80GB}}, }, }, { name: "heterogeneous A100 + A30 (different profiles, separate entries)", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["A100-80GB"], 1: gpuProfiles["A30-24GB"]}, wantConfigs: []wantConfig{ // Balanced - A100-80GB (7-slot) {"all-balanced", "1g.10gb", 2, []string{idA100_80GB}}, {"all-balanced", "2g.20gb", 1, []string{idA100_80GB}}, {"all-balanced", "3g.40gb", 1, []string{idA100_80GB}}, // Balanced - A30-24GB (4-slot) {"all-balanced", "1g.6gb", 2, []string{idA30}}, {"all-balanced", "2g.12gb", 1, []string{idA30}}, // Per-profile - A100-80GB {"all-1g.10gb", "1g.10gb", 7, []string{idA100_80GB}}, {"all-1g.10gb.me", "1g.10gb+me", 1, []string{idA100_80GB}}, {"all-1g.20gb", "1g.20gb", 4, []string{idA100_80GB}}, {"all-2g.20gb", "2g.20gb", 3, []string{idA100_80GB}}, {"all-3g.40gb", "3g.40gb", 2, []string{idA100_80GB}}, {"all-4g.40gb", "4g.40gb", 1, []string{idA100_80GB}}, {"all-7g.80gb", "7g.80gb", 1, []string{idA100_80GB}}, // Per-profile - A30-24GB {"all-1g.6gb", "1g.6gb", 4, []string{idA30}}, {"all-1g.6gb.me", "1g.6gb+me", 1, []string{idA30}}, {"all-2g.12gb", "2g.12gb", 2, []string{idA30}}, {"all-2g.12gb.me", "2g.12gb+me", 1, []string{idA30}}, {"all-4g.24gb", "4g.24gb", 1, []string{idA30}}, }, }, { name: "RTX PRO 6000 (4-slot with new attributes)", deviceProfiles: discovery.DeviceProfiles{0: gpuProfiles["RTX-PRO-6000"]}, wantConfigs: []wantConfig{ // Balanced {"all-balanced", "1g.24gb", 2, nil}, {"all-balanced", "2g.48gb", 1, nil}, // Per-profile {"all-1g.24gb", "1g.24gb", 4, nil}, {"all-1g.24gb.me", "1g.24gb+me", 1, nil}, {"all-1g.24gb.gfx", "1g.24gb+gfx", 4, nil}, {"all-1g.24gb.me.all", "1g.24gb+me.all", 1, nil}, {"all-1g.24gb-me", "1g.24gb-me", 4, nil}, {"all-2g.48gb", "2g.48gb", 2, nil}, {"all-2g.48gb.gfx", "2g.48gb+gfx", 2, nil}, {"all-2g.48gb.me.all", "2g.48gb+me.all", 1, nil}, {"all-2g.48gb-me", "2g.48gb-me", 2, nil}, {"all-4g.96gb", "4g.96gb", 1, nil}, {"all-4g.96gb.gfx", "4g.96gb+gfx", 1, nil}, }, }, { name: "same profile different max counts creates multiple entries", deviceProfiles: discovery.DeviceProfiles{ 0: {{Name: "1g.10gb", MaxCount: 7, DeviceID: mockDeviceID(deviceIDA100_80GB), Profile: mockProfile(1, 10, nil, nil)}}, 1: {{Name: "1g.10gb", MaxCount: 4, DeviceID: mockDeviceID(0x20B210DE), Profile: mockProfile(1, 10, nil, nil)}}, }, wantConfigs: []wantConfig{ // No balanced (missing 2g profile), only per-profile {"all-1g.10gb", "1g.10gb", 7, []string{idA100_80GB}}, {"all-1g.10gb", "1g.10gb", 4, []string{idOther}}, }, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { spec, err := buildMigConfigSpec(tc.deviceProfiles) require.NoError(t, err) require.NotNil(t, spec) // Verify base configs disabled := spec.MigConfigs["all-disabled"] require.Len(t, disabled, 1) assert.Equal(t, "all", disabled[0].Devices) assert.False(t, disabled[0].MigEnabled) enabled := spec.MigConfigs["all-enabled"] require.Len(t, enabled, 1) assert.Equal(t, "all", enabled[0].Devices) assert.True(t, enabled[0].MigEnabled) assert.Empty(t, enabled[0].MigDevices) // Verify all configs (balanced + per-profile) for _, want := range tc.wantConfigs { configs, ok := spec.MigConfigs[want.configName] require.True(t, ok, "missing config: %s", want.configName) // Find the config entry matching this device-filter var matched *v1.MigConfigSpec for i := range configs { cfg := &configs[i] if want.deviceFilter == nil && cfg.DeviceFilter == nil { matched = cfg break } if filter, ok := cfg.DeviceFilter.([]string); ok { if elementsMatch(want.deviceFilter, filter) { matched = cfg break } } } require.NotNil(t, matched, "config %s: no entry with device-filter %v", want.configName, want.deviceFilter) assert.Equal(t, "all", matched.Devices) assert.True(t, matched.MigEnabled, "config %s should have mig-enabled: true", want.configName) assert.Equal(t, want.count, matched.MigDevices[want.profileName], "config %s should have %s: %d", want.configName, want.profileName, want.count) } }) } } NVIDIA-mig-parted-47bc938/pkg/mig/config/000077500000000000000000000000001520540370700176655ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/pkg/mig/config/config.go000066400000000000000000000171151520540370700214660ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package config import ( "fmt" "strings" log "github.com/sirupsen/logrus" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/mig-parted/internal/nvlib" "github.com/NVIDIA/mig-parted/pkg/types" ) type Manager interface { GetMigConfig(gpu int) (types.MigConfig, error) SetMigConfig(gpu int, config types.MigConfig) error ClearMigConfig(gpu int) error } type nvmlMigConfigManager struct { nvml nvml.Interface nvlib nvlib.Interface } var _ Manager = (*nvmlMigConfigManager)(nil) func NewNvmlMigConfigManager(nvml nvml.Interface) Manager { return &nvmlMigConfigManager{nvml, nvlib.NewMock(nvml)} } func (m *nvmlMigConfigManager) GetMigConfig(gpu int) (types.MigConfig, error) { device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting device handle: %v", ret) } deviceMemory, ret := device.GetMemoryInfo() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting device memory: %v", ret) } err := m.nvlib.Mig.Device(device).AssertMigEnabled() if err != nil { return nil, fmt.Errorf("error asserting MIG enabled: %v", err) } migConfig := types.MigConfig{} err = m.nvlib.Mig.Device(device).WalkGpuInstances(func(gi nvml.GpuInstance, giProfileID int, giProfileInfo nvml.GpuInstanceProfileInfo) error { err := m.nvlib.Mig.GpuInstance(gi).WalkComputeInstances(func(ci nvml.ComputeInstance, ciProfileID int, ciEngProfileID int, ciProfileInfo nvml.ComputeInstanceProfileInfo) error { mp, err := types.NewMigProfile(giProfileID, ciProfileID, ciEngProfileID, giProfileInfo.MemorySizeMB, deviceMemory.Total) if err != nil { return fmt.Errorf("error creating new MIG profile for (%v, %v, %v): %v", giProfileID, ciProfileID, ciEngProfileID, err) } migConfig[mp.String()]++ return nil }) if err != nil { return fmt.Errorf("error walking compute instances for '%v': %v", giProfileID, err) } return nil }) if err != nil { return nil, fmt.Errorf("error walking gpu instances for '%v': %v", gpu, err) } return migConfig, nil } func (m *nvmlMigConfigManager) SetMigConfig(gpu int, config types.MigConfig) error { device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return fmt.Errorf("error getting device handle: %v", ret) } deviceMemory, ret := device.GetMemoryInfo() if ret != nvml.SUCCESS { return fmt.Errorf("error getting device memory: %v", ret) } err := m.nvlib.Mig.Device(device).AssertMigEnabled() if err != nil { return fmt.Errorf("error asserting MIG enabled: %v", err) } err = iteratePermutationsUntilSuccess(config, func(mps []*types.MigProfile) error { clearAttempts := 0 maxClearAttempts := 1 for { existingConfig, err := m.GetMigConfig(gpu) if err != nil { return fmt.Errorf("error getting existing MigConfig: %v", err) } if len(existingConfig.Flatten()) == 0 { break } if clearAttempts == maxClearAttempts { return fmt.Errorf("exceeded maximum attempts to clear MigConfig") } err = m.ClearMigConfig(gpu) if err != nil { return fmt.Errorf("error clearing MigConfig: %v", err) } clearAttempts++ } var lastGIProfileID = -1 var gi nvml.GpuInstance = nil for _, mp := range mps { giProfileInfo, ret := device.GetGpuInstanceProfileInfo(mp.GIProfileID) if ret != nvml.SUCCESS { return fmt.Errorf("error getting GPU instance profile info for '%v': %v", mp, ret) } reuseGI := (gi != nil) && (lastGIProfileID == mp.GIProfileID) lastGIProfileID = mp.GIProfileID for { if !reuseGI { gi, ret = device.CreateGpuInstance(&giProfileInfo) if ret != nvml.SUCCESS { return fmt.Errorf("error creating GPU instance for '%v': %v", mp, ret) } } ciProfileInfo, ret := gi.GetComputeInstanceProfileInfo(mp.CIProfileID, mp.CIEngProfileID) if ret != nvml.SUCCESS { if reuseGI { reuseGI = false continue } return fmt.Errorf("error getting Compute instance profile info for '%v': %v", mp, ret) } _, ret = gi.CreateComputeInstance(&ciProfileInfo) if ret != nvml.SUCCESS { if reuseGI { reuseGI = false continue } return fmt.Errorf("error creating Compute instance for '%v': %v", mp, ret) } valid, err := types.NewMigProfile(mp.GIProfileID, mp.CIProfileID, mp.CIEngProfileID, giProfileInfo.MemorySizeMB, deviceMemory.Total) if err != nil { return fmt.Errorf("error creating new MIG profile for %v: %v", mp, err) } if !mp.Equals(valid) { if reuseGI { reuseGI = false continue } return fmt.Errorf("unsupported MIG Device specified %v, expected %v instead", mp, valid) } break } } return nil }) if err != nil { e := m.ClearMigConfig(gpu) if e != nil { log.Errorf("Error clearing MIG config on GPU %d, erroneous devices may persist", gpu) } return fmt.Errorf("error attempting multiple config orderings: %v", err) } return nil } func (m *nvmlMigConfigManager) ClearMigConfig(gpu int) error { device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return fmt.Errorf("error getting device handle: %v", ret) } err := m.nvlib.Mig.Device(device).AssertMigEnabled() if err != nil { return fmt.Errorf("error asserting MIG enabled: %v", err) } err = m.nvlib.Mig.Device(device).WalkGpuInstances(func(gi nvml.GpuInstance, giProfileID int, giProfileInfo nvml.GpuInstanceProfileInfo) error { err := m.nvlib.Mig.GpuInstance(gi).WalkComputeInstances(func(ci nvml.ComputeInstance, ciProfileID int, ciEngProfileID int, ciProfileInfo nvml.ComputeInstanceProfileInfo) error { ret := ci.Destroy() if ret != nvml.SUCCESS { return fmt.Errorf("error destroying Compute instance for profile '(%v, %v)': %v", ciProfileID, ciEngProfileID, ret) } return nil }) if err != nil { return fmt.Errorf("error walking compute instances for '%v': %v", giProfileID, err) } ret := gi.Destroy() if ret != nvml.SUCCESS { return fmt.Errorf("error destroying GPU instance for profile '%v': %v", giProfileID, ret) } return nil }) if err != nil { return fmt.Errorf("error walking gpu instances for '%v': %v", gpu, err) } return nil } func iteratePermutationsUntilSuccess(config types.MigConfig, f func([]*types.MigProfile) error) error { shouldSwap := func(mps []*types.MigProfile, start, curr int) bool { for i := start; i < curr; i++ { if mps[i] == mps[curr] { return false } } return true } var iterate func(mps []*types.MigProfile, f func([]*types.MigProfile) error, index int) error iterate = func(mps []*types.MigProfile, f func([]*types.MigProfile) error, i int) error { if i >= len(mps) { err := f(mps) if err != nil { e := err.Error() log.Error(strings.ToUpper(e[0:1]) + e[1:]) } return err } for j := i; j < len(mps); j++ { if shouldSwap(mps, i, j) { mps[i], mps[j] = mps[j], mps[i] err := iterate(mps, f, i+1) if err == nil { return nil } mps[i], mps[j] = mps[j], mps[i] } } return fmt.Errorf("all orderings failed") } return iterate(config.Flatten(), f, 0) } NVIDIA-mig-parted-47bc938/pkg/mig/config/config_test.go000066400000000000000000000126741520540370700225320ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package config import ( "fmt" "math/rand" "testing" "github.com/stretchr/testify/require" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/go-nvml/pkg/nvml/mock/dgxa100" "github.com/NVIDIA/mig-parted/internal/nvlib" "github.com/NVIDIA/mig-parted/pkg/types" ) func NewMockLunaServerMigConfigManager() Manager { nvml := dgxa100.New() nvlib := nvlib.NewMock(nvml) return &nvmlMigConfigManager{nvml, nvlib} } func EnableMigMode(manager Manager, gpu int) (nvml.Return, nvml.Return) { m := manager.(*nvmlMigConfigManager) n := m.nvml.(*dgxa100.Server) r1, r2 := n.Devices[gpu].SetMigMode(nvml.DEVICE_MIG_ENABLE) return r1, r2 } func TestGetSetMigConfig(t *testing.T) { types.SetMockNVdevlib() mcg := NewA100_SXM4_40GB_MigConfigGroup() type testCase struct { description string config types.MigConfig } testCases := func() []testCase { var testCases []testCase for _, mc := range mcg.GetPossibleConfigurations() { tc := testCase{ fmt.Sprintf("%v", mc.Flatten()), mc, } testCases = append(testCases, tc) } return testCases }() for i := range testCases { tc := testCases[i] // to allow us to run parallelly t.Run(tc.description, func(t *testing.T) { t.Parallel() nvmlLib := dgxa100.New() manager := NewMockLunaServerMigConfigManager() numGPUs, ret := nvmlLib.DeviceGetCount() require.NotNil(t, ret, "Unexpected nil return from DeviceGetCount") require.Equal(t, ret, nvml.SUCCESS, "Unexpected return value from DeviceGetCount") for i := 0; i < numGPUs; i++ { r1, r2 := EnableMigMode(manager, i) require.Equal(t, nvml.SUCCESS, r1) require.Equal(t, nvml.SUCCESS, r2) err := manager.SetMigConfig(i, tc.config) require.Nil(t, err, "Unexpected failure from SetMigConfig") config, err := manager.GetMigConfig(i) require.Nil(t, err, "Unexpected failure from GetMigConfig") require.Equal(t, tc.config.Flatten(), config.Flatten(), "Retrieved MigConfig different than what was set") } }) } } func TestClearMigConfig(t *testing.T) { types.SetMockNVdevlib() mcg := NewA100_SXM4_40GB_MigConfigGroup() type testCase struct { description string config types.MigConfig } testCases := func() []testCase { var testCases []testCase for _, mc := range mcg.GetPossibleConfigurations() { tc := testCase{ fmt.Sprintf("%v", mc.Flatten()), mc, } testCases = append(testCases, tc) } return testCases }() for i := range testCases { tc := testCases[i] // to allow us to run parallelly t.Run(tc.description, func(t *testing.T) { t.Parallel() manager := NewMockLunaServerMigConfigManager() r1, r2 := EnableMigMode(manager, 0) require.Equal(t, nvml.SUCCESS, r1) require.Equal(t, nvml.SUCCESS, r2) err := manager.SetMigConfig(0, tc.config) require.Nil(t, err, "Unexpected failure from SetMigConfig") err = manager.ClearMigConfig(0) require.Nil(t, err, "Unexpected failure from ClearMigConfig") config, err := manager.GetMigConfig(0) require.Nil(t, err, "Unexpected failure from GetMigConfig") require.Equal(t, 0, len(config.Flatten()), "Unexpected number of configured MIG profiles") }) } } func TestIteratePermutationsUntilSuccess(t *testing.T) { factorial := func(n int) int { product := 1 for i := 1; i <= n; i++ { product *= i } return product } uniquePermutations := func(mc types.MigConfig) int { perms := factorial(len(mc.Flatten())) for _, v := range mc { perms /= factorial(v) } return perms } mcg := NewA100_SXM4_40GB_MigConfigGroup() type testCase struct { description string config types.MigConfig successAfter int } testCases := func() []testCase { var testCases []testCase for _, mc := range mcg.GetPossibleConfigurations() { successAfter := rand.Intn(uniquePermutations(mc)) + 1 tc := testCase{ fmt.Sprintf("%v:%v", mc.Flatten(), successAfter), mc, successAfter, // Random stop between 1 and uniquePermutations } testCases = append(testCases, tc) } for _, mc := range mcg.GetPossibleConfigurations() { tc := testCase{ fmt.Sprintf("%v:%v", mc.Flatten(), -1), mc, -1, // Never stop, so expect failure after uniquePermutations } testCases = append(testCases, tc) } return testCases }() for i := range testCases { tc := testCases[i] // to allow us to run parallelly t.Run(tc.description, func(t *testing.T) { t.Parallel() iteration := 0 err := iteratePermutationsUntilSuccess(tc.config, func(perm []*types.MigProfile) error { iteration++ if iteration == tc.successAfter { return nil } err := fmt.Errorf("Failed iteration: %v", iteration) return err }) if err == nil { require.Equal(t, tc.successAfter, iteration, "Success on wrong iteration") } else { require.Equal(t, uniquePermutations(tc.config), iteration, "Failed after wrong number of iterations") } }) } } NVIDIA-mig-parted-47bc938/pkg/mig/config/known_configs.go000066400000000000000000000106111520540370700230570ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package config import ( "fmt" "sort" "github.com/NVIDIA/mig-parted/pkg/types" ) const ( A100_SXM4_40GB types.DeviceID = 0x20B010DE ) type LoopControl int const ( Continue LoopControl = iota Break ) const ( mig_1c_1g_5gb = "1c.1g.5gb" mig_1c_1g_5gb_me = "1c.1g.5gb+me" mig_1c_2g_10gb = "1c.2g.10gb" mig_2c_2g_10gb = "2c.2g.10gb" mig_1c_3g_20gb = "1c.3g.20gb" mig_2c_3g_20gb = "2c.3g.20gb" mig_3c_3g_20gb = "3c.3g.20gb" mig_1c_4g_20gb = "1c.4g.20gb" mig_2c_4g_20gb = "2c.4g.20gb" mig_4c_4g_20gb = "4c.4g.20gb" mig_1c_7g_40gb = "1c.7g.40gb" mig_2c_7g_40gb = "2c.7g.40gb" mig_3c_7g_40gb = "3c.7g.40gb" mig_4c_7g_40gb = "4c.7g.40gb" mig_7c_7g_40gb = "7c.7g.40gb" ) func GetKnownMigConfigGroups() types.MigConfigGroups { return types.MigConfigGroups{ A100_SXM4_40GB: NewA100_SXM4_40GB_MigConfigGroup(), } } // A100_SXM4_40GB type a100_sxm4_40gb_MigConfigGroup struct { types.MigConfigGroupBase } var a100_sxm4_40gb_config_group a100_sxm4_40gb_MigConfigGroup func NewA100_SXM4_40GB_MigConfigGroup() types.MigConfigGroup { if a100_sxm4_40gb_config_group.Configs == nil { a100_sxm4_40gb_config_group.init() } return &a100_sxm4_40gb_config_group } func (m *a100_sxm4_40gb_MigConfigGroup) init() { configs := make(map[string]types.MigConfig) m.iterateDeviceTypes(func(mps []*types.MigProfile) LoopControl { cis := 0 cis_per_gi := make(map[int]int) mes_per_gi := make(map[int]int) for _, mp := range mps { cis += mp.C cis_per_gi[mp.G] += mp.C if mp.HasAttribute(types.AttributeMediaExtensions) { mes_per_gi[mp.G]++ } } if cis_per_gi[1] > 1 && mes_per_gi[1] > 0 { return Break } if cis > 7 { return Break } unique_gis := 0 for gi := range cis_per_gi { unique_gis += gi } if unique_gis > 7 { return Break } sort.Slice(mps, func(i, j int) bool { return mps[i].String() < mps[j].String() }) str := fmt.Sprintf("%v", mps) if _, exists := configs[str]; !exists { configs[str] = types.NewMigConfig(mps) } if cis < 7 { return Continue } return Break }) for _, v := range configs { m.Configs = append(m.Configs, v) } } func (m *a100_sxm4_40gb_MigConfigGroup) GetDeviceTypes() []*types.MigProfile { return []*types.MigProfile{ types.MustParseMigProfile(mig_1c_1g_5gb), types.MustParseMigProfile(mig_1c_1g_5gb_me), types.MustParseMigProfile(mig_1c_2g_10gb), types.MustParseMigProfile(mig_2c_2g_10gb), types.MustParseMigProfile(mig_1c_3g_20gb), types.MustParseMigProfile(mig_2c_3g_20gb), types.MustParseMigProfile(mig_3c_3g_20gb), types.MustParseMigProfile(mig_1c_4g_20gb), types.MustParseMigProfile(mig_2c_4g_20gb), types.MustParseMigProfile(mig_4c_4g_20gb), types.MustParseMigProfile(mig_1c_7g_40gb), types.MustParseMigProfile(mig_2c_7g_40gb), types.MustParseMigProfile(mig_3c_7g_40gb), types.MustParseMigProfile(mig_4c_7g_40gb), types.MustParseMigProfile(mig_7c_7g_40gb), } } func (m *a100_sxm4_40gb_MigConfigGroup) iterateDeviceTypes(f func([]*types.MigProfile) LoopControl) { maxDevices := types.MigConfig{ mig_1c_1g_5gb: 7, mig_1c_1g_5gb_me: 1, mig_1c_2g_10gb: 6, mig_2c_2g_10gb: 3, mig_1c_3g_20gb: 6, mig_2c_3g_20gb: 2, mig_3c_3g_20gb: 2, mig_1c_4g_20gb: 4, mig_2c_4g_20gb: 2, mig_4c_4g_20gb: 1, mig_1c_7g_40gb: 7, mig_2c_7g_40gb: 3, mig_3c_7g_40gb: 2, mig_4c_7g_40gb: 1, mig_7c_7g_40gb: 1, }.Flatten() var iterate func(i int, accum []*types.MigProfile) LoopControl iterate = func(i int, accum []*types.MigProfile) LoopControl { accum = append(accum, maxDevices[i]) control := f(accum) if control == Break { return Continue } for j := i + 1; j < len(maxDevices); j++ { iterate(j, accum) } return Continue } for i := 0; i < len(maxDevices); i++ { iterate(i, []*types.MigProfile{}) } } NVIDIA-mig-parted-47bc938/pkg/mig/config/known_configs_test.go000066400000000000000000000052231520540370700241210ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package config import ( "testing" "github.com/stretchr/testify/require" "github.com/NVIDIA/mig-parted/pkg/types" ) func TestValidConfiguration(t *testing.T) { testCases := []struct { description string gpu types.DeviceID config types.MigConfig valid bool }{ { "Empty config", A100_SXM4_40GB, types.MigConfig{}, true, }, { "Nil config", A100_SXM4_40GB, nil, true, }, { "Invalid device type (with count > 0)", A100_SXM4_40GB, types.MigConfig{ "bogus": 1, }, false, }, { "Invalid device type (with count == 0)", A100_SXM4_40GB, types.MigConfig{ "bogus": 0, }, false, }, { "Single device (equal to max)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 7, }, true, }, { "Single device (greater than max)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 8, }, false, }, { "Single device (less than max)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 6, }, true, }, { "Single device (equal to 0)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 0, }, false, }, { "Mix of devices (all at max)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 3, "2g.10gb": 2, }, true, }, { "Mix of devices (one smaller than max)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 2, "2g.10gb": 2, }, true, }, { "Mix of devices (all smaller than max)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 2, "2g.10gb": 1, }, true, }, { "Mix of devices (one greater than max)", A100_SXM4_40GB, types.MigConfig{ "1g.5gb": 4, "2g.10gb": 2, }, false, }, } types.SetMockNVdevlib() configs := GetKnownMigConfigGroups() for i := range testCases { tc := testCases[i] // to allow us to run parallelly t.Run(tc.description, func(t *testing.T) { t.Parallel() err := configs[tc.gpu].AssertValidConfiguration(tc.config) if tc.valid { require.Nil(t, err) } else { require.Error(t, err) } }) } } NVIDIA-mig-parted-47bc938/pkg/mig/discovery/000077500000000000000000000000001520540370700204275ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/pkg/mig/discovery/discovery.go000066400000000000000000000162531520540370700227740ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package discovery import ( "errors" "fmt" nvdev "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvml/pkg/nvml" log "github.com/sirupsen/logrus" "github.com/NVIDIA/mig-parted/cmd/nvidia-mig-parted/util" "github.com/NVIDIA/mig-parted/pkg/types" ) // ErrNoProfilesDiscovered indicates MIG-capable GPUs were found but no profiles // could be discovered. var ErrNoProfilesDiscovered = errors.New("no MIG profiles discovered for MIG-capable GPUs") const ( // deviceIDA30 is the PCI device ID for A30-24GB GPUs. // NVML has a bug that reports incorrect profiles for this GPU. deviceIDA30 = 0x20B710DE ) // ProfileInfo represents a discovered MIG profile with its metadata type ProfileInfo struct { Name string // Profile name (e.g., "1g.10gb", "2g.20gb") MaxCount int // Maximum instance count for this profile DeviceID types.DeviceID // Device ID where this profile was discovered Profile nvdev.MigProfile // The underlying MIG profile object } // DeviceProfiles maps device index to its discovered profiles type DeviceProfiles map[int][]ProfileInfo // discoverer holds dependencies for profile discovery, enabling testing with mocks type discoverer struct { nvmllib nvml.Interface deviceLib nvdev.Interface } // isCIProfile returns true if the profile is a Compute Instance profile. // CI profiles have C > 0 and C < G (e.g. 1c.2g.20gb). func isCIProfile(c, g int) bool { return c > 0 && c < g } // getDeviceID extracts the device ID from a nvdev.Device. func getDeviceID(dev nvdev.Device) (types.DeviceID, error) { pciInfo, ret := nvml.Device(dev).GetPciInfo() if ret != nvml.SUCCESS { return 0, fmt.Errorf("failed to get PCI info: %v", ret) } return types.DeviceID(pciInfo.PciDeviceId), nil } // getHardcodedA30Profiles returns hardcoded MIG profiles for A30 GPUs. // This is needed because NVML reports incorrect profiles for A30. func getHardcodedA30Profiles(deviceID types.DeviceID) []ProfileInfo { return []ProfileInfo{ {Name: "1g.6gb", MaxCount: 4, DeviceID: deviceID, Profile: nvdev.MigProfileInfo{C: 1, G: 1, GB: 6}}, {Name: "1g.6gb+me", MaxCount: 1, DeviceID: deviceID, Profile: nvdev.MigProfileInfo{C: 1, G: 1, GB: 6, Attributes: []string{"me"}}}, {Name: "2g.12gb", MaxCount: 2, DeviceID: deviceID, Profile: nvdev.MigProfileInfo{C: 2, G: 2, GB: 12}}, {Name: "2g.12gb+me", MaxCount: 1, DeviceID: deviceID, Profile: nvdev.MigProfileInfo{C: 2, G: 2, GB: 12, Attributes: []string{"me"}}}, {Name: "4g.24gb", MaxCount: 1, DeviceID: deviceID, Profile: nvdev.MigProfileInfo{C: 4, G: 4, GB: 24}}, } } // DiscoverMIGProfiles discovers all MIG profiles on the system. // Returns map[deviceIndex][]ProfileInfo for all MIG-capable devices. func DiscoverMIGProfiles() (DeviceProfiles, error) { nvmllib := nvml.New() err := util.NvmlInit(nvmllib) if err != nil { return nil, fmt.Errorf("error initializing NVML: %w", err) } defer util.TryNvmlShutdown(nvmllib) deviceLib := nvdev.New(nvmllib) d := &discoverer{ nvmllib: nvmllib, deviceLib: deviceLib, } return d.discoverProfiles() } // discoverProfiles performs the actual discovery using injected dependencies. func (d *discoverer) discoverProfiles() (DeviceProfiles, error) { result := make(DeviceProfiles) migCapableCount := 0 err := d.deviceLib.VisitDevices(func(i int, dev nvdev.Device) error { deviceID, err := getDeviceID(dev) if err != nil { return fmt.Errorf("error getting device ID for device %d: %w", i, err) } capable, err := dev.IsMigCapable() if err != nil { return fmt.Errorf("error checking if device %d is MIG-capable: %w", i, err) } if !capable { log.Infof("Device %d (DeviceID: %s) is not MIG-capable, skipping", i, deviceID.String()) return nil } migCapableCount++ // Check for A30 - use hardcoded profiles due to NVML bug where // GetGpuInstanceProfileInfo returns incorrect InstanceCount values. // The hardcoded values match the A30 MIG profiles from nvidia-smi. if uint32(deviceID) == deviceIDA30 { log.Infof("Device %d is A30 (DeviceID: %s), using hardcoded profiles due to NVML bug", i, deviceID.String()) result[i] = getHardcodedA30Profiles(deviceID) return nil } log.Infof("Discovering MIG profiles for device %d (DeviceID: %s)", i, deviceID.String()) profiles, err := dev.GetMigProfiles() if err != nil { return fmt.Errorf("error getting MIG profiles for device %d: %w", i, err) } if len(profiles) == 0 { log.Warnf("No MIG profiles found for device %d", i) return nil } log.Infof("Found %d MIG profile(s) for device %d", len(profiles), i) nvmlDevice := nvml.Device(dev) var deviceProfiles []ProfileInfo for _, profile := range profiles { profileInfo := profile.GetInfo() profileStr := profile.String() // Skip Compute Instance (CI) profiles - these are sub-partitions of GPU Instances and not used for // "all-*" MIG configurations. We do not have a use case currently where 'all-*' MIG profiles should // provision MIG slices that leave some SMs/compute slices unutilized. // CI profiles have C > 0 and C != G. // Example: 1c.3g.20gb is a CI profile (1 compute slice in a 3g GPU instance), while 3g.20gb is a GI // profile (full 3g GPU instance). if isCIProfile(profileInfo.C, profileInfo.G) { log.Infof("Skipping Compute Instance profile %s (C=%d, G=%d)", profileStr, profileInfo.C, profileInfo.G) continue } giProfileInfo, ret := nvmlDevice.GetGpuInstanceProfileInfo(profileInfo.GIProfileID) if ret != nvml.SUCCESS { log.Warnf("Could not get GPU instance profile info for profile %s (GI ID: %d): %v", profileStr, profileInfo.GIProfileID, ret) continue } maxCount := int(giProfileInfo.InstanceCount) deviceProfiles = append(deviceProfiles, ProfileInfo{ Name: profileStr, MaxCount: maxCount, DeviceID: deviceID, Profile: profile, }) log.Debugf("Profile %s on device %d has max count: %d", profileStr, i, maxCount) } if len(deviceProfiles) == 0 { log.Warnf("No valid MIG profiles with instance counts found for device %d", i) return nil } result[i] = deviceProfiles return nil }) if err != nil { return nil, err } if migCapableCount == 0 { return nil, fmt.Errorf("no MIG-capable devices found on the system") } if len(result) == 0 { // MIG-capable devices found but no profiles discovered. // This typically happens on older drivers (e.g., 535) that don't support // querying MIG profiles when MIG mode is disabled. log.Warnf("Found %d MIG-capable device(s) but no profiles could be discovered", migCapableCount) return nil, ErrNoProfilesDiscovered } return result, nil } NVIDIA-mig-parted-47bc938/pkg/mig/discovery/discovery_test.go000066400000000000000000000054231520540370700240300ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package discovery import ( "testing" nvdev "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvml/pkg/nvml/mock/dgxa100" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/NVIDIA/mig-parted/pkg/types" ) func TestDiscoverProfiles(t *testing.T) { // TODO: Add tests for other device types when we have mocks for them server := dgxa100.New() deviceLib := nvdev.New(server, nvdev.WithVerifySymbols(false)) d := &discoverer{ nvmllib: server, deviceLib: deviceLib, } result, err := d.discoverProfiles() require.NoError(t, err) require.Len(t, result, 8) for _, profiles := range result { require.GreaterOrEqual(t, len(profiles), 5) for _, p := range profiles { require.NotEmpty(t, p.Name) require.Greater(t, p.MaxCount, 0) require.NotContains(t, p.Name, "c.", "CI profiles should be filtered") } } } func TestIsCIProfile(t *testing.T) { testCases := []struct { name string c, g int want bool }{ {"GI profile 1g", 0, 1, false}, {"GI profile 7g", 0, 7, false}, {"CI profile 1c.2g", 1, 2, true}, {"CI profile 3c.7g", 3, 7, true}, {"full slice c==g", 7, 7, false}, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { require.Equal(t, tc.want, isCIProfile(tc.c, tc.g)) }) } } func TestGetHardcodedA30Profiles(t *testing.T) { deviceID := types.DeviceID(deviceIDA30) profiles := getHardcodedA30Profiles(deviceID) require.Len(t, profiles, 5) expected := map[string]int{ "1g.6gb": 4, "1g.6gb+me": 1, "2g.12gb": 2, "2g.12gb+me": 1, "4g.24gb": 1, } for _, p := range profiles { assert.Equal(t, expected[p.Name], p.MaxCount, "profile %s", p.Name) assert.Equal(t, deviceID, p.DeviceID) assert.NotNil(t, p.Profile, "profile %s should have non-nil Profile", p.Name) } // Verify base profiles have no attributes for _, p := range profiles { info := p.Profile.GetInfo() if p.Name == "1g.6gb" || p.Name == "2g.12gb" || p.Name == "4g.24gb" { assert.Empty(t, info.Attributes, "base profile %s should have no attributes", p.Name) } else { assert.Contains(t, info.Attributes, "me", "profile %s should have 'me' attribute", p.Name) } } } NVIDIA-mig-parted-47bc938/pkg/mig/mode/000077500000000000000000000000001520540370700173445ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/pkg/mig/mode/mode.go000066400000000000000000000017271520540370700206260ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mode import ( "github.com/NVIDIA/mig-parted/internal/nvlib/mig" ) type MigMode = mig.Mode const ( Disabled = mig.Disabled Enabled = mig.Enabled ) type Manager interface { IsMigCapable(gpu int) (bool, error) GetMigMode(gpu int) (MigMode, error) SetMigMode(gpu int, mode MigMode) error IsMigModeChangePending(gpu int) (bool, error) } NVIDIA-mig-parted-47bc938/pkg/mig/mode/nvml.go000066400000000000000000000054461520540370700206600ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mode import ( "fmt" "github.com/NVIDIA/go-nvml/pkg/nvml" ) type nvmlMigModeManager struct { nvml nvml.Interface } var _ Manager = (*nvmlMigModeManager)(nil) func NewNvmlMigModeManager(nvml nvml.Interface) Manager { return &nvmlMigModeManager{nvml} } func (m *nvmlMigModeManager) IsMigCapable(gpu int) (bool, error) { device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting device handle: %v", ret) } _, _, ret = device.GetMigMode() if ret == nvml.ERROR_NOT_SUPPORTED { return false, nil } if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting Mig mode: %v", ret) } return true, nil } func (m *nvmlMigModeManager) GetMigMode(gpu int) (MigMode, error) { device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return -1, fmt.Errorf("error getting device handle: %v", ret) } current, _, ret := device.GetMigMode() if ret != nvml.SUCCESS { return -1, fmt.Errorf("error getting Mig mode settings: %v", ret) } switch current { case nvml.DEVICE_MIG_ENABLE: return Enabled, nil case nvml.DEVICE_MIG_DISABLE: return Disabled, nil } return -1, fmt.Errorf("unknown Mig mode returned by NVML: %v", current) } func (m *nvmlMigModeManager) SetMigMode(gpu int, mode MigMode) error { device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return fmt.Errorf("error getting device handle: %v", ret) } switch mode { case Disabled: _, ret = device.SetMigMode(nvml.DEVICE_MIG_DISABLE) case Enabled: _, ret = device.SetMigMode(nvml.DEVICE_MIG_ENABLE) default: return fmt.Errorf("unknown Mig mode selected: %v", mode) } if ret != nvml.SUCCESS { return fmt.Errorf("error setting Mig mode: %v", ret) } return nil } func (m *nvmlMigModeManager) IsMigModeChangePending(gpu int) (bool, error) { device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting device handle: %v", ret) } current, pending, ret := device.GetMigMode() if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting Mig mode settings: %v", ret) } if current == pending { return false, nil } return true, nil } NVIDIA-mig-parted-47bc938/pkg/mig/mode/nvml_test.go000066400000000000000000000075771520540370700217260ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mode import ( "fmt" "testing" "github.com/stretchr/testify/require" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/go-nvml/pkg/nvml/mock/dgxa100" ) type Return = nvml.Return type mockNvmlA100Device struct { nvml.Device migCapable bool driverBusy bool currentMigMode int pendingMigMode int } func NewMockNvmlLunaServer() *nvmlMigModeManager { mls := dgxa100.New() for i := 0; i < 8; i++ { mls.Devices[i] = &mockNvmlA100Device{ Device: dgxa100.NewDevice(i), migCapable: true, driverBusy: false, currentMigMode: nvml.DEVICE_MIG_DISABLE, pendingMigMode: nvml.DEVICE_MIG_DISABLE, } } return &nvmlMigModeManager{mls} } func (d *mockNvmlA100Device) SetMigMode(mode int) (Return, Return) { if !d.migCapable { return nvml.ERROR_NOT_SUPPORTED, nvml.ERROR_NOT_SUPPORTED } d.pendingMigMode = mode if !d.driverBusy { d.currentMigMode = mode return nvml.ERROR_IN_USE, nvml.SUCCESS } return nvml.SUCCESS, nvml.SUCCESS } func (d *mockNvmlA100Device) GetMigMode() (int, int, Return) { if !d.migCapable { return -1, -1, nvml.ERROR_NOT_SUPPORTED } return d.currentMigMode, d.pendingMigMode, nvml.SUCCESS } func TestNvmlIsMigCapable(t *testing.T) { manager := NewMockNvmlLunaServer() numGPUs, ret := manager.nvml.DeviceGetCount() require.NotNil(t, ret, "Unexpected nil return from DeviceGetCount") require.Equal(t, ret, nvml.SUCCESS, "Unexpected return value from DeviceGetCount") for i := 0; i < numGPUs; i++ { t.Run(fmt.Sprintf("GPU %v", i), func(t *testing.T) { capable, err := manager.IsMigCapable(i) require.Nil(t, err, "Unexpected failure from IsMigCapable") require.True(t, capable) server := manager.nvml.(*dgxa100.Server) device := server.Devices[i].(*mockNvmlA100Device) device.migCapable = false capable, err = manager.IsMigCapable(i) require.Nil(t, err, "Unexpected failure from IsMigCapable") require.False(t, capable) }) } } func TestNvmlEnableDisableMig(t *testing.T) { manager := NewMockNvmlLunaServer() numGPUs, ret := manager.nvml.DeviceGetCount() require.NotNil(t, ret, "Unexpected nil return from DeviceGetCount") require.Equal(t, ret, nvml.SUCCESS, "Unexpected return value from DeviceGetCount") for i := 0; i < numGPUs; i++ { t.Run(fmt.Sprintf("GPU %v", i), func(t *testing.T) { err := manager.SetMigMode(i, Enabled) require.Nil(t, err, "Unexpected failure from SetMigMode") mode, err := manager.GetMigMode(i) require.Nil(t, err, "Unexpected failure from GetMigMode") require.Equal(t, Enabled, mode) err = manager.SetMigMode(i, Disabled) require.Nil(t, err, "Unexpected failure from SetMigMode") mode, err = manager.GetMigMode(i) require.Nil(t, err, "Unexpected failure from GetMigMode") require.Equal(t, Disabled, mode) server := manager.nvml.(*dgxa100.Server) device := server.Devices[i].(*mockNvmlA100Device) device.driverBusy = true err = manager.SetMigMode(i, Enabled) require.Nil(t, err, "Unexpected failure from SetMigMode") mode, err = manager.GetMigMode(i) require.Nil(t, err, "Unexpected failure from GetMigMode") require.Equal(t, Disabled, mode) pending, err := manager.IsMigModeChangePending(i) require.Nil(t, err, "Unexpected failure from IsMigModeChangePending") require.True(t, pending) }) } } NVIDIA-mig-parted-47bc938/pkg/mig/mode/pci.go000066400000000000000000000161631520540370700204550ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mode import ( "fmt" "time" log "github.com/sirupsen/logrus" "github.com/NVIDIA/go-nvlib/pkg/nvpci" "github.com/NVIDIA/go-nvlib/pkg/nvpci/mmio" ) const ( PmcIDReg = 0 BootCompleteReg = 0x118234 BootCompleteValue = uint32(0x03FF) MigModeCheckReg = 0x1404 MigModeCheckEnabled = uint32(0x8000) // Bits 13:15 100 MigModeSetReg = 0x118F78 MigModeSetMask = uint32(0xC000) // Bits 14:15 11 MigModeSetEnabled = uint32(0xC000) // Bits 14:15 11 MigModeSetDisabled = uint32(0x8000) // Bits 14:15 10 WaitForBootTimeout = 5 * time.Second WaitForBootSleepInterval = 100 * time.Millisecond ) var migCapablePmcIDs = []uint32{ 0x170000a1, // GA100 Chip Set } type pciMigModeManager struct { nvpci nvpci.Interface } var _ Manager = (*pciMigModeManager)(nil) func NewPciMigModeManager() Manager { return &pciMigModeManager{nvpci.New()} } func (m *pciMigModeManager) openBar0(gpu int) (mmio.Mmio, error) { gpus, err := m.nvpci.GetGPUs() if err != nil { return nil, fmt.Errorf("error getting list of GPUs: %v", err) } if gpu >= len(gpus) { return nil, fmt.Errorf("GPU index out of range: %v", gpu) } device := gpus[gpu] if len(device.Resources) < 1 { return nil, fmt.Errorf("missing bar0 MMIO resource") } bar0, err := device.Resources[0].OpenRW() if err != nil { return nil, fmt.Errorf("error opening bar0 MMIO resource: %v", err) } return bar0, nil } func (m *pciMigModeManager) openBar0ReadOnly(gpu int) (mmio.Mmio, error) { gpus, err := m.nvpci.GetGPUs() if err != nil { return nil, fmt.Errorf("error getting list of GPUs: %v", err) } if gpu >= len(gpus) { return nil, fmt.Errorf("GPU index out of range: %v", gpu) } device := gpus[gpu] if len(device.Resources) < 1 { return nil, fmt.Errorf("missing bar0 MMIO resource") } bar0, err := device.Resources[0].OpenRO() if err != nil { return nil, fmt.Errorf("error opening bar0 MMIO resource: %v", err) } return bar0, nil } func (m *pciMigModeManager) tryCloseBar0(bar0 mmio.Mmio) { err := bar0.Close() if err != nil { log.Warnf("error closing bar0 MMIO resource: %v", err) } } func (m *pciMigModeManager) waitForBoot(bar0 mmio.Mmio) error { const iterations = int(WaitForBootTimeout / WaitForBootSleepInterval) attempts := 0 for { reg := bar0.Read32(BootCompleteReg) if reg == BootCompleteValue { return nil } attempts++ if attempts == iterations { break } time.Sleep(WaitForBootSleepInterval) } return fmt.Errorf("timeout after %v seconds", WaitForBootTimeout) } func (m *pciMigModeManager) openBar0AndWaitForBoot(gpu int) (_ mmio.Mmio, rerr error) { bar0, err := m.openBar0(gpu) if err != nil { return nil, err } defer func() { if rerr != nil { m.tryCloseBar0(bar0) } }() err = m.waitForBoot(bar0) if err != nil { return nil, fmt.Errorf("error waiting for GPU to boot: %v", err) } return bar0, nil } func (m *pciMigModeManager) openBar0ReadOnlyAndWaitForBoot(gpu int) (_ mmio.Mmio, rerr error) { bar0, err := m.openBar0ReadOnly(gpu) if err != nil { return nil, err } defer func() { if rerr != nil { m.tryCloseBar0(bar0) } }() err = m.waitForBoot(bar0) if err != nil { return nil, fmt.Errorf("error waiting for GPU to boot: %v", err) } return bar0, nil } func (m *pciMigModeManager) checkBitsInRegWithMask(bar0 mmio.Mmio, reg int, mask, bits uint32) bool { return (bar0.Read32(reg) & mask) == bits } func (m *pciMigModeManager) writeBitsInRegWithMask(bar0 mmio.Mmio, reg int, mask, bits uint32) { current := bar0.Read32(reg) masked := current & ^mask updated := masked | (bits & mask) bar0.Write32(reg, updated) } func (m *pciMigModeManager) checkBitsInReg(bar0 mmio.Mmio, reg int, bits uint32) bool { return m.checkBitsInRegWithMask(bar0, reg, bits, bits) } func (m *pciMigModeManager) setBitsInReg(bar0 mmio.Mmio, reg int, bits uint32) { m.writeBitsInRegWithMask(bar0, reg, bits, bits) } func (m *pciMigModeManager) clearBitsInReg(bar0 mmio.Mmio, reg int, bits uint32) { m.writeBitsInRegWithMask(bar0, reg, bits, ^bits) } func (m *pciMigModeManager) isMigCapable(bar0 mmio.Mmio) bool { pmcID := bar0.Read32(PmcIDReg) for _, id := range migCapablePmcIDs { if pmcID == id { return true } } return false } func (m *pciMigModeManager) isMigModeEnabled(bar0 mmio.Mmio) bool { return m.checkBitsInReg(bar0, MigModeCheckReg, MigModeCheckEnabled) } func (m *pciMigModeManager) setMigModeEnabled(bar0 mmio.Mmio) { m.writeBitsInRegWithMask(bar0, MigModeSetReg, MigModeSetMask, MigModeSetEnabled) } func (m *pciMigModeManager) setMigModeDisabled(bar0 mmio.Mmio) { m.writeBitsInRegWithMask(bar0, MigModeSetReg, MigModeSetMask, MigModeSetDisabled) } func (m *pciMigModeManager) isMigModeChangePending(bar0 mmio.Mmio) bool { enabled := m.isMigModeEnabled(bar0) pendingEnable := m.checkBitsInRegWithMask(bar0, MigModeSetReg, MigModeSetMask, MigModeSetEnabled) pendingDisable := m.checkBitsInRegWithMask(bar0, MigModeSetReg, MigModeSetMask, MigModeSetDisabled) if enabled && pendingDisable { return true } if !enabled && pendingEnable { return true } return false } func (m *pciMigModeManager) IsMigCapable(gpu int) (bool, error) { bar0, err := m.openBar0ReadOnly(gpu) if err != nil { return false, err } defer m.tryCloseBar0(bar0) return m.isMigCapable(bar0), nil } func (m *pciMigModeManager) GetMigMode(gpu int) (MigMode, error) { bar0, err := m.openBar0ReadOnlyAndWaitForBoot(gpu) if err != nil { return -1, err } defer m.tryCloseBar0(bar0) if !m.isMigCapable(bar0) { return -1, fmt.Errorf("non Mig-capable GPU") } if m.isMigModeEnabled(bar0) { return Enabled, nil } return Disabled, nil } func (m *pciMigModeManager) SetMigMode(gpu int, mode MigMode) error { capable, err := m.IsMigCapable(gpu) if err != nil { return fmt.Errorf("error checking if GPU is MIG capable: %v", err) } if !capable { return fmt.Errorf("non Mig-capable GPU") } bar0, err := m.openBar0AndWaitForBoot(gpu) if err != nil { return err } defer m.tryCloseBar0(bar0) switch mode { case Disabled: m.setMigModeDisabled(bar0) case Enabled: m.setMigModeEnabled(bar0) default: return fmt.Errorf("unknown Mig mode selected: %v", mode) } err = bar0.Sync() if err != nil { return fmt.Errorf("error syncing writes to bar0: %v", err) } return nil } func (m *pciMigModeManager) IsMigModeChangePending(gpu int) (bool, error) { bar0, err := m.openBar0ReadOnlyAndWaitForBoot(gpu) if err != nil { return false, err } defer m.tryCloseBar0(bar0) if !m.isMigCapable(bar0) { return false, fmt.Errorf("non Mig-capable GPU") } return m.isMigModeChangePending(bar0), nil } NVIDIA-mig-parted-47bc938/pkg/mig/mode/pci_test.go000066400000000000000000000100051520540370700215010ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mode import ( "fmt" "testing" "github.com/stretchr/testify/require" "github.com/NVIDIA/go-nvlib/pkg/nvpci" ) type mockPciMigModeManager struct { *pciMigModeManager driverBusy bool } func NewMockPciA100Device() (*mockPciMigModeManager, error) { nvpci, err := nvpci.NewMockNvpci() if err != nil { return nil, fmt.Errorf("error creating Mock A100 PCI device: %v", err) } err = nvpci.AddMockA100("0000:80:05.1", 0, nil) if err != nil { return nil, fmt.Errorf("error adding Mock A100 device to MockNvpci: %v", err) } mock := &mockPciMigModeManager{ &pciMigModeManager{nvpci}, false, } return mock, nil } func (m *mockPciMigModeManager) Cleanup() { m.nvpci.(*nvpci.MockNvpci).Cleanup() } func (m *mockPciMigModeManager) SetBooted(gpu int, booted bool) error { bar0, err := m.openBar0(0) if err != nil { return err } defer bar0.Close() if booted { bar0.Write32(BootCompleteReg, BootCompleteValue) } else { bar0.Write32(BootCompleteReg, 0) } return nil } func (m *mockPciMigModeManager) SetMigCapable(gpu int, capable bool) error { bar0, err := m.openBar0(0) if err != nil { return err } defer bar0.Close() if capable { bar0.Write32(PmcIDReg, migCapablePmcIDs[0]) } else { bar0.Write32(PmcIDReg, 0xdeadbeef) } return nil } func (m *mockPciMigModeManager) SetMigMode(gpu int, mode MigMode) error { err := m.pciMigModeManager.SetMigMode(gpu, mode) if err != nil { return err } bar0, err := m.openBar0(0) if err != nil { return err } defer bar0.Close() if !m.driverBusy { if mode == Enabled { m.setBitsInReg(bar0, MigModeCheckReg, MigModeCheckEnabled) } else { m.clearBitsInReg(bar0, MigModeCheckReg, MigModeCheckEnabled) } } return nil } func TestPciIsMigCapable(t *testing.T) { manager, err := NewMockPciA100Device() require.Nil(t, err, "Error creating MockPciA100Device") defer manager.Cleanup() err = manager.SetBooted(0, true) require.Nil(t, err, "Unexpected failure from SetBooted") capable, err := manager.IsMigCapable(0) require.Nil(t, err, "Unexpected failure from IsMigCapable") require.True(t, capable) err = manager.SetMigCapable(0, false) require.Nil(t, err, "Unexpected failure from SetMigCapable") capable, err = manager.IsMigCapable(0) require.Nil(t, err, "Unexpected failure from IsMigCapable") require.False(t, capable) } func TestPciEnableDisableMig(t *testing.T) { manager, err := NewMockPciA100Device() require.Nil(t, err, "Error creating MockPciA100Device") defer manager.Cleanup() err = manager.SetBooted(0, true) require.Nil(t, err, "Unexpected failure from SetBooted") err = manager.SetMigMode(0, Enabled) require.Nil(t, err, "Unexpected failure from SetMigMode") mode, err := manager.GetMigMode(0) require.Nil(t, err, "Unexpected failure from GetMigMode") require.Equal(t, Enabled, mode) err = manager.SetMigMode(0, Disabled) require.Nil(t, err, "Unexpected failure from SetMigMode") mode, err = manager.GetMigMode(0) require.Nil(t, err, "Unexpected failure from GetMigMode") require.Equal(t, Disabled, mode) manager.driverBusy = true err = manager.SetMigMode(0, Enabled) require.Nil(t, err, "Unexpected failure from SetMigMode") mode, err = manager.GetMigMode(0) require.Nil(t, err, "Unexpected failure from GetMigMode") require.Equal(t, Disabled, mode) pending, err := manager.IsMigModeChangePending(0) require.Nil(t, err, "Unexpected failure from IsMigModeChangePending") require.True(t, pending) } NVIDIA-mig-parted-47bc938/pkg/mig/reconfigure/000077500000000000000000000000001520540370700207305ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/pkg/mig/reconfigure/reconfigure.go000066400000000000000000000601151520540370700235720ustar00rootroot00000000000000/* * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package reconfigure import ( "context" "encoding/json" "fmt" "os" "os/exec" "path/filepath" "strings" "time" log "github.com/sirupsen/logrus" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes" "github.com/NVIDIA/mig-parted/internal/systemd" ) const ( migConfigStateLabel = "nvidia.com/mig.config.state" devicePluginDeployLabel = "nvidia.com/gpu.deploy.device-plugin" gpuFeatureDiscoveryDeployLabel = "nvidia.com/gpu.deploy.gpu-feature-discovery" dcgmExporterDeployLabel = "nvidia.com/gpu.deploy.dcgm-exporter" dcgmDeployLabel = "nvidia.com/gpu.deploy.dcgm" nvsmDeployLabel = "nvidia.com/gpu.deploy.nvsm" migStateSuccess = "success" migStateFailed = "failed" ) var ( NoRestartHostSystemdServicesOnExit = false NoRestartK8sDaemonsetsOnExit = false ) // Options holds all the command line opts for the reconfigure command type Options struct { // Required opts NodeName string MigConfigFile string SelectedMigConfig string DefaultGPUClientsNamespace string // Optional opts WithReboot bool WithShutdownHostGPUClients bool CDIEnabled bool HostRootMount string HostNvidiaDir string HostMigManagerStateFile string HostGPUClientServices string HostKubeletService string DriverRoot string DriverRootCtrPath string DevRoot string DevRootCtrPath string DriverLibraryPath string NvidiaSMIPath string NvidiaCDIHookPath string } // Reconfigure handles the MIG reconfiguration process type Reconfigure struct { ctx context.Context clientset *kubernetes.Clientset systemdManager *systemd.Manager opts *Options migPartedBinary []string // State tracking pluginDeployed string gfdDeployed string dcgmExporterDeployed string dcgmDeployed string nvsmDeployed string currentState string migModeChangeRequired bool stoppedServices []string } // New creates a new Reconfigure instance func New(ctx context.Context, clientset *kubernetes.Clientset, migPartedBinary []string, opts *Options) (*Reconfigure, error) { if len(opts.HostRootMount) > 0 { hostSystemBusAddress := fmt.Sprintf("unix:path=%s/run/dbus/system_bus_socket", opts.HostRootMount) _ = os.Setenv("DBUS_SYSTEM_BUS_ADDRESS", hostSystemBusAddress) } systemdManager, err := systemd.NewManager(ctx) if err != nil { return nil, fmt.Errorf("failed to initialize systemd manager: %w", err) } return &Reconfigure{ ctx: ctx, clientset: clientset, migPartedBinary: migPartedBinary, opts: opts, systemdManager: systemdManager, }, nil } // Run executes the complete MIG reconfiguration process func (r *Reconfigure) Run() error { // Ensure systemd managers are cleaned up defer r.cleanup() if err := r.getCurrentNodeLabels(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to get current node labels: %w", err) } if err := r.validateMigConfig(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to validate MIG configuration: %w", err) } if r.isConfigAlreadyApplied() { log.Info("Selected MIG config is already applied") _ = r.setState(migStateSuccess) return nil } if err := r.persistConfigIfNeeded(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to persist config: %w", err) } if err := r.checkMigModeChangeRequired(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to check if a MIG mode change is required: %w", err) } if err := r.setNodeLabel(migConfigStateLabel, "pending"); err != nil { log.Info("Unable to set the value of 'nvidia.com/mig.config.state' to 'pending'") _ = r.setState(migStateFailed) return fmt.Errorf("failed to set state to pending: %w", err) } if err := r.shutdownKubernetesGPUClients(); err != nil { log.Info("Unable to tear down GPU client pods by setting their daemonset labels") _ = r.setState(migStateFailed) return fmt.Errorf("failed to shutdown Kubernetes GPU clients: %w", err) } if err := r.waitForPodsToBeDeleted(); err != nil { return fmt.Errorf("failed to wait for pods to be deleted: %w", err) } if r.opts.WithShutdownHostGPUClients { if err := r.shutdownHostGPUClients(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to shutdown host GPU clients: %w", err) } if r.migModeChangeRequired { time.Sleep(30 * time.Second) } } if err := r.applyMigModeChange(); err != nil { if r.opts.WithReboot { log.Infof("Changing the '%s' node label to 'rebooting'\n", migConfigStateLabel) if err := r.setNodeLabel(migConfigStateLabel, "rebooting"); err != nil { log.Info("Unable to set the value of 'nvidia.com/mig.config.state' to 'rebooting'") log.Info("Exiting so as not to reboot multiple times unexpectedly") _ = r.setState(migStateFailed) return err } log.Info("Rebooting the node...") cmd := exec.Command("chroot", r.opts.HostRootMount, "reboot") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { log.Warnf("Failed to reboot the node: %v", err) } return nil } } if err := r.applyMigConfig(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to apply MIG configuration: %w", err) } if r.opts.CDIEnabled { log.Info("Running nvidia-smi") if err := r.runNvidiaSMI(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to run nvidia-smi: %w", err) } if err := r.handleCDI(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to handle CDI: %w", err) } } if r.opts.WithShutdownHostGPUClients { if err := r.restartHostGPUClients(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to restart host GPU clients: %w", err) } } if err := r.restartValidatorPod(); err != nil { return fmt.Errorf("failed to restart validator pod: %w", err) } if err := r.restartKubernetesGPUClients(); err != nil { _ = r.setState(migStateFailed) return fmt.Errorf("failed to restart Kubernetes GPU clients: %w", err) } return r.setState(migStateSuccess) } // cleanup cleans up systemd managers func (r *Reconfigure) cleanup() { if r.systemdManager != nil { r.systemdManager.Close() } } // getCurrentNodeLabels retrieves current node labels func (r *Reconfigure) getCurrentNodeLabels() error { node, err := r.clientset.CoreV1().Nodes().Get(r.ctx, r.opts.NodeName, metav1.GetOptions{}) if err != nil { return fmt.Errorf("failed to get node: %w", err) } labels := node.Labels r.pluginDeployed = labels[devicePluginDeployLabel] r.gfdDeployed = labels[gpuFeatureDiscoveryDeployLabel] r.dcgmExporterDeployed = labels[dcgmExporterDeployLabel] r.dcgmDeployed = labels[dcgmDeployLabel] r.nvsmDeployed = labels[nvsmDeployLabel] r.currentState = labels[migConfigStateLabel] log.Infof("Current value of '%s=%s'\n", devicePluginDeployLabel, r.pluginDeployed) log.Infof("Current value of '%s=%s'\n", gpuFeatureDiscoveryDeployLabel, r.gfdDeployed) log.Infof("Current value of '%s=%s'\n", dcgmExporterDeployLabel, r.dcgmExporterDeployed) log.Infof("Current value of '%s=%s'\n", dcgmDeployLabel, r.dcgmDeployed) log.Infof("Current value of '%s=%s'\n", nvsmDeployLabel, r.nvsmDeployed) log.Infof("Current value of '%s=%s'\n", migConfigStateLabel, r.currentState) return nil } // validateMigConfig validates the MIG configuration func (r *Reconfigure) validateMigConfig() error { log.Info("Asserting that the requested configuration is present in the configuration file") commandSlice := r.migPartedBinary commandArgs := []string{"assert", "--valid-config", "-f", r.opts.MigConfigFile, "-c", r.opts.SelectedMigConfig} commandSlice = append(commandSlice, commandArgs...) // TODO: need to invoke this method via Go cmd := exec.Command(commandSlice[0], commandSlice[1:]...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() } // isConfigAlreadyApplied checks if the selected config is already applied func (r *Reconfigure) isConfigAlreadyApplied() bool { log.Info("Checking if the selected MIG config is currently applied or not") commandSlice := r.migPartedBinary commandArgs := []string{"assert", "-f", r.opts.MigConfigFile, "-c", r.opts.SelectedMigConfig} commandSlice = append(commandSlice, commandArgs...) // TODO: need to invoke this method via Go cmd := exec.Command(commandSlice[0], commandSlice[1:]...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() == nil } // persistConfigIfNeeded persists the configuration if needed func (r *Reconfigure) persistConfigIfNeeded() error { if r.opts.HostRootMount == "" || r.opts.HostMigManagerStateFile == "" { return nil } stateFilePath := filepath.Join(r.opts.HostRootMount, r.opts.HostMigManagerStateFile) if _, err := os.Stat(stateFilePath); os.IsNotExist(err) { return nil } log.Infof("Persisting %s to %s\n", r.opts.SelectedMigConfig, r.opts.HostMigManagerStateFile) return r.persistConfig() } // persistConfig persists the configuration to the state file func (r *Reconfigure) persistConfig() error { config := fmt.Sprintf(`[Service] Environment="MIG_PARTED_SELECTED_CONFIG=%s" `, r.opts.SelectedMigConfig) stateFilePath := filepath.Join(r.opts.HostRootMount, r.opts.HostMigManagerStateFile) // Write config to file if err := os.WriteFile(stateFilePath, []byte(config), 0600); err != nil { return fmt.Errorf("failed to write config to state file: %w", err) } return r.systemdManager.ReloadDaemon() } // checkMigModeChangeRequired checks if MIG mode change is required func (r *Reconfigure) checkMigModeChangeRequired() error { log.Info("Checking if the MIG mode setting in the selected config is currently applied or not") log.Info("If the state is 'rebooting', we expect this to always return true") commandSlice := r.migPartedBinary commandArgs := []string{"assert", "--mode-only", "-f", r.opts.MigConfigFile, "-c", r.opts.SelectedMigConfig} commandSlice = append(commandSlice, commandArgs...) // TODO: need to invoke this method via Go cmd := exec.Command(commandSlice[0], commandSlice[1:]...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { if r.currentState == "rebooting" { return fmt.Errorf("MIG mode change did not take effect after rebooting") } if r.opts.WithShutdownHostGPUClients { // Add kubelet service to the list if we're shutting down host GPU clients if r.opts.HostKubeletService != "" { services := strings.Split(r.opts.HostGPUClientServices, ",") services = append(services, r.opts.HostKubeletService) r.opts.HostGPUClientServices = strings.Join(services, ",") } } r.migModeChangeRequired = true } return nil } // shutdownKubernetesGPUClients shuts down GPU clients in Kubernetes func (r *Reconfigure) shutdownKubernetesGPUClients() error { log.Info("Shutting down all GPU clients in Kubernetes by disabling their component-specific nodeSelector labels") labels := map[string]string{ devicePluginDeployLabel: r.maybeSetPaused(r.pluginDeployed), gpuFeatureDiscoveryDeployLabel: r.maybeSetPaused(r.gfdDeployed), dcgmExporterDeployLabel: r.maybeSetPaused(r.dcgmExporterDeployed), dcgmDeployLabel: r.maybeSetPaused(r.dcgmDeployed), nvsmDeployLabel: r.maybeSetPaused(r.nvsmDeployed), } return r.setNodeLabels(labels) } // waitForPodsToBeDeleted waits for GPU client pods to be deleted func (r *Reconfigure) waitForPodsToBeDeleted() error { timeout := 5 * time.Minute log.Infof("Waiting for the device-plugin to shutdown") if err := r.waitForPodDeletion("app=nvidia-device-plugin-daemonset", timeout); err != nil { return fmt.Errorf("device-plugin pod did not shutdown: %w", err) } log.Info("Waiting for gpu-feature-discovery to shutdown") if err := r.waitForPodDeletion("app=gpu-feature-discovery", timeout); err != nil { return fmt.Errorf("gpu-feature-discovery pod did not shutdown: %w", err) } log.Info("Waiting for dcgm-exporter to shutdown") if err := r.waitForPodDeletion("app=nvidia-dcgm-exporter", timeout); err != nil { return fmt.Errorf("dcgm-exporter pod did not shutdown: %w", err) } log.Info("Waiting for dcgm to shutdown") if err := r.waitForPodDeletion("app=nvidia-dcgm", timeout); err != nil { return fmt.Errorf("dcgm pod did not shutdown: %w", err) } log.Info("Removing the cuda-validator pod") if err := r.deletePod("app=nvidia-cuda-validator"); err != nil { return fmt.Errorf("failed to delete cuda-validator pod: %w", err) } log.Info("Removing the plugin-validator pod") if err := r.deletePod("app=nvidia-device-plugin-validator"); err != nil { return fmt.Errorf("failed to delete plugin-validator pod: %w", err) } return nil } // shutdownHostGPUClients shuts down host GPU clients func (r *Reconfigure) shutdownHostGPUClients() error { log.Info("Shutting down all GPU clients on the host by stopping their systemd services") services := strings.Split(r.opts.HostGPUClientServices, ",") stoppedServices, err := r.systemdManager.StopSystemdServices(services) if err != nil { return fmt.Errorf("failed to stop host systemd services: %w", err) } r.stoppedServices = stoppedServices return nil } // applyMigModeChange applies the MIG mode change func (r *Reconfigure) applyMigModeChange() error { log.Info("Applying the MIG mode change from the selected config to the node (and double checking it took effect)") log.Info("If the -r option was passed, the node will be automatically rebooted if this is not successful") commandSlice := r.migPartedBinary commandArgs := []string{"-d", "apply", "--mode-only", "-f", r.opts.MigConfigFile, "-c", r.opts.SelectedMigConfig} commandSlice = append(commandSlice, commandArgs...) // TODO: need to invoke this method via Go cmd := exec.Command(commandSlice[0], commandSlice[1:]...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("failed to apply MIG mode change: %w", err) } commandSlice = r.migPartedBinary commandArgs = []string{"-d", "assert", "--mode-only", "-f", r.opts.MigConfigFile, "-c", r.opts.SelectedMigConfig} commandSlice = append(commandSlice, commandArgs...) cmd = exec.Command(commandSlice[0], commandSlice[1:]...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() } // applyMigConfig applies the MIG configuration func (r *Reconfigure) applyMigConfig() error { log.Info("Applying the selected MIG config to the node") commandSlice := r.migPartedBinary commandArgs := []string{"-d", "apply", "-f", r.opts.MigConfigFile, "-c", r.opts.SelectedMigConfig} commandSlice = append(commandSlice, commandArgs...) cmd := exec.Command(commandSlice[0], commandSlice[1:]...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() } // handleCDI handles CDI operations if enabled func (r *Reconfigure) handleCDI() error { log.Info("Creating NVIDIA control device nodes") // TODO: Instead of shelling out, we need to invoke the method via Go. The Toolkit code needs to be refactored first. cmd := exec.Command("nvidia-ctk", "system", "create-device-nodes", "--control-devices", "--dev-root="+r.opts.DevRootCtrPath) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return fmt.Errorf("failed to create control device nodes: %w", err) } log.Info("Creating management CDI spec") return r.createCDISpec() } // restartHostGPUClients restarts host GPU clients func (r *Reconfigure) restartHostGPUClients() error { log.Info("Restarting all GPU clients previously shutdown on the host by restarting their systemd services") NoRestartHostSystemdServicesOnExit = true if err := r.hostStartSystemdServices(); err != nil { log.Info("Unable to restart GPU clients on host by restarting their systemd services") return err } return nil } // restartKubernetesGPUClients restarts Kubernetes GPU clients func (r *Reconfigure) restartKubernetesGPUClients() error { log.Info("Restarting all GPU clients previously shutdown in Kubernetes by reenabling their component-specific nodeSelector labels") NoRestartK8sDaemonsetsOnExit = true labels := map[string]string{ devicePluginDeployLabel: r.maybeSetTrue(r.pluginDeployed), gpuFeatureDiscoveryDeployLabel: r.maybeSetTrue(r.gfdDeployed), dcgmExporterDeployLabel: r.maybeSetTrue(r.dcgmExporterDeployed), dcgmDeployLabel: r.maybeSetTrue(r.dcgmDeployed), nvsmDeployLabel: r.maybeSetTrue(r.nvsmDeployed), } return r.setNodeLabels(labels) } // restartValidatorPod restarts the validator pod func (r *Reconfigure) restartValidatorPod() error { log.Info("Restarting validator pod to re-run all validations") return r.deletePod("app=nvidia-operator-validator") } // setState sets the final state and exits func (r *Reconfigure) setState(state string) error { if r.opts.WithShutdownHostGPUClients && !NoRestartHostSystemdServicesOnExit { log.Info("Restarting any GPU clients previously shutdown on the host by restarting their systemd services") if err := r.hostStartSystemdServices(); err != nil { log.Info("Unable to restart host systemd services") return err } } if !NoRestartK8sDaemonsetsOnExit { log.Info("Restarting any GPU clients previously shutdown in Kubernetes by reenabling their component-specific nodeSelector labels") labels := map[string]string{ devicePluginDeployLabel: r.maybeSetTrue(r.pluginDeployed), gpuFeatureDiscoveryDeployLabel: r.maybeSetTrue(r.gfdDeployed), dcgmExporterDeployLabel: r.maybeSetTrue(r.dcgmExporterDeployed), dcgmDeployLabel: r.maybeSetTrue(r.dcgmDeployed), nvsmDeployLabel: r.maybeSetTrue(r.nvsmDeployed), } if err := r.setNodeLabels(labels); err != nil { log.Info("Unable to bring up GPU client pods by setting their daemonset labels") return err } } log.Infof("Changing the '%s' node label to '%s'\n", migConfigStateLabel, state) if err := r.setNodeLabel(migConfigStateLabel, state); err != nil { log.Infof("Unable to set '%s' to '%s'\n", migConfigStateLabel, state) log.Infof("Exiting with incorrect value in '%s'\n", migConfigStateLabel) return err } return nil } func (r *Reconfigure) maybeSetPaused(currentValue string) string { if currentValue == "false" { return "false" } return "paused-for-mig-change" } func (r *Reconfigure) maybeSetTrue(currentValue string) string { if currentValue == "false" { return "false" } return "true" } func (r *Reconfigure) setNodeLabel(key, value string) error { return r.setNodeLabels(map[string]string{key: value}) } func (r *Reconfigure) setNodeLabels(labels map[string]string) error { patchData, err := json.Marshal(map[string]interface{}{ "metadata": map[string]interface{}{ "labels": labels, }, }) if err != nil { return fmt.Errorf("failed to marshal patch data: %w", err) } _, err = r.clientset.CoreV1().Nodes().Patch(r.ctx, r.opts.NodeName, types.MergePatchType, patchData, metav1.PatchOptions{}) return err } func (r *Reconfigure) waitForPodDeletion(labelSelector string, timeout time.Duration) error { return wait.PollUntilContextTimeout(r.ctx, time.Second, timeout, false, func(ctx context.Context) (bool, error) { pods, err := r.clientset.CoreV1().Pods(r.opts.DefaultGPUClientsNamespace).List(ctx, metav1.ListOptions{ FieldSelector: "spec.nodeName=" + r.opts.NodeName, LabelSelector: labelSelector, }) if err != nil { return false, err } return len(pods.Items) == 0, nil }) } func (r *Reconfigure) deletePod(labelSelector string) error { podClient := r.clientset.CoreV1().Pods(r.opts.DefaultGPUClientsNamespace) podList, err := podClient.List(r.ctx, metav1.ListOptions{ FieldSelector: "spec.nodeName=" + r.opts.NodeName, LabelSelector: labelSelector, }) if err != nil { return fmt.Errorf("failed to list pods with label %s: %w", labelSelector, err) } for _, pod := range podList.Items { if err := podClient.Delete(r.ctx, pod.Name, metav1.DeleteOptions{}); err != nil { return fmt.Errorf("failed to delete pod %s/%s: %w", pod.Namespace, pod.Name, err) } } return nil } func (r *Reconfigure) runNvidiaSMI() error { if r.opts.DriverRootCtrPath == r.opts.DevRootCtrPath { cmd := exec.Command("chroot", r.opts.DriverRootCtrPath, "nvidia-smi") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() } cmd := exec.Command("chroot", r.opts.HostRootMount, r.opts.NvidiaSMIPath) cmd.Env = append(os.Environ(), "LD_PRELOAD="+r.opts.DriverLibraryPath) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr return cmd.Run() } func (r *Reconfigure) createCDISpec() error { log.Info("Creating management CDI spec (simplified implementation)") cdiGenerateCommand := exec.Command("nvidia-ctk", "cdi", "generate", "--mode=management", "--driver-root="+r.opts.DriverRootCtrPath, "--dev-root="+r.opts.DevRootCtrPath, "--vendor=management.nvidia.com", "--class=gpu", "--nvidia-cdi-hook-path="+r.opts.NvidiaCDIHookPath, ) stdout1, err := cdiGenerateCommand.StdoutPipe() if err != nil { return fmt.Errorf("failed to get stdout pipe for the nvidia-ctk command: %w", err) } cdiTransformDriverRootCommand := exec.Command("nvidia-ctk", "cdi", "transform", "root", "--from="+r.opts.DriverRootCtrPath, "--to="+r.opts.DriverRoot, "--input=-") cdiTransformDriverRootCommand.Stdin = stdout1 stdout2, err := cdiTransformDriverRootCommand.StdoutPipe() if err != nil { return fmt.Errorf("failed to get stdout pipe for the cdiTransformDriverRootCommand: %w", err) } cdiTransformDevRootCommand := exec.Command("nvidia-ctk", "cdi", "transform", "root", "--from="+r.opts.DevRootCtrPath, "--to="+r.opts.DevRoot, "--input=-", "--output=/var/run/cdi/management.nvidia.com-gpu.yaml") cdiTransformDevRootCommand.Stdin = stdout2 err = cdiGenerateCommand.Start() if err != nil { return fmt.Errorf("cmd.Start error for cdiGenerateCommand: %w", err) } err = cdiTransformDriverRootCommand.Start() if err != nil { return fmt.Errorf("cmd.Start error for cdiTransformDriverRootCommand: %w", err) } err = cdiTransformDevRootCommand.Start() if err != nil { return fmt.Errorf("cmd.Start error for running cdiTransformDevRootCommand: %w", err) } if err = cdiGenerateCommand.Wait(); err != nil { return fmt.Errorf("cmd.Wait error for cdiGenerateCommand: %w", err) } if err = cdiTransformDriverRootCommand.Wait(); err != nil { return fmt.Errorf("cmd.Wait error for cdiTransformDriverRootCommand: %w", err) } if err = cdiTransformDevRootCommand.Wait(); err != nil { return fmt.Errorf("cmd.Wait error for cdiTransformDevRootCommand: %w", err) } return nil } func (r *Reconfigure) hostStartSystemdServices() error { services := r.stoppedServices var restartServices []string if len(services) == 0 { // If no services were tracked as stopped, use all configured services services = strings.Split(r.opts.HostGPUClientServices, ",") for _, service := range services { serviceStatus, err := r.systemdManager.GetServiceStatus(service) if err != nil { log.Infof("failed to get service status: %v\n", err) continue } if serviceStatus.SubState == "not-found" { continue } if serviceStatus.Failed { restartServices = append(restartServices, service) continue } if serviceStatus.Active || serviceStatus.Enabled || serviceStatus.Type == "oneshot" { continue } restartServices = append(restartServices, service) } } else { // Use the services that were actually stopped restartServices = r.stoppedServices } return r.systemdManager.StartSystemdServices(restartServices) } NVIDIA-mig-parted-47bc938/pkg/mig/reconfigure/reconfigure_test.go000066400000000000000000000032051520540370700246260ustar00rootroot00000000000000/* * Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package reconfigure import ( "testing" ) func TestMaybeSetPaused(t *testing.T) { reconfigure := &Reconfigure{} tests := []struct { input string expected string }{ {"false", "false"}, {"true", "paused-for-mig-change"}, {"paused-for-mig-change", "paused-for-mig-change"}, {"", "paused-for-mig-change"}, } for _, tt := range tests { t.Run(tt.input, func(t *testing.T) { result := reconfigure.maybeSetPaused(tt.input) if result != tt.expected { t.Errorf("maybeSetPaused(%s) = %s, want %s", tt.input, result, tt.expected) } }) } } func TestMaybeSetTrue(t *testing.T) { reconfigure := &Reconfigure{} tests := []struct { input string expected string }{ {"false", "false"}, {"true", "true"}, {"paused-for-mig-change", "true"}, {"", "true"}, } for _, tt := range tests { t.Run(tt.input, func(t *testing.T) { result := reconfigure.maybeSetTrue(tt.input) if result != tt.expected { t.Errorf("maybeSetTrue(%s) = %s, want %s", tt.input, result, tt.expected) } }) } } NVIDIA-mig-parted-47bc938/pkg/mig/state/000077500000000000000000000000001520540370700175405ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/pkg/mig/state/state.go000066400000000000000000000154111520540370700212110ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package state import ( "fmt" log "github.com/sirupsen/logrus" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/mig-parted/internal/nvlib" "github.com/NVIDIA/mig-parted/pkg/mig/config" "github.com/NVIDIA/mig-parted/pkg/mig/mode" "github.com/NVIDIA/mig-parted/pkg/types" ) // Manager represents the set of operations for fetching / restoring the full MIG state of all GPUs on a node. type Manager interface { Fetch() (*types.MigState, error) RestoreMode(state *types.MigState) error RestoreConfig(state *types.MigState) error } type migStateManager struct { nvml nvml.Interface nvlib nvlib.Interface mode mode.Manager config config.Manager } var _ Manager = (*migStateManager)(nil) func tryNvmlShutdown(nvmlLib nvml.Interface) { ret := nvmlLib.Shutdown() if ret != nvml.SUCCESS { log.Warnf("Error shutting down NVML: %v", ret) } } // NewMigStateManager creates a new MIG state Manager. func NewMigStateManager(nvml nvml.Interface) Manager { return &migStateManager{ nvml, nvlib.NewMock(nvml), mode.NewNvmlMigModeManager(nvml), config.NewNvmlMigConfigManager(nvml), } } // Fetch collects the full MIG state of all GPUs on a node and returns it in a 'MigState' struct. func (m *migStateManager) Fetch() (*types.MigState, error) { ret := m.nvml.Init() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error initializing NVML: %v", ret) } defer tryNvmlShutdown(m.nvml) numGPUs, ret := m.nvml.DeviceGetCount() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting device count: %v", ret) } var migState types.MigState for gpu := 0; gpu < numGPUs; gpu++ { capable, err := m.mode.IsMigCapable(gpu) if err != nil { return nil, fmt.Errorf("error checking MIG capable: %v", err) } if !capable { continue } device, ret := m.nvml.DeviceGetHandleByIndex(gpu) if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting device handle: %v", ret) } uuid, ret := device.GetUUID() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting device uuid: %v", ret) } deviceState := types.DeviceState{ UUID: uuid, } deviceState.MigMode, err = m.mode.GetMigMode(gpu) if err != nil { return nil, fmt.Errorf("error getting MIG mode: %v", err) } if deviceState.MigMode == mode.Disabled { migState.Devices = append(migState.Devices, deviceState) continue } err = m.nvlib.Mig.Device(device).WalkGpuInstances(func(gi nvml.GpuInstance, giProfileID int, giProfileInfo nvml.GpuInstanceProfileInfo) error { giInfo, ret := gi.GetInfo() if ret != nvml.SUCCESS { return fmt.Errorf("error getting GPU instance info for '%v': %v", giProfileID, ret) } giState := types.GpuInstanceState{ ProfileID: giProfileID, Placement: giInfo.Placement, } err := m.nvlib.Mig.GpuInstance(gi).WalkComputeInstances(func(ci nvml.ComputeInstance, ciProfileID int, ciEngProfileID int, ciProfileInfo nvml.ComputeInstanceProfileInfo) error { ciState := types.ComputeInstanceState{ ProfileID: ciProfileID, EngProfileID: ciEngProfileID, } giState.ComputeInstances = append(giState.ComputeInstances, ciState) return nil }) if err != nil { return fmt.Errorf("error walking compute instances for '%v': %v", giProfileID, err) } deviceState.GpuInstances = append(deviceState.GpuInstances, giState) return nil }) if err != nil { return nil, fmt.Errorf("error walking gpu instances for '%v': %v", gpu, err) } migState.Devices = append(migState.Devices, deviceState) } return &migState, nil } // RestoreMode restores just the MIG mode state of all GPUs represented in the provided 'MigState'. func (m *migStateManager) RestoreMode(state *types.MigState) error { ret := m.nvml.Init() if ret != nvml.SUCCESS { return fmt.Errorf("error initializing NVML: %v", ret) } defer tryNvmlShutdown(m.nvml) for _, deviceState := range state.Devices { device, ret := m.nvml.DeviceGetHandleByUUID(deviceState.UUID) if ret != nvml.SUCCESS { return fmt.Errorf("error getting device handle: %v", ret) } index, ret := device.GetIndex() if ret != nvml.SUCCESS { return fmt.Errorf("error getting device index: %v", ret) } err := m.mode.SetMigMode(index, deviceState.MigMode) if err != nil { return fmt.Errorf("error setting MIG mode on device '%v': %v", deviceState.UUID, err) } } return nil } // RestoreMode restores the full MIG configuration of all GPUs represented in the provided 'MigState'. func (m *migStateManager) RestoreConfig(state *types.MigState) error { ret := m.nvml.Init() if ret != nvml.SUCCESS { return fmt.Errorf("error initializing NVML: %v", ret) } defer tryNvmlShutdown(m.nvml) for _, deviceState := range state.Devices { if deviceState.MigMode == mode.Disabled { continue } device, ret := m.nvml.DeviceGetHandleByUUID(deviceState.UUID) if ret != nvml.SUCCESS { return fmt.Errorf("error getting device handle: %v", ret) } index, ret := device.GetIndex() if ret != nvml.SUCCESS { return fmt.Errorf("error getting device index: %v", ret) } err := m.config.ClearMigConfig(index) if err != nil { return fmt.Errorf("error clearing existing MIG config: %v", err) } for _, giState := range deviceState.GpuInstances { giProfileInfo, ret := device.GetGpuInstanceProfileInfo(giState.ProfileID) if ret != nvml.SUCCESS { return fmt.Errorf("error getting GPU instance profile info for '%v': %v", giState.ProfileID, ret) } placement := giState.Placement gi, ret := device.CreateGpuInstanceWithPlacement(&giProfileInfo, &placement) if ret != nvml.SUCCESS { return fmt.Errorf("error creating GPU instance for '%v': %v", giState.ProfileID, ret) } for _, ciState := range giState.ComputeInstances { ciProfileInfo, ret := gi.GetComputeInstanceProfileInfo(ciState.ProfileID, ciState.EngProfileID) if ret != nvml.SUCCESS { return fmt.Errorf("error getting Compute instance profile info for '(%v, %v)': %v", ciState.ProfileID, ciState.EngProfileID, ret) } _, ret = gi.CreateComputeInstance(&ciProfileInfo) if ret != nvml.SUCCESS { return fmt.Errorf("error creating Compute instance for '(%v, %v)': %v", ciState.ProfileID, ciState.EngProfileID, ret) } } } } return nil } NVIDIA-mig-parted-47bc938/pkg/mig/state/state_test.go000066400000000000000000000051361520540370700222530ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package state import ( "fmt" "testing" "github.com/stretchr/testify/require" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/go-nvml/pkg/nvml/mock/dgxa100" "github.com/NVIDIA/mig-parted/pkg/mig/config" "github.com/NVIDIA/mig-parted/pkg/mig/mode" "github.com/NVIDIA/mig-parted/pkg/types" ) func newMockMigStateManagerOnLunaServer() *migStateManager { nvml := dgxa100.New() return NewMigStateManager(nvml).(*migStateManager) } func TestFetchRestore(t *testing.T) { types.SetMockNVdevlib() mcg := config.NewA100_SXM4_40GB_MigConfigGroup() type testCase struct { description string mode mode.MigMode config types.MigConfig } testCases := func() []testCase { testCases := []testCase{ { "Disabled", mode.Disabled, nil, }, { "Enabled, Empty", mode.Enabled, nil, }, } for _, mc := range mcg.GetPossibleConfigurations() { tc := testCase{ fmt.Sprintf("%v", mc.Flatten()), mode.Enabled, mc, } testCases = append(testCases, tc) } return testCases }() for i := range testCases { tc := testCases[i] // to allow us to run parallelly t.Run(tc.description, func(t *testing.T) { t.Parallel() manager := newMockMigStateManagerOnLunaServer() numGPUs, ret := manager.nvml.DeviceGetCount() require.NotNil(t, ret, "Unexpected nil return from DeviceGetCount") require.Equal(t, ret, nvml.SUCCESS, "Unexpected return value from DeviceGetCount") for i := 0; i < numGPUs; i++ { err := manager.mode.SetMigMode(i, tc.mode) require.Nil(t, err) if tc.mode == mode.Enabled { err = manager.config.SetMigConfig(i, tc.config) require.Nil(t, err, "Unexpected failure from SetMigConfig") } state0, err := manager.Fetch() require.Nil(t, err) err = manager.RestoreMode(state0) require.Nil(t, err) err = manager.RestoreConfig(state0) require.Nil(t, err) state1, err := manager.Fetch() require.Nil(t, err) require.Equal(t, state0, state1) } }) } } NVIDIA-mig-parted-47bc938/pkg/types/000077500000000000000000000000001520540370700170105ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/pkg/types/device.go000066400000000000000000000032351520540370700206010ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package types import ( "fmt" "strconv" ) // DeviceID represents a GPU Device ID as read from a GPUs PCIe config space. type DeviceID uint32 // NewDeviceID constructs a new 'DeviceID' from the device and vendor values pulled from a GPUs PCIe config space. func NewDeviceID(device, vendor uint16) DeviceID { return DeviceID((uint32(device) << 16) | uint32(vendor)) } // NewDeviceIDFromString constructs a 'DeviceID' from its string representation. func NewDeviceIDFromString(str string) (DeviceID, error) { deviceID, err := strconv.ParseInt(str, 0, 32) if err != nil { return 0, fmt.Errorf("unable to create DeviceID from string '%v': %v", str, err) } return DeviceID(deviceID), nil } // String returns a 'DeviceID' as a string. func (d DeviceID) String() string { return fmt.Sprintf("0x%X", uint32(d)) } // GetVendor returns the 'vendor' portion of a 'DeviceID'. func (d DeviceID) GetVendor() uint16 { return uint16(d) } // GetDevice returns the 'device' portion of a 'DeviceID'. func (d DeviceID) GetDevice() uint16 { return uint16(d >> 16) } NVIDIA-mig-parted-47bc938/pkg/types/mig_config.go000066400000000000000000000063701520540370700214460ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package types import ( "fmt" "sort" "strings" ) // MigConfig holds a map of strings representing a MigProfile to a count of that profile type. // It is meant to represent the set of MIG profiles (and how many of a // particular type) should be instantiated on a GPU. type MigConfig map[string]int // NewMigConfig creates a new 'MigConfig' from a slice of 'MigProfile's. func NewMigConfig(mps []*MigProfile) MigConfig { config := make(MigConfig) for _, mp := range mps { config[mp.String()]++ } return config } // AssertValidFormat checks to ensure that all of the 'MigProfiles's making up a 'MigConfig' are of a valid format. func (m MigConfig) AssertValidFormat() error { if len(m) == 0 { return nil } for k, v := range m { err := AssertValidMigProfileFormat(k) if err != nil { return fmt.Errorf("invalid format for '%v': %v", k, err) } if v < 0 { return fmt.Errorf("invalid count for '%v': %v", v, err) } } for _, v := range m { if v > 0 { return nil } } return fmt.Errorf("all counts for all MigProfiles are 0") } // IsSubsetOf checks if the provided 'MigConfig' is a subset of the originating 'MigConfig'. func (m MigConfig) IsSubsetOf(config MigConfig) bool { for k, v := range m { if v > 0 && !config.Contains(k) { return false } if v > config[k] { return false } } return true } // Contains checks if the provided 'profile' is part of the 'MigConfig'. func (m MigConfig) Contains(profile string) bool { if _, exists := m[profile]; !exists { return false } return m[profile] > 0 } // Equals checks if two 'MigConfig's are equal. // Equality is determined by comparing the profiles contained in each 'MigConfig'. func (m MigConfig) Equals(config MigConfig) bool { if len(m) != len(config) { return false } for k, v := range m { if !config.Contains(k) { return false } if v != config[k] { return false } } return true } // Flatten converts a 'MigConfig' into a slice of 'MigProfile's. // Duplicate 'MigProfile's will exist in this slice for each profile represented in the 'MigConfig'. func (m MigConfig) Flatten() []*MigProfile { var mps []*MigProfile for k, v := range m { mp, err := ParseMigProfile(k) if err != nil { return nil } if v < 0 { return nil } if v == 0 { continue } for i := 0; i < v; i++ { mps = append(mps, mp) } } sort.Slice(mps, func(i, j int) bool { if mps[j].G > mps[i].G { return false } if mps[j].G < mps[i].G { return true } if mps[j].C > mps[i].C { return false } if mps[j].C < mps[i].C { return true } return strings.Join(mps[j].Attributes, ",") < strings.Join(mps[i].Attributes, ",") }) return mps } NVIDIA-mig-parted-47bc938/pkg/types/mig_config_group.go000066400000000000000000000037131520540370700226600ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package types import ( "fmt" ) // MigConfigGroup provides an interface for intaracting with a logical group of 'MigConfig's. // One such group is the set of all valid MigConfigs for the A100, for example. type MigConfigGroup interface { GetDeviceTypes() []*MigProfile GetPossibleConfigurations() []MigConfig AssertValidConfiguration(MigConfig) error } // MigConfigGroupBase is a base struct for constructing a full 'MigConfigGroup'. // It holds the slice of 'MigConfig' structs associated with the group. type MigConfigGroupBase struct { Configs []MigConfig } // MigConfigGroups holds the mapping from a specific 'DeviceID' to a 'MigConfigGroup'. type MigConfigGroups map[DeviceID]MigConfigGroup // GetPossibleConfigurations gets all possible configurations associated with a 'MigConfigGroup'. func (m *MigConfigGroupBase) GetPossibleConfigurations() []MigConfig { return m.Configs } // AssertValidConfiguration checks to ensure that the supplied 'MigConfig' is both valid and part of the 'MigConfigGroup'. func (m *MigConfigGroupBase) AssertValidConfiguration(config MigConfig) error { err := config.AssertValidFormat() if err != nil { return fmt.Errorf("invalid MigConfig: %v", err) } for _, c := range m.Configs { if config.IsSubsetOf(c) { return nil } } return fmt.Errorf("cannot configure as a subset of any valid configuration") } NVIDIA-mig-parted-47bc938/pkg/types/mig_profile.go000066400000000000000000000043611520540370700216370ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package types import ( nvdev "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" ) const ( AttributeMediaExtensions = nvdev.AttributeMediaExtensions ) // MigProfile represents a specific MIG profile. // Examples include "1g.5gb", "2g.10gb", "1c.2g.10gb", or "1c.1g.5gb+me", etc. type MigProfile struct { nvdev.MigProfileInfo } // NewMigProfile constructs a new Profile struct using info from the giProfiles and ciProfiles used to create it. func NewMigProfile(giProfileID, ciProfileID, ciEngProfileID int, migMemorySizeMB, deviceMemorySizeBytes uint64) (*MigProfile, error) { mp, err := nvdevNewMigProfile(giProfileID, ciProfileID, ciEngProfileID, migMemorySizeMB, deviceMemorySizeBytes) if err != nil { return nil, err } return &MigProfile{mp.GetInfo()}, nil } // AssertValidMigProfileFormat checks if the string is in the proper format to represent a MIG profile func AssertValidMigProfileFormat(profile string) error { return nvdevAssertValidMigProfileFormat(profile) } // ParseMigProfile converts a string representation of a MigProfile into an object. func ParseMigProfile(profile string) (*MigProfile, error) { mp, err := nvdevParseMigProfile(profile) if err != nil { return nil, err } return &MigProfile{mp.GetInfo()}, nil } // MustParseMigProfile does the same as Parse(), but never throws an error. func MustParseMigProfile(profile string) *MigProfile { m, _ := ParseMigProfile(profile) return m } // HasAttribute checks if the MigProfile has the specified attribute associated with it. func (m MigProfile) HasAttribute(attr string) bool { for _, a := range m.Attributes { if a == attr { return true } } return false } NVIDIA-mig-parted-47bc938/pkg/types/mig_state.go000066400000000000000000000025331520540370700213160ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package types import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/mig-parted/internal/nvlib/mig" ) // MigState stores the MIG state for a set of GPUs. type MigState struct { Devices []DeviceState } // DeviceState stores the MIG state for a specific GPU. type DeviceState struct { UUID string MigMode mig.Mode GpuInstances []GpuInstanceState } // GpuInstanceState stores the MIG state for a specific GPUInstance. type GpuInstanceState struct { ProfileID int Placement nvml.GpuInstancePlacement ComputeInstances []ComputeInstanceState } // ComputeInstanceState stores the MIG state for a specific ComputeInstance. type ComputeInstanceState struct { ProfileID int EngProfileID int } NVIDIA-mig-parted-47bc938/pkg/types/nvdev.go000066400000000000000000000074501520540370700204670ustar00rootroot00000000000000/* * Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package types import ( "fmt" log "github.com/sirupsen/logrus" nvdev "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/go-nvml/pkg/nvml/mock" ) var nvmllib nvml.Interface var nvdevlib nvdev.Interface func tryNvmlShutdown(nvmlLib nvml.Interface) { ret := nvmlLib.Shutdown() if ret != nvml.SUCCESS { log.Warnf("Error shutting down NVML: %v", ret) } } func nvdevNewMigProfile(giProfileID, ciProfileID, ciEngProfileID int, migMemorySizeMB, deviceMemorySizeBytes uint64) (nvdev.MigProfile, error) { if nvmllib == nil { nvmllib = nvml.New() } if nvdevlib == nil { nvdevlib = nvdev.New(nvmllib) } mp, err := nvdevlib.NewMigProfile(giProfileID, ciProfileID, ciEngProfileID, migMemorySizeMB, deviceMemorySizeBytes) if err != nil { return nil, err } return mp, nil } func nvdevAssertValidMigProfileFormat(profile string) error { if nvmllib == nil { nvmllib = nvml.New() } if nvdevlib == nil { nvdevlib = nvdev.New(nvmllib) } return nvdevlib.AssertValidMigProfileFormat(profile) } func nvdevParseMigProfile(profile string) (nvdev.MigProfile, error) { if nvmllib == nil { nvmllib = nvml.New() } if nvdevlib == nil { nvdevlib = nvdev.New(nvmllib) } ret := nvmllib.Init() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error initializing NVML: %v", ret) } defer tryNvmlShutdown(nvmllib) mp, err := nvdevlib.ParseMigProfile(profile) if err != nil { return nil, err } return mp, nil } func SetMockNVdevlib() { mockDevice := &mock.Device{ GetNameFunc: func() (string, nvml.Return) { return "MockDevice", nvml.SUCCESS }, GetMigModeFunc: func() (int, int, nvml.Return) { return nvml.DEVICE_MIG_ENABLE, nvml.DEVICE_MIG_ENABLE, nvml.SUCCESS }, GetMemoryInfoFunc: func() (nvml.Memory, nvml.Return) { memory := nvml.Memory{ Total: 40 * 1024 * 1024 * 1024, } return memory, nvml.SUCCESS }, GetGpuInstanceProfileInfoFunc: func(Profile int) (nvml.GpuInstanceProfileInfo, nvml.Return) { info := nvml.GpuInstanceProfileInfo{} switch Profile { case nvml.GPU_INSTANCE_PROFILE_1_SLICE, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1: info.MemorySizeMB = 5 * 1024 case nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV2: info.MemorySizeMB = 10 * 1024 case nvml.GPU_INSTANCE_PROFILE_2_SLICE, nvml.GPU_INSTANCE_PROFILE_2_SLICE_REV1: info.MemorySizeMB = 10 * 1024 case nvml.GPU_INSTANCE_PROFILE_3_SLICE: info.MemorySizeMB = 20 * 1024 case nvml.GPU_INSTANCE_PROFILE_4_SLICE: info.MemorySizeMB = 20 * 1024 case nvml.GPU_INSTANCE_PROFILE_7_SLICE: info.MemorySizeMB = 40 * 1024 case nvml.GPU_INSTANCE_PROFILE_6_SLICE, nvml.GPU_INSTANCE_PROFILE_8_SLICE: fallthrough default: return info, nvml.ERROR_NOT_SUPPORTED } return info, nvml.SUCCESS }, } nvmllib = &mock.Interface{ InitFunc: func() nvml.Return { return nvml.SUCCESS }, ShutdownFunc: func() nvml.Return { return nvml.SUCCESS }, DeviceGetCountFunc: func() (int, nvml.Return) { return 1, nvml.SUCCESS }, DeviceGetHandleByIndexFunc: func(Index int) (nvml.Device, nvml.Return) { return mockDevice, nvml.SUCCESS }, } nvdevlib = nvdev.New(nvmllib, nvdev.WithVerifySymbols(false), ) } NVIDIA-mig-parted-47bc938/vendor/000077500000000000000000000000001520540370700163605ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/000077500000000000000000000000001520540370700204175ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/000077500000000000000000000000001520540370700213715ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/000077500000000000000000000000001520540370700231065ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/LICENSE000066400000000000000000000261361520540370700241230ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/NOTICE000066400000000000000000000003061520540370700240110ustar00rootroot00000000000000The file pkg/pciids/default_pci.ids is distributed under the 3-clause BSD License. Maintained by Albert Pool, Martin Mares, and other volunteers from the PCI ID Project at https://pci-ids.ucw.cz/. NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/000077500000000000000000000000001520540370700236675ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/000077500000000000000000000000001520540370700250015ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/000077500000000000000000000000001520540370700262405ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/api.go000066400000000000000000000052351520540370700273450ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package device import ( "github.com/NVIDIA/go-nvml/pkg/nvml" ) // Interface provides the API to the 'device' package. type Interface interface { AssertValidMigProfileFormat(profile string) error GetDevices() ([]Device, error) GetMigDevices() ([]MigDevice, error) GetMigProfiles() ([]MigProfile, error) NewDevice(d nvml.Device) (Device, error) NewDeviceByUUID(uuid string) (Device, error) NewMigDevice(d nvml.Device) (MigDevice, error) NewMigDeviceByUUID(uuid string) (MigDevice, error) NewMigProfile(giProfileID, ciProfileID, ciEngProfileID int, migMemorySizeMB, deviceMemorySizeBytes uint64) (MigProfile, error) ParseMigProfile(profile string) (MigProfile, error) VisitDevices(func(i int, d Device) error) error VisitMigDevices(func(i int, d Device, j int, m MigDevice) error) error VisitMigProfiles(func(p MigProfile) error) error } type devicelib struct { nvmllib nvml.Interface skippedDevices map[string]struct{} verifySymbols *bool migProfiles []MigProfile } var _ Interface = &devicelib{} // New creates a new instance of the 'device' interface. func New(nvmllib nvml.Interface, opts ...Option) Interface { d := &devicelib{ nvmllib: nvmllib, } for _, opt := range opts { opt(d) } if d.verifySymbols == nil { verify := true d.verifySymbols = &verify } if d.skippedDevices == nil { WithSkippedDevices( "DGX Display", "NVIDIA DGX Display", )(d) } return d } // WithVerifySymbols provides an option to toggle whether to verify select symbols exist in dynamic libraries before calling them. func WithVerifySymbols(verify bool) Option { return func(d *devicelib) { d.verifySymbols = &verify } } // WithSkippedDevices provides an Option to set devices to be skipped by model name. func WithSkippedDevices(names ...string) Option { return func(d *devicelib) { if d.skippedDevices == nil { d.skippedDevices = make(map[string]struct{}) } for _, name := range names { d.skippedDevices[name] = struct{}{} } } } // Option defines a function for passing options to the New() call. type Option func(*devicelib) NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/device.go000066400000000000000000000364151520540370700300370ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package device import ( "fmt" "strings" "github.com/NVIDIA/go-nvml/pkg/nvml" ) // Device defines the set of extended functions associated with a device.Device. type Device interface { nvml.Device GetArchitectureAsString() (string, error) GetBrandAsString() (string, error) GetCudaComputeCapabilityAsString() (string, error) GetMigDevices() ([]MigDevice, error) GetMigProfiles() ([]MigProfile, error) GetPCIBusID() (string, error) IsCoherent() (bool, error) IsFabricAttached() (bool, error) IsMigCapable() (bool, error) IsMigEnabled() (bool, error) VisitMigDevices(func(j int, m MigDevice) error) error VisitMigProfiles(func(p MigProfile) error) error } type device struct { nvml.Device lib *devicelib migProfiles []MigProfile } var _ Device = &device{} // NewDevice builds a new Device from an nvml.Device. func (d *devicelib) NewDevice(dev nvml.Device) (Device, error) { return d.newDevice(dev) } // NewDeviceByUUID builds a new Device from a UUID. func (d *devicelib) NewDeviceByUUID(uuid string) (Device, error) { dev, ret := d.nvmllib.DeviceGetHandleByUUID(uuid) if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting device handle for uuid '%v': %v", uuid, ret) } return d.newDevice(dev) } // newDevice creates a device from an nvml.Device. func (d *devicelib) newDevice(dev nvml.Device) (*device, error) { return &device{dev, d, nil}, nil } // GetArchitectureAsString returns the Device architecture as a string. func (d *device) GetArchitectureAsString() (string, error) { arch, ret := d.GetArchitecture() if ret != nvml.SUCCESS { return "", fmt.Errorf("error getting device architecture: %v", ret) } switch arch { case nvml.DEVICE_ARCH_KEPLER: return "Kepler", nil case nvml.DEVICE_ARCH_MAXWELL: return "Maxwell", nil case nvml.DEVICE_ARCH_PASCAL: return "Pascal", nil case nvml.DEVICE_ARCH_VOLTA: return "Volta", nil case nvml.DEVICE_ARCH_TURING: return "Turing", nil case nvml.DEVICE_ARCH_AMPERE: return "Ampere", nil case nvml.DEVICE_ARCH_ADA: return "Ada Lovelace", nil case nvml.DEVICE_ARCH_HOPPER: return "Hopper", nil case nvml.DEVICE_ARCH_BLACKWELL: return "Blackwell", nil case nvml.DEVICE_ARCH_UNKNOWN: return "Unknown", nil } return "", fmt.Errorf("error interpreting device architecture as string: %v", arch) } // GetBrandAsString returns the Device architecture as a string. func (d *device) GetBrandAsString() (string, error) { brand, ret := d.GetBrand() if ret != nvml.SUCCESS { return "", fmt.Errorf("error getting device brand: %v", ret) } switch brand { case nvml.BRAND_UNKNOWN: return "Unknown", nil case nvml.BRAND_QUADRO: return "Quadro", nil case nvml.BRAND_TESLA: return "Tesla", nil case nvml.BRAND_NVS: return "NVS", nil case nvml.BRAND_GRID: return "Grid", nil case nvml.BRAND_GEFORCE: return "GeForce", nil case nvml.BRAND_TITAN: return "Titan", nil case nvml.BRAND_NVIDIA_VAPPS: return "NvidiaVApps", nil case nvml.BRAND_NVIDIA_VPC: return "NvidiaVPC", nil case nvml.BRAND_NVIDIA_VCS: return "NvidiaVCS", nil case nvml.BRAND_NVIDIA_VWS: return "NvidiaVWS", nil // Deprecated in favor of nvml.BRAND_NVIDIA_CLOUD_GAMING // case nvml.BRAND_NVIDIA_VGAMING: // return "VGaming", nil case nvml.BRAND_NVIDIA_CLOUD_GAMING: return "NvidiaCloudGaming", nil case nvml.BRAND_QUADRO_RTX: return "QuadroRTX", nil case nvml.BRAND_NVIDIA_RTX: return "NvidiaRTX", nil case nvml.BRAND_NVIDIA: return "Nvidia", nil case nvml.BRAND_GEFORCE_RTX: return "GeForceRTX", nil case nvml.BRAND_TITAN_RTX: return "TitanRTX", nil } return "", fmt.Errorf("error interpreting device brand as string: %v", brand) } // GetPCIBusID returns the string representation of the bus ID. func (d *device) GetPCIBusID() (string, error) { info, ret := d.GetPciInfo() if ret != nvml.SUCCESS { return "", fmt.Errorf("error getting PCI info: %w", ret) } var bytes []byte for _, b := range info.BusId { if byte(b) == '\x00' { break } bytes = append(bytes, byte(b)) } id := strings.ToLower(string(bytes)) if id != "0000" { id = strings.TrimPrefix(id, "0000") } return id, nil } // GetCudaComputeCapabilityAsString returns the Device's CUDA compute capability as a version string. func (d *device) GetCudaComputeCapabilityAsString() (string, error) { major, minor, ret := d.GetCudaComputeCapability() if ret != nvml.SUCCESS { return "", fmt.Errorf("error getting CUDA compute capability: %v", ret) } return fmt.Sprintf("%d.%d", major, minor), nil } // IsCoherent returns whether the device is capable of coherent access to system // memory. func (d *device) IsCoherent() (bool, error) { if !d.lib.hasSymbol("nvmlDeviceGetAddressingMode") { return false, nil } mode, ret := nvml.Device(d).GetAddressingMode() if ret == nvml.ERROR_NOT_SUPPORTED { return false, nil } if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting addressing mode: %v", ret) } if nvml.DeviceAddressingModeType(mode.Value) == nvml.DEVICE_ADDRESSING_MODE_ATS { return true, nil } return false, nil } // IsMigCapable checks if a device is capable of having MIG paprtitions created on it. func (d *device) IsMigCapable() (bool, error) { if !d.lib.hasSymbol("nvmlDeviceGetMigMode") { return false, nil } _, _, ret := nvml.Device(d).GetMigMode() if ret == nvml.ERROR_NOT_SUPPORTED { return false, nil } if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting MIG mode: %v", ret) } return true, nil } // IsMigEnabled checks if a device has MIG mode currently enabled on it. func (d *device) IsMigEnabled() (bool, error) { if !d.lib.hasSymbol("nvmlDeviceGetMigMode") { return false, nil } mode, _, ret := nvml.Device(d).GetMigMode() if ret == nvml.ERROR_NOT_SUPPORTED { return false, nil } if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting MIG mode: %v", ret) } return (mode == nvml.DEVICE_MIG_ENABLE), nil } // IsFabricAttached checks if a device is attached to a GPU fabric. func (d *device) IsFabricAttached() (bool, error) { if d.lib.hasSymbol("nvmlDeviceGetGpuFabricInfo") { info, ret := d.GetGpuFabricInfo() if ret == nvml.ERROR_NOT_SUPPORTED { return false, nil } if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting GPU Fabric Info: %v", ret) } if info.State != nvml.GPU_FABRIC_STATE_COMPLETED { return false, nil } if info.ClusterUuid == [16]uint8{} { return false, nil } if nvml.Return(info.Status) != nvml.SUCCESS { return false, nil } return true, nil } if d.lib.hasSymbol("nvmlDeviceGetGpuFabricInfoV") { info, ret := d.GetGpuFabricInfoV().V2() if ret == nvml.ERROR_NOT_SUPPORTED { return false, nil } if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting GPU Fabric Info: %v", ret) } if info.State != nvml.GPU_FABRIC_STATE_COMPLETED { return false, nil } if info.ClusterUuid == [16]uint8{} { return false, nil } if nvml.Return(info.Status) != nvml.SUCCESS { return false, nil } return true, nil } return false, nil } // VisitMigDevices walks a top-level device and invokes a callback function for each MIG device configured on it. func (d *device) VisitMigDevices(visit func(int, MigDevice) error) error { capable, err := d.IsMigCapable() if err != nil { return fmt.Errorf("error checking if GPU is MIG capable: %v", err) } if !capable { return nil } count, ret := nvml.Device(d).GetMaxMigDeviceCount() if ret != nvml.SUCCESS { return fmt.Errorf("error getting max MIG device count: %v", ret) } for i := 0; i < count; i++ { device, ret := nvml.Device(d).GetMigDeviceHandleByIndex(i) if ret == nvml.ERROR_NOT_FOUND { continue } if ret == nvml.ERROR_INVALID_ARGUMENT { continue } if ret != nvml.SUCCESS { return fmt.Errorf("error getting MIG device handle at index '%v': %v", i, ret) } mig, err := d.lib.NewMigDevice(device) if err != nil { return fmt.Errorf("error creating new MIG device wrapper: %v", err) } err = visit(i, mig) if err != nil { return fmt.Errorf("error visiting MIG device: %v", err) } } return nil } // VisitMigProfiles walks a top-level device and invokes a callback function for each unique MIG Profile that can be configured on it. func (d *device) VisitMigProfiles(visit func(MigProfile) error) error { capable, err := d.IsMigCapable() if err != nil { return fmt.Errorf("error checking if GPU is MIG capable: %v", err) } if !capable { return nil } memory, ret := d.GetMemoryInfo() if ret != nvml.SUCCESS { return fmt.Errorf("error getting device memory info: %v", ret) } for i := 0; i < nvml.GPU_INSTANCE_PROFILE_COUNT; i++ { giProfileInfo, ret := d.GetGpuInstanceProfileInfo(i) if ret == nvml.ERROR_NOT_SUPPORTED { continue } if ret == nvml.ERROR_INVALID_ARGUMENT { continue } if ret != nvml.SUCCESS { return fmt.Errorf("error getting GPU Instance profile info: %v", ret) } for j := 0; j < nvml.COMPUTE_INSTANCE_PROFILE_COUNT; j++ { for k := 0; k < nvml.COMPUTE_INSTANCE_ENGINE_PROFILE_COUNT; k++ { p, err := d.lib.NewMigProfile(i, j, k, giProfileInfo.MemorySizeMB, memory.Total) if err != nil { return fmt.Errorf("error creating MIG profile: %v", err) } // NOTE: The NVML API doesn't currently let us query the set of // valid Compute Instance profiles without first instantiating // a GPU Instance to check against. In theory, it should be // possible to get this information without a reference to a // GPU instance, but no API is provided for that at the moment. // We run the checks below to weed out invalid profiles // heuristically, given what we know about how they are // physically constructed. In the future we should do this via // NVML once a proper API for this exists. pi := p.GetInfo() if pi.C > pi.G { continue } if (pi.C < pi.G) && ((pi.C * 2) > (pi.G + 1)) { continue } err = visit(p) if err != nil { return fmt.Errorf("error visiting MIG profile: %v", err) } } } } return nil } // GetMigDevices gets the set of MIG devices associated with a top-level device. func (d *device) GetMigDevices() ([]MigDevice, error) { var migs []MigDevice err := d.VisitMigDevices(func(j int, m MigDevice) error { migs = append(migs, m) return nil }) if err != nil { return nil, err } return migs, nil } // GetMigProfiles gets the set of unique MIG profiles associated with a top-level device. func (d *device) GetMigProfiles() ([]MigProfile, error) { // Return the cached list if available if d.migProfiles != nil { return d.migProfiles, nil } // Otherwise generate it... var profiles []MigProfile err := d.VisitMigProfiles(func(p MigProfile) error { profiles = append(profiles, p) return nil }) if err != nil { return nil, err } // And cache it before returning. d.migProfiles = profiles return profiles, nil } // isSkipped checks whether the device should be skipped. func (d *device) isSkipped() (bool, error) { name, ret := d.GetName() if ret != nvml.SUCCESS { return false, fmt.Errorf("error getting device name: %v", ret) } if _, exists := d.lib.skippedDevices[name]; exists { return true, nil } return false, nil } // VisitDevices visits each top-level device and invokes a callback function for it. func (d *devicelib) VisitDevices(visit func(int, Device) error) error { count, ret := d.nvmllib.DeviceGetCount() if ret != nvml.SUCCESS { return fmt.Errorf("error getting device count: %v", ret) } for i := 0; i < count; i++ { device, ret := d.nvmllib.DeviceGetHandleByIndex(i) if ret != nvml.SUCCESS { return fmt.Errorf("error getting device handle for index '%v': %v", i, ret) } dev, err := d.newDevice(device) if err != nil { return fmt.Errorf("error creating new device wrapper: %v", err) } isSkipped, err := dev.isSkipped() if err != nil { return fmt.Errorf("error checking whether device is skipped: %v", err) } if isSkipped { continue } err = visit(i, dev) if err != nil { return fmt.Errorf("error visiting device: %v", err) } } return nil } // VisitMigDevices walks a top-level device and invokes a callback function for each MIG device configured on it. func (d *devicelib) VisitMigDevices(visit func(int, Device, int, MigDevice) error) error { err := d.VisitDevices(func(i int, dev Device) error { err := dev.VisitMigDevices(func(j int, mig MigDevice) error { err := visit(i, dev, j, mig) if err != nil { return fmt.Errorf("error visiting MIG device: %v", err) } return nil }) if err != nil { return fmt.Errorf("error visiting device: %v", err) } return nil }) if err != nil { return fmt.Errorf("error visiting devices: %v", err) } return nil } // VisitMigProfiles walks a top-level device and invokes a callback function for each unique MIG profile found on them. func (d *devicelib) VisitMigProfiles(visit func(MigProfile) error) error { visited := make(map[string]bool) err := d.VisitDevices(func(i int, dev Device) error { err := dev.VisitMigProfiles(func(p MigProfile) error { if visited[p.String()] { return nil } err := visit(p) if err != nil { return fmt.Errorf("error visiting MIG profile: %v", err) } visited[p.String()] = true return nil }) if err != nil { return fmt.Errorf("error visiting device: %v", err) } return nil }) if err != nil { return fmt.Errorf("error visiting devices: %v", err) } return nil } // GetDevices gets the set of all top-level devices. func (d *devicelib) GetDevices() ([]Device, error) { var devs []Device err := d.VisitDevices(func(i int, dev Device) error { devs = append(devs, dev) return nil }) if err != nil { return nil, err } return devs, nil } // GetMigDevices gets the set of MIG devices across all top-level devices. func (d *devicelib) GetMigDevices() ([]MigDevice, error) { var migs []MigDevice err := d.VisitMigDevices(func(i int, dev Device, j int, m MigDevice) error { migs = append(migs, m) return nil }) if err != nil { return nil, err } return migs, nil } // GetMigProfiles gets the set of unique MIG profiles across all top-level devices. func (d *devicelib) GetMigProfiles() ([]MigProfile, error) { // Return the cached list if available if d.migProfiles != nil { return d.migProfiles, nil } // Otherwise generate it... var profiles []MigProfile err := d.VisitMigProfiles(func(p MigProfile) error { profiles = append(profiles, p) return nil }) if err != nil { return nil, err } // And cache it before returning. d.migProfiles = profiles return profiles, nil } // hasSymbol checks to see if the given symbol is present in the NVML library. // If devicelib is configured to not verify symbols, then all symbols are assumed to exist. func (d *devicelib) hasSymbol(symbol string) bool { if !*d.verifySymbols { return true } return d.nvmllib.Extensions().LookupSymbol(symbol) == nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/identifier.go000066400000000000000000000045471520540370700307230ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package device import ( "strconv" "strings" "github.com/google/uuid" ) // Identifier can be used to refer to a GPU or MIG device. // This includes a device index or UUID. type Identifier string // IsGpuIndex checks if an identifier is a full GPU index. func (i Identifier) IsGpuIndex() bool { if _, err := strconv.ParseUint(string(i), 10, 0); err != nil { return false } return true } // IsMigIndex checks if an identifier is a MIG index. func (i Identifier) IsMigIndex() bool { split := strings.Split(string(i), ":") if len(split) != 2 { return false } for _, s := range split { if !Identifier(s).IsGpuIndex() { return false } } return true } // IsUUID checks if an identifier is a UUID. func (i Identifier) IsUUID() bool { return i.IsGpuUUID() || i.IsMigUUID() } // IsGpuUUID checks if an identifier is a GPU UUID. // A GPU UUID must be of the form GPU-b1028956-cfa2-0990-bf4a-5da9abb51763. func (i Identifier) IsGpuUUID() bool { if !strings.HasPrefix(string(i), "GPU-") { return false } _, err := uuid.Parse(strings.TrimPrefix(string(i), "GPU-")) return err == nil } // IsMigUUID checks if an identifier is a MIG UUID. // A MIG UUID can be of one of two forms: // - MIG-b1028956-cfa2-0990-bf4a-5da9abb51763 // - MIG-GPU-b1028956-cfa2-0990-bf4a-5da9abb51763/3/0 func (i Identifier) IsMigUUID() bool { if !strings.HasPrefix(string(i), "MIG-") { return false } suffix := strings.TrimPrefix(string(i), "MIG-") _, err := uuid.Parse(suffix) if err == nil { return true } split := strings.Split(suffix, "/") if len(split) != 3 { return false } if !Identifier(split[0]).IsGpuUUID() { return false } for _, s := range split[1:] { _, err := strconv.ParseUint(s, 10, 0) if err != nil { return false } } return true } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/mig_device.go000066400000000000000000000103721520540370700306650ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package device import ( "fmt" "github.com/NVIDIA/go-nvml/pkg/nvml" ) // MigDevice defines the set of extended functions associated with a MIG device. type MigDevice interface { nvml.Device GetProfile() (MigProfile, error) } type migdevice struct { nvml.Device lib *devicelib profile MigProfile } var _ MigDevice = &migdevice{} // NewMigDevice builds a new MigDevice from an nvml.Device. func (d *devicelib) NewMigDevice(handle nvml.Device) (MigDevice, error) { isMig, ret := handle.IsMigDeviceHandle() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error checking if device is a MIG device: %v", ret) } if !isMig { return nil, fmt.Errorf("not a MIG device") } return &migdevice{handle, d, nil}, nil } // NewMigDeviceByUUID builds a new MigDevice from a UUID. func (d *devicelib) NewMigDeviceByUUID(uuid string) (MigDevice, error) { dev, ret := d.nvmllib.DeviceGetHandleByUUID(uuid) if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting device handle for uuid '%v': %v", uuid, ret) } return d.NewMigDevice(dev) } // GetProfile returns the MIG profile associated with a MIG device. func (m *migdevice) GetProfile() (MigProfile, error) { if m.profile != nil { return m.profile, nil } parent, ret := m.GetDeviceHandleFromMigDeviceHandle() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting parent device handle: %v", ret) } parentMemoryInfo, ret := parent.GetMemoryInfo() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting parent memory info: %v", ret) } attributes, ret := m.GetAttributes() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting MIG device attributes: %v", ret) } giID, ret := m.GetGpuInstanceId() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting MIG device GPU Instance ID: %v", ret) } ciID, ret := m.GetComputeInstanceId() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting MIG device Compute Instance ID: %v", ret) } gi, ret := parent.GetGpuInstanceById(giID) if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting GPU Instance: %v", ret) } ci, ret := gi.GetComputeInstanceById(ciID) if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting Compute Instance: %v", ret) } giInfo, ret := gi.GetInfo() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting GPU Instance info: %v", ret) } ciInfo, ret := ci.GetInfo() if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting Compute Instance info: %v", ret) } for i := 0; i < nvml.GPU_INSTANCE_PROFILE_COUNT; i++ { giProfileInfo, ret := parent.GetGpuInstanceProfileInfo(i) if ret == nvml.ERROR_NOT_SUPPORTED { continue } if ret == nvml.ERROR_INVALID_ARGUMENT { continue } if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting GPU Instance profile info: %v", ret) } if giProfileInfo.Id != giInfo.ProfileId { continue } for j := 0; j < nvml.COMPUTE_INSTANCE_PROFILE_COUNT; j++ { for k := 0; k < nvml.COMPUTE_INSTANCE_ENGINE_PROFILE_COUNT; k++ { ciProfileInfo, ret := gi.GetComputeInstanceProfileInfo(j, k) if ret == nvml.ERROR_NOT_SUPPORTED { continue } if ret == nvml.ERROR_INVALID_ARGUMENT { continue } if ret != nvml.SUCCESS { return nil, fmt.Errorf("error getting Compute Instance profile info: %v", ret) } if ciProfileInfo.Id != ciInfo.ProfileId { continue } p, err := m.lib.NewMigProfile(i, j, k, attributes.MemorySizeMB, parentMemoryInfo.Total) if err != nil { return nil, fmt.Errorf("error creating MIG profile: %v", err) } m.profile = p return p, nil } } } return nil, fmt.Errorf("no matching profile IDs found") } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvlib/device/mig_profile.go000066400000000000000000000247311520540370700310720ustar00rootroot00000000000000/* * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package device import ( "fmt" "math" "sort" "strconv" "strings" "github.com/NVIDIA/go-nvml/pkg/nvml" ) const ( // AttributeMediaExtensions holds the string representation for the media extension MIG profile attribute. AttributeMediaExtensions = "me" AttributeMediaExtensionsAll = "me.all" AttributeGraphics = "gfx" ) // MigProfile represents a specific MIG profile. // Examples include "1g.5gb", "2g.10gb", "1c.2g.10gb", or "1c.1g.5gb+me", etc. type MigProfile interface { String() string GetInfo() MigProfileInfo Equals(other MigProfile) bool Matches(profile string) bool } // MigProfileInfo holds all info associated with a specific MIG profile. type MigProfileInfo struct { C int G int GB int Attributes []string NegAttributes []string GIProfileID int CIProfileID int CIEngProfileID int } var _ MigProfile = &MigProfileInfo{} // NewProfile constructs a new Profile struct using info from the giProfiles and ciProfiles used to create it. func (d *devicelib) NewMigProfile(giProfileID, ciProfileID, ciEngProfileID int, migMemorySizeMB, deviceMemorySizeBytes uint64) (MigProfile, error) { giSlices := 0 switch giProfileID { case nvml.GPU_INSTANCE_PROFILE_1_SLICE, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV2, nvml.GPU_INSTANCE_PROFILE_1_SLICE_GFX, nvml.GPU_INSTANCE_PROFILE_1_SLICE_NO_ME, nvml.GPU_INSTANCE_PROFILE_1_SLICE_ALL_ME: giSlices = 1 case nvml.GPU_INSTANCE_PROFILE_2_SLICE, nvml.GPU_INSTANCE_PROFILE_2_SLICE_REV1, nvml.GPU_INSTANCE_PROFILE_2_SLICE_GFX, nvml.GPU_INSTANCE_PROFILE_2_SLICE_NO_ME, nvml.GPU_INSTANCE_PROFILE_2_SLICE_ALL_ME: giSlices = 2 case nvml.GPU_INSTANCE_PROFILE_3_SLICE: giSlices = 3 case nvml.GPU_INSTANCE_PROFILE_4_SLICE, nvml.GPU_INSTANCE_PROFILE_4_SLICE_GFX: giSlices = 4 case nvml.GPU_INSTANCE_PROFILE_6_SLICE: giSlices = 6 case nvml.GPU_INSTANCE_PROFILE_7_SLICE: giSlices = 7 case nvml.GPU_INSTANCE_PROFILE_8_SLICE: giSlices = 8 default: return nil, fmt.Errorf("invalid GPU Instance Profile ID: %v", giProfileID) } ciSlices := 0 switch ciProfileID { case nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE_REV1: ciSlices = 1 case nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: ciSlices = 2 case nvml.COMPUTE_INSTANCE_PROFILE_3_SLICE: ciSlices = 3 case nvml.COMPUTE_INSTANCE_PROFILE_4_SLICE: ciSlices = 4 case nvml.COMPUTE_INSTANCE_PROFILE_6_SLICE: ciSlices = 6 case nvml.COMPUTE_INSTANCE_PROFILE_7_SLICE: ciSlices = 7 case nvml.COMPUTE_INSTANCE_PROFILE_8_SLICE: ciSlices = 8 default: return nil, fmt.Errorf("invalid Compute Instance Profile ID: %v", ciProfileID) } var attrs []string switch giProfileID { case nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1, nvml.GPU_INSTANCE_PROFILE_2_SLICE_REV1: attrs = append(attrs, AttributeMediaExtensions) case nvml.GPU_INSTANCE_PROFILE_1_SLICE_ALL_ME, nvml.GPU_INSTANCE_PROFILE_2_SLICE_ALL_ME: attrs = append(attrs, AttributeMediaExtensionsAll) case nvml.GPU_INSTANCE_PROFILE_1_SLICE_GFX, nvml.GPU_INSTANCE_PROFILE_2_SLICE_GFX, nvml.GPU_INSTANCE_PROFILE_4_SLICE_GFX: attrs = append(attrs, AttributeGraphics) } var negAttrs []string switch giProfileID { case nvml.GPU_INSTANCE_PROFILE_1_SLICE_NO_ME, nvml.GPU_INSTANCE_PROFILE_2_SLICE_NO_ME: negAttrs = append(negAttrs, AttributeMediaExtensions) } p := &MigProfileInfo{ C: ciSlices, G: giSlices, GB: int(getMigMemorySizeGB(deviceMemorySizeBytes, migMemorySizeMB)), Attributes: attrs, NegAttributes: negAttrs, GIProfileID: giProfileID, CIProfileID: ciProfileID, CIEngProfileID: ciEngProfileID, } return p, nil } // AssertValidMigProfileFormat checks if the string is in the proper format to represent a MIG profile. func (d *devicelib) AssertValidMigProfileFormat(profile string) error { _, err := parseMigProfile(profile) return err } // ParseMigProfile converts a string representation of a MigProfile into an object. func (d *devicelib) ParseMigProfile(profile string) (MigProfile, error) { profiles, err := d.GetMigProfiles() if err != nil { return nil, fmt.Errorf("error getting list of possible MIG profiles: %v", err) } for _, p := range profiles { if p.Matches(profile) { return p, nil } } return nil, fmt.Errorf("unable to parse profile string into a valid profile") } // String returns the string representation of a Profile. func (p MigProfileInfo) String() string { var suffix string if len(p.Attributes) > 0 { suffix = "+" + strings.Join(p.Attributes, ",") } if len(p.NegAttributes) > 0 { suffix = "-" + strings.Join(p.NegAttributes, ",") } if p.C == p.G { return fmt.Sprintf("%dg.%dgb%s", p.G, p.GB, suffix) } return fmt.Sprintf("%dc.%dg.%dgb%s", p.C, p.G, p.GB, suffix) } // GetInfo returns detailed info about a Profile. func (p MigProfileInfo) GetInfo() MigProfileInfo { return p } // Equals checks if two Profiles are identical or not. func (p MigProfileInfo) Equals(other MigProfile) bool { o := other.GetInfo() if p.C != o.C { return false } if p.G != o.G { return false } if p.GB != o.GB { return false } if p.GIProfileID != o.GIProfileID { return false } if p.CIProfileID != o.CIProfileID { return false } if p.CIEngProfileID != o.CIEngProfileID { return false } return true } // Matches checks if a MigProfile matches the string passed in. func (p MigProfileInfo) Matches(profile string) bool { migProfileInfo, err := parseMigProfile(profile) if err != nil { return false } if migProfileInfo.C != p.C { return false } if migProfileInfo.G != p.G { return false } if migProfileInfo.GB != p.GB { return false } if !matchAttributes(migProfileInfo.Attributes, p.Attributes) { return false } if !matchAttributes(migProfileInfo.NegAttributes, p.NegAttributes) { return false } return true } func matchAttributes(attrs1, attrs2 []string) bool { if len(attrs1) != len(attrs2) { return false } sort.Strings(attrs1) sort.Strings(attrs2) for i, a := range attrs2 { if a != attrs1[i] { return false } } return true } func parseMigProfile(profile string) (*MigProfileInfo, error) { // If we are handed the empty string, we cannot parse it. if profile == "" { return nil, fmt.Errorf("profile is the empty string") } // Split by +/- to separate out attributes. split := strings.SplitN(profile, "+", 2) negsplit := strings.SplitN(profile, "-", 2) // Make sure we don't get both positive and negative attributes. if len(split) == 2 && len(negsplit) == 2 { return nil, fmt.Errorf("profile '%v' contains both '+/-' attributes", profile) } if len(split) == 1 { split = negsplit } // Check to make sure the c, g, and gb values match. c, g, gb, err := parseMigProfileFields(split[0]) if err != nil { return nil, fmt.Errorf("cannot parse fields of '%v': %v", profile, err) } migProfileInfo := &MigProfileInfo{ C: c, G: g, GB: gb, } // If we have no attributes we are done. if len(split) == 1 { return migProfileInfo, nil } // Make sure we have the same set of attributes. attrs, err := parseMigProfileAttributes(split[1]) if err != nil { return nil, fmt.Errorf("cannot parse attributes of '%v': %v", profile, err) } if len(negsplit) == 2 { migProfileInfo.NegAttributes = attrs return migProfileInfo, nil } migProfileInfo.Attributes = attrs return migProfileInfo, nil } func parseMigProfileField(s string, field string) (int, error) { if strings.TrimSpace(s) != s { return -1, fmt.Errorf("leading or trailing spaces on '%%d%s'", field) } if !strings.HasSuffix(s, field) { return -1, fmt.Errorf("missing '%s' from '%%d%s'", field, field) } v, err := strconv.Atoi(strings.TrimSuffix(s, field)) if err != nil { return -1, fmt.Errorf("malformed number in '%%d%s'", field) } return v, nil } func parseMigProfileFields(s string) (int, int, int, error) { var err error var c, g, gb int split := strings.SplitN(s, ".", 3) if len(split) == 3 { c, err = parseMigProfileField(split[0], "c") if err != nil { return -1, -1, -1, err } g, err = parseMigProfileField(split[1], "g") if err != nil { return -1, -1, -1, err } gb, err = parseMigProfileField(split[2], "gb") if err != nil { return -1, -1, -1, err } return c, g, gb, err } if len(split) == 2 { g, err = parseMigProfileField(split[0], "g") if err != nil { return -1, -1, -1, err } gb, err = parseMigProfileField(split[1], "gb") if err != nil { return -1, -1, -1, err } return g, g, gb, nil } return -1, -1, -1, fmt.Errorf("parsed wrong number of fields, expected 2 or 3") } func parseMigProfileAttributes(s string) ([]string, error) { attr := strings.Split(s, ",") if len(attr) == 0 { return nil, fmt.Errorf("empty attribute list") } unique := make(map[string]int) for _, a := range attr { if unique[a] > 0 { return nil, fmt.Errorf("non unique attribute in list") } if a == "" { return nil, fmt.Errorf("empty attribute in list") } if strings.TrimSpace(a) != a { return nil, fmt.Errorf("leading or trailing spaces in attribute") } if a[0] >= '0' && a[0] <= '9' { return nil, fmt.Errorf("attribute begins with a number") } if a[0] == '.' || a[len(a)-1] == '.' { return nil, fmt.Errorf("attribute begins/ends with a dot") } for _, c := range a { if (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && (c < '0' || c > '9') && c != '.' { return nil, fmt.Errorf("non alpha-numeric character or digit in attribute") } } unique[a]++ } return attr, nil } func getMigMemorySizeGB(totalDeviceMemory, migMemorySizeMB uint64) uint64 { const fracDenominator = 8 const oneMB = 1024 * 1024 const oneGB = 1024 * 1024 * 1024 fractionalGpuMem := (float64(migMemorySizeMB) * oneMB) / float64(totalDeviceMemory) fractionalGpuMem = math.Ceil(fractionalGpuMem*fracDenominator) / fracDenominator totalMemGB := float64((totalDeviceMemory + oneGB - 1) / oneGB) return uint64(math.Round(fractionalGpuMem * totalMemGB)) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/000077500000000000000000000000001520540370700250065ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes/000077500000000000000000000000001520540370700261345ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes/bytes.go000066400000000000000000000042021520540370700276070ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package bytes import ( "encoding/binary" "unsafe" ) // Raw returns just the bytes without any assumptions about layout. type Raw interface { Raw() *[]byte } // Reader used to read various data sizes in the byte array. type Reader interface { Read8(pos int) uint8 Read16(pos int) uint16 Read32(pos int) uint32 Read64(pos int) uint64 Len() int } // Writer used to write various sizes of data in the byte array. type Writer interface { Write8(pos int, value uint8) Write16(pos int, value uint16) Write32(pos int, value uint32) Write64(pos int, value uint64) Len() int } // Bytes object for manipulating arbitrary byte arrays. type Bytes interface { Raw Reader Writer Slice(offset int, size int) Bytes LittleEndian() Bytes BigEndian() Bytes } var nativeByteOrder binary.ByteOrder func init() { buf := [2]byte{} *(*uint16)(unsafe.Pointer(&buf[0])) = uint16(0x00FF) switch buf { case [2]byte{0xFF, 0x00}: nativeByteOrder = binary.LittleEndian case [2]byte{0x00, 0xFF}: nativeByteOrder = binary.BigEndian default: panic("Unable to infer byte order") } } // New raw bytearray. func New(data *[]byte) Bytes { return (*native)(data) } // NewLittleEndian little endian ordering of bytes. func NewLittleEndian(data *[]byte) Bytes { if nativeByteOrder == binary.LittleEndian { return (*native)(data) } return (*swapbo)(data) } // NewBigEndian big endian ordering of bytes. func NewBigEndian(data *[]byte) Bytes { if nativeByteOrder == binary.BigEndian { return (*native)(data) } return (*swapbo)(data) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes/native.go000066400000000000000000000034121520540370700277510ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package bytes import ( "unsafe" ) type native []byte var _ Bytes = (*native)(nil) func (b *native) Read8(pos int) uint8 { return (*b)[pos] } func (b *native) Read16(pos int) uint16 { return *(*uint16)(unsafe.Pointer(&((*b)[pos]))) } func (b *native) Read32(pos int) uint32 { return *(*uint32)(unsafe.Pointer(&((*b)[pos]))) } func (b *native) Read64(pos int) uint64 { return *(*uint64)(unsafe.Pointer(&((*b)[pos]))) } func (b *native) Write8(pos int, value uint8) { (*b)[pos] = value } func (b *native) Write16(pos int, value uint16) { *(*uint16)(unsafe.Pointer(&((*b)[pos]))) = value } func (b *native) Write32(pos int, value uint32) { *(*uint32)(unsafe.Pointer(&((*b)[pos]))) = value } func (b *native) Write64(pos int, value uint64) { *(*uint64)(unsafe.Pointer(&((*b)[pos]))) = value } func (b *native) Slice(offset int, size int) Bytes { nb := (*b)[offset : offset+size] return &nb } func (b *native) LittleEndian() Bytes { return NewLittleEndian((*[]byte)(b)) } func (b *native) BigEndian() Bytes { return NewBigEndian((*[]byte)(b)) } func (b *native) Raw() *[]byte { return (*[]byte)(b) } func (b *native) Len() int { return len(*b) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes/swapbo.go000066400000000000000000000047001520540370700277570ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package bytes import ( "unsafe" ) type swapbo []byte var _ Bytes = (*swapbo)(nil) func (b *swapbo) Read8(pos int) uint8 { return (*b)[pos] } func (b *swapbo) Read16(pos int) uint16 { buf := [2]byte{} buf[0] = (*b)[pos+1] buf[1] = (*b)[pos+0] return *(*uint16)(unsafe.Pointer(&buf[0])) } func (b *swapbo) Read32(pos int) uint32 { buf := [4]byte{} buf[0] = (*b)[pos+3] buf[1] = (*b)[pos+2] buf[2] = (*b)[pos+1] buf[3] = (*b)[pos+0] return *(*uint32)(unsafe.Pointer(&buf[0])) } func (b *swapbo) Read64(pos int) uint64 { buf := [8]byte{} buf[0] = (*b)[pos+7] buf[1] = (*b)[pos+6] buf[2] = (*b)[pos+5] buf[3] = (*b)[pos+4] buf[4] = (*b)[pos+3] buf[5] = (*b)[pos+2] buf[6] = (*b)[pos+1] buf[7] = (*b)[pos+0] return *(*uint64)(unsafe.Pointer(&buf[0])) } func (b *swapbo) Write8(pos int, value uint8) { (*b)[pos] = value } func (b *swapbo) Write16(pos int, value uint16) { buf := [2]byte{} *(*uint16)(unsafe.Pointer(&buf[0])) = value (*b)[pos+0] = buf[1] (*b)[pos+1] = buf[0] } func (b *swapbo) Write32(pos int, value uint32) { buf := [4]byte{} *(*uint32)(unsafe.Pointer(&buf[0])) = value (*b)[pos+0] = buf[3] (*b)[pos+1] = buf[2] (*b)[pos+2] = buf[1] (*b)[pos+3] = buf[0] } func (b *swapbo) Write64(pos int, value uint64) { buf := [8]byte{} *(*uint64)(unsafe.Pointer(&buf[0])) = value (*b)[pos+0] = buf[7] (*b)[pos+1] = buf[6] (*b)[pos+2] = buf[5] (*b)[pos+3] = buf[4] (*b)[pos+4] = buf[3] (*b)[pos+5] = buf[2] (*b)[pos+6] = buf[1] (*b)[pos+7] = buf[0] } func (b *swapbo) Slice(offset int, size int) Bytes { nb := (*b)[offset : offset+size] return &nb } func (b *swapbo) LittleEndian() Bytes { return NewLittleEndian((*[]byte)(b)) } func (b *swapbo) BigEndian() Bytes { return NewBigEndian((*[]byte)(b)) } func (b *swapbo) Raw() *[]byte { return (*[]byte)(b) } func (b *swapbo) Len() int { return len(*b) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/config.go000066400000000000000000000101451520540370700266030ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package nvpci import ( "fmt" "os" "github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes" ) const ( // PCICfgSpaceStandardSize represents the size in bytes of the standard config space. PCICfgSpaceStandardSize = 256 // PCICfgSpaceExtendedSize represents the size in bytes of the extended config space. PCICfgSpaceExtendedSize = 4096 // PCICapabilityListPointer represents offset for the capability list pointer. PCICapabilityListPointer = 0x34 // PCIStatusCapabilityList represents the status register bit which indicates capability list support. PCIStatusCapabilityList = 0x10 // PCIStatusBytePosition represents the position of the status register. PCIStatusBytePosition = 0x06 ) // ConfigSpace PCI configuration space (standard extended) file path. type ConfigSpace struct { Path string } // ConfigSpaceIO Interface for reading and writing raw and preconfigured values. type ConfigSpaceIO interface { bytes.Bytes GetVendorID() uint16 GetDeviceID() uint16 GetPCICapabilities() (*PCICapabilities, error) } type configSpaceIO struct { bytes.Bytes } // PCIStandardCapability standard PCI config space. type PCIStandardCapability struct { bytes.Bytes } // PCIExtendedCapability extended PCI config space. type PCIExtendedCapability struct { bytes.Bytes Version uint8 } // PCICapabilities combines the standard and extended config space. type PCICapabilities struct { Standard map[uint8]*PCIStandardCapability Extended map[uint16]*PCIExtendedCapability } func (cs *ConfigSpace) Read() (ConfigSpaceIO, error) { config, err := os.ReadFile(cs.Path) if err != nil { return nil, fmt.Errorf("failed to open file: %v", err) } return &configSpaceIO{bytes.New(&config)}, nil } func (cs *configSpaceIO) GetVendorID() uint16 { return cs.Read16(0) } func (cs *configSpaceIO) GetDeviceID() uint16 { return cs.Read16(2) } func (cs *configSpaceIO) GetPCICapabilities() (*PCICapabilities, error) { caps := &PCICapabilities{ make(map[uint8]*PCIStandardCapability), make(map[uint16]*PCIExtendedCapability), } support := cs.Read8(PCIStatusBytePosition) & PCIStatusCapabilityList if support == 0 { return nil, fmt.Errorf("pci device does not support capability list") } soffset := cs.Read8(PCICapabilityListPointer) if int(soffset) >= cs.Len() { return nil, fmt.Errorf("capability list pointer out of bounds") } for soffset != 0 { if soffset == 0xff { return nil, fmt.Errorf("config space broken") } if int(soffset) >= PCICfgSpaceStandardSize { return nil, fmt.Errorf("standard capability list pointer out of bounds") } data := cs.Read32(int(soffset)) id := uint8(data & 0xff) caps.Standard[id] = &PCIStandardCapability{ cs.Slice(int(soffset), cs.Len()-int(soffset)), } soffset = uint8((data >> 8) & 0xff) } if cs.Len() <= PCICfgSpaceStandardSize { return caps, nil } eoffset := uint16(PCICfgSpaceStandardSize) for eoffset != 0 { if eoffset == 0xffff { return nil, fmt.Errorf("config space broken") } if int(eoffset) >= PCICfgSpaceExtendedSize { return nil, fmt.Errorf("extended capability list pointer out of bounds") } // |31 20|19 16|15 0| // |--------------------|------|-------------------------| // | Next Cap Offset |Vers. |PCI Express Ext. Cap ID | data := cs.Read32(int(eoffset)) id := uint16(data & 0xffff) version := uint8((data >> 16) & 0xf) caps.Extended[id] = &PCIExtendedCapability{ cs.Slice(int(eoffset), cs.Len()-int(eoffset)), version, } eoffset = uint16((data >> 20) & 0xfff) } return caps, nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/logger.go000066400000000000000000000015021520540370700266120ustar00rootroot00000000000000/** # Copyright (c) NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package nvpci import "log" type logger interface { Warningf(string, ...interface{}) } type simpleLogger struct{} func (l simpleLogger) Warningf(format string, v ...interface{}) { log.Printf("WARNING: "+format, v) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/mlxpci.go000066400000000000000000000054501520540370700266350ustar00rootroot00000000000000/* * Copyright (c) NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package nvpci import ( "fmt" "strings" ) const ( // PCIMellanoxVendorID represents PCI vendor id for Mellanox. PCIMellanoxVendorID uint16 = 0x15b3 // PCINetworkControllerClass represents the PCI class for network controllers. PCINetworkControllerClass uint32 = 0x020000 // PCIBridgeClass represents the PCI class for network controllers. PCIBridgeClass uint32 = 0x060400 ) // GetNetworkControllers returns all Mellanox Network Controller PCI devices on the system. func (p *nvpci) GetNetworkControllers() ([]*NvidiaPCIDevice, error) { devices, err := p.GetAllDevices() if err != nil { return nil, fmt.Errorf("error getting all NVIDIA devices: %v", err) } var filtered []*NvidiaPCIDevice for _, d := range devices { if d.IsNetworkController() { filtered = append(filtered, d) } } return filtered, nil } // GetPciBridges retrieves all Mellanox PCI(e) Bridges. func (p *nvpci) GetPciBridges() ([]*NvidiaPCIDevice, error) { devices, err := p.GetAllDevices() if err != nil { return nil, fmt.Errorf("error getting all NVIDIA devices: %v", err) } var filtered []*NvidiaPCIDevice for _, d := range devices { if d.IsPciBridge() { filtered = append(filtered, d) } } return filtered, nil } // IsNetworkController if class == 0x300. func (d *NvidiaPCIDevice) IsNetworkController() bool { return d.Class == PCINetworkControllerClass } // IsPciBridge if class == 0x0604. func (d *NvidiaPCIDevice) IsPciBridge() bool { return d.Class == PCIBridgeClass } // IsDPU returns if a device is a DPU. func (d *NvidiaPCIDevice) IsDPU() bool { if !strings.Contains(d.DeviceName, "BlueField") { return false } // DPU is a multifunction device hence look only for the .0 function // and ignore subfunctions like .1, .2, etc. if strings.HasSuffix(d.Address, ".0") { return true } return false } // GetDPUs returns all Mellanox DPU devices on the system. func (p *nvpci) GetDPUs() ([]*NvidiaPCIDevice, error) { devices, err := p.GetNetworkControllers() if err != nil { return nil, fmt.Errorf("error getting all network controllers: %v", err) } var filtered []*NvidiaPCIDevice for _, d := range devices { if d.IsDPU() { filtered = append(filtered, d) } } return filtered, nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/mmio/000077500000000000000000000000001520540370700257475ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/mmio/mmio.go000066400000000000000000000054361520540370700272470ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mmio import ( "fmt" "os" "syscall" "unsafe" "github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes" ) // Mmio memory map a region. type Mmio interface { bytes.Raw bytes.Reader bytes.Writer Sync() error Close() error Slice(offset int, size int) Mmio LittleEndian() Mmio BigEndian() Mmio } type mmio struct { bytes.Bytes } func open(path string, offset int, size int, flags int) (Mmio, error) { var mmapFlags int switch flags { case os.O_RDONLY: mmapFlags = syscall.PROT_READ case os.O_RDWR: mmapFlags = syscall.PROT_READ | syscall.PROT_WRITE default: return nil, fmt.Errorf("invalid flags: %v", flags) } file, err := os.OpenFile(path, flags, 0) if err != nil { return nil, fmt.Errorf("failed to open file: %v", err) } defer file.Close() fi, err := file.Stat() if err != nil { return nil, fmt.Errorf("failed to get file info: %v", err) } if size > int(fi.Size()) { return nil, fmt.Errorf("requested size larger than file size") } if size < 0 { size = int(fi.Size()) } mmap, err := syscall.Mmap( int(file.Fd()), int64(offset), size, mmapFlags, syscall.MAP_SHARED) if err != nil { return nil, fmt.Errorf("failed to mmap file: %v", err) } return &mmio{bytes.New(&mmap)}, nil } // OpenRO open region readonly. func OpenRO(path string, offset int, size int) (Mmio, error) { return open(path, offset, size, os.O_RDONLY) } // OpenRW open region read write. func OpenRW(path string, offset int, size int) (Mmio, error) { return open(path, offset, size, os.O_RDWR) } func (m *mmio) Slice(offset int, size int) Mmio { return &mmio{m.Bytes.Slice(offset, size)} } func (m *mmio) LittleEndian() Mmio { return &mmio{m.Bytes.LittleEndian()} } func (m *mmio) BigEndian() Mmio { return &mmio{m.Bytes.BigEndian()} } func (m *mmio) Close() error { err := syscall.Munmap(*m.Raw()) if err != nil { return fmt.Errorf("failed to munmap file: %v", err) } return nil } func (m *mmio) Sync() error { _, _, errno := syscall.Syscall( syscall.SYS_MSYNC, uintptr(unsafe.Pointer(&(*m.Raw())[0])), uintptr(m.Len()), uintptr(syscall.MS_SYNC|syscall.MS_INVALIDATE)) if errno != 0 { return fmt.Errorf("failed to msync file: %v", errno) } return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/mmio/mock.go000066400000000000000000000033601520540370700272310ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mmio import ( "fmt" "github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes" ) type mockMmio struct { mmio source *[]byte offset int rw bool } func mockOpen(source *[]byte, offset int, size int, rw bool) (Mmio, error) { if size < 0 { size = len(*source) - offset } if (offset + size) > len(*source) { return nil, fmt.Errorf("offset+size out of range") } data := append([]byte{}, (*source)[offset:offset+size]...) m := &mockMmio{} m.Bytes = bytes.New(&data).LittleEndian() m.source = source m.offset = offset m.rw = rw return m, nil } // MockOpenRO open read only. func MockOpenRO(source *[]byte, offset int, size int) (Mmio, error) { return mockOpen(source, offset, size, false) } // MockOpenRW open read write. func MockOpenRW(source *[]byte, offset int, size int) (Mmio, error) { return mockOpen(source, offset, size, true) } func (m *mockMmio) Close() error { m.Bytes = nil m.source = nil m.offset = 0 m.rw = false return nil } func (m *mockMmio) Sync() error { if !m.rw { return fmt.Errorf("opened read-only") } for i := range *m.Raw() { (*m.source)[m.offset+i] = (*m.Raw())[i] } return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/mock.go000066400000000000000000000140671520540370700262760ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package nvpci import ( "fmt" "os" "path/filepath" "regexp" "strconv" "github.com/NVIDIA/go-nvlib/pkg/nvpci/bytes" ) // MockNvpci mock pci device. type MockNvpci struct { *nvpci } var _ Interface = (*MockNvpci)(nil) // NewMockNvpci create new mock PCI and remove old devices. func NewMockNvpci() (mock *MockNvpci, rerr error) { rootDir, err := os.MkdirTemp(os.TempDir(), "") if err != nil { return nil, err } defer func() { if rerr != nil { os.RemoveAll(rootDir) } }() mock = &MockNvpci{ New(WithPCIDevicesRoot(rootDir)).(*nvpci), } return mock, nil } // Cleanup remove the mocked PCI devices root folder. func (m *MockNvpci) Cleanup() { os.RemoveAll(m.pciDevicesRoot) } func validatePCIAddress(addr string) error { r := regexp.MustCompile(`0{4}:[0-9a-f]{2}:[0-9a-f]{2}\.[0-9]`) if !r.Match([]byte(addr)) { return fmt.Errorf(`invalid PCI address should match 0{4}:[0-9a-f]{2}:[0-9a-f]{2}\.[0-9]: %s`, addr) } return nil } // AddMockA100 Create an A100 like GPU mock device. func (m *MockNvpci) AddMockA100(address string, numaNode int, sriov *SriovInfo) error { err := validatePCIAddress(address) if err != nil { return err } deviceDir := filepath.Join(m.pciDevicesRoot, address) err = os.MkdirAll(deviceDir, 0755) if err != nil { return err } err = createNVIDIAgpuFiles(deviceDir) if err != nil { return err } iommuGroup := 20 _, err = os.Create(filepath.Join(deviceDir, strconv.Itoa(iommuGroup))) if err != nil { return err } err = os.Symlink(filepath.Join(deviceDir, strconv.Itoa(iommuGroup)), filepath.Join(deviceDir, "iommu_group")) if err != nil { return err } numa, err := os.Create(filepath.Join(deviceDir, "numa_node")) if err != nil { return err } _, err = fmt.Fprintf(numa, "%v", numaNode) if err != nil { return err } if sriov != nil && sriov.PhysicalFunction != nil { totalVFs, err := os.Create(filepath.Join(deviceDir, "sriov_totalvfs")) if err != nil { return err } _, err = fmt.Fprintf(totalVFs, "%d", sriov.PhysicalFunction.TotalVFs) if err != nil { return err } numVFs, err := os.Create(filepath.Join(deviceDir, "sriov_numvfs")) if err != nil { return err } _, err = fmt.Fprintf(numVFs, "%d", sriov.PhysicalFunction.NumVFs) if err != nil { return err } for i := 1; i <= int(sriov.PhysicalFunction.NumVFs); i++ { err = m.createVf(address, i, iommuGroup, numaNode) if err != nil { return err } } } return nil } func createNVIDIAgpuFiles(deviceDir string) error { vendor, err := os.Create(filepath.Join(deviceDir, "vendor")) if err != nil { return err } _, err = fmt.Fprintf(vendor, "0x%x", PCINvidiaVendorID) if err != nil { return err } class, err := os.Create(filepath.Join(deviceDir, "class")) if err != nil { return err } _, err = fmt.Fprintf(class, "0x%x", PCI3dControllerClass) if err != nil { return err } device, err := os.Create(filepath.Join(deviceDir, "device")) if err != nil { return err } _, err = device.WriteString("0x20bf") if err != nil { return err } _, err = os.Create(filepath.Join(deviceDir, "nvidia")) if err != nil { return err } err = os.Symlink(filepath.Join(deviceDir, "nvidia"), filepath.Join(deviceDir, "driver")) if err != nil { return err } config, err := os.Create(filepath.Join(deviceDir, "config")) if err != nil { return err } _data := make([]byte, PCICfgSpaceStandardSize) data := bytes.New(&_data) data.Write16(0, PCINvidiaVendorID) data.Write16(2, uint16(0x20bf)) data.Write8(PCIStatusBytePosition, PCIStatusCapabilityList) _, err = config.Write(*data.Raw()) if err != nil { return err } bar0 := []uint64{0x00000000c2000000, 0x00000000c2ffffff, 0x0000000000040200} resource, err := os.Create(filepath.Join(deviceDir, "resource")) if err != nil { return err } _, err = fmt.Fprintf(resource, "0x%x 0x%x 0x%x", bar0[0], bar0[1], bar0[2]) if err != nil { return err } pmcID := uint32(0x170000a1) resource0, err := os.Create(filepath.Join(deviceDir, "resource0")) if err != nil { return err } _data = make([]byte, bar0[1]-bar0[0]+1) data = bytes.New(&_data).LittleEndian() data.Write32(0, pmcID) _, err = resource0.Write(*data.Raw()) if err != nil { return err } return nil } func (m *MockNvpci) createVf(pfAddress string, id, iommu_group, numaNode int) error { functionID := pfAddress[len(pfAddress)-1] // we are verifying the last character of pfAddress is integer. functionNumber, err := strconv.Atoi(string(functionID)) if err != nil { return fmt.Errorf("can't conver physical function pci address function number %s to integer: %v", string(functionID), err) } vfFunctionNumber := functionNumber + id vfAddress := pfAddress[:len(pfAddress)-1] + strconv.Itoa(vfFunctionNumber) deviceDir := filepath.Join(m.pciDevicesRoot, vfAddress) err = os.MkdirAll(deviceDir, 0755) if err != nil { return err } err = createNVIDIAgpuFiles(deviceDir) if err != nil { return err } vfIommuGroup := strconv.Itoa(iommu_group + id) _, err = os.Create(filepath.Join(deviceDir, vfIommuGroup)) if err != nil { return err } err = os.Symlink(filepath.Join(deviceDir, vfIommuGroup), filepath.Join(deviceDir, "iommu_group")) if err != nil { return err } numa, err := os.Create(filepath.Join(deviceDir, "numa_node")) if err != nil { return err } _, err = fmt.Fprintf(numa, "%v", numaNode) if err != nil { return err } err = os.Symlink(filepath.Join(m.pciDevicesRoot, pfAddress), filepath.Join(deviceDir, "physfn")) if err != nil { return err } return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/nvpci.go000066400000000000000000000366151520540370700264670ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package nvpci import ( "fmt" "os" "path" "path/filepath" "sort" "strconv" "strings" "github.com/NVIDIA/go-nvlib/pkg/pciids" ) const ( // PCIDevicesRoot represents base path for all pci devices under sysfs. PCIDevicesRoot = "/sys/bus/pci/devices" // PCINvidiaVendorID represents PCI vendor id for NVIDIA. PCINvidiaVendorID uint16 = 0x10de // PCIVgaControllerClass represents the PCI class for VGA Controllers. PCIVgaControllerClass uint32 = 0x030000 // PCI3dControllerClass represents the PCI class for 3D Graphics accellerators. PCI3dControllerClass uint32 = 0x030200 // PCINvSwitchClass represents the PCI class for NVSwitches. PCINvSwitchClass uint32 = 0x068000 // UnknownDeviceString is the device name to set for devices not found in the PCI database. UnknownDeviceString = "UNKNOWN_DEVICE" // UnknownClassString is the class name to set for devices not found in the PCI database. UnknownClassString = "UNKNOWN_CLASS" ) // Interface allows us to get a list of all NVIDIA PCI devices. // //go:generate moq -rm -fmt=goimports -out nvpci_mock.go . Interface type Interface interface { GetAllDevices() ([]*NvidiaPCIDevice, error) Get3DControllers() ([]*NvidiaPCIDevice, error) GetVGAControllers() ([]*NvidiaPCIDevice, error) GetNVSwitches() ([]*NvidiaPCIDevice, error) GetGPUs() ([]*NvidiaPCIDevice, error) GetGPUByIndex(int) (*NvidiaPCIDevice, error) GetGPUByPciBusID(string) (*NvidiaPCIDevice, error) GetNetworkControllers() ([]*NvidiaPCIDevice, error) GetPciBridges() ([]*NvidiaPCIDevice, error) GetDPUs() ([]*NvidiaPCIDevice, error) } // MemoryResources a more human readable handle. type MemoryResources map[int]*MemoryResource // ResourceInterface exposes some higher level functions of resources. type ResourceInterface interface { GetTotalAddressableMemory(bool) (uint64, uint64) } type nvpci struct { logger logger pciDevicesRoot string pcidbPath string } var _ Interface = (*nvpci)(nil) var _ ResourceInterface = (*MemoryResources)(nil) // SriovInfo indicates whether device is VF/PF for SRIOV capable devices. // Only one should be set at any given time. type SriovInfo struct { PhysicalFunction *SriovPhysicalFunction VirtualFunction *SriovVirtualFunction } // SriovPhysicalFunction stores info about SRIOV physical function. type SriovPhysicalFunction struct { TotalVFs uint64 NumVFs uint64 } // SriovVirtualFunction keeps data about SRIOV virtual function. type SriovVirtualFunction struct { PhysicalFunction *NvidiaPCIDevice } func (s *SriovInfo) IsPF() bool { return s != nil && s.PhysicalFunction != nil } func (s *SriovInfo) IsVF() bool { return s != nil && s.VirtualFunction != nil } // NvidiaPCIDevice represents a PCI device for an NVIDIA product. type NvidiaPCIDevice struct { Path string Address string Vendor uint16 Class uint32 ClassName string Device uint16 DeviceName string Driver string IommuGroup int NumaNode int Config *ConfigSpace Resources MemoryResources SriovInfo SriovInfo } // IsVGAController if class == 0x300. func (d *NvidiaPCIDevice) IsVGAController() bool { return d.Class == PCIVgaControllerClass } // Is3DController if class == 0x302. func (d *NvidiaPCIDevice) Is3DController() bool { return d.Class == PCI3dControllerClass } // IsNVSwitch if class == 0x068. func (d *NvidiaPCIDevice) IsNVSwitch() bool { return d.Class == PCINvSwitchClass } // IsGPU either VGA for older cards or 3D for newer. func (d *NvidiaPCIDevice) IsGPU() bool { return d.IsVGAController() || d.Is3DController() } // IsResetAvailable some devices can be reset without rebooting, // check if applicable. func (d *NvidiaPCIDevice) IsResetAvailable() bool { _, err := os.Stat(path.Join(d.Path, "reset")) return err == nil } // Reset perform a reset to apply a new configuration at HW level. func (d *NvidiaPCIDevice) Reset() error { err := os.WriteFile(path.Join(d.Path, "reset"), []byte("1"), 0) if err != nil { return fmt.Errorf("unable to write to reset file: %v", err) } return nil } // New interface that allows us to get a list of all NVIDIA PCI devices. func New(opts ...Option) Interface { n := &nvpci{} for _, opt := range opts { opt(n) } if n.logger == nil { n.logger = &simpleLogger{} } if n.pciDevicesRoot == "" { n.pciDevicesRoot = PCIDevicesRoot } return n } // Option defines a function for passing options to the New() call. type Option func(*nvpci) // WithLogger provides an Option to set the logger for the library. func WithLogger(logger logger) Option { return func(n *nvpci) { n.logger = logger } } // WithPCIDevicesRoot provides an Option to set the root path // for PCI devices on the system. func WithPCIDevicesRoot(root string) Option { return func(n *nvpci) { n.pciDevicesRoot = root } } // WithPCIDatabasePath provides an Option to set the path // to the pciids database file. func WithPCIDatabasePath(path string) Option { return func(n *nvpci) { n.pcidbPath = path } } // GetAllDevices returns all Nvidia PCI devices on the system. func (p *nvpci) GetAllDevices() ([]*NvidiaPCIDevice, error) { deviceDirs, err := os.ReadDir(p.pciDevicesRoot) if err != nil { return nil, fmt.Errorf("unable to read PCI bus devices: %v", err) } var nvdevices []*NvidiaPCIDevice // Cache devices for each GetAllDevices invocation to speed things up. cache := make(map[string]*NvidiaPCIDevice) for _, deviceDir := range deviceDirs { deviceAddress := deviceDir.Name() nvdevice, err := p.getGPUByPciBusID(deviceAddress, cache) if err != nil { return nil, fmt.Errorf("error constructing NVIDIA PCI device %s: %v", deviceAddress, err) } if nvdevice == nil { continue } nvdevices = append(nvdevices, nvdevice) } addressToID := func(address string) uint64 { address = strings.ReplaceAll(address, ":", "") address = strings.ReplaceAll(address, ".", "") id, _ := strconv.ParseUint(address, 16, 64) return id } sort.Slice(nvdevices, func(i, j int) bool { return addressToID(nvdevices[i].Address) < addressToID(nvdevices[j].Address) }) return nvdevices, nil } // GetGPUByPciBusID constructs an NvidiaPCIDevice for the specified address (PCI Bus ID). func (p *nvpci) GetGPUByPciBusID(address string) (*NvidiaPCIDevice, error) { // Pass nil as to force reading device information from sysfs. return p.getGPUByPciBusID(address, nil) } func (p *nvpci) getGPUByPciBusID(address string, cache map[string]*NvidiaPCIDevice) (*NvidiaPCIDevice, error) { if cache != nil { if pciDevice, exists := cache[address]; exists { return pciDevice, nil } } devicePath := filepath.Join(p.pciDevicesRoot, address) vendor, err := os.ReadFile(path.Join(devicePath, "vendor")) if err != nil { return nil, fmt.Errorf("unable to read PCI device vendor id for %s: %v", address, err) } vendorStr := strings.TrimSpace(string(vendor)) vendorID, err := strconv.ParseUint(vendorStr, 0, 16) if err != nil { return nil, fmt.Errorf("unable to convert vendor string to uint16: %v", vendorStr) } if uint16(vendorID) != PCINvidiaVendorID && uint16(vendorID) != PCIMellanoxVendorID { return nil, nil } class, err := os.ReadFile(path.Join(devicePath, "class")) if err != nil { return nil, fmt.Errorf("unable to read PCI device class for %s: %v", address, err) } classStr := strings.TrimSpace(string(class)) classID, err := strconv.ParseUint(classStr, 0, 32) if err != nil { return nil, fmt.Errorf("unable to convert class string to uint32: %v", classStr) } device, err := os.ReadFile(path.Join(devicePath, "device")) if err != nil { return nil, fmt.Errorf("unable to read PCI device id for %s: %v", address, err) } deviceStr := strings.TrimSpace(string(device)) deviceID, err := strconv.ParseUint(deviceStr, 0, 16) if err != nil { return nil, fmt.Errorf("unable to convert device string to uint16: %v", deviceStr) } driver, err := getDriver(devicePath) if err != nil { return nil, fmt.Errorf("unable to detect driver for %s: %w", address, err) } iommuGroup, err := getIOMMUGroup(devicePath) if err != nil { return nil, fmt.Errorf("unable to detect IOMMU group for %s: %w", address, err) } numa, err := os.ReadFile(path.Join(devicePath, "numa_node")) if err != nil { return nil, fmt.Errorf("unable to read PCI NUMA node for %s: %v", address, err) } numaStr := strings.TrimSpace(string(numa)) numaNode, err := strconv.ParseInt(numaStr, 0, 64) if err != nil { return nil, fmt.Errorf("unable to convert NUMA node string to int64: %v", numaNode) } config := &ConfigSpace{ Path: path.Join(devicePath, "config"), } resource, err := os.ReadFile(path.Join(devicePath, "resource")) if err != nil { return nil, fmt.Errorf("unable to read PCI resource file for %s: %v", address, err) } resources := make(map[int]*MemoryResource) for i, line := range strings.Split(strings.TrimSpace(string(resource)), "\n") { values := strings.Split(line, " ") if len(values) != 3 { return nil, fmt.Errorf("more than 3 entries in line '%d' of resource file", i) } start, _ := strconv.ParseUint(values[0], 0, 64) end, _ := strconv.ParseUint(values[1], 0, 64) flags, _ := strconv.ParseUint(values[2], 0, 64) if (end - start) != 0 { resources[i] = &MemoryResource{ uintptr(start), uintptr(end), flags, fmt.Sprintf("%s/resource%d", devicePath, i), } } } pciDB := pciids.NewDB() deviceName, err := pciDB.GetDeviceName(uint16(vendorID), uint16(deviceID)) if err != nil { p.logger.Warningf("unable to get device name: %v\n", err) deviceName = UnknownDeviceString } className, err := pciDB.GetClassName(uint32(classID)) if err != nil { p.logger.Warningf("unable to get class name for device: %v\n", err) className = UnknownClassString } var sriovInfo SriovInfo // Device is a virtual function (VF) if "physfn" symlink exists. physFnAddress, err := filepath.EvalSymlinks(path.Join(devicePath, "physfn")) switch { case err == nil: physFn, err := p.getGPUByPciBusID(filepath.Base(physFnAddress), cache) if err != nil { return nil, fmt.Errorf("unable to detect physfn for %s: %v", address, err) } sriovInfo = SriovInfo{ VirtualFunction: &SriovVirtualFunction{ PhysicalFunction: physFn, }, } case os.IsNotExist(err): sriovInfo, err = p.getSriovInfoForPhysicalFunction(devicePath) if err != nil { return nil, fmt.Errorf("unable to read SRIOV physical function details for %s: %v", devicePath, err) } default: return nil, fmt.Errorf("unable to read %s: %v", path.Join(devicePath, "physfn"), err) } nvdevice := &NvidiaPCIDevice{ Path: devicePath, Address: address, Vendor: uint16(vendorID), Class: uint32(classID), Device: uint16(deviceID), Driver: driver, IommuGroup: int(iommuGroup), NumaNode: int(numaNode), Config: config, Resources: resources, DeviceName: deviceName, ClassName: className, SriovInfo: sriovInfo, } // Cache physical functions only as VF can't be a root device. if cache != nil && sriovInfo.IsPF() { cache[address] = nvdevice } return nvdevice, nil } // Get3DControllers returns all NVIDIA 3D Controller PCI devices on the system. func (p *nvpci) Get3DControllers() ([]*NvidiaPCIDevice, error) { devices, err := p.GetAllDevices() if err != nil { return nil, fmt.Errorf("error getting all NVIDIA devices: %v", err) } var filtered []*NvidiaPCIDevice for _, d := range devices { if d.Is3DController() { filtered = append(filtered, d) } } return filtered, nil } // GetVGAControllers returns all NVIDIA VGA Controller PCI devices on the system. func (p *nvpci) GetVGAControllers() ([]*NvidiaPCIDevice, error) { devices, err := p.GetAllDevices() if err != nil { return nil, fmt.Errorf("error getting all NVIDIA devices: %v", err) } var filtered []*NvidiaPCIDevice for _, d := range devices { if d.IsVGAController() { filtered = append(filtered, d) } } return filtered, nil } // GetNVSwitches returns all NVIDIA NVSwitch PCI devices on the system. func (p *nvpci) GetNVSwitches() ([]*NvidiaPCIDevice, error) { devices, err := p.GetAllDevices() if err != nil { return nil, fmt.Errorf("error getting all NVIDIA devices: %v", err) } var filtered []*NvidiaPCIDevice for _, d := range devices { if d.IsNVSwitch() { filtered = append(filtered, d) } } return filtered, nil } // GetGPUs returns all NVIDIA GPU devices on the system. func (p *nvpci) GetGPUs() ([]*NvidiaPCIDevice, error) { devices, err := p.GetAllDevices() if err != nil { return nil, fmt.Errorf("error getting all NVIDIA devices: %v", err) } var filtered []*NvidiaPCIDevice for _, d := range devices { if d.IsGPU() && !d.SriovInfo.IsVF() { filtered = append(filtered, d) } } return filtered, nil } // GetGPUByIndex returns an NVIDIA GPU device at a particular index. func (p *nvpci) GetGPUByIndex(i int) (*NvidiaPCIDevice, error) { gpus, err := p.GetGPUs() if err != nil { return nil, fmt.Errorf("error getting all gpus: %v", err) } if i < 0 || i >= len(gpus) { return nil, fmt.Errorf("invalid index '%d'", i) } return gpus[i], nil } func (p *nvpci) getSriovInfoForPhysicalFunction(devicePath string) (sriovInfo SriovInfo, err error) { totalVfsPath := filepath.Join(devicePath, "sriov_totalvfs") numVfsPath := filepath.Join(devicePath, "sriov_numvfs") // No file for sriov_totalvfs exists? Not an SRIOV device, return nil _, err = os.Stat(totalVfsPath) if err != nil && os.IsNotExist(err) { return sriovInfo, nil } sriovTotalVfs, err := os.ReadFile(totalVfsPath) if err != nil { return sriovInfo, fmt.Errorf("unable to read sriov_totalvfs: %v", err) } totalVfsStr := strings.TrimSpace(string(sriovTotalVfs)) totalVfsInt, err := strconv.ParseUint(totalVfsStr, 10, 16) if err != nil { return sriovInfo, fmt.Errorf("unable to convert sriov_totalvfs to uint64: %v", err) } sriovNumVfs, err := os.ReadFile(numVfsPath) if err != nil { return sriovInfo, fmt.Errorf("unable to read sriov_numvfs for: %v", err) } numVfsStr := strings.TrimSpace(string(sriovNumVfs)) numVfsInt, err := strconv.ParseUint(numVfsStr, 10, 16) if err != nil { return sriovInfo, fmt.Errorf("unable to convert sriov_numvfs to uint64: %v", err) } sriovInfo = SriovInfo{ PhysicalFunction: &SriovPhysicalFunction{ TotalVFs: totalVfsInt, NumVFs: numVfsInt, }, } return sriovInfo, nil } func getDriver(devicePath string) (string, error) { driver, err := filepath.EvalSymlinks(path.Join(devicePath, "driver")) switch { case os.IsNotExist(err): return "", nil case err == nil: return filepath.Base(driver), nil } return "", err } func getIOMMUGroup(devicePath string) (int64, error) { var iommuGroup int64 iommu, err := filepath.EvalSymlinks(path.Join(devicePath, "iommu_group")) switch { case os.IsNotExist(err): return -1, nil case err == nil: iommuGroupStr := strings.TrimSpace(filepath.Base(iommu)) iommuGroup, err = strconv.ParseInt(iommuGroupStr, 0, 64) if err != nil { return 0, fmt.Errorf("unable to convert iommu_group string to int64: %v", iommuGroupStr) } return iommuGroup, nil } return 0, err } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/nvpci_mock.go000066400000000000000000000307631520540370700274760ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package nvpci import ( "sync" ) // Ensure, that InterfaceMock does implement Interface. // If this is not the case, regenerate this file with moq. var _ Interface = &InterfaceMock{} // InterfaceMock is a mock implementation of Interface. // // func TestSomethingThatUsesInterface(t *testing.T) { // // // make and configure a mocked Interface // mockedInterface := &InterfaceMock{ // Get3DControllersFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the Get3DControllers method") // }, // GetAllDevicesFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the GetAllDevices method") // }, // GetDPUsFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the GetDPUs method") // }, // GetGPUByIndexFunc: func(n int) (*NvidiaPCIDevice, error) { // panic("mock out the GetGPUByIndex method") // }, // GetGPUByPciBusIDFunc: func(s string) (*NvidiaPCIDevice, error) { // panic("mock out the GetGPUByPciBusID method") // }, // GetGPUsFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the GetGPUs method") // }, // GetNVSwitchesFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the GetNVSwitches method") // }, // GetNetworkControllersFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the GetNetworkControllers method") // }, // GetPciBridgesFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the GetPciBridges method") // }, // GetVGAControllersFunc: func() ([]*NvidiaPCIDevice, error) { // panic("mock out the GetVGAControllers method") // }, // } // // // use mockedInterface in code that requires Interface // // and then make assertions. // // } type InterfaceMock struct { // Get3DControllersFunc mocks the Get3DControllers method. Get3DControllersFunc func() ([]*NvidiaPCIDevice, error) // GetAllDevicesFunc mocks the GetAllDevices method. GetAllDevicesFunc func() ([]*NvidiaPCIDevice, error) // GetDPUsFunc mocks the GetDPUs method. GetDPUsFunc func() ([]*NvidiaPCIDevice, error) // GetGPUByIndexFunc mocks the GetGPUByIndex method. GetGPUByIndexFunc func(n int) (*NvidiaPCIDevice, error) // GetGPUByPciBusIDFunc mocks the GetGPUByPciBusID method. GetGPUByPciBusIDFunc func(s string) (*NvidiaPCIDevice, error) // GetGPUsFunc mocks the GetGPUs method. GetGPUsFunc func() ([]*NvidiaPCIDevice, error) // GetNVSwitchesFunc mocks the GetNVSwitches method. GetNVSwitchesFunc func() ([]*NvidiaPCIDevice, error) // GetNetworkControllersFunc mocks the GetNetworkControllers method. GetNetworkControllersFunc func() ([]*NvidiaPCIDevice, error) // GetPciBridgesFunc mocks the GetPciBridges method. GetPciBridgesFunc func() ([]*NvidiaPCIDevice, error) // GetVGAControllersFunc mocks the GetVGAControllers method. GetVGAControllersFunc func() ([]*NvidiaPCIDevice, error) // calls tracks calls to the methods. calls struct { // Get3DControllers holds details about calls to the Get3DControllers method. Get3DControllers []struct { } // GetAllDevices holds details about calls to the GetAllDevices method. GetAllDevices []struct { } // GetDPUs holds details about calls to the GetDPUs method. GetDPUs []struct { } // GetGPUByIndex holds details about calls to the GetGPUByIndex method. GetGPUByIndex []struct { // N is the n argument value. N int } // GetGPUByPciBusID holds details about calls to the GetGPUByPciBusID method. GetGPUByPciBusID []struct { // S is the s argument value. S string } // GetGPUs holds details about calls to the GetGPUs method. GetGPUs []struct { } // GetNVSwitches holds details about calls to the GetNVSwitches method. GetNVSwitches []struct { } // GetNetworkControllers holds details about calls to the GetNetworkControllers method. GetNetworkControllers []struct { } // GetPciBridges holds details about calls to the GetPciBridges method. GetPciBridges []struct { } // GetVGAControllers holds details about calls to the GetVGAControllers method. GetVGAControllers []struct { } } lockGet3DControllers sync.RWMutex lockGetAllDevices sync.RWMutex lockGetDPUs sync.RWMutex lockGetGPUByIndex sync.RWMutex lockGetGPUByPciBusID sync.RWMutex lockGetGPUs sync.RWMutex lockGetNVSwitches sync.RWMutex lockGetNetworkControllers sync.RWMutex lockGetPciBridges sync.RWMutex lockGetVGAControllers sync.RWMutex } // Get3DControllers calls Get3DControllersFunc. func (mock *InterfaceMock) Get3DControllers() ([]*NvidiaPCIDevice, error) { if mock.Get3DControllersFunc == nil { panic("InterfaceMock.Get3DControllersFunc: method is nil but Interface.Get3DControllers was just called") } callInfo := struct { }{} mock.lockGet3DControllers.Lock() mock.calls.Get3DControllers = append(mock.calls.Get3DControllers, callInfo) mock.lockGet3DControllers.Unlock() return mock.Get3DControllersFunc() } // Get3DControllersCalls gets all the calls that were made to Get3DControllers. // Check the length with: // // len(mockedInterface.Get3DControllersCalls()) func (mock *InterfaceMock) Get3DControllersCalls() []struct { } { var calls []struct { } mock.lockGet3DControllers.RLock() calls = mock.calls.Get3DControllers mock.lockGet3DControllers.RUnlock() return calls } // GetAllDevices calls GetAllDevicesFunc. func (mock *InterfaceMock) GetAllDevices() ([]*NvidiaPCIDevice, error) { if mock.GetAllDevicesFunc == nil { panic("InterfaceMock.GetAllDevicesFunc: method is nil but Interface.GetAllDevices was just called") } callInfo := struct { }{} mock.lockGetAllDevices.Lock() mock.calls.GetAllDevices = append(mock.calls.GetAllDevices, callInfo) mock.lockGetAllDevices.Unlock() return mock.GetAllDevicesFunc() } // GetAllDevicesCalls gets all the calls that were made to GetAllDevices. // Check the length with: // // len(mockedInterface.GetAllDevicesCalls()) func (mock *InterfaceMock) GetAllDevicesCalls() []struct { } { var calls []struct { } mock.lockGetAllDevices.RLock() calls = mock.calls.GetAllDevices mock.lockGetAllDevices.RUnlock() return calls } // GetDPUs calls GetDPUsFunc. func (mock *InterfaceMock) GetDPUs() ([]*NvidiaPCIDevice, error) { if mock.GetDPUsFunc == nil { panic("InterfaceMock.GetDPUsFunc: method is nil but Interface.GetDPUs was just called") } callInfo := struct { }{} mock.lockGetDPUs.Lock() mock.calls.GetDPUs = append(mock.calls.GetDPUs, callInfo) mock.lockGetDPUs.Unlock() return mock.GetDPUsFunc() } // GetDPUsCalls gets all the calls that were made to GetDPUs. // Check the length with: // // len(mockedInterface.GetDPUsCalls()) func (mock *InterfaceMock) GetDPUsCalls() []struct { } { var calls []struct { } mock.lockGetDPUs.RLock() calls = mock.calls.GetDPUs mock.lockGetDPUs.RUnlock() return calls } // GetGPUByIndex calls GetGPUByIndexFunc. func (mock *InterfaceMock) GetGPUByIndex(n int) (*NvidiaPCIDevice, error) { if mock.GetGPUByIndexFunc == nil { panic("InterfaceMock.GetGPUByIndexFunc: method is nil but Interface.GetGPUByIndex was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetGPUByIndex.Lock() mock.calls.GetGPUByIndex = append(mock.calls.GetGPUByIndex, callInfo) mock.lockGetGPUByIndex.Unlock() return mock.GetGPUByIndexFunc(n) } // GetGPUByIndexCalls gets all the calls that were made to GetGPUByIndex. // Check the length with: // // len(mockedInterface.GetGPUByIndexCalls()) func (mock *InterfaceMock) GetGPUByIndexCalls() []struct { N int } { var calls []struct { N int } mock.lockGetGPUByIndex.RLock() calls = mock.calls.GetGPUByIndex mock.lockGetGPUByIndex.RUnlock() return calls } // GetGPUByPciBusID calls GetGPUByPciBusIDFunc. func (mock *InterfaceMock) GetGPUByPciBusID(s string) (*NvidiaPCIDevice, error) { if mock.GetGPUByPciBusIDFunc == nil { panic("InterfaceMock.GetGPUByPciBusIDFunc: method is nil but Interface.GetGPUByPciBusID was just called") } callInfo := struct { S string }{ S: s, } mock.lockGetGPUByPciBusID.Lock() mock.calls.GetGPUByPciBusID = append(mock.calls.GetGPUByPciBusID, callInfo) mock.lockGetGPUByPciBusID.Unlock() return mock.GetGPUByPciBusIDFunc(s) } // GetGPUByPciBusIDCalls gets all the calls that were made to GetGPUByPciBusID. // Check the length with: // // len(mockedInterface.GetGPUByPciBusIDCalls()) func (mock *InterfaceMock) GetGPUByPciBusIDCalls() []struct { S string } { var calls []struct { S string } mock.lockGetGPUByPciBusID.RLock() calls = mock.calls.GetGPUByPciBusID mock.lockGetGPUByPciBusID.RUnlock() return calls } // GetGPUs calls GetGPUsFunc. func (mock *InterfaceMock) GetGPUs() ([]*NvidiaPCIDevice, error) { if mock.GetGPUsFunc == nil { panic("InterfaceMock.GetGPUsFunc: method is nil but Interface.GetGPUs was just called") } callInfo := struct { }{} mock.lockGetGPUs.Lock() mock.calls.GetGPUs = append(mock.calls.GetGPUs, callInfo) mock.lockGetGPUs.Unlock() return mock.GetGPUsFunc() } // GetGPUsCalls gets all the calls that were made to GetGPUs. // Check the length with: // // len(mockedInterface.GetGPUsCalls()) func (mock *InterfaceMock) GetGPUsCalls() []struct { } { var calls []struct { } mock.lockGetGPUs.RLock() calls = mock.calls.GetGPUs mock.lockGetGPUs.RUnlock() return calls } // GetNVSwitches calls GetNVSwitchesFunc. func (mock *InterfaceMock) GetNVSwitches() ([]*NvidiaPCIDevice, error) { if mock.GetNVSwitchesFunc == nil { panic("InterfaceMock.GetNVSwitchesFunc: method is nil but Interface.GetNVSwitches was just called") } callInfo := struct { }{} mock.lockGetNVSwitches.Lock() mock.calls.GetNVSwitches = append(mock.calls.GetNVSwitches, callInfo) mock.lockGetNVSwitches.Unlock() return mock.GetNVSwitchesFunc() } // GetNVSwitchesCalls gets all the calls that were made to GetNVSwitches. // Check the length with: // // len(mockedInterface.GetNVSwitchesCalls()) func (mock *InterfaceMock) GetNVSwitchesCalls() []struct { } { var calls []struct { } mock.lockGetNVSwitches.RLock() calls = mock.calls.GetNVSwitches mock.lockGetNVSwitches.RUnlock() return calls } // GetNetworkControllers calls GetNetworkControllersFunc. func (mock *InterfaceMock) GetNetworkControllers() ([]*NvidiaPCIDevice, error) { if mock.GetNetworkControllersFunc == nil { panic("InterfaceMock.GetNetworkControllersFunc: method is nil but Interface.GetNetworkControllers was just called") } callInfo := struct { }{} mock.lockGetNetworkControllers.Lock() mock.calls.GetNetworkControllers = append(mock.calls.GetNetworkControllers, callInfo) mock.lockGetNetworkControllers.Unlock() return mock.GetNetworkControllersFunc() } // GetNetworkControllersCalls gets all the calls that were made to GetNetworkControllers. // Check the length with: // // len(mockedInterface.GetNetworkControllersCalls()) func (mock *InterfaceMock) GetNetworkControllersCalls() []struct { } { var calls []struct { } mock.lockGetNetworkControllers.RLock() calls = mock.calls.GetNetworkControllers mock.lockGetNetworkControllers.RUnlock() return calls } // GetPciBridges calls GetPciBridgesFunc. func (mock *InterfaceMock) GetPciBridges() ([]*NvidiaPCIDevice, error) { if mock.GetPciBridgesFunc == nil { panic("InterfaceMock.GetPciBridgesFunc: method is nil but Interface.GetPciBridges was just called") } callInfo := struct { }{} mock.lockGetPciBridges.Lock() mock.calls.GetPciBridges = append(mock.calls.GetPciBridges, callInfo) mock.lockGetPciBridges.Unlock() return mock.GetPciBridgesFunc() } // GetPciBridgesCalls gets all the calls that were made to GetPciBridges. // Check the length with: // // len(mockedInterface.GetPciBridgesCalls()) func (mock *InterfaceMock) GetPciBridgesCalls() []struct { } { var calls []struct { } mock.lockGetPciBridges.RLock() calls = mock.calls.GetPciBridges mock.lockGetPciBridges.RUnlock() return calls } // GetVGAControllers calls GetVGAControllersFunc. func (mock *InterfaceMock) GetVGAControllers() ([]*NvidiaPCIDevice, error) { if mock.GetVGAControllersFunc == nil { panic("InterfaceMock.GetVGAControllersFunc: method is nil but Interface.GetVGAControllers was just called") } callInfo := struct { }{} mock.lockGetVGAControllers.Lock() mock.calls.GetVGAControllers = append(mock.calls.GetVGAControllers, callInfo) mock.lockGetVGAControllers.Unlock() return mock.GetVGAControllersFunc() } // GetVGAControllersCalls gets all the calls that were made to GetVGAControllers. // Check the length with: // // len(mockedInterface.GetVGAControllersCalls()) func (mock *InterfaceMock) GetVGAControllersCalls() []struct { } { var calls []struct { } mock.lockGetVGAControllers.RLock() calls = mock.calls.GetVGAControllers mock.lockGetVGAControllers.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/nvpci/resources.go000066400000000000000000000073251520540370700273560ustar00rootroot00000000000000/* * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package nvpci import ( "fmt" "sort" "github.com/NVIDIA/go-nvlib/pkg/nvpci/mmio" ) const ( pmcEndianRegister = 0x4 pmcLittleEndian = 0x0 pmcBigEndian = 0x01000001 ) // MemoryResource represents a mmio region. type MemoryResource struct { Start uintptr End uintptr Flags uint64 Path string } // OpenRW read write mmio region. func (mr *MemoryResource) OpenRW() (mmio.Mmio, error) { rw, err := mmio.OpenRW(mr.Path, 0, int(mr.End-mr.Start+1)) if err != nil { return nil, fmt.Errorf("failed to open file for mmio: %v", err) } switch rw.Read32(pmcEndianRegister) { case pmcBigEndian: return rw.BigEndian(), nil case pmcLittleEndian: return rw.LittleEndian(), nil } return nil, fmt.Errorf("unknown endianness for mmio: %v", err) } // OpenRO read only mmio region. func (mr *MemoryResource) OpenRO() (mmio.Mmio, error) { ro, err := mmio.OpenRO(mr.Path, 0, int(mr.End-mr.Start+1)) if err != nil { return nil, fmt.Errorf("failed to open file for mmio: %v", err) } switch ro.Read32(pmcEndianRegister) { case pmcBigEndian: return ro.BigEndian(), nil case pmcLittleEndian: return ro.LittleEndian(), nil } return nil, fmt.Errorf("unknown endianness for mmio: %v", err) } // From Bit Twiddling Hacks, great resource for all low level bit manipulations. func calcNextPowerOf2(n uint64) uint64 { n-- n |= n >> 1 n |= n >> 2 n |= n >> 4 n |= n >> 8 n |= n >> 16 n |= n >> 32 n++ return n } // GetTotalAddressableMemory will accumulate the 32bit and 64bit memory windows // of each BAR and round the value if needed to the next power of 2; first // return value is the accumulated 32bit addressable memory size the second one // is the accumulated 64bit addressable memory size in bytes. These values are // needed to configure virtualized environments. func (mrs MemoryResources) GetTotalAddressableMemory(roundUp bool) (uint64, uint64) { const pciIOVNumBAR = 6 const pciBaseAddressMemTypeMask = 0x06 const pciBaseAddressMemType32 = 0x00 /* 32 bit address */ const pciBaseAddressMemType64 = 0x04 /* 64 bit address */ // We need to sort the resources so the first 6 entries are the BARs // How a map is represented in memory is not guaranteed, it is not an // array. Keys do not have an order. keys := make([]int, 0, len(mrs)) for k := range mrs { keys = append(keys, k) } sort.Ints(keys) numBAR := 0 memSize32bit := uint64(0) memSize64bit := uint64(0) for _, key := range keys { // The PCIe spec only defines 5 BARs per device, we're // discarding everything after the 5th entry of the resources // file, see lspci.c if key >= pciIOVNumBAR || numBAR == pciIOVNumBAR { break } numBAR++ region := mrs[key] flags := region.Flags & pciBaseAddressMemTypeMask memType32bit := flags == pciBaseAddressMemType32 memType64bit := flags == pciBaseAddressMemType64 memSize := (region.End - region.Start) + 1 if memType32bit { memSize32bit += uint64(memSize) } if memType64bit { memSize64bit += uint64(memSize) } } if roundUp { memSize32bit = calcNextPowerOf2(memSize32bit) memSize64bit = calcNextPowerOf2(memSize64bit) } return memSize32bit, memSize64bit } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/pciids/000077500000000000000000000000001520540370700251425ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/pciids/default_pci.ids000066400000000000000000056707121520540370700301440ustar00rootroot00000000000000# # List of PCI ID's # # Version: 2025.07.11 # Date: 2025-07-11 03:15:02 # # Maintained by Albert Pool, Martin Mares, and other volunteers from # the PCI ID Project at https://pci-ids.ucw.cz/. # # New data are always welcome, especially if they are accurate. If you have # anything to contribute, please follow the instructions at the web site. # # This file can be distributed under either the GNU General Public License # (version 2 or higher) or the 3-clause BSD License. # # The database is a compilation of factual data, and as such the copyright # only covers the aggregation and formatting. The copyright is held by # Martin Mares and Albert Pool. # # Vendors, devices and subsystems. Please keep sorted. # Syntax: # vendor vendor_name # device device_name <-- single tab # subvendor subdevice subsystem_name <-- two tabs 0001 SafeNet (wrong ID) 0010 Allied Telesis, Inc (Wrong ID) # This is a relabelled RTL-8139 8139 AT-2500TX V3 Ethernet 0014 Loongson Technology LLC 7a00 Hyper Transport Bridge Controller 7a02 APB (Advanced Peripheral Bus) Controller 7a03 Gigabit Ethernet Controller 7a04 OTG USB Controller 7a05 Vivante GPU (Graphics Processing Unit) 7a06 DC (Display Controller) 7a07 HDA (High Definition Audio) Controller 7a08 SATA AHCI Controller 7a09 PCI-to-PCI Bridge 7a0b SPI Controller 7a0c LPC Controller 7a0f DMA (Direct Memory Access) Controller # Found on some boards with two sockets 7a10 Hyper Transport Bridge Controller 7a13 7A2000 PCH Gigabit Ethernet Controller 7a14 EHCI USB Controller 7a15 Vivante GPU (Graphics Processing Unit) 7a18 SATA 3 AHCI Controller 7a19 PCI-to-PCI Bridge 7a1b SPI Controller 7a24 OHCI USB Controller # Found on 7A2000 PCH 7a25 LG100 GPU 7a27 7A2000 PCH I2S Controller 7a29 PCI-to-PCI Bridge 7a34 xHCI USB Controller # Found on 7A2000 PCH 7a36 Display Controller 7a39 PCIe x1 Root Port 7a49 PCIe x4 Root Port 7a59 PCIe x8 Root Port 7a69 PCIe x16 Root Port 0018 Fn-Link Technology Limited 6252 6252CPUB 802.11ax PCIe Wireless Network Adapter 001c PEAK-System Technik GmbH 0001 PCAN-PCI CAN-Bus controller 001c 0004 2 Channel CAN Bus SJC1000 001c 0005 2 Channel CAN Bus SJC1000 (Optically Isolated) 003d Lockheed Martin-Marietta Corp # Real TJN ID is e159, but they got it wrong several times --mj 0059 Tiger Jet Network Inc. (Wrong ID) 0070 Hauppauge computer works Inc. 7801 WinTV HVR-1800 MCE 0071 Nebula Electronics Ltd. 0095 Silicon Image, Inc. (Wrong ID) 0680 Ultra ATA/133 IDE RAID CONTROLLER CARD # Wrong ID used in subsystem ID of the TELES.S0/PCI 2.x ISDN adapter 00a7 Teles AG (Wrong ID) 0100 nCipher Security 0123 General Dynamics 0128 Dell (wrong ID) # 018a is not LevelOne but there is a board misprogrammed 018a LevelOne 0106 FPC-0106TX misprogrammed [RTL81xx] 01de Oxide Computer Company 0000 Propolis NVMe Controller 0001 Propolis xHCI Controller 0002 Propolis PCI-PCI Bridge # probably misprogrammed Intel Atom C2338 on Dell 0K8Y0N board 0200 Dell (wrong ID) # 021b is not Compaq but there is a board misprogrammed 021b Compaq Computer Corporation 8139 HNE-300 (RealTek RTL8139c) [iPaq Networking] 025e Solidigm 0b60 NVMe DC SSD [Sentinel Rock Plus controller] 025e 8008 NVMe DC SSD U.2 15mm [D7-P5510] 025e 8208 NVMe DC SSD U.2 15mm [D7-P5810] 025e 8d1d NVMe DC SSD E1.L 9.5mm [D5-P5316] 025e 9008 NVMe DC SSD U.2 15mm [D7-P5520] 025e 900c NVMe DC SSD E1.S 9.5mm [D7-P5520] 025e 900d NVMe DC SSD E1.S 15mm [D7-P5520] 025e 901c NVMe DC SSD E1.L 9.5mm [D7-P5520] 025e 9108 NVMe DC SSD U.2 15mm [D7-P5620] 025e c008 NVMe DC SSD U.2 15mm [D5-P5530] 025e d408 NVMe DC SSD U.2 15mm [D5-P5430] 025e d40c NVMe DC SSD E1.S 9.5mm [D5-P5430] 025e d419 NVMe DC SSD E3.S 7.5mm [D5-P5430] 025e d808 NVMe DC SSD U.2 15mm [D5-P5336] 025e d819 NVMe DC SSD E3.S 7.5mm [D5-P5336] 025e d81c NVMe DC SSD E1.L 18mm [D5-P5336] 025e d81d NVMe DC SSD E1.L 9.5mm [D5-P5336] 0b70 NVMe DC SSD [Yorktown controller] 2b59 NVMe DC SSD [Atomos Prime] 025e 0008 NVMe DC SSD U.2-SFF 15mm [D7-PS1010] 025e 000c NVMe DC SSD E1.S 9.5mm [D7-PS1010] 025e 000d NVMe DC SSD E1.S 15mm [D7-PS1010] 025e 0019 NVMe DC SSD E3.S-1T 7.5mm [D7-PS1010] 025e 0108 NVMe DC SSD U.2-SFF 15mm [D7-PS1030] 025e 0119 NVMe DC SSD E3.S-1T 7.5mm [D7-PS1030] 108e 48a0 NVMe DC SSD U.2-SFF 15mm 3.84TB [D7-PS1010 Custom] 108e 48a1 NVMe DC SSD U.2-SFF 15mm 7.68TB [D7-PS1010 Custom] 108e 48a2 NVMe DC SSD U.2-SFF 15mm 15.36TB [D7-PS1010 Custom] 108e 48a3 NVMe DC SSD Add-In-Card [D7-PS1030 Custom] 108e 48a4 NVMe DC SSD E3.S-1T 7.5mm 3.84TB [D7-PS1010 Custom] 108e 48a5 NVMe DC SSD E3.S-1T 7.5mm 7.68TB [D7-PS1010 Custom] 108e 48a6 NVMe DC SSD E3.S-1T 7.5mm 15.36TB [D7-PS1010 Custom] f1ab P41 Plus NVMe SSD (DRAM-less) [Echo Harbor] f1ac P44 Pro NVMe SSD [Hollywood Beach] 0270 Hauppauge computer works Inc. (Wrong ID) 0291 Davicom Semiconductor, Inc. (Wrong ID) # SpeedStream is Efficient Networks, Inc, a Siemens Company 02ac SpeedStream 1012 1012 PCMCIA 10/100 Ethernet Card [RTL81xx] 02e0 XFX Pine Group Inc. (Wrong ID) 0303 Hewlett-Packard Company (Wrong ID) 0308 ZyXEL Communications Corporation (Wrong ID) 0315 SK-Electronics Co., Ltd. 0357 TTTech Computertechnik AG (Wrong ID) 000a TTP-Monitoring Card V2.0 0432 SCM Microsystems, Inc. 0001 Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet] 0497 Dell Inc. (wrong ID) 060e Lightelligence 0001 Hummingbird ES 0675 Dynalink 1700 IS64PH ISDN Adapter 1702 IS64PH ISDN Adapter 1703 ISDN Adapter (PCI Bus, DV, W) 1704 ISDN Adapter (PCI Bus, D, C) 0709 LJMicro Co., Ltd 0101 GP101 0102 GP102 0201 GP201 0202 GP202 0721 Sapphire, Inc. 0731 Jingjia Microelectronics Co Ltd 1100 JM1100 0731 1101 JM1100-C 0731 1102 JM1100-II 0731 1103 JM1100-I 0731 1104 JM1100-M 0731 1105 JM1100-Y 0731 1106 JM1100-EI 0731 1107 JM1100-EM 7200 JM7200 Series GPU 0731 7201 JM7201 0731 7202 JM7202 0731 7208 JM7200 0731 7212 JM7200 0731 7214 JM7500 0731 7215 JM7200 9100 JM9100 0731 9101 JM9100 0731 9102 JM9100-I 0731 9103 JM9100M 910a JH910 0731 910a JH910 0731 910b JH910-I 0731 910c JH910-M 9200 JM9200 920a JH920 0731 920a JH920 0731 920b JH920-I 0731 920c JH920-M 920b JH920-I 920c JH920-M 9210 JM9210 0731 9210 JM9210 0731 9211 JM9210-I 9211 JM9210-I 9230 JM9230 0731 9230 JM9230 0731 9231 JM9230-I 9231 JM9231-I 9250 JM9250 0731 9250 JM9250 930a JH930-I 0731 930a JH930-I 0731 930b JH930-M 0731 930c JH930 930b JH930-M f011 JM1100-IV f111 JM1100-MV ff11 JM1100-YV 0777 Ubiquiti Networks, Inc. 0795 Wired Inc. 6663 Butane II (MPEG2 encoder board) 6666 MediaPress (MPEG2 encoder board) 07d1 D-Link System Inc 0824 T1042 [Freescale] 0911 Hantick 0925 VIA Technologies, Inc. (Wrong ID) 0a89 BREA Technologies Inc 0b0b Rhino Equipment Corp. 0105 R1T1 0205 R4FXO 0206 RCB4FXO 4-channel FXO analog telephony card 0305 R4T1 0405 R8FXX 0406 RCB8FXX 8-channel modular analog telephony card 0505 R24FXX 0506 RCB24FXS 24-Channel FXS analog telephony card 0605 R2T1 0705 R24FXS 0706 RCB24FXO 24-Channel FXO analog telephony card 0905 R1T3 Single T3 Digital Telephony Card 0906 RCB24FXX 24-channel modular analog telephony card 0a06 RCB672FXX 672-channel modular analog telephony card 0bae Bachmann electronic GmbH 0ccd Preferred Networks, Inc. 0110 MN-Core 0120 MN-Core 2 0ccd 0000 MN-Core 2 16GB 0ccd 0010 MN-Core 2 32GB 0200 MN-Core Direct Connect 0201 MN-Core 2 Middle-plane 0e11 Compaq Computer Corporation 0001 PCI to EISA Bridge 0002 PCI to ISA Bridge 0046 Smart Array 64xx 0e11 4091 Smart Array 6i 0e11 409a Smart Array 641 0e11 409b Smart Array 642 0e11 409c Smart Array 6400 0e11 409d Smart Array 6400 EM 0049 NC7132 Gigabit Upgrade Module 004a NC6136 Gigabit Server Adapter 005a Remote Insight II board - Lights-Out 007c NC7770 1000BaseTX 007d NC6770 1000BaseTX 0085 NC7780 1000BaseTX 00b1 Remote Insight II board - PCI device 00bb NC7760 00ca NC7771 00cb NC7781 00cf NC7772 00d0 NC7782 00d1 NC7783 00e3 NC7761 0508 Netelligent 4/16 Token Ring 1000 Triflex/Pentium Bridge, Model 1000 2000 Triflex/Pentium Bridge, Model 2000 3032 QVision 1280/p 3033 QVision 1280/p 3034 QVision 1280/p 4000 4000 [Triflex] 4040 Integrated Array 4048 Compaq Raid LC2 4050 Smart Array 4200 4051 Smart Array 4250ES 4058 Smart Array 431 4070 Smart Array 5300 4080 Smart Array 5i 4082 Smart Array 532 4083 Smart Array 5312 4091 Smart Array 6i 409a Smart Array 641 409b Smart Array 642 409c Smart Array 6400 409d Smart Array 6400 EM 6010 HotPlug PCI Bridge 6010 7020 USB Controller a0ec Fibre Channel Host Controller a0f0 Advanced System Management Controller 0e11 b0f3 ProLiant DL360 a0f3 Triflex PCI to ISA Bridge a0f7 PCI Hotplug Controller 8086 002a PCI Hotplug Controller A 8086 002b PCI Hotplug Controller B a0f8 ZFMicro Chipset USB a0fc FibreChannel HBA Tachyon ae10 Smart-2/P RAID Controller 0e11 4030 Smart-2/P Array Controller 0e11 4031 Smart-2SL Array Controller 0e11 4032 Smart Array 3200 Controller 0e11 4033 Smart Array 3100ES Controller 0e11 4034 Smart Array 221 Controller ae29 MIS-L ae2a MPC ae2b MIS-E ae31 System Management Controller ae32 Netelligent 10/100 TX PCI UTP ae33 Triflex Dual EIDE Controller ae34 Netelligent 10 T PCI UTP ae35 Integrated NetFlex-3/P ae40 Netelligent Dual 10/100 TX PCI UTP ae43 Netelligent Integrated 10/100 TX UTP ae69 CETUS-L ae6c Northstar ae6d NorthStar CPU to PCI Bridge b011 Netelligent 10/100 TX Embedded UTP b012 Netelligent 10 T/2 PCI UTP/Coax b01e NC3120 Fast Ethernet NIC b01f NC3122 Fast Ethernet NIC b02f NC1120 Ethernet NIC b030 Netelligent 10/100 TX UTP b04a 10/100 TX PCI Intel WOL UTP Controller b060 Smart Array 5300 Controller b0c6 NC3161 Fast Ethernet NIC b0c7 NC3160 Fast Ethernet NIC b0d7 NC3121 Fast Ethernet NIC b0dd NC3131 Fast Ethernet NIC b0de NC3132 Fast Ethernet Module b0df NC6132 Gigabit Module b0e0 NC6133 Gigabit Module b0e1 NC3133 Fast Ethernet Module b123 NC6134 Gigabit NIC b134 NC3163 Fast Ethernet NIC b13c NC3162 Fast Ethernet NIC b144 NC3123 Fast Ethernet NIC b163 NC3134 Fast Ethernet NIC b164 NC3165 Fast Ethernet Upgrade Module b178 Smart Array 5i/532 0e11 4080 Smart Array 5i 0e11 4082 Smart Array 532 0e11 4083 Smart Array 5312 b1a4 NC7131 Gigabit Server Adapter b200 Memory Hot-Plug Controller b203 Integrated Lights Out Controller 103c 3305 iLO2 b204 Integrated Lights Out Processor 103c 3305 iLO2 c000 Remote Insight Lights-Out Edition f130 NetFlex-3/P ThunderLAN 1.0 f150 NetFlex-3/P ThunderLAN 2.3 0e55 HaSoTec GmbH 0eac SHF Communication Technologies AG 0008 Ethernet Powerlink Managing Node 01 0f62 Acrox Technologies Co., Ltd. 1000 Broadcom / LSI 0001 53c810 1000 1000 LSI53C810AE PCI to SCSI I/O Processor 0002 53c820 0003 53c825 1000 1000 LSI53C825AE PCI to SCSI I/O Processor (Ultra Wide) 0004 53c815 0005 53c810AP 0006 53c860 1000 1000 LSI53C860E PCI to Ultra SCSI I/O Processor 000a 53c1510 0e11 b143 Integrated Dual Channel Wide Ultra2 SCSI Controller 1000 1000 LSI53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Nonintelligent mode) 000b 53C896/897 0e11 6004 EOB003 Series SCSI host adapter 1000 1000 LSI53C896/7 PCI to Dual Channel Ultra2 SCSI Multifunction Controller 1000 1010 LSI22910 PCI to Dual Channel Ultra2 SCSI host adapter 1000 1020 LSI21002 PCI to Dual Channel Ultra2 SCSI host adapter 13e9 1000 6221L-4U (Dual U2W SCSI, dual 10/100TX, graphics) 000c 53c895 1000 1010 LSI8951U PCI to Ultra2 SCSI host adapter 1000 1020 LSI8952U PCI to Ultra2 SCSI host adapter 1de1 3906 DC-390U2B SCSI adapter 1de1 3907 DC-390U2W 000d 53c885 000f 53c875 0e11 7004 Embedded Ultra Wide SCSI Controller 1000 1000 LSI53C876/E PCI to Dual Channel SCSI Controller 1000 1010 LSI22801 PCI to Dual Channel Ultra SCSI host adapter 1000 1020 LSI22802 PCI to Dual Channel Ultra SCSI host adapter 1092 8760 FirePort 40 Dual SCSI Controller 1775 10d0 V5D Single Board Computer Wide Ultra SCSI 1775 10d1 V5D Single Board Computer Ultra SCSI 1de1 3904 DC390F/U Ultra Wide SCSI Adapter 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 4c53 1050 CT7 mainboard 0010 53C1510 0e11 4040 Integrated Smart Array Controller 0e11 4048 RAID LC2 Controller 1000 1000 53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode) 0012 53c895a 1000 1000 LSI53C895A PCI to Ultra2 SCSI Controller 0013 53c875a 1000 1000 LSI53C875A PCI to Ultra SCSI Controller 0014 MegaRAID Tri-Mode SAS3516 1000 9460 MegaRAID 9460-16i 1000 9480 MegaRAID 9480-8i8e 1000 9481 MegaRAID 9480-8e 1028 1f3a PERC H745 Adapter 1028 1f3b PERC H745 Front 1028 1fd4 PERC H745P MX 1137 020e UCSC-RAID-M5 12G Modular RAID Controller 1d49 0602 ThinkSystem RAID 930-16i 4GB Flash PCIe 12Gb Adapter 1d49 0604 ThinkSystem RAID 930-8e 4GB Flash PCIe 12Gb Adapter 1d49 0607 ThinkSystem RAID 930-16i 8GB Flash PCIe 12Gb Adapter 8086 352d Integrated RAID Module RMSP3AD160F 8086 9460 RAID Controller RSP3TD160F 8086 9480 RAID Controller RSP3MD088F 0015 MegaRAID Tri-Mode SAS3416 1000 9441 MegaRAID 9440-16i 1028 1f3c PERC H345 Adapter 1028 1f3d PERC H345 Front 1d49 0503 ThinkSystem RAID 530-16i PCIe 12Gb Adapter 0016 MegaRAID Tri-Mode SAS3508 1000 9461 MegaRAID 9460-8i 1000 9462 MegaRAID 9460-4i 1000 9463 MegaRAID 9365-28i 1000 9464 MegaRAID 9365-24i 1028 1fc9 PERC H840 Adapter 1028 1fcb PERC H740P Adapter 1028 1fcd PERC H740P Mini 1028 1fcf PERC H740P Mini 1d49 0601 ThinkSystem RAID 930-8i 2GB Flash PCIe 12Gb Adapter 1d49 0603 ThinkSystem RAID 930-24i 4GB Flash PCIe 12Gb Adapter 8086 352e Integrated RAID Module RMSP3CD080F 8086 352f Integrated RAID Module RMSP3HD080E 8086 9461 RAID Controller RSP3DD080F 0017 MegaRAID Tri-Mode SAS3408 1000 9440 MegaRAID 9440-8i 1000 9442 MegaRAID 9440-4i 1d49 0500 ThinkSystem RAID 530-8i PCIe 12Gb Adapter 1d49 0502 ThinkSystem RAID 530-8i Dense Adapter 8086 3528 Integrated RAID RMSP3LD060 8086 3529 Integrated RAID RMSP3LD060 8086 9441 RAID Controller RSP3WD080E 001b MegaRAID Tri-Mode SAS3504 1d49 0605 ThinkSystem RAID 930-4i 2GB Flash Flex Adapter 001c MegaRAID Tri-Mode SAS3404 1d49 0501 ThinkSystem RAID 530-4i Flex Adapter 0020 53c1010 Ultra3 SCSI Adapter 1000 1000 LSI53C1010-33 PCI to Dual Channel Ultra160 SCSI Controller 107b 1040 Server Onboard 53C1010-33 1de1 1020 DC-390U3W 0021 53c1010 66MHz Ultra3 SCSI Adapter 1000 1000 LSI53C1000/1000R/1010R/1010-66 PCI to Ultra160 SCSI Controller 1000 1010 Asus TR-DLS onboard 53C1010-66 103c 1300 Ultra160 SCSI [AB306A] 103c 1310 Ultra160 SCSI [A9918A] 103c 1330 Ultra160 SCSI [A7059A] 103c 1340 Ultra160 SCSI [A7060A] 124b 1070 PMC-USCSI3 4c53 1080 CT8 mainboard 4c53 1300 P017 mezzanine (32-bit PMC) 4c53 1310 P017 mezzanine (64-bit PMC) 002f MegaRAID SAS 2208 IOV [Thunderbolt] 1028 1f39 SPERC8-e 1028 1f3e SPERC 8 0030 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI 0e11 00da ProLiant ML 350 1028 0123 LSI Logic 1020/1030 1028 014a LSI Logic 1020/1030 1028 016c PowerEdge 1850 MPT Fusion SCSI/RAID (Perc 4) 1028 0183 LSI Logic 1020/1030 1028 018a PERC 4/IM 1028 1010 LSI U320 SCSI Controller 103c 12c5 Ultra320 SCSI [A7173A] 103c 1323 Core I/O LAN/SCSI Combo [AB314A] 103c 3108 Single Channel Ultra320 SCSI HBA G2 103c 322a SC11Xe Ultra320 Single Channel PCIe x4 SCSI Host Bus Adapter (412911-B21) 124b 1170 PMC-USCSI320 15ad 1976 LSI Logic Parallel SCSI Controller (emulated) 1734 1052 PRIMERGY BX/RX/TX S2 series onboard SCSI(IME) 0031 53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI 0032 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI 1000 1000 LSI53C1020/1030 PCI-X to Ultra320 SCSI Controller 0033 1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI 0040 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI 1000 0033 MegaRAID SCSI 320-2XR 1000 0066 MegaRAID SCSI 320-2XRWS 0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI 0050 SAS1064 PCI-X Fusion-MPT SAS 1028 1f04 SAS 5/E 1028 1f09 SAS 5i/R 0052 MegaRAID SAS-3 3216/3224 [Cutlass] 0053 MegaRAID SAS-3 3216/3224 [Cutlass] 1000 9350 MegaRAID SAS 9341-16i 1000 9351 MegaRAID SAS 9341-24i 0054 SAS1068 PCI-X Fusion-MPT SAS 1028 1f04 SAS 5/E Adapter Controller 1028 1f05 SAS 5/i Adapter Controller 1028 1f06 SAS 5/i Integrated Controller 1028 1f07 SAS 5/iR Integrated RAID Controller 1028 1f08 SAS 5/iR Integrated RAID Controller 1028 1f09 SAS 5/iR Adapter RAID Controller 103c 3228 SAS3080X-HP 8-port PCI-X 133MHz Host Bus Adapter with 2xSFF-8484 15ad 1976 SAS Controller 0055 SAS1068 PCI-X Fusion-MPT SAS 1033 8336 SAS1068 0056 SAS1064ET PCI-Express Fusion-MPT SAS 1014 03bb ServeRAID BR10il SAS/SATA Controller v2 8086 34dc AXX4SASMOD RAID Controller 0057 M1064E MegaRAID SAS 8086 346c Embedded Software RAID Technology II (ESTRII) 0058 SAS1068E PCI-Express Fusion-MPT SAS 1000 3140 SAS3081E-R 8-Port SAS/SATA Host Bus Adapter 1028 021d SAS 6/iR Integrated Workstations RAID Controller 1028 1f0e SAS 6/iR Adapter RAID Controller 1028 1f0f SAS 6/iR Integrated Blades RAID Controller 1028 1f10 SAS 6/iR Integrated RAID Controller 103c 3229 SC44Ge Host Bus Adapter 0059 MegaRAID SAS 8208ELP/8208ELP 005a SAS1066E PCI-Express Fusion-MPT SAS 005b MegaRAID SAS 2208 [Thunderbolt] 1000 9265 MegaRAID SAS 9265-8i 1000 9266 MegaRAID SAS 9266-8i 1000 9267 MegaRAID SAS 9267-8i 1000 9268 MegaRAID SAS 9265CV-8i / 9270CV-8i 1000 9269 MegaRAID SAS 9266-4i 1000 9270 MegaRAID SAS 9270-8i 1000 9271 MegaRAID SAS 9271-8i 1000 9272 MegaRAID SAS 9272-8i 1000 9273 MegaRAID SAS 9270CV-8i 1000 9274 MegaRAID SAS 9270-4i 1000 9275 MegaRAID SAS 9271-8iCC 1000 9276 MegaRAID SAS 9271-4i 1000 9285 MegaRAID SAS 9285-8e 1000 9288 MegaRAID SAS 9285CV-8e 1000 9290 MegaRAID SAS 9286-8e 1000 9291 MegaRAID SAS 9286CV-8e 1000 9295 MegaRAID SAS 9286CV-8eCC 1014 040b ServeRAID M5110 SAS/SATA Controller 1014 040c ServeRAID M5120 SAS/SATA Controller 1014 0412 ServeRAID M5110e SAS/SATA Controller 1028 1f2d PERC H810 Adapter 1028 1f30 PERC H710 Embedded 1028 1f31 PERC H710P Adapter 1028 1f33 PERC H710P Mini (for blades) 1028 1f34 PERC H710P Mini (for monolithics) 1028 1f35 PERC H710 Adapter 1028 1f37 PERC H710 Mini (for blades) 1028 1f38 PERC H710 Mini (for monolithics) 15d9 0690 LSI MegaRAID ROMB 8086 3510 RMS25PB080 RAID Controller 8086 3511 RMS25PB040 RAID Controller 8086 3512 RMT3PB080 RAID Controller 8086 3513 Integrated RAID Module RMS25CB080 8086 3514 RMS25CB040 RAID Controller 8086 351c RMS25PB080N RAID Controller 8086 351d RMS25CB080N RAID Controller 8086 9265 RS25DB080 RAID Controller 8086 9268 RS25AB080 RAID Controller 8086 9285 RS25NB008 RAID Controller 8086 9288 RS25SB008 RAID Controller 005c SAS1064A PCI-X Fusion-MPT SAS 005d MegaRAID SAS-3 3108 [Invader] 1000 9361 MegaRAID SAS 9361-8i 1000 9363 MegaRAID SAS 9361-4i 1000 9364 MegaRAID SAS 9364-8i 1000 936a MegaRAID SAS 9364-8i 1000 9380 MegaRAID SAS 9380-8e 1028 1f41 PERC H830 Adapter 1028 1f42 PERC H730P Adapter 1028 1f43 PERC H730 Adapter 1028 1f47 PERC H730P Mini 1028 1f48 PERC H730P Mini (for blades) 1028 1f49 PERC H730 Mini 1028 1f4a PERC H730 Mini (for blades) 1028 1f4d PERC FD33xS 1028 1f4f PERC H730P Slim 1028 1f54 PERC FD33xD 1028 1fd1 PERC H730P MX 1734 11f6 PRAID EP400i 17aa 1052 ThinkServer RAID 720i 17aa 1053 ThinkServer RAID 720ix 1bd4 0014 12G SAS3108 2G 1bd4 0015 12G SAS3108 4G 1d49 0600 ThinkSystem RAID 730-8i 1GB Cache PCIe 12Gb Adapter 1d49 0608 ThinkSystem RAID 730-8i 2GB Flash PCIe 12Gb Adapter 1d49 0609 ThinkSystem RAID 730-8i 4GB Flash PCIe 12Gb Adapter 8086 351e RMS3CC080 RAID Controller 8086 351f RMS3CC040 RAID Controller 8086 9360 RS3DC080 RAID Controller 8086 9362 RS3DC040 RAID Controller 8086 9380 RS3SC008 RAID Controller 8086 9381 RS3MC044 RAID Controller 005e SAS1066 PCI-X Fusion-MPT SAS 005f MegaRAID SAS-3 3008 [Fury] 1028 1f44 PERC H330 Adapter 1028 1f4b PERC H330 Mini 1028 1f4c PERC H330 Mini (for blades) 1028 1f4d PERC H330 Embedded (for monolithic) 1054 306a SAS 3004 iMR ROMB 1734 1211 PRAID CP400i [D3307-A12] 1d49 04db ServeRAID M1210 SAS/SATA Controller 1d49 0504 ThinkSystem RAID 520-8i PCIe 12Gb Adapter 0060 MegaRAID SAS 1078 1000 1006 MegaRAID SAS 8888ELP 1000 100a MegaRAID SAS 8708ELP 1000 100e MegaRAID SAS 8884E 1000 100f MegaRAID SAS 8708E 1000 1010 MegaRAID SATA 350-8ELP 1000 1011 MegaRAID SATA 350-4ELP 1000 1012 MegaRAID SAS 8704ELP 1000 1016 MegaRAID SAS 8880EM2 1014 0363 MegaRAID SAS PCI Express ROMB 1014 0364 SystemX MegaRAID SAS 8808E 1014 0365 SystemX MegaRAID SAS 8884E 1014 0379 SystemX MegaRAID SAS 8880EM2 1028 1f0a PERC 6/E Adapter RAID Controller 1028 1f0b PERC 6/i Adapter RAID Controller 1028 1f0c PERC 6/i Integrated RAID Controller 1028 1f0d PERC 6/i Integrated RAID Controller 1028 1f11 CERC 6/i Integrated RAID Controller 1033 835a MegaRAID SAS PCI Express ROMB 1043 824d MegaRAID SAS PCI Express ROMB 1170 002f MegaRAID SAS PCI Express ROMB 1170 0036 MegaRAID SAS PCI Express ROMB 15d9 c080 MegaRAID SAS PCI Express ROMB 17aa 6b7c MegaRAID SAS PCI Express ROMB 18a1 0003 LSI MegaRAID SAS PCI Express ROMB 8086 1006 RAID Controller SRCSAS28EP 8086 100a RAID Controller SRCSAS28EV 8086 1010 RAID Controller SRCSATA28E 8086 34cc Integrated RAID Controller SROMBSAS28E 8086 34cd Integrated RAID Controller SROMBSAS28E 8086 3505 Integrated RAID Controller SROMBSASMP2 0062 SAS1078 PCI-Express Fusion-MPT SAS 1000 0062 SAS1078 PCI-Express Fusion-MPT SAS 0064 SAS2116 PCI-Express Fusion-MPT SAS-2 [Meteor] 1000 3030 9200-16e 6Gb/s SAS/SATA PCIe x8 External HBA 1000 30c0 SAS 9201-16i 1000 30d0 9201-16e 6Gb/s SAS/SATA PCIe x8 External HBA 0065 SAS2116 PCI-Express Fusion-MPT SAS-2 [Meteor] 006e SAS2308 PCI-Express Fusion-MPT SAS-2 0070 SAS2004 PCI-Express Fusion-MPT SAS-2 [Spitfire] 1000 3010 SAS9211-4i 1014 040e ServeRAID H1110 0071 MR SAS HBA 2004 0072 SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] 1000 3020 9211-8i 1000 3040 9210-8i 1000 3080 9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA] 1000 30b0 9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA] 1014 03ca IBM 6Gb SAS HBA [9212-4i4e] 1028 1f1c 6Gbps SAS HBA Adapter 1028 1f1d PERC H200 Adapter 1028 1f1e PERC H200 Integrated 1028 1f1f PERC H200 Modular 1028 1f20 PERC H200 Embedded 1028 1f22 PERC H200 Internal Tape Adapter # Fujitsu D2607 SAS2008 HBA controller 1734 1177 HBA Ctrl SAS 6G 0/1 [D2607] 1bd4 000d 6G SAS2008IT 1bd4 000e 6G SAS2008IR 1bd4 000f 6G SAS2008IT SA5248 1bd4 0010 6G SAS2008IR SA5248 4c52 96c8 LRSA96C8 8-Port SATA3 (6Gb/s) Exchange Adapter (with RAID) 8086 350f RMS2LL040 RAID Controller 8086 3700 SSD 910 Series 0073 MegaRAID SAS 2008 [Falcon] 1000 9240 MegaRAID SAS 9240-8i 1000 9241 MegaRAID SAS 9240-4i 1000 92a0 MegaRAID SAS 9220-8i 1014 03b1 ServeRAID M1015 SAS/SATA Controller 1014 040d ServeRAID M1115 SAS/SATA Controller 1028 1f4e PERC H310 Adapter 1028 1f4f PERC H310 Integrated 1028 1f50 PERC H310 Mini Blades 1028 1f51 PERC H310 Mini Monolithics 1028 1f52 PERC H310 Embedded1 1028 1f53 PERC H310 Embedded2 1028 1f54 PERC H310 Reserved 1028 1f78 PERC H310 1054 3035 LSI MegaRAID SAS 9240-8i 1137 0072 2004 iMR ROMB 1137 0073 2008 ROMB 1137 00b0 UCSC RAID SAS 2008M-8i 1137 00b1 UCSC RAID SAS 2008M-8i 1137 00c2 UCS E-Series Double Wide 1137 00c3 UCS E-Series Single Wide 15d9 0400 Supermicro SMC2008-iMR 1734 1177 RAID Ctrl SAS 6G 0/1 (D2607) 17aa 1051 ThinkServer RAID 510i 8086 350d RMS2AF040 RAID Controller 8086 9240 RAID Controller RS2WC080 8086 9241 RAID Controller RS2WC040 0074 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] 0076 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] 0077 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] 0079 MegaRAID SAS 2108 [Liberator] 1000 9251 MegaRAID SAS 9260-4ix 1000 9256 MegaRAID SAS 9260-8ix 1000 9260 MegaRAID SAS 9260-4i 1000 9261 MegaRAID SAS 9260-8i 1000 9262 MegaRAID SAS 9262-8i 1000 9263 MegaRAID SAS 9261-8i 1000 9264 MegaRAID SAS 9264-8i 1000 9267 MegaRAID SAS 9260CV-4i 1000 9268 MegaRAID SAS 9260CV-8i 1000 9275 MegaRAID SAS 9280-8ex 1000 9276 MR9260-16i 1000 9280 MegaRAID SAS 9280-8e 1000 9281 MegaRAID SAS 9281-8E 1000 9282 MegaRAID SAS 9280-4i4e 1000 9290 MegaRAID SAS 9280DE-24i4e 1014 03b2 ServeRAID M5015 SAS/SATA Controller 1014 03b3 ServeRAID M5025 SAS/SATA Controller 1028 1f15 PERC H800 Adapter 1028 1f16 PERC H700 Adapter 1028 1f17 PERC H700 Integrated 1028 1f18 PERC H700 Modular 1028 1f1a PERC H800 Proto Adapter 1028 1f1b PERC H700 Integrated 1043 8480 PIKE-2108 16PD 1734 1176 RAID Ctrl SAS 6G 5/6 512MB (D2616) 1734 1177 RAID Ctrl SAS 6G 0/1 (D2607) 8086 350b RMS2MH080 RAID Controller 8086 9256 MegaRAID SAS 9260DE-8i RS2BL080DE 8086 9260 RAID Controller RS2BL040 8086 9261 RAID Controller RS2BL080 8086 9264 RAID Controller RT3WB080 Warm Beach (Caster Lite) 8086 9267 RAID Controller RS2VB040 8086 9268 RAID Controller RS2VB080 8086 9275 RAID Controller RS2PI008DE 8086 9276 RAID Controller RS2WG160 8086 9280 RAID Controller RS2PI008 8086 9282 RAID Controller RS2MB044 8086 9290 RAID Controller RS2SG244 007c MegaRAID SAS 1078DE 1014 0395 ServeRAID-AR10is SAS/SATA Controller 007e SSS6200 PCI-Express Flash SSD 1000 0504 Nytro NWD-BLP4-800 1000 0507 Nytro NWD-BLP4-1600 1000 0581 Nytro NWD-BLP4-400 1000 100d Nytro NWD-BFH6-1200 1000 100e Nytro NWD-BFH8-1600 1000 107e Nytro NWD-BFH8-3200 1000 1310 Nytro XP6302-8B1536 1000 1311 Nytro XP6302-8B2048 1000 1314 Nytro XP6302-8B4096 1000 150c Nytro XP6210-4A2048 1000 150f Nytro XP6210-4B2048 1000 160b Nytro XP6209-4A1024 1000 1613 Nytro XP6209-4B2048 108e 050a Nytro ELP4x200_4d_n 108e 0581 Nytro ELP4x100_4d_n 0080 SAS2208 PCI-Express Fusion-MPT SAS-2 0081 SAS2208 PCI-Express Fusion-MPT SAS-2 0082 SAS2208 PCI-Express Fusion-MPT SAS-2 0083 SAS2208 PCI-Express Fusion-MPT SAS-2 0084 SAS2208 PCI-Express Fusion-MPT SAS-2 0085 SAS2208 PCI-Express Fusion-MPT SAS-2 0086 SAS2308 PCI-Express Fusion-MPT SAS-2 15d9 0690 Onboard MegaRAID SAS2208 [Thunderbolt] 15d9 0691 Onboard SAS2308 PCI-Express Fusion-MPT SAS-2 0087 SAS2308 PCI-Express Fusion-MPT SAS-2 1000 3020 9207-8i SAS2.1 HBA 1000 3030 SAS9207-4i4e 1000 3040 9207-8e SAS2.1 HBA 1000 3050 SAS9217-8i 1000 3060 SAS9217-4i4e 1014 0472 N2125 External Host Bus Adapter 1014 047a N2115 Internal Host Bus Adapter 1590 0041 H220i 1590 0042 H221 / 9207-8e 1590 0044 H220i 1bd4 0009 6G SAS2308IR 1bd4 000a 6G SAS2308IT 8086 3000 RS25GB008 RAID Controller 8086 3060 RS25FB044 RAID Controller 8086 3516 RMS25JB080 RAID Controller 8086 3517 RMS25JB040 RAID Controller 8086 3518 RMS25KB080 RAID Controller 8086 3519 RMS25KB040 RAID Controller 8086 351a RMS25LB040 RAID Controller 8086 351b RMS25LB080 RAID Controller 008f 53c875J 1092 8000 FirePort 40 SCSI Controller 1092 8760 FirePort 40 Dual SCSI Host Adapter 0090 SAS3108 PCI-Express Fusion-MPT SAS-3 0091 SAS3108 PCI-Express Fusion-MPT SAS-3 0094 SAS3108 PCI-Express Fusion-MPT SAS-3 0095 SAS3108 PCI-Express Fusion-MPT SAS-3 0096 SAS3004 PCI-Express Fusion-MPT SAS-3 0097 SAS3008 PCI-Express Fusion-MPT SAS-3 1000 3090 SAS9311-8i 1000 30a0 SAS9300-8e 1000 30e0 SAS9300-8i 1000 3130 SAS 9300-16i 1000 3170 SAS9302-16e # IBM SAS3008 HBA controller 1014 0457 9302-8i [N2215] 1028 1f45 HBA330 Adapter 1028 1f46 12Gbps HBA 1028 1f53 HBA330 Mini 1028 1fd2 HBA330 MX 1028 1fd3 HBA330 MMZ # Supermicro AOC-S3008L-L8e uses 0808 for their SAS3008 SAS controller 15d9 0808 AOC-S3008L-L8e 1bd4 0008 12G SAS3008IMR Onboard 1bd4 000b 12G SAS3008IR 1bd4 000c 12G SAS3008IT 1bd4 0011 Inspur 12Gb 8i-3008 IT SAS HBA 1bd4 0012 12Gb SAS3008IR UDM 1bd4 001f 12G SAS3008IR Onboard 1bd4 0020 12G SAS3008IT Onboard 1bd4 0026 12G SAS3008IT RACK 1bd4 0027 12G SAS3008IMR RACK 1bd4 0028 12G SAS3008IR RACK 00a5 Fusion-MPT 24GSAS/PCIe SAS40xx/41xx 1000 4600 MegaRAID 9670W-16i Tri-Mode Storage Adapter 1000 4610 MegaRAID 9670-24i Tri-Mode Storage Adapter 1000 4620 MegaRAID 9660-16i Tri-Mode Storage Adapter 1000 4630 MegaRAID 9660-8i8e Tri-Mode Storage Adapter 1000 4640 eHBA 9600W-16i Tri-Mode Storage Adapter 1000 4650 eHBA 9600W-16e Tri-Mode Storage Adapter 1000 4660 eHBA 9600-24i Tri-Mode Storage Adapter 1000 4670 eHBA 9600-16i Tri-Mode Storage Adapter 1000 4680 eHBA 9600-16e Tri-Mode Storage Adapter 1000 4690 MegaRAID 9620-16i Tri-Mode Storage Adapter 1000 46a0 MegaRAID 9660-24i Tri-Mode Storage Adapter 1000 46c0 eHBA 9680W-16e Tri-Mode Storage Adapter 1000 46d0 eHBA 9600-8i8e Tri-Mode Storage Adapter # eHBA 9602W-16e Tri-Mode Storage Adapter 1000 46e0 eHBA 9602W-16e Tri-Mode Storage Adapter 1028 2114 PERC H965i Adapter 1028 2115 PERC H965i Front 1028 2117 PERC H965i MX 1028 213a PERC H965e Adapter 1028 213b PERC H765i Adapter 1028 213c PERC H765i Front 1028 213d PERC H765N Front 1028 213e PERC H765i MX 1028 213f PERC H365i Adapter 1028 2140 PERC H365i Front 1028 2142 HBA465e Adapter 1028 2209 HBA465i Adapter 1028 220a HBA465i Front 1028 22cb PERC H365i Front 1028 22cc PERC H965i Front 1028 22cd HBA465i Front 15d9 1d03 AOC-S4116L-H16IR (16DD/96DD) RAID Adapter 15d9 1d07 AOC-S4016L-L16IT Storage Adapter 15d9 1d08 AOC-S4016L-L16IR Storage Adapter 1d49 020a ThinkSystem 450W-16e SAS/SATA PCIe Gen4 24Gb HBA 00ab SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC) # 8 Internal and 8 External port channel 9400 HBA 1000 3040 HBA 9400-8i8e 8086 3530 Integrated RAID Module RMSP3JD160J 00ac SAS3416 Fusion-MPT Tri-Mode I/O Controller Chip (IOC) # Channel 16 internal port HBA 1000 3000 HBA 9400-16i # Channel 16 external port HBA 1000 3020 HBA 9400-16e 1028 1fe3 HBA345 Adapter 1028 1fe4 HBA345 Front 1d49 0201 ThinkSystem 430-16i SAS/SATA 12Gb HBA 1d49 0203 ThinkSystem 430-16e SAS/SATA 12Gb HBA 8086 3000 RAID Controller RSP3QD160J 8086 3020 RAID Controller RSP3GD016J 00ae SAS3508 Fusion-MPT Tri-Mode RAID On Chip (ROC) 00af SAS3408 Fusion-MPT Tri-Mode I/O Controller Chip (IOC) 1000 3010 HBA 9400-8i # 9400 Channel 8 external port HBA 1000 3030 HBA 9400-8e 1d49 0200 ThinkSystem 430-8i SAS/SATA 12Gb HBA 1d49 0202 ThinkSystem 430-8e SAS/SATA 12Gb HBA 1d49 0204 ThinkSystem 430-8i SAS/SATA 12Gb Dense HBA 00b2 PCIe Switch management endpoint 1d49 0003 ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter # 24G SAS/PCIe storage adapter chip 00b3 Fusion-MPT 24G SAS/PCIe SAS50xx/SAS51xx # 9760W 32 internal port RAID controller 1000 5000 MegaRAID 9760W-32i 24G SAS/PCIe Storage Adapter # 9760W 16 internal port RAID controller 1000 5001 MegaRAID 9760W-16i 24G SAS/PCIe Storage Adapter # 9760W 16 internal and 16 external port RAID controller 1000 5010 MegaRAID 9760W-16i16e 24G SAS/PCIe Storage Adapter # 9700W 32 internal port Storage controller 1000 5020 eHBA 9700W-32i 24G SAS/PCIe Storage Adapter # 9700W 16 internal port Storage controller 1000 5021 eHBA 9700W-16i 24G SAS/PCIe Storage Adapter # 9700 16 external port Storage controller 1000 5030 eHBA 9700-16e 24G SAS/PCIe Storage Adapter 1028 22d2 PERC H975i Front 1028 22d3 PERC H975i Adapter 1028 23cb PERC H975i Front 1028 23cd PERC H975i Adapter 1028 2446 PERC H976i Front 1d49 020b ThinkSystem 460-16e SAS/SATA PCIe Gen5 24Gb HBA 00b5 Fusion-MPT 24G SAS/PCIe SAS50xx/SAS51xx # 9760W 32 internal port RAID controller 1000 5000 MegaRAID 9760W-32i 24G SAS/PCIe Storage Adapter # 9760W 16 internal port RAID controller 1000 5001 MegaRAID 9760W-16i 24G SAS/PCIe Storage Adapter # 9760W 16 internal and 16 external port RAID controller 1000 5010 MegaRAID 9760W-16i16e 24G SAS/PCIe Storage Adapter # 9700W 32 internal port Storage controller 1000 5020 eHBA 9700W-32i 24G SAS/PCIe Storage Adapter # 9700W 16 internal port Storage controller 1000 5021 eHBA 9700W-16i 24G SAS/PCIe Storage Adapter # 9700 16 external port Storage controller 1000 5030 eHBA 9700-16e 24G SAS/PCIe Storage Adapter 1028 22d2 PERC H975i Front - Virtual 1028 22d3 PERC H975i Adapter - Virtual 1028 23cb PERC H975i Front - Virtual 1028 23cd PERC H975i Adapter - Virtual 1028 2446 PERC H976i Front - Virtual # Broadcom next-gen MPT PCIe switch 00b8 Fusion-MPT Switch SAS50xx/SAS51xx 00be SAS3504 Fusion-MPT Tri-Mode RAID On Chip (ROC) 00bf SAS3404 Fusion-MPT Tri-Mode I/O Controller Chip (IOC) 00c0 SAS3324 PCI-Express Fusion-MPT SAS-3 00c1 SAS3324 PCI-Express Fusion-MPT SAS-3 00c2 SAS3324 PCI-Express Fusion-MPT SAS-3 00c3 SAS3324 PCI-Express Fusion-MPT SAS-3 00c4 SAS3224 PCI-Express Fusion-MPT SAS-3 # SAS 9305 16 internal port HBA 1000 3190 SAS9305-16i # SAS 9305 24 internal port HBA 1000 31a0 SAS9305-24i 1170 0002 SAS3224 PCI Express to 12Gb HBA MEZZ CARD 00c5 SAS3316 PCI-Express Fusion-MPT SAS-3 00c6 SAS3316 PCI-Express Fusion-MPT SAS-3 00c7 SAS3316 PCI-Express Fusion-MPT SAS-3 00c8 SAS3316 PCI-Express Fusion-MPT SAS-3 00c9 SAS3216 PCI-Express Fusion-MPT SAS-3 # 9305 16 external port SAS HBA 1000 3180 SAS9305-16e 00ce MegaRAID SAS-3 3316 [Intruder] 1000 9371 MegaRAID SAS 9361-16i 1000 9390 MegaRAID SAS 9380-8i8e 00cf MegaRAID SAS-3 3324 [Intruder] 1000 9370 MegaRAID SAS 9361-24i 00d0 SAS3716 Fusion-MPT Tri-Mode RAID Controller Chip (ROC) # 9405W 16 internal port channel HBA 1000 3050 HBA 9405W-16i # 9405W 8 internal and 8 external port channel HBA 1000 3070 HBA 9405W-8i8e 00d1 SAS3616 Fusion-MPT Tri-Mode I/O Controller Chip (IOC) # 9405W 16 external port Channel HBA 1000 3080 HBA 9405W-16e # 9405W 16 internal port Channel HBA 1000 3090 HBA 9405W-16i 00d3 MegaRAID Tri-Mode SAS3716W 00e0 Fusion-MPT 12GSAS/PCIe Unsupported SAS39xx 00e1 Fusion-MPT 12GSAS/PCIe SAS39xx 00e2 Fusion-MPT 12GSAS/PCIe Secure SAS39xx 00e3 Fusion-MPT 12GSAS/PCIe Unsupported SAS39xx 00e4 Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx # Invalid part 1028 200b HBA355i Adapter Invalid # Invalid part 1028 200c HBA355i Front Invalid # Invalid part 1028 200d HBA355e Adapter Invalid # Invalid part 1028 200e HBA350i MX Invalid # Soft Secure 00e5 Fusion-MPT 12GSAS/PCIe SAS38xx # Soft Secure 1028 200b HBA355i Adapter # Soft Secure 1028 200c HBA355i Front # Soft Secure 1028 200d HBA355e Adapter # Soft Secure 1028 200e HBA350i MX 1d49 0205 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA 1d49 0206 ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA 00e6 Fusion-MPT 12GSAS/PCIe Secure SAS38xx 1000 4050 9500-16i Tri-Mode HBA 1000 4060 9500-8i Tri-Mode HBA 1000 4070 9500-16e Tri-Mode HBA 1000 4080 9500-8e Tri-Mode HBA 1028 200b HBA355i Adapter 1028 200c HBA355i Front 1028 200d HBA355e Adapter 1028 200e HBA350i MX 1028 2170 HBA350i MM 1028 2175 HBA350i Adapter 1028 2197 HBA350i MM LP 1028 2212 HBA355e-s Adapter 15d9 1b64 SCC-B8SB80-B1 (NI22) Storage Controller Card 15d9 1b65 AOC-S3816L-L16iT (NI22) Storage Adapter 15d9 1b99 AOC-S3808L-L8iT Storage Adapter 1d49 0205 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA 1d49 0206 ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA 1d49 0207 ThinkSystem 440-8i SAS/SATA PCIe Gen4 12Gb HBA 1d49 0208 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb HBA 1d49 0209 ThinkSystem 440-8e SAS/SATA PCIe Gen4 12Gb HBA 8086 4050 Storage Controller RS3P4QF160J 8086 4070 Storage Controller RS3P4GF016J 00e7 Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx # Tampered part 1028 200b HBA355i Adapter Tampered # Tampered part 1028 200c HBA355i Front Tampered # Tampered part 1028 200d HBA355e Adapter Tampered # Tampered part 1028 200e HBA350i MX Tampered 02b0 Virtual Endpoint on PCIe Switch 1d49 0001 ThinkSystem 1610-4P NVMe Switch Adapter 1d49 0002 ThinkSystem 810-4P NVMe Switch Adapter 02b1 Virtual Endpoint on PCIe Switch (9749) 1d49 0004 ThinkSystem 1610-8P NVMe Switch Adapter # Virtual endpoint used in Broadcom synthetic PCIe switches for resource reservation 02b2 Virtual PCIe Placeholder Endpoint 0407 MegaRAID 1000 0530 MegaRAID 530 SCSI 320-0X RAID Controller 1000 0531 MegaRAID 531 SCSI 320-4X RAID Controller 1000 0532 MegaRAID 532 SCSI 320-2X RAID Controller 1028 0531 PowerEdge Expandable RAID Controller 4/QC 1028 0533 PowerEdge Expandable RAID Controller 4/QC 8086 0530 MegaRAID Intel RAID Controller SRCZCRX 8086 0532 MegaRAID Intel RAID Controller SRCU42X 0408 MegaRAID 1000 0001 MegaRAID SCSI 320-1E RAID Controller 1000 0002 MegaRAID SCSI 320-2E RAID Controller 1025 004d MegaRAID ACER ROMB-2E RAID Controller 1028 0001 PowerEdge RAID Controller PERC4e/SC 1028 0002 PowerEdge RAID Controller PERC4e/DC 1028 0012 PowerEdge RAID Controller RAC4 1028 0015 PowerEdge RAID Controller PERC5 1028 1f03 PowerEdge RAID Controller PERC5 1734 1065 FSC MegaRAID PCI Express ROMB 8086 0002 MegaRAID Intel RAID Controller SRCU42E 8086 3449 MegaRAID Intel RAID Controller SROMBU 0409 MegaRAID 1000 3004 MegaRAID SATA 300-4X RAID Controller 1000 3008 MegaRAID SATA 300-8X RAID Controller 8086 3008 MegaRAID RAID Controller SRCS28X 8086 3431 MegaRAID RAID Controller Alief SROMBU42E 8086 3499 MegaRAID RAID Controller Harwich SROMBU42E 0411 MegaRAID SAS 1068 1000 1001 MegaRAID SAS 8408E 1000 1002 MegaRAID SAS 8480E 1000 1003 MegaRAID SAS 8344ELP 1000 1004 MegaRAID SAS 8308ELP 1000 1008 MegaRAID SAS 84016E 1000 100c MegaRAID SATA 300-12E 1000 100d MegaRAID SATA 300-16E 1000 2004 MegaRAID SATA 300-8ELP 1000 2005 MegaRAID SATA 300-4ELP 1033 8287 MegaRAID SAS PCI Express ROMB 1054 3016 MegaRAID SAS RoMB Server 1734 1081 MegaRAID SAS PCI Express ROMB 1734 10a3 MegaRAID SAS PCI Express ROMB 8086 1001 RAID Controller SRCSAS18E 8086 1003 RAID Controller SRCSAS144E 8086 3500 SROMBSAS18E RAID Controller 8086 3501 SROMBSAS18E RAID Controller 8086 3504 SROMBSAS18E RAID Controller 0413 MegaRAID SAS 1068 [Verde ZCR] 1000 1005 MegaRAID SAS 8300XLP 0621 FC909 Fibre Channel Adapter 0622 FC929 Fibre Channel Adapter 1000 1020 44929 O Dual Fibre Channel card 0623 FC929 LAN 0624 FC919 Fibre Channel Adapter 0625 FC919 LAN 0626 FC929X Fibre Channel Adapter 1000 1010 7202-XP-LC Dual Fibre Channel card 0627 FC929X LAN 0628 FC919X Fibre Channel Adapter 0629 FC919X LAN 0640 FC949X Fibre Channel Adapter 0642 FC939X Fibre Channel Adapter 0646 FC949ES Fibre Channel Adapter 0701 83C885 NT50 DigitalScape Fast Ethernet 0702 Yellowfin G-NIC gigabit ethernet 1318 0000 PEI100X 0804 SA2010 0805 SA2010ZC 0806 SA2020 0807 SA2020ZC 0901 61C102 1000 63C815 10e0 MegaRAID 12GSAS/PCIe Unsupported SAS39xx 1028 1ae0 PERC H755 Adapter - Invalid Device 1028 1ae1 PERC H755 Front - Invalid Device 1028 1ae2 PERC H755N Front - Invalid Device 1028 1ae3 PERC H755 MX - Invalid Device 10e1 MegaRAID 12GSAS/PCIe SAS39xx 1028 1ae0 PERC H755 Adapter 1028 1ae1 PERC H755 Front 1028 1ae2 PERC H755N Front 1028 1ae3 PERC H755 MX 1d49 060a ThinkSystem RAID 940-8i 4GB Flash PCIe Gen4 12Gb Adapter 1d49 060b ThinkSystem RAID 940-8i 8GB Flash PCIe Gen4 12Gb Adapter 1d49 060c ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Adapter 1d49 060d ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Internal Adapter 1d49 060e ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter 1d49 060f ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter 10e2 MegaRAID 12GSAS/PCIe Secure SAS39xx # 9560 16 internal port RAID controller 1000 4000 MegaRAID 9560-16i # 9561 16 internal port RAID controller 1000 4002 MegaRAID 9561-16i # 9560 8 internal port RAID controller 1000 4010 MegaRAID 9560-8i # 9550 8 internal port RAID controller 1000 4015 MegaRAID 9550-8i # 9580 8 internal & 8 external port RAID controller 1000 4020 MegaRAID 9580-8i8e # MegaRAID 9562-16i 9562 16 internal port RAID controller 1000 40b0 MegaRAID 9562-16i 1028 1ae0 PERC H755 Adapter 1028 1ae1 PERC H755 Front 1028 1ae2 PERC H755N Front 1028 1ae3 PERC H755 MX 1028 2171 PERC H750 Mini 1028 2176 PERC H750 Adapter 15d9 1b66 AOC-S3908L-H8iR RAID Adapter 15d9 1b67 AOC-S3916L-H16iR RAID Adapter 15d9 1c06 AOC-S3916L-H16iR-32DD+ RAID Adapter 1d49 060a ThinkSystem RAID 940-8i 4GB Flash PCIe Gen4 12Gb Adapter 1d49 060b ThinkSystem RAID 940-8i 8GB Flash PCIe Gen4 12Gb Adapter 1d49 060c ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Adapter 1d49 060d ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Internal Adapter 1d49 060e ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter 1d49 060f ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter 1d49 0610 ThinkSystem RAID 940-16i 4GB Flash PCIe Gen4 12Gb Adapter 8086 4000 RAID Controller RS3P4TF160F 8086 4020 RAID Controller RS3P4MF088F 10e3 MegaRAID 12GSAS/PCIe Unsupported SAS39xx 1028 1ae0 PERC H755 Adapter - Tampered Device 1028 1ae1 PERC H755 Front - Tampered Device 1028 1ae2 PERC H755N Front - Tampered Device 1028 1ae3 PERC H755 MX - Tampered Device 10e4 MegaRAID 12GSAS/PCIe Unsupported SAS38xx 10e5 MegaRAID 12GSAS/PCIe SAS38xx 10e6 MegaRAID 12GSAS/PCIe Secure SAS38xx 1000 04d9 3808N iMR ROMB 1000 04da 3808N iMR ROMB 1000 04db 3808N iMR ROMB 1000 04dc 3808N iMR ROMB 1000 04dd 3808N iMR ROMB # String pulled from Broadcom storcli "Product Name" 1000 40d5 MegaRAID 9540-8i # String pulled from Broadcom storcli "Product Name" 1000 40d6 MegaRAID 9520-8i 1000 40d8 MegaRAID 9524-8i 1000 40e0 MegaRAID 9540-2M2 1028 1a3d BOSS-MR1 1028 2172 PERC H355 Adapter 1028 2173 PERC H355 Front 1028 2174 PERC H350 Mini 1028 2177 PERC H350 Adapter 1028 2199 PERC H350 Mini LP 15d9 1b9d AOC-S3816L-L16IR Storage Adapter 15d9 1b9f AOC-S3816L-L8IR Storage Adapter 15d9 1c6d AOC-S3808L-L8IR Storage Adapter 15d9 1c6e AOC-SLG4-2H8M2 Storage Adapter 1d49 0505 ThinkSystem RAID 540-8i PCIe Gen4 12Gb Adapter 1d49 0506 ThinkSystem RAID 540-16i PCIe Gen4 12Gb Adapter 1d49 0507 ThinkSystem RAID 545-8i PCIe Gen4 12Gb Adapter 1d49 0700 ThinkSystem M.2 RAID B540i-2i SATA/NVMe Enablement Kit 1d49 0701 ThinkSystem 7mm RAID B540p-2HS SATA/NVMe Enablement Kit 1d49 0702 ThinkSystem M.2 RAID B540p-2HS SATA/NVMe Enablement Kit 1d49 0703 ThinkSystem M.2 RAID B540d-2HS SATA/NVMe Enablement Kit 1d49 0704 ThinkSystem M.2 RAID B545i-2i SATA/NVMe Enablement Kit 10e7 MegaRAID 12GSAS/PCIe Unsupported SAS38xx 1960 MegaRAID 1000 0518 MegaRAID 518 SCSI 320-2 Controller 1000 0520 MegaRAID 520 SCSI 320-1 Controller 1000 0522 MegaRAID 522 i4 133 RAID Controller 1000 0523 MegaRAID SATA 150-6 RAID Controller 1000 4523 MegaRAID SATA 150-4 RAID Controller 1000 a520 MegaRAID ZCR SCSI 320-0 Controller 1028 0518 MegaRAID 518 DELL PERC 4/DC RAID Controller 1028 0520 MegaRAID 520 DELL PERC 4/SC RAID Controller 1028 0531 PowerEdge Expandable RAID Controller 4/QC 1028 0533 PowerEdge Expandable RAID Controller 4/QC 8086 0520 MegaRAID RAID Controller SRCU41L 8086 0523 MegaRAID RAID Controller SRCS16 3050 SAS2008 PCI-Express Fusion-MPT SAS-2 3150 1068e 6001 DX1 Multiformat Broadcast HD/SD Encoder/Decoder c010 PEX880xx PCIe Gen 4 Switch 1000 100b PEX88000 PCIe Gen 4 Virtual Upstream/Downstream Port 1000 2004 PEX88000 Virtual PCIe TWC/NT2 Endpoint 1000 2005 PEX88000 Virtual PCIe gDMA Endpoint 1000 a024 PEX88024 24 lane/port PCIe Gen 4.0 Switch 1000 a032 PEX88032 32 lane/port PCIe Gen 4 Switch 1000 a048 PEX88048 50 lane/port PCIe Gen 4.0 Switch 1000 a064 PEX88064 64 lane/port PCIe Gen 4 Switch 1000 a080 PEX88080 80 lane/port PCIe Gen 4 Switch 1000 a096 PEX88096 98 lane/port PCIe Gen 4.0 Switch 4c52 9f48 LRNV9F48 4-port Built-in 8654 NVMe Switching Adapter c012 PEX880xx PCIe Gen 4 Switch # Virtual endpoint used in Broadcom synthetic PCIe switches for resource reservation 1000 100b PEX88000 PCIe Gen 4 Virtual Upstream/Downstream Port # For secure part version of this chip 1000 2004 PEX88000 Virtual PCIe TWC/NT2 Endpoint # For secure part version of this chip 1000 2005 PEX88000 Virtual PCIe gDMA Endpoint # For secure part version of this chip 1000 a024 PEX88024 24 lane/port PCIe Gen 4.0 Switch # For secure part version of this chip 1000 a032 PEX88032 32 lane/port PCIe Gen 4.0 Switch # For secure part version of this chip 1000 a048 PEX88048 48 lane/port PCIe Gen 4.0 Switch 1000 a064 PEX88064 64 lane/port PCIe Gen 4.0 Switch # For secure part version of this chip 1000 a080 PEX88080 80 lane/port PCIe Gen 4.0 Switch # For secure part version of this chip 1000 a096 PEX88096 96 lane/port PCIe Gen 4.0 Switch 1d49 0003 ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter c030 PEX890xx PCIe Gen 5 Switch 1000 0024 PEX89024 PCIe Gen 5 24 port/lane Switch Upstream/Downstream Port 1000 0032 PEX89032 PCIe Gen 5 32 port/lane Switch Upstream/Downstream Port 1000 0048 PEX89048 PCIe Gen 5 48 port/lane Switch Upstream/Downstream Port 1000 0072 PEX89072 PCIe Gen 5 36 port/72 lane Switch Upstream/Downstream Port 1000 0088 PEX89088 PCIe Gen 5 44 port/88 lane Switch Upstream/Downstream Port 1000 0104 PEX89104 PCIe Gen 5 52 port/104 lane Switch Upstream/Downstream Port 1000 0144 PEX89144 PCIe Gen 5 72 port/144 lane Switch Upstream/Downstream Port 1000 100b PEX89000 PCIe Gen 5 Virtual Upstream/Downstream Port 1000 2004 PEX89000 Virtual PCIe TWC/NT 2.0 Endpoint 1000 2005 PEX89000 Virtual PCIe gDMA Endpoint # Lower lane count PEX89000 switch c034 PEX890xx PCIe Gen 5 Switch # Lower lane count PEX89000 switch 1000 0024 PEX89024 PCIe Gen 5 24 port/lane Switch Upstream/Downstream Port 1000 0032 PEX89032 PCIe Gen 5 32 port/lane Switch Upstream/Downstream Port # Lower lane count PEX89000 switch 1000 0048 PEX89048 PCIe Gen 5 48 port/lane Switch Upstream/Downstream Port # Lower lane count PEX89000 switch 1000 100b PEX89000 PCIe Gen 5 Virtual Upstream/Downstream Port # Lower lane count PEX89000 switch 1000 2004 PEX89000 Virtual PCIe TWC/NT 2.0 Endpoint # Lower lane count PEX89000 switch 1000 2005 PEX89000 Virtual PCIe gDMA Endpoint 1001 Kolter Electronic 0010 PCI 1616 Measurement card with 32 digital I/O lines 0011 OPTO-PCI Opto-Isolated digital I/O board 0012 PCI-AD/DA Analogue I/O board 0013 PCI-OPTO-RELAIS Digital I/O board with relay outputs 0014 PCI-Counter/Timer Counter Timer board 0015 PCI-DAC416 Analogue output board 0016 PCI-MFB Analogue I/O board 0017 PROTO-3 PCI Prototyping board 9100 INI-9100/9100W SCSI Host # nee ATI Technologies, Inc. 1002 Advanced Micro Devices, Inc. [AMD/ATI] 1114 Krackan [Radeon 840M / 860M Graphics] 1304 Kaveri 1305 Kaveri 1306 Kaveri 1307 Kaveri 1308 Kaveri HDMI/DP Audio Controller 17aa 3988 Z50-75 1309 Kaveri [Radeon R6/R7 Graphics] 17aa 3830 Z50-75 130a Kaveri [Radeon R6 Graphics] 130b Kaveri [Radeon R4 Graphics] 130c Kaveri [Radeon R7 Graphics] 130d Kaveri [Radeon R6 Graphics] 130e Kaveri [Radeon R5 Graphics] 130f Kaveri [Radeon R7 Graphics] 1310 Kaveri 1311 Kaveri 1312 Kaveri 1313 Kaveri [Radeon R7 Graphics] 1314 Wrestler HDMI Audio 174b 1001 PURE Fusion Mini 1315 Kaveri [Radeon R5 Graphics] 1316 Kaveri [Radeon R5 Graphics] 1317 Kaveri 1318 Kaveri [Radeon R5 Graphics] 131b Kaveri [Radeon R4 Graphics] 131c Kaveri [Radeon R7 Graphics] 131d Kaveri [Radeon R6 Graphics] 13c0 Granite Ridge [Radeon Graphics] 13e9 Ariel/Navi10Lite 13f9 Oberon/Navi12Lite 13fe Cyan Skillfish [BC-250] # Used in the Steam Deck OLED 1435 Sephiroth [AMD Custom GPU 0405] 145a Dummy Function (absent graphics controller) 1478 Navi 10 XL Upstream Port of PCI Express Switch 1479 Navi 10 XL Downstream Port of PCI Express Switch 1506 Mendocino 150e Strix [Radeon 880M / 890M] 154c Kryptos [Radeon RX 350] 1462 7c28 MS-7C28 Motherboard 154e Garfield 1551 Arlene 1552 Pooky 1561 Anubis 1586 Strix Halo [Radeon Graphics / Radeon 8050S Graphics / Radeon 8060S Graphics] 15bf Phoenix1 15c8 Phoenix2 15d8 Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series] 103c 8615 Pavilion Laptop 15-cw1xxx 17aa 3181 ThinkCentre M75n IoT 17aa 5124 ThinkPad E595 1dc2 2209 Avita Pura 14 Notebook ea50 cc10 RXi2-BP 15dd Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series] 103c 83c6 Radeon Vega 8 Mobile 1043 876b PRIME Motherboard 1458 d000 Radeon RX Vega 11 ea50 cc10 RXi2-BP 15de Raven/Raven2/Fenghuang HDMI/DP Audio Controller 103c 8615 Pavilion Laptop 15-cw1xxx 1043 876b PRIME B450M-A Motherboard 17aa 5124 ThinkPad E595 ea50 cc10 RXi2-BP 15df Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor 103c 8615 Pavilion Laptop 15-cw1xxx ea50 ce19 mCOM10-L1900 15e7 Barcelo 103c 8b17 ProBook 445 G9/455 G9 [Ryzen 7 Integrated Radeon GPU] 15ff Fenghuang [Zhongshan Subor Z+] 1607 Arden 1636 Renoir [Radeon Vega Series / Radeon Vega Mobile Series] 1637 Renoir/Cezanne HDMI/DP Audio Controller 1638 Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] 1043 16c2 Radeon Vega 8 # Used in the Steam Deck LCD 163f VanGogh [AMD Custom GPU 0405] 1640 Radeon High Definition Audio Controller [Rembrandt/Strix] 164c Lucienne 164d Rembrandt 164e Raphael 164f Phoenix 1681 Rembrandt [Radeon 680M] 1714 BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series] 103c 168b ProBook 4535s 1900 HawkPoint1 1901 HawkPoint2 1902 Krackan2 3150 RV380/M24 [Mobility Radeon X600] 103c 0934 nx8220 3151 RV380 GL [FireMV 2400] 3152 RV370/M22 [Mobility Radeon X300] 3154 RV380/M24 GL [Mobility FireGL V3200] 3155 RV380 GL [FireMV 2400] 3171 RV380 GL [FireMV 2400] (Secondary) 3e50 RV380 [Radeon X550/X600] 3e54 RV380 GL [FireGL V3200] 3e70 RV380 [Radeon X550/X600] (Secondary) 4136 RS100 [Mobility IGP 320M] 4137 RS200 [Radeon IGP 340] 4144 R300 [Radeon 9500] 4146 R300 [Radeon 9700 PRO] 4147 R300 GL [FireGL Z1] 4148 R350 [Radeon 9800/9800 SE] 4150 RV350 [Radeon 9550/9600/X1050 Series] 1002 0002 R9600 Pro primary (Asus OEM for HP) 1002 0003 R9600 Pro secondary (Asus OEM for HP) 1002 4722 All-in-Wonder 2006 AGP Edition 1458 4024 GV-R96128D 148c 2064 R96A-C3N 148c 2066 R96A-C3N 174b 7c19 Atlantis Radeon 9600 Pro 174b 7c29 GC-R9600PRO 17ee 2002 Radeon 9600 256Mb Primary 18bc 0101 GC-R9600PRO (Primary) 4151 RV350 [Radeon 9600 Series] 1043 c004 A9600SE 174b 7c37 Radeon 9600SE 128M DDR V/D/VO 4152 RV360 [Radeon 9600/X1050 Series] 1002 0002 Radeon 9600XT 1002 4772 All-in-Wonder 9600 XT 1043 c002 Radeon 9600 XT TVD 1043 c01a A9600XT/TD 1462 9510 RX9600XT (MS-8951) 174b 7c29 Radeon 9600XT 1787 4002 Radeon 9600 XT 4153 RV350 [Radeon 9550] 1043 010c A9550GE/TD 1462 932c RX9550SE-TD128 (MS-8932) 4154 RV350 GL [FireGL T2] 4155 RV350 [Radeon 9600] 4157 RV350 GL [FireGL T2] 4158 68800AX [Graphics Ultra Pro PCI] 4164 R300 [Radeon 9500 PRO] (Secondary) 4165 R300 [Radeon 9700 PRO] (Secondary) 4166 R300 [Radeon 9700 PRO] (Secondary) 4168 RV350 [Radeon 9800 SE] (Secondary) 4170 RV350 [Radeon 9550/9600/X1050 Series] (Secondary) 1002 0003 R9600 Pro secondary (Asus OEM for HP) 1002 4723 All-in-Wonder 2006 AGP Edition (Secondary) 1458 4025 GV-R96128D (Secondary) 148c 2067 R96A-C3N (Secondary) 174b 7c28 GC-R9600PRO (Secondary) 17ee 2003 Radeon 9600 256Mb (Secondary) 18bc 0100 GC-R9600PRO (Secondary) 4171 RV350 [Radeon 9600] (Secondary) 1043 c005 A9600SE (Secondary) 174b 7c36 Radeon 9600SE 128M DDR V/D/VO (secondary) 4172 RV350 [Radeon 9600/X1050 Series] (Secondary) 1002 0003 Radeon 9600XT (Secondary) 1002 4773 All-in-Wonder 9600 XT (Secondary) 1043 c003 A9600XT (Secondary) 1043 c01b A9600XT/TD (Secondary) 174b 7c28 Radeon 9600XT (Secondary) 1787 4003 Radeon 9600 XT (Secondary) 4173 RV350 [Radeon 9550] (Secondary) 1043 010d A9550GE/TD (Secondary) 4242 R200 [All-In-Wonder Radeon 8500 DV] 1002 02aa Radeon 8500 AIW DV Edition 4243 R200 PCI Bridge [All-in-Wonder Radeon 8500DV] 4336 RS100 [Radeon IGP 320M] 1002 4336 Pavilion ze4300 ATI Radeon Mobility U1 (IGP 320 M) 103c 0024 Pavilion ze4400 builtin Video 161f 2029 eMachines M5312 builtin Video 4337 RS200M [Radeon IGP 330M/340M/345M/350M] 1014 053a ThinkPad R40e 103c 0850 Radeon IGP 345M 4341 SB200 AC97 Audio Controller 4342 SB200 PCI to PCI Bridge 4345 SB200 EHCI USB Controller 4346 Crayola 6 [XENOS Parent Die (XBOX 360)] 4347 SB200 OHCI USB Controller #1 4348 SB200 OHCI USB Controller #2 4349 SB200 IDE Controller 434c SB200 PCI to LPC Bridge 434d SB200 AC97 Modem Controller 4353 SB200 SMBus Controller 4354 215CT [Mach64 CT PCI] 4358 Mach64 CX [Graphics Xpression] 4361 SB300 AC'97 Audio Controller 4362 SB300 PCI to PCI Bridge 4363 SB300 SMBus Controller 4365 SB300 USB Controller (EHCI) 4367 SB300 USB Controller (EHCI) 4368 SB300 USB Controller (EHCI) 4369 SB300 IDE Controller 436c SB300 PCI to LPC Bridge 436d SB300 AC97 Modem Controller 436e SB300 Serial ATA Controller 4370 IXP SB400 AC'97 Audio Controller 1025 0079 Aspire 5024WLMMi 1025 0091 Aspire 5032WXMi 103c 2a05 Pavilion t3030.de Desktop PC 103c 308b MX6125 105b 0c81 Realtek ALC 653 107b 0300 MX6421 1462 0131 MS-1013 Notebook 4371 IXP SB4x0 PCI-PCI Bridge 103c 308b MX6125 1462 7217 Aspire L250 4372 IXP SB4x0 SMBus Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 0131 MS-1013 Notebook 1462 7217 Aspire L250 4373 IXP SB4x0 USB2 Host Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 7217 Aspire L250 4374 IXP SB4x0 USB Host Controller 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 7217 Aspire L250 4375 IXP SB4x0 USB Host Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 7217 Aspire L250 4376 IXP SB4x0 IDE Controller 1025 0080 Aspire 5024WLMMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 0131 MS-1013 Notebook 1462 7217 Aspire L250 4377 IXP SB4x0 PCI-ISA Bridge 1025 0080 Aspire 5024WLMi 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 7217 Aspire L250 4378 IXP SB400 AC'97 Modem Controller 1025 0080 Aspire 5024WLMMi 103c 308b MX6125 1462 0131 MS-1013 Notebook 4379 IXP SB4x0 Serial ATA Controller 1462 7141 Aspire L250 437a IXP SB400 Serial ATA Controller 1002 4379 4379 Serial ATA Controller 1002 437a 437A Serial ATA Controller 1462 7141 Aspire L250 14f1 8800 Leadtek WinFast TV2000XP Expert 437b IXP SB4x0 High Definition Audio Controller 1002 437b IXP SB4x0 High Definition Audio Controller 10cf 1326 Fujitsu Lifebook A3040 1734 10b8 Realtek High Definition Audio 4380 SB600 Non-Raid-5 SATA 103c 2813 DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1458 b003 GA-MA790FX-DS5 (rev. 1.0) 1458 b005 Gigabyte GA-MA69G-S3H Motherboard 1462 7327 K9AG Neo2 17f2 5999 KI690-AM2 Motherboard 4381 SB600 SATA Controller (RAID 5 mode) 4382 SB600 AC97 Audio 4383 SBx00 Azalia (Intel HDA) 1019 2120 A785GM-M 103c 1611 Pavilion dm1z-3000 103c 280a DC5750 Microtower 1043 8230 M3A78-EH Motherboard 1043 836c M4A785TD Motherboard 1043 8410 M4A89GTD PRO/USB3 Motherboard 1043 841b M5A88-V EVO 1043 8445 M5A78L LE 105b 0e13 N15235/A74MX mainboard / AMD SB700 1179 ff1e Satellite C660D-113 1179 ff50 Satellite P305D-S8995E 1458 a022 GA-770/78-series motherboard 1458 a102 GA-880GMA-USB3 1462 7596 760GM-E51(MS-7596) Motherboard 17f2 5000 KI690-AM2 Motherboard 4384 SBx00 PCI to PCI Bridge 4385 SBx00 SMBus Controller 1019 2120 A785GM-M 103c 1611 Pavilion DM1Z-3000 103c 280a DC5750 Microtower 1043 82ef M3A78-EH Motherboard 1043 8389 M4A785TD Motherboard 105b 0e13 N15235/A74MX mainboard / AMD SB700 1179 ff50 Satellite P305D-S8995E 1458 4385 GA-770/78-series motherboard 1462 7368 K9AG Neo2 1462 7596 760GM-E51(MS-7596) Motherboard 15d9 a811 H8DGU 174b 1001 PURE Fusion Mini 17f2 5000 KI690-AM2 Motherboard 4386 SB600 USB Controller (EHCI) 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 4387 SB600 USB (OHCI0) 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 4388 SB600 USB (OHCI1) 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 4389 SB600 USB (OHCI2) 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 438a SB600 USB (OHCI3) 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 438b SB600 USB (OHCI4) 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 438c SB600 IDE 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1458 5002 Gigabyte GA-MA69G-S3H Motherboard 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 438d SB600 PCI to LPC Bridge 103c 280a DC5750 Microtower 1179 ff50 Satellite P305D-S8995E 1462 7368 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 438e SB600 AC97 Modem 4390 SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode] 1043 82ef M3A78-EH Motherboard 1043 8389 M4A785TD Motherboard 105b 0e13 N15235/A74MX mainboard / AMD SB700 1458 b002 GA-MA770-DS3rev2.0 Motherboard 1462 7596 760GM-E51(MS-7596) Motherboard 1849 4390 Motherboard (one of many) 4391 SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] 103c 1609 ProLiant MicroServer N36L 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO 1043 84dd M5A99X EVO (R1.0) SB950 105b 0e13 N15235/A74MX mainboard / AMD SB700 1458 b002 GA-78/880-series motherboard 174b 1001 PURE Fusion Mini 4392 SB7x0/SB8x0/SB9x0 SATA Controller [Non-RAID5 mode] 105b 0e13 N15235/A74MX mainboard / AMD SB700 4393 SB7x0/SB8x0/SB9x0 SATA Controller [RAID5 mode] 4394 SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] 4395 SB8x0/SB9x0 SATA Controller [Storage mode] 4396 SB7x0/SB8x0/SB9x0 USB EHCI Controller 1019 2120 A785GM-M 103c 1609 ProLiant MicroServer N36L 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO 105b 0e13 N15235/A74MX mainboard / AMD SB700 1458 5004 GA-78/880-series motherboard 1462 7596 760GM-E51(MS-7596) Motherboard 15d9 a811 H8DGU 174b 1001 PURE Fusion Mini 4397 SB7x0/SB8x0/SB9x0 USB OHCI0 Controller 1019 2120 A785GM-M 103c 1609 ProLiant MicroServer N36L 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO 105b 0e13 N15235/A74MX mainboard / AMD SB700 1458 5004 GA-78/880-series motherboard 1462 7596 760GM-E51(MS-7596) Motherboard 15d9 a811 H8DGU 174b 1001 PURE Fusion Mini 4398 SB7x0 USB OHCI1 Controller 1019 2120 A785GM-M 1043 82ef M3A78-EH Motherboard 105b 0e13 N15235/A74MX mainboard / AMD SB700 1458 5004 GA-MA78GM-S2H motherboard 1462 7596 760GM-E51(MS-7596) Motherboard 15d9 a811 H8DGU 4399 SB7x0/SB8x0/SB9x0 USB OHCI2 Controller 1019 2120 A785GM-M 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO 105b 0e13 N15235/A74MX mainboard / AMD SB700 1458 5004 GA-78/880-series motherboard 1462 7596 760GM-E51(MS-7596) Motherboard 174b 1001 PURE Fusion Mini 439c SB7x0/SB8x0/SB9x0 IDE Controller 1002 4392 MSI MS-7713 motherboard 1019 2120 A785GM-M 103c 1609 ProLiant MicroServer N36L 1043 82ef M3A78-EH Motherboard 105b 0e13 N15235/A74MX mainboard / AMD SB700 1458 5002 GA-MA78GM-S2H motherboard 1462 7596 760GM-E51(MS-7596) Motherboard 439d SB7x0/SB8x0/SB9x0 LPC host controller 1019 2120 A785GM-M 103c 1609 ProLiant MicroServer N36L 103c 1611 Pavilion DM1Z-3000 1043 82ef M3A78-EH Motherboard 1043 8443 M5A88-V EVO 105b 0e13 N15235/A74MX mainboard / AMD SB700 1462 7596 760GM-E51(MS-7596) Motherboard 174b 1001 PURE Fusion Mini 43a0 SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0) 43a1 SB700/SB800/SB900 PCI to PCI bridge (PCIE port 1) 43a2 SB900 PCI to PCI bridge (PCIE port 2) 43a3 SB900 PCI to PCI bridge (PCIE port 3) 4437 RS250 [Mobility Radeon 7000 IGP] 4554 210888ET [Mach64 ET] 4630 XENOS Parent Die (XBOX 360) 4631 XENOS Daughter Die (XBOX 360) 4654 Mach64 VT 4742 Rage 3 [3D Rage PRO AGP 2X] 1002 0040 Rage Pro Turbo AGP 2X 1002 0044 Rage Pro Turbo AGP 2X 1002 0061 Rage Pro AIW AGP 2X 1002 0062 Rage Pro AIW AGP 2X 1002 0063 Rage Pro AIW AGP 2X 1002 0080 Rage Pro Turbo AGP 2X 1002 0084 Rage Pro Turbo AGP 2X 1002 4742 Rage Pro Turbo AGP 2X 1002 8001 Rage Pro Turbo AGP 2X 1028 0082 Rage Pro Turbo AGP 2X 1028 4082 Optiplex GX1 Onboard Display Adapter 1028 8082 Rage Pro Turbo AGP 2X 1028 c082 Rage Pro Turbo AGP 2X 8086 4152 Xpert 98D AGP 2X 8086 464a Rage Pro Turbo AGP 2X 4744 Rage 3 [3D Rage PRO AGP 1X] 1002 4744 Rage Pro Turbo AGP 8086 4d55 Rage 3D Pro AGP 1X [Intel MU440EX] 4749 3D Rage PRO PCI 1002 0061 Rage Pro AIW 1002 0062 Rage Pro AIW 474d Rage XL AGP 2X 1002 0004 Xpert 98 RXL AGP 2X 1002 0008 Xpert 98 RXL AGP 2X 1002 0080 Rage XL AGP 2X 1002 0084 Xpert 98 AGP 2X 1002 474d Rage XL AGP 1033 806a Rage XL AGP 474e Rage XC AGP 1002 474e Rage XC AGP 474f Rage XL 1002 0008 Rage XL 1002 474f Rage XL 4750 3D Rage Pro PCI 1002 0040 Rage Pro Turbo 1002 0044 Rage Pro Turbo 1002 0080 Rage Pro Turbo 1002 0084 Rage Pro Turbo 1002 4750 Rage Pro Turbo 4752 Rage 3 [Rage XL PCI] 0e11 001e Proliant Rage XL 1002 0008 Rage XL 1002 4752 Proliant Rage XL 1002 8008 Rage XL 1014 0240 eServer xSeries server mainboard 1028 00ce PowerEdge 1400 1028 00d1 PowerEdge 2550 1028 00d9 PowerEdge 2500 1028 0134 PowerEdge 600SC 1028 014a PowerEdge 1750 1028 0165 PowerEdge 750 103c 10e1 NetServer Rage XL 103c 3208 ProLiant DL140 G2 107b 6400 6400 Server 1734 007a PRIMERGY RX/TX series onboard VGA 1734 1073 Primergy Econel 200 D2020 mainboard 8086 3411 SDS2 Mainboard 8086 3427 S875WP1-E mainboard 8086 5744 S845WD1-E mainboard 4753 Rage XC 1002 4753 Rage XC 4754 Mach64 GT/GT-B [3D Rage I/II] 4755 Mach64 GT-B [3D Rage II+ DVD] 4756 Rage 2 [3D Rage IIC PCI] 1002 4756 Rage IIC 4757 Rage 2 [3D Rage IIC AGP] 1002 4757 Rage IIC AGP 1028 0089 Rage 3D IIC 1028 008e PowerEdge 1300 onboard video 1028 4082 Rage 3D IIC 1028 8082 Rage 3D IIC 1028 c082 Rage 3D IIC 4758 Mach64 GX [WinTurbo] 4759 Rage 3 [3D Rage IIC PCI] 475a 3D Rage IIC AGP 1002 0084 Rage 3D Pro AGP 2x XPERT 98 1002 0087 Rage 3D IIC 1002 475a Rage IIC AGP 4845 Xilleon 220 HBIU for HDTV2 4846 Xilleon 220 IDE for HDTV2 4847 Xilleon 220 USB for HDTV2 4848 Xilleon 220 DAIO-0 for HDTV2 4849 Xilleon 220 DAIO-1 for HDTV2 484a Xilleon 220 LPC for HDTV2 4850 Xilleon 215 HBIU for X215 4851 Xilleon 215 IDE for X215 4852 Xilleon 215 USB for X215 4853 Xilleon 215 DAIO-0 for X215 4854 Xilleon 215 DAIO-1 for X215 4855 Xilleon 225 HBIU for X225 4856 Xilleon 225 IDE for X225 4857 Xilleon 225 USB for X225 4858 Xilleon 225 DAIO-0 for X225 4859 Xilleon 225 DAIO-1 for X225 4860 Xilleon 210 HBIU for X210 4861 Xilleon 210 IDE for X210 4862 Xilleon 210 USB for X210 4863 Xilleon 210 DAIO-0 for X210 4864 Xilleon 210 DAIO-1 for X210 4865 Xilleon 226 HBIU for X226 4866 Xilleon 226 IDE for X226 4867 Xilleon 226 USB for X226 4868 Xilleon 226 DAIO-0 for X226 4869 Xilleon 226 DAIO-1 for X226 486a Xilleon 240S HBIU for X240S 486b Xilleon 240H HBIU for X240H 486c Xilleon 240S USB for X240S 486d Xilleon 240H USB for X240H 486e Xilleon 250 USB 1.1 for X250 486f Xilleon 260 USB 1.1 for X260 4870 Xilleon 250 HBIU for X250 4871 Xilleon 250 IDE for X250 4872 Xilleon 234/235 HBIU for X234/X235 4873 Xilleon 244/245 HBIU for X244/X245 4874 Xilleon 234/235 USB 1.1 for X234/X235 4875 Xilleon 260 HBIU for X260 4876 Xilleon 260 IDE for X260 4877 Xilleon 244/245 USB 1.1 for X244/X245 4878 Xilleon 270 HBIU for X270 487b Xilleon 242 HBIU for X242 487d Xilleon 242 USB 1.1 for X242 4880 Xilleon 254 HBIU for X254 4881 Xilleon 254 USB 1.1 for X254 4882 Xilleon 255 HBIU for X255 4883 Xilleon 255 USB 1.1 for X255 4884 Xilleon 243 HBIU for X243 4885 Xilleon 243 USB 1.1 for X243 4886 Xilleon 233 HBIU for X233 4887 Xilleon 233 USB 1.1 for X233 4888 Xilleon 143 HBIU for X143 4889 Xilleon 143 HBIU for X143L 488a Xilleon 143 HBIU for X143S 4966 RV250 [Radeon 9000 Series] 10f1 0002 RV250 If [Tachyon G9000 PRO] 148c 2039 RV250 If [Radeon 9000 Pro "Evil Commando"] 1509 9a00 RV250 If [Radeon 9000 "AT009"] 1681 0040 RV250 If [3D prophet 9000] 174b 7176 Radeon 9000 Pro 174b 7192 RV250 If [Radeon 9000 "Atlantis"] 17af 2005 RV250 If [Excalibur Radeon 9000 Pro] 17af 2006 RV250 If [Excalibur Radeon 9000] 496e RV250 [Radeon 9000] (Secondary) 4a49 R420 [Radeon X800 PRO/GTO AGP] 174b 2620 R420 [Radeon X800 GTO AGP] 4a4a R420 [Radeon X800 GT AGP] 4a4b R420 [Radeon X800 AGP Series] 4a4d R420 GL [FireGL X3-256] 4a4e RV420/M18 [Mobility Radeon 9800] 4a4f R420 [Radeon X850 AGP] 4a50 R420 [Radeon X800 XT Platinum Edition AGP] 4a54 R420 [Radeon X800 VE AGP] 1002 4422 All-In-Wonder X800 VE AGP 4a69 R420 [Radeon X800 PRO/GTO] (Secondary) 4a6a R420 [Radeon X800] (Secondary) 4a6b R420 [Radeon X800 XT AGP] (Secondary) 4a70 R420 [Radeon X800 XT Platinum Edition AGP] (Secondary) 4a74 R420 [Radeon X800 VE] (Secondary) 4b49 R481 [Radeon X850 XT AGP] 4b4b R481 [Radeon X850 PRO AGP] 4b4c R481 [Radeon X850 XT Platinum Edition AGP] 4b69 R481 [Radeon X850 XT AGP] (Secondary) 4b6b R481 [Radeon X850 PRO AGP] (Secondary) 4b6c R481 [Radeon X850 XT Platinum Edition AGP] (Secondary) 4c42 Mach64 LT [3D Rage LT PRO AGP] 0e11 b0e7 Rage LT Pro (Compaq Presario 5240) 0e11 b0e8 Rage 3D LT Pro 0e11 b10e 3D Rage LT Pro (Compaq Armada 1750) 1002 0040 Rage LT Pro AGP 2X 1002 0044 Rage LT Pro AGP 2X 1002 4c42 Rage LT Pro AGP 2X 1002 8001 Rage LT Pro AGP 2X 1028 0085 Rage 3D LT Pro 4c46 Rage Mobility 128 AGP 2X/Mobility M3 1002 0155 IBM Thinkpad A22p 1014 0155 Thinkpad A22p 1028 00b1 Latitude C600 4c47 3D Rage IIC PCI / Mobility Radeon 7500/7500C 4c49 3D Rage LT PRO PCI 1002 0004 Rage LT Pro 1002 0040 Rage LT Pro 1002 0044 Rage LT Pro 1002 4c49 Rage LT Pro 4c4d Rage Mobility AGP 2x Series 0e11 b111 Armada M700 0e11 b160 Armada E500 1002 0084 Xpert 98 AGP 2X (Mobility) 1014 0154 ThinkPad A20m/A21m 1028 00aa Latitude CPt 1028 00bb Latitude CPx 1179 ff00 Satellite 1715XCDS laptop 13bd 1019 PC-AR10 4c4e Rage Mobility L AGP 2x 4c50 Rage 3 LT [3D Rage LT PRO PCI] 1002 4c50 Rage LT Pro 4c52 M1 [Rage Mobility-M1 PCI] 1033 8112 Versa Note VXi 4c54 264LT [Mach64 LT] 4c57 RV200/M7 [Mobility Radeon 7500] 1014 0517 ThinkPad T30 1014 0530 ThinkPad T4x Series 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100) 1028 012a Latitude C640 1043 1622 Mobility Radeon M7 (L3C/S) 144d c006 Radeon Mobility M7 LW in vpr Matrix 170B4 4c58 RV200/M7 GL [Mobility FireGL 7800] 4c59 RV100/M6 [Rage/Radeon Mobility Series] 0e11 b111 Evo N600c 1014 0235 ThinkPad A30/A30p (2652/2653) 1014 0239 ThinkPad X22/X23/X24 103c 0025 XE4500 Notebook 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 104d 8140 PCG-Z1SP laptop 1509 1930 Medion MD9703 4c66 RV250/M9 GL [Mobility FireGL 9000/Radeon 9000] 1014 054d ThinkPad T41 4c6e RV250/M9 [Mobility Radeon 9000] (Secondary) 4d46 Rage Mobility 128 AGP 4X/Mobility M4 4d52 Theater 550 PRO PCI [ATI TV Wonder 550] 4d53 Theater 550 PRO PCIe 4e44 R300 [Radeon 9700/9700 PRO] 1002 515e Radeon ES1000 1002 5965 Radeon ES1000 4e45 R300 [Radeon 9500 PRO/9700] 1002 0002 Radeon R300 NE [Radeon 9500 Pro] 1681 0002 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] 4e46 R300 [Radeon 9600 TX] 4e47 R300 GL [FireGL X1] 4e48 R350 [Radeon 9800 Series] 4e49 R350 [Radeon 9800] 4e4a R360 [Radeon 9800 XXL/XT] 1002 4e4a R360 [Radeon 9800 XT] 4e4b R350 GL [FireGL X2 AGP Pro] 4e50 RV350/M10 / RV360/M11 [Mobility Radeon 9600 (PRO) / 9700] 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: ATI RV360/M11 [Mobility Radeon 9700] 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 144d c00c P35 notebook 1462 0311 MSI M510A 1734 1055 Amilo M1420W 4e51 RV350 [Radeon 9550/9600/X1050 Series] 4e52 RV350/M10 [Mobility Radeon 9500/9700 SE] 144d c00c P35 notebook 4e54 RV350/M10 GL [Mobility FireGL T2] 4e56 RV360/M12 [Mobility Radeon 9550] 4e64 R300 [Radeon 9700 PRO] (Secondary) 4e65 R300 [Radeon 9500 PRO] (Secondary) 1002 0003 Radeon R300 NE [Radeon 9500 Pro] 1681 0003 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary) 4e66 RV350 [Radeon 9600] (Secondary) 4e67 R300 GL [FireGL X1] (Secondary) 4e68 R350 [Radeon 9800 PRO] (Secondary) 4e69 R350 [Radeon 9800] (Secondary) 4e6a RV350 [Radeon 9800 XT] (Secondary) 1002 4e6a R360 [Radeon 9800 XT] (Secondary) 1002 4e71 M10 NQ [Radeon Mobility 9600] 4e71 RV350/M10 [Mobility Radeon 9600] (Secondary) 4f72 RV250 [Radeon 9000 Series] 4f73 RV250 [Radeon 9000 Series] (Secondary) 5044 All-In-Wonder 128 PCI 1002 0028 Rage 128 AIW 1002 0029 Rage 128 AIW 5046 Rage 4 [Rage 128 PRO AGP 4X] 1002 0004 Rage Fury Pro 1002 0008 Rage Fury Pro/Xpert 2000 Pro 1002 0014 Rage Fury Pro 1002 0018 Rage Fury Pro/Xpert 2000 Pro 1002 0028 Rage 128 Pro AIW AGP 1002 002a Rage 128 Pro AIW AGP 1002 0048 Rage Fury Pro 1002 2000 Rage Fury MAXX AGP 4x (TMDS) (VGA device) 1002 2001 Rage Fury MAXX AGP 4x (TMDS) (Extra device?!) 5050 Rage 4 [Rage 128 PRO PCI / Xpert 128 PCI] 1002 0008 Xpert 128 5052 Rage 4 [Rage 128 PRO AGP 4X] 5144 R100 [Radeon 7200 / All-In-Wonder Radeon] 1002 0008 Radeon 7000/Radeon VE 1002 0009 Radeon 7000/Radeon 1002 000a Radeon 7000/Radeon 1002 001a Radeon 7000/Radeon 1002 0029 Radeon AIW 1002 0038 Radeon 7000/Radeon 1002 0039 Radeon 7000/Radeon 1002 008a Radeon 7000/Radeon 1002 00ba Radeon 7000/Radeon 1002 0139 Radeon 7000/Radeon 1002 028a Radeon 7000/Radeon 1002 02aa Radeon AIW 1002 053a Radeon 7000/Radeon 5148 R200 GL [FireGL 8800] 1002 010a FireGL 8800 64Mb 1002 0152 FireGL 8800 128Mb 1002 0162 FireGL 8700 32Mb 1002 0172 FireGL 8700 64Mb 514c R200 [Radeon 8500/8500 LE] 1002 003a Radeon R200 QL [Radeon 8500 LE] 1002 013a Radeon 8500 148c 2026 R200 QL [Radeon 8500 Evil Master II Multi Display Edition] 1681 0010 Radeon 8500 [3D Prophet 8500 128Mb] 174b 7149 Radeon 8500 LE 1787 0f08 Radeon R200 QL [PowerMagic Radeon 8500] 514d R200 [Radeon 9100] 5157 RV200 [Radeon 7500/7500 LE] 1002 013a Radeon 7500 1002 0f2b ALL-IN-WONDER VE PCI 1002 103a Dell Optiplex GX260 1458 4000 RV200 QW [RADEON 7500 PRO MAYA AR] 148c 2024 RV200 QW [Radeon 7500LE Dual Display] 148c 2025 RV200 QW [Radeon 7500 Evil Master Multi Display Edition] 148c 2036 RV200 QW [Radeon 7500 PCI Dual Display] 174b 7146 RV200 QW [Radeon 7500 LE] 174b 7147 Radeon 7500 LE 174b 7161 Radeon RV200 QW [Radeon 7500 LE] 17af 0202 RV200 QW [Excalibur Radeon 7500LE] 5159 RV100 [Radeon 7000 / Radeon VE] 1002 000a Radeon 7000/Radeon VE 1002 000b Radeon 7000 1002 0038 Radeon 7000/Radeon VE 1002 003a Radeon 7000/Radeon VE 1002 00ba Radeon 7000/Radeon VE 1002 013a Radeon 7000/Radeon VE 1002 0908 XVR-100 (supplied by Sun) # The IBM card doubles as an ATI PCI video adapter 1014 029a Remote Supervisor Adapter II (RSA2) 1014 02c8 eServer xSeries server mainboard 1028 016c PowerEdge 1850 Embedded Radeon 7000/VE 1028 016d PowerEdge 2850 Embedded Radeon 7000-M 1028 0170 PowerEdge 6850 Embedded Radeon 7000/VE 1028 019a PowerEdge SC1425 103c 1292 Radeon 7000 1043 c00a A7000/T/64M 1458 4002 RV100 QY [RADEON 7000 PRO MAYA AV Series] 148c 2003 RV100 QY [Radeon 7000 Multi-Display Edition] 148c 2023 RV100 QY [Radeon 7000 Evil Master Multi-Display] 148c 2081 RV6DE 174b 0280 Radeon RV100 QY [Radeon 7000/VE] 174b 7112 Radeon VE 7000 174b 7c28 Radeon VE 7000 DDR 1787 0202 RV100 QY [Excalibur Radeon 7000] 17ee 1001 Radeon 7000 64MB DDR + DVI 515e ES1000 1028 01bb PowerEdge 1955 Embedded ATI ES1000 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 1028 01f0 PowerEdge R900 Embedded ATI ES1000 1028 0205 PowerEdge 2970 Embedded ATI ES1000 1028 020b PowerEdge T605 Embedded ATI ES1000 1028 020f PowerEdge R300 Embedded ATI ES1000 1028 0210 PowerEdge T300 Embedded ATI ES1000 1028 0221 PowerEdge R805 Embedded ATI ES1000 1028 0223 PowerEdge R905 Embedded ATI ES1000 1028 0225 PowerEdge T105 Embedded ATI ES1000 1028 023c PowerEdge R200 Embedded ATI ES1000 103c 1304 Integrity iLO2 Advanced KVM VGA [AD307A] 103c 31fb ProLiant DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 5245 Rage 128 GL PCI 1002 0008 Xpert 128 1002 0028 Rage 128 AIW 1002 0029 Rage 128 AIW 1002 0068 Rage 128 AIW 5246 Rage 128 (Rage 4) series 1002 0004 Magnum/Xpert 128/Xpert 99 1002 0008 Rage 128 AGP 2x 1002 0028 Rage 128 AIW AGP 1002 0044 Rage Fury/Xpert 128/Xpert 2000 1002 0068 Rage 128 AIW AGP 1002 0448 Rage Fury 524b Rage 128 VR PCI 524c Rage 128 VR AGP 1002 0008 Xpert 99/Xpert 2000 1002 0088 Xpert 99 534d Rage 128 4X AGP 4x 1002 0008 Xpert 99/Xpert 2000 1002 0018 Xpert 2000 5354 Mach 64 VT 1002 5654 Mach 64 reference 5446 Rage 128 PRO Ultra AGP 4x 1002 0004 Rage Fury Pro 1002 0008 Rage Fury Pro/Xpert 2000 Pro 1002 0018 Rage Fury Pro/Xpert 2000 Pro 1002 0028 Rage 128 AIW Pro AGP 1002 0029 Rage 128 AIW 1002 002a Rage 128 AIW Pro AGP 1002 002b Rage 128 AIW 1002 0048 Xpert 2000 Pro 5452 Rage 128 PRO Ultra4XL VR-R AGP 1002 001c Rage 128 Pro 4XL 103c 1279 Rage 128 Pro 4XL 5460 RV370/M22 [Mobility Radeon X300] 1775 1100 CR11/VR11 Single Board Computer 5461 RV370/M22 [Mobility Radeon X300] 5462 RV380/M24C [Mobility Radeon X600 SE] 5464 RV370/M22 GL [Mobility FireGL V3100] 5549 R423 [Radeon X800 GTO] 554a R423 [Radeon X800 XT Platinum Edition] 554b R423 [Radeon X800 GT/SE] 1002 0302 Radeon X800 SE 554d R480 [Radeon X800 GTO2/XL] 1002 0322 All-In-Wonder X800 XL 1458 2124 GV-R80L256V-B (AGP) 554e R430 [All-In-Wonder X800 GT] 554f R430 [Radeon X800] 5550 R423 GL [FireGL V7100] 5551 R423 GL [FireGL V5100] 5569 R423 [Radeon X800 PRO] (Secondary) 556b R423 [Radeon X800 GT] (Secondary) 556d R480 [Radeon X800 GTO2/XL] (Secondary) 1458 2125 GV-R80L256V-B (AGP) 556f R430 [Radeon X800] (Secondary) 5571 R423 GL [FireGL V5100] (Secondary) 564b RV410/M26 GL [Mobility FireGL V5000] 564f RV410/M26 [Mobility Radeon X700 XL] 5652 RV410/M26 [Mobility Radeon X700] 5653 RV410/M26 [Mobility Radeon X700] 1025 0080 Aspire 5024WLMi 103c 0940 Compaq NW8240 Mobile Workstation 5654 Mach64 VT [Video Xpression] 1002 5654 Mach64VT Reference 5655 264VT3 [Mach64 VT3] 5656 Mach64 VT4 [Video Xpression+] 5657 RV410 [Radeon X550 XTX / X700] 5830 RS300 Host Bridge 5831 RS300 Host Bridge 5832 RS300 Host Bridge 5833 RS300 Host Bridge 5834 RS300 [Radeon 9100 IGP] 5835 RS300M [Mobility Radeon 9100 IGP] 5838 RS300 AGP Bridge 5854 RS480 [Radeon Xpress 200 Series] (Secondary) 5874 RS480 [Radeon Xpress 1150] (Secondary) 5940 RV280 [Radeon 9200 PRO] (Secondary) 17af 2021 Excalibur Radeon 9250 (Secondary) 5941 RV280 [Radeon 9200] (Secondary) 1458 4019 Radeon 9200 174b 7c12 Radeon 9200 17af 200d Excalibur Radeon 9200 18bc 0050 GC-R9200-C3 (Secondary) 5944 RV280 [Radeon 9200 SE PCI] 5950 RS480/RS482/RS485 Host Bridge 1025 0080 Aspire 5024WLMMi 103c 280a DC5750 Microtower 103c 2a20 Pavilion t3030.de Desktop PC 103c 308b MX6125 1462 0131 MS-1013 Notebook 1462 7217 Aspire L250 5951 RX480/RX482 Host Bridge 5952 RD580 Host Bridge 5954 RS480 [Radeon Xpress 200 Series] 1002 5954 RV370 [Radeon Xpress 200G Series] 5955 RS480M [Mobility Radeon Xpress 200] 1002 5955 RS480 0x5955 [Radeon XPRESS 200M 5955 (PCIE)] 103c 308b MX6125 1462 0131 MS-1013 Notebook 5956 RD790 Host Bridge 5957 RX780/RX790 Host Bridge 1849 5957 A770CrossFire Motherboard 5958 RD780 Host Bridge 5960 RV280 [Radeon 9200 PRO / 9250] 17af 2020 Excalibur Radeon 9250 5961 RV280 [Radeon 9200] 1002 2f72 All-in-Wonder 9200 Series 1019 4c30 Radeon 9200 VIVO 12ab 5961 YUAN SMARTVGA Radeon 9200 1458 4018 Radeon 9200 174b 7c13 Radeon 9200 17af 200c Excalibur Radeon 9200 18bc 0050 Radeon 9200 Game Buster 18bc 0051 GC-R9200-C3 18bc 0053 Radeon 9200 Game Buster VIVO 5962 RV280 [Radeon 9200] 5964 RV280 [Radeon 9200 SE] 1002 5964 Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz 1043 c006 Radeon 9200 SE / TD / 128M 1458 4018 R92S128T [Radeon 9200 SE 128MB] 1458 4032 Radeon 9200 SE 128MB 147b 6191 R9200SE-DT 148c 2073 CN-AG92E 174b 7c13 Radeon 9200 SE 1787 5964 Excalibur 9200SE VIVO 128M 17af 2012 Radeon 9200 SE Excalibur 18bc 0170 Sapphire Radeon 9200 SE 128MB Game Buster 18bc 0173 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster] 5965 RV280 GL [FireMV 2200 PCI] 5974 RS482/RS485 [Radeon Xpress 1100/1150] 103c 280a DC5750 Microtower 1462 7141 Aspire L250 5975 RS482M [Mobility Radeon Xpress 200] 5978 RX780/RD790 PCI to PCI bridge (external gfx0 port A) 1849 5957 A770CrossFire Motherboard 5979 RD790 PCI to PCI bridge (external gfx0 port B) 597a RD790 PCI to PCI bridge (PCI express gpp port A) 597b RX780/RD790 PCI to PCI bridge (PCI express gpp port B) 597c RD790 PCI to PCI bridge (PCI express gpp port C) 597d RX780/RD790 PCI to PCI bridge (PCI express gpp port D) 597e RD790 PCI to PCI bridge (PCI express gpp port E) 1849 5957 A770CrossFire Motherboard 597f RD790 PCI to PCI bridge (PCI express gpp port F) 1849 5957 A770CrossFire Motherboard 5980 RD790 PCI to PCI bridge (external gfx1 port A) 5981 RD790 PCI to PCI bridge (external gfx1 port B) 5982 RD790 PCI to PCI bridge (NB-SB link) 5a10 RD890 Northbridge only dual slot (2x16) PCI-e GFX Hydra part 5a11 RD890 Northbridge only single slot PCI-e GFX Hydra part 5a12 RD890 Northbridge only dual slot (2x8) PCI-e GFX Hydra part 15d9 a811 H8DGU 5a13 RD890S/SR5650 Host Bridge 5a14 RD9x0/RX980 Host Bridge 5a15 RD890 PCI to PCI bridge (PCI express gpp port A) 5a16 RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GFX port 0) 5a17 RD890/RD9x0 PCI to PCI bridge (PCI Express GFX port 1) 5a18 RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 0) 15d9 a811 H8DGU 5a19 RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 1) 5a1a RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 2) 5a1b RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 3) 5a1c RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 4) 5a1d RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 5) 5a1e RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP2 Port 0) 5a1f RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 0) 15d9 a811 H8DGU 5a20 RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 1) 5a23 RD890S/RD990 I/O Memory Management Unit (IOMMU) 5a31 RC410 Host Bridge 5a33 RS400 Host Bridge 5a34 RS4xx PCI Express Port [ext gfx] 5a36 RC4xx/RS4xx PCI Express Port 1 5a37 RC4xx/RS4xx PCI Express Port 2 5a38 RC4xx/RS4xx PCI Express Port 3 5a39 RC4xx/RS4xx PCI Express Port 4 5a3f RC4xx/RS4xx PCI Bridge [int gfx] 1462 7217 Aspire L250 5a41 RS400 [Radeon Xpress 200] 5a42 RS400M [Radeon Xpress 200M] 5a61 RC410 [Radeon Xpress 200/1100] 5a62 RC410M [Mobility Radeon Xpress 200M] 5b60 RV370 [Radeon X300] 1043 002a Extreme AX300SE-X 1043 032e Extreme AX300/TD 1458 2102 GV-RX30S128D (X300SE) 1462 0400 RX300SE-TD128E (MS-8940 REV:200) 1462 0402 RX300SE-TD128E (MS-8940) 174b 0500 Radeon X300 (PCIE) 196d 1086 X300SE HM 5b62 RV370 [Radeon X600/X600 SE] 5b63 RV370 [Radeon X300/X550/X1050 Series] 5b64 RV370 GL [FireGL V3100] 5b65 RV370 GL [FireMV 2200] 5b66 RV370X 5b70 RV370 [Radeon X300 SE] # RX300SE-TD128E 1462 0403 Radeon X300 SE 128MB DDR 174b 0501 Radeon X300 SE 196d 1087 Radeon X300 SE HyperMemory 5b72 RV380 [Radeon X300/X550/X1050 Series] (Secondary) 5b73 RV370 [Radeon X300/X550/X1050 Series] (Secondary) 5b74 RV370 GL [FireGL V3100] (Secondary) 5b75 RV370 GL [FireMV 2200] (Secondary) 5c61 RV280/M9+ [Mobility Radeon 9200 AGP] 5c63 RV280/M9+ [Mobility Radeon 9200 AGP] 1002 5c63 Apple iBook G4 2004 144d c00c P30 notebook 5d44 RV280 [Radeon 9200 SE] (Secondary) 1458 4019 R92S128T (Radeon 9200 SE 128MB Secondary) 1458 4032 Radeon 9200 SE 128MB 147b 6190 R9200SE-DT (Secondary) 174b 7c12 Radeon 9200 SE (Secondary) 1787 5965 Excalibur 9200SE VIVO 128M (Secondary) 17af 2013 Radeon 9200 SE Excalibur (Secondary) 18bc 0171 Radeon 9200 SE 128MB Game Buster (Secondary) 18bc 0172 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster] 5d45 RV280 GL [FireMV 2200 PCI] (Secondary) 5d48 R423/M28 [Mobility Radeon X800 XT] 5d49 R423/M28 GL [Mobility FireGL V5100] 5d4a R423/M28 [Mobility Radeon X800] 5d4d R480 [Radeon X850 XT Platinum Edition] 5d4e R480 [Radeon X850 SE] 5d4f R480 [Radeon X800 GTO] 5d50 R480 GL [FireGL V7200] 5d52 R480 [Radeon X850 XT] 1002 0b12 PowerColor X850XT PCIe (Primary) 5d57 R423 [Radeon X800 XT] 5d6d R480 [Radeon X850 XT Platinum Edition] (Secondary) 5d6f R480 [Radeon X800 GTO] (Secondary) 5d72 R480 [Radeon X850 XT] (Secondary) 1002 0b13 PowerColor X850XT PCIe (Secondary) 5d77 R423 [Radeon X800 XT] (Secondary) 5e48 RV410 GL [FireGL V5000] 5e49 RV410 [Radeon X700 Series] 5e4a RV410 [Radeon X700 XT] 5e4b RV410 [Radeon X700 PRO] 5e4c RV410 [Radeon X700 SE] 5e4d RV410 [Radeon X700] 148c 2116 Bravo X700 5e4f RV410 [Radeon X700] 1569 1e4f Radeon X550 XT 5e6b RV410 [Radeon X700 PRO] (Secondary) 5e6d RV410 [Radeon X700] (Secondary) 148c 2117 Bravo X700 (Secondary) 5f57 R423 [Radeon X800 XT] 6600 Mars [Radeon HD 8670A/8670M/8750M / R7 M370] 103c 1952 ProBook 455 G1 6601 Mars [Radeon HD 8730M] 103c 2100 FirePro M4100 6604 Opal XT [Radeon R7 M265/M365X/M465] 1025 0776 Aspire V5 Radeon R7 M265 103c 8006 FirePro M4170 103c 814f Litho XT [Radeon R7 M365X] 103c 82aa Litho XT [Radeon R7 M465] 17aa 3643 Radeon R7 A360 6605 Opal PRO [Radeon R7 M260X] 103c 2259 FirePro M4150 6606 Mars XTX [Radeon HD 8790M] 1028 0684 FirePro W4170M 6607 Mars LE [Radeon HD 8530M / R5 M240] 6608 Oland GL [FirePro W2100] 13cc 3d28 MXRT-2600 6609 Oland GL [FirePro W2100 / Barco MXRT 2600] 6610 Oland XT [Radeon HD 8670 / R5 340X OEM / R7 250/350/350X OEM] 1019 0030 Radeon HD 8670 1028 0081 Radeon R7 350X OEM 1028 0083 Radeon R5 340X OEM 1028 2120 Radeon R7 250 1028 2322 Radeon R7 250 1462 2910 Radeon HD 8670 1462 2911 Radeon HD 8670 148c 7350 Radeon R7 350 1642 3c81 Radeon HD 8670 1642 3c91 Radeon HD 8670 1642 3f09 Radeon R7 350 6611 Oland [Radeon HD 8570 / R5 430 OEM / R7 240/340 / Radeon 520 OEM] 1028 1001 Radeon R5 430 OEM (1024 MByte) 1028 1002 Radeon R5 430 OEM (2048 MByte) # The 'AMD Radeon R5 430' instead of 240/340 is NOT a typo! It's actually correct. 1028 1711 R5 430 OEM (2048 MByte) 1028 210b Radeon R5 240 OEM # OEM-card for Dell; verified through AMD's own drivers (*.inf) and a TPU BIOS in database 1028 2121 Radeon HD 8570 OEM # OEM-card from Fujitsu; verified through AMD's own drivers (*.inf) 10cf 1889 Radeon HD 8570 OEM 1642 1869 Radeon 520 OEM 174b 4248 Radeon R7 240 OEM 174b a240 Radeon R7 240 OEM 174b d340 Radeon R7 340 OEM 1b0a 90d3 Radeon R7 240 OEM 6613 Oland PRO [Radeon R7 240/340 / Radeon 520] 148c 7340 Radeon R7 340 1682 7240 R7 240 2048 MB 1dcf 3000 Oland PRO [Radeon R7 240/340 / Radeon 520] 6617 Oland LE [Radeon R7 240] 6631 Oland 6640 Saturn XT [FirePro M6100] 106b 014b Tropo XT [Radeon R9 M380 Mac Edition] 6641 Saturn PRO [Radeon HD 8930M] 6646 Bonaire XT [Radeon R9 M280X / FirePro W6150M] 6647 Saturn PRO/XT [Radeon R9 M270X/M280X] 1043 223d N551ZU laptop Radeon R9 M280X 6649 Bonaire [FirePro W5100] 1002 0b0c FirePro W4300 103c 0b0c Bonaire [FirePro W4300] 103c 230c FirePro W5100 13cc 3d2a MXRT-5600 664d Bonaire [FirePro W5100 / Barco MXRT-5600] 6650 Bonaire 6651 Bonaire 6658 Bonaire XTX [Radeon R7 260X/360] 1043 048f R7260X-DC2OC-2GD5 1043 04d3 AMD Radeon R7 260X # GV-R726XOC-1GD 1458 227b Radeon R7 260X 148c 0907 Radeon R7 360 1682 0907 Radeon R7 360 1682 7360 Radeon R7 360 665c Bonaire XT [Radeon HD 7790/8770 / R7 360 / R9 260/360 OEM] 1043 0452 Radeon HD 7790 DirectCU II OC # R7790-1GD5/OC 1462 2930 Radeon HD 7790 OC 1462 2932 Radeon HD 8770 1462 2934 Radeon R9 260 OEM 1462 2938 Radeon R9 360 OEM 148c 0907 Radeon R7 360 148c 9260 Radeon R9 260 OEM 148c 9360 Radeon R9 360 OEM 1682 0907 Radeon R7 360 # FX-779A-CDB4 / FX-779A-CDBC 1682 3310 Radeon HD 7790 Black Edition 2 GB # 100356OCL / 11210-01-20G 174b e253 Radeon HD 7790 Dual-X OC 1787 2329 Radeon HD 7790 TurboDuo 665d Bonaire [Radeon R7 200 Series] 665f Tobago PRO [Radeon R7 360 / R9 360 OEM] 1028 0b04 Radeon R9 360 OEM 1462 2938 Radeon R9 360 OEM 1462 3271 Radeon R9 360 OEM 1682 7360 Radeon R7 360 6660 Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] 1028 05ea Radeon HD 8670M 1028 06bf Radeon R5 M335 103c 1970 Radeon HD 8670M 103c 80be Radeon R5 M330 103c 8136 Radeon R5 M330 103c 8329 Radeon R7 M520 17aa 3633 Radeon R5 A330 17aa 3804 Radeon R5 M330 17aa 3809 Radeon R5 M330 17aa 381a Radeon R5 M430 17aa 390c Radeon R5 M330 6663 Sun PRO [Radeon HD 8570A/8570M] 1025 0846 Radeon HD 8570A 17aa 3805 Radeon HD 8570M 6664 Jet XT [Radeon R5 M240] 6665 Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520/610 Mobile] 17aa 1309 Z50-75 Radeon R7 M260DX 17aa 368f Radeon R5 A230 6667 Jet ULT [Radeon R5 M230] 666f Sun LE [Radeon HD 8550M / R5 M230] 66a0 Vega 20 [Radeon Pro/Radeon Instinct] 66a1 Vega 20 [Radeon Pro VII/Radeon Instinct MI50 32GB] 66a2 Vega 20 66a3 Vega 20 [Radeon Pro Vega II/Radeon Pro Vega II Duo] 66a7 Vega 20 [Radeon Pro Vega 20] 66af Vega 20 [Radeon VII] 6704 Cayman PRO GL [FirePro V7900] 6707 Cayman LE GL [FirePro V5900] 6718 Cayman XT [Radeon HD 6970] 6719 Cayman PRO [Radeon HD 6950] 671c Antilles [Radeon HD 6990] 671d Antilles [Radeon HD 6990] 671f Cayman CE [Radeon HD 6930] 6720 Blackcomb [Radeon HD 6970M/6990M] 1028 048f Radeon HD 6990M 1028 0490 Alienware M17x R3 Radeon HD 6970M 1028 04a4 FirePro M8900 1028 04ba Radeon HD 6990M 1028 053f FirePro M8900 106b 0b00 Radeon HD 6970M 1558 5102 Radeon HD 6970M 1558 5104 Radeon HD 6990M 1558 7201 Radeon HD 6990M 174b e188 Radeon HD 6970M 6738 Barts XT [Radeon HD 6870] # HD-687A-ZDFC 1682 3103 Radeon HD 8670 1787 201a Barts XT [Radeon HD 6870 X2] 1787 201b Barts XT [Radeon HD 6870 X2] 6739 Barts PRO [Radeon HD 6850] 1043 03b4 EAH6850 [Radeon HD 6850] 673e Barts LE [Radeon HD 6790] 148c 7720 Radeon HD 7720 OEM 6740 Whistler [Radeon HD 6730M/6770M/7690M XT] 1019 238c Radeon HD 6730M 1019 238e Radeon HD 6730M 1019 2391 Radeon HD 6730M 1019 2392 Radeon HD 6770M 1028 04a3 Precision M4600 1028 053e FirePro M5950 103c 1630 FirePro M5950 103c 1631 FirePro M5950 103c 164b Radeon HD 6730M 103c 164e Radeon HD 6730M 103c 1657 Radeon HD 6770M 103c 1658 Radeon HD 6770M 103c 165a Radeon HD 6770M 103c 165b Radeon HD 6770M 103c 1688 Radeon HD 6770M 103c 1689 Radeon HD 6770M 103c 168a Radeon HD 6770M 103c 185e Radeon HD 7690M XT 103c 3388 Radeon HD 6770M 103c 3389 Radeon HD 6770M 103c 3582 Radeon HD 6770M 103c 366c Radeon HD 6730M 1043 1d02 Radeon HD 6730M 1043 1d12 Radeon HD 6730M 104d 9084 Radeon HD 6730M 104d 9085 Radeon HD 6730M 144d b074 Radeon HD 6730M 144d b077 Radeon HD 6730M 144d b084 Radeon HD 6730M 144d b088 Radeon HD 6730M 17aa 3982 Radeon HD 6730M 6741 Whistler [Radeon HD 6630M/6650M/6750M/7670M/7690M] 1019 238e Radeon HD 6650M 1019 238f Radeon HD 6650M 1025 0379 Radeon HD 6650M 1025 037b Radeon HD 6650M 1025 037e Radeon HD 6650M 1025 0382 Radeon HD 6650M 1025 0384 Radeon HD 6650M 1025 0385 Radeon HD 6650M 1025 0386 Radeon HD 6650M 1025 0387 Radeon HD 6650M 1025 0388 Radeon HD 6650M 1025 0442 Radeon HD 6650M 1025 0451 Radeon HD 6650M 1025 0489 Radeon HD 6650M 1025 048b Radeon HD 6650M 1025 048c Radeon HD 6650M 1025 050a Radeon HD 6650M 1025 050b Radeon HD 6650M 1025 050c Radeon HD 6650M 1025 050e Radeon HD 6650M 1025 050f Radeon HD 6650M 1025 0513 Radeon HD 6650M 1025 0514 Radeon HD 6650M 1025 0515 Radeon HD 6650M 1025 0516 Radeon HD 6650M 1025 051e Radeon HD 6650M 1025 051f Radeon HD 6650M 1025 0520 Radeon HD 6650M 1025 0521 Radeon HD 6650M 1025 052a Radeon HD 6650M 1025 0555 Radeon HD 6650M 1025 0556 Radeon HD 6650M 1025 055d Radeon HD 6650M 1025 055e Radeon HD 6650M 1025 056d Radeon HD 6650M 1025 059a Radeon HD 6650M 1025 059b Radeon HD 6650M 1025 059e Radeon HD 6650M 1025 059f Radeon HD 6650M 1025 0600 Radeon HD 6650M 1025 0605 Radeon HD 6650M 1025 0606 Radeon HD 6650M 1025 0619 Radeon HD 6650M 1028 04c1 Radeon HD 6630M 1028 04c5 Radeon HD 6630M 1028 04cd Radeon HD 6630M 1028 04d7 Radeon HD 6630M 1028 04d9 Radeon HD 6630M 1028 052d Radeon HD 6630M 103c 1617 Radeon HD 6650M 103c 1646 Radeon HD 6750M 103c 1647 Radeon HD 6650M 103c 164b Radeon HD 6650M 103c 164e Radeon HD 6650M 103c 1688 Radeon HD 6750M 103c 1689 Radeon HD 6750M 103c 168a Radeon HD 6750M 103c 1860 Radeon HD 7690M 103c 3385 Radeon HD 6630M 103c 3560 Radeon HD 6750M 103c 358d Radeon HD 6750M 103c 3590 Radeon HD 6750M 103c 3593 Radeon HD 6750M 103c 366c Radeon HD 6650M 1043 1cd2 Radeon HD 6650M 1043 2121 Radeon HD 6650M 1043 2122 Radeon HD 6650M 1043 2123 Radeon HD 6650M 1043 2125 Radeon HD 7670M 1043 2127 Radeon HD 7670M 104d 907b Radeon HD 6630M 104d 9080 Radeon HD 6630M 104d 9081 Radeon HD 6630M 106b 00e2 MacBookPro8,2 [Core i7, 15", Late 2011] 1179 fd63 Radeon HD 6630M 1179 fd65 Radeon HD 6630M 144d c093 Radeon HD 6650M 144d c0ac Radeon HD 6650M 144d c0b3 Radeon HD 6750M 144d c539 Radeon HD 6630M 144d c609 Radeon HD 6630M 152d 0914 Radeon HD 6650M 17aa 21e1 Radeon HD 6630M 17aa 3970 Radeon HD 6650M 17aa 3976 Radeon HD 6650M 1854 0907 Radeon HD 6650M 6742 Whistler LE [Radeon HD 6610M/7610M] 1002 6570 Turks [Radeon HD 6570] 1019 2393 Radeon HD 6610M 1043 1d82 K53SK Laptop Radeon HD 7610M 1179 fb22 Radeon HD 7610M 1179 fb23 Radeon HD 7610M 1179 fb27 Radeon HD 7610M 1179 fb2a Radeon HD 7610M 1179 fb2c Radeon HD 7610M 1179 fb30 Radeon HD 7610M 1179 fb31 Radeon HD 7610M 1179 fb32 Radeon HD 7610M 1179 fb38 Radeon HD 7610M 1179 fb39 Radeon HD 7610M 1179 fb3a Radeon HD 7610M 1179 fb3b Radeon HD 7610M 1179 fb40 Radeon HD 7610M 1179 fb41 Radeon HD 7610M 1179 fb47 Radeon HD 7610M 1179 fb48 Radeon HD 7610M 1179 fb49 Radeon HD 7610M 1179 fb51 Radeon HD 7610M 1179 fb52 Radeon HD 7610M 1179 fb53 Radeon HD 7610M 1179 fb56 Radeon HD 7610M 1179 fb81 Radeon HD 7610M 1179 fb82 Radeon HD 7610M 1179 fb83 Radeon HD 7610M 1179 fc56 Radeon HD 7610M 1179 fcd4 Radeon HD 7610M 1179 fcee Radeon HD 7610M 1458 6570 Turks [Radeon HD 6570] 1462 6570 Turks [Radeon HD 6570] 148c 6570 Turks [Radeon HD 6570] 1682 6570 Turks [Radeon HD 6570] 174b 5570 Turks [Radeon HD 5570] 174b 6570 Turks [Radeon HD 6570] 174b 7570 Turks [Radeon HD 7570] 174b 8510 Turks [Radeon HD 8510] 174b 8570 Turks [Radeon HD 8570] 1787 6570 Turks [Radeon HD 6570] 17af 6570 Turks [Radeon HD 6570] 8086 2111 Radeon HD 6625M 6743 Whistler [Radeon E6760] 6749 Turks GL [FirePro V4900] 15c3 2b06 MED-X4900 (EIZO) 674a Turks GL [FirePro V3900] 13cc 3d22 MXRT-2500 15c3 0106 MED-X3900 6750 Onega [Radeon HD 6650A/7650A] 1462 2670 Radeon HD 6670A 17aa 3079 Radeon HD 7650A 17aa 307a Radeon HD 6650A 17aa 3087 Radeon HD 7650A 17aa 3618 Radeon HD 6650A 17aa 3623 Radeon HD 6650A 17aa 3627 Radeon HD 6650A 6751 Turks [Radeon HD 7650A/7670A] 1028 0548 Radeon HD 7650A 1462 2671 Radeon HD 7670A 1462 2672 Radeon HD 7670A 1462 2680 Radeon HD 7650A 1462 2681 Radeon HD 7650A 17aa 3087 Radeon HD 7650A 6758 Turks XT [Radeon HD 6670/7670] 1028 0b0e Radeon HD 6670 103c 6882 Radeon HD 6670 1462 250a Radeon HD 7670 148c 7670 Radeon HD 7670 1545 7670 Radeon HD 7670 1682 3300 Radeon HD 7670 174b 7670 Radeon HD 7670 174b e181 Radeon HD 6670 1787 2309 Radeon HD 6670 6759 Turks PRO [Radeon HD 6570/7570/8550 / R5 230] 103c 3130 Radeon HD 6570 1043 0403 Radeon HD 6570 1462 2500 Radeon HD 6570 1462 2509 Radeon HD 7570 148c 7570 Radeon HD 7570 1642 3a67 Radeon HD 6570 1682 3280 Radeon HD 7570 1682 3530 Radeon HD 8550 1682 5230 Radeon R5 230 series 1682 6450 Radeon HD 6450 series 174b 7570 Radeon HD 7570 174b 8550 Radeon HD8550 OEM 174b 8570 Radeon HD8550 OEM 174b e142 Radeon HD 6570 174b e181 Radeon HD 6570 1787 a230 Radeon R5 230 series 1787 a450 Radeon HD 6450 series 1b0a 908f Radeon HD 6570 1b0a 9090 Radeon HD 6570 1b0a 9091 Radeon HD 6570 1b0a 9092 Radeon HD 6570 1b0a 909e Radeon HD 6570 1b0a 90b5 Radeon HD 7570 1b0a 90b6 Radeon HD 7570 675b Turks [Radeon HD 7600 Series] 675d Turks PRO [Radeon HD 7570] 675f Turks LE [Radeon HD 5570/6510/7510/8510] 148c 6510 Radeon HD 6510 148c 6530 Radeon HD 6530 148c 7510 Radeon HD 7510 1545 7570 Radeon HD 7570 174b 6510 Radeon HD 6510 174b 7510 Radeon HD 7510 174b 8510 Radeon HD 8510 1787 2012 Radeon HD 5570 2GB GDDR3 1787 2314 Radeon HD 5570 1GB DDR2/GDDR3 6760 Seymour [Radeon HD 6400M/7400M Series] 1002 0124 Radeon HD 6470M 1002 0134 Radeon HD 6470M 1019 238b Radeon HD 6470M 1019 238e Radeon HD 6470M 1019 2390 Radeon HD 6470M 1019 9985 Radeon HD 6470M 1028 04c1 Radeon HD 6470M 1028 04c3 Radeon HD 6470M 1028 04ca Radeon HD 6470M 1028 04cb Radeon HD 6470M 1028 04cc Vostro 3350 1028 04d1 Radeon HD 6470M 1028 04d3 Radeon HD 6470M 1028 04d7 Radeon HD 6470M 1028 0502 Radeon HD 6470M 1028 0503 Radeon HD 6470M 1028 0506 Radeon HD 6470M 1028 0507 Radeon HD 6470M 1028 0514 Radeon HD 6470M 1028 051c Radeon HD 6450M / 7430M 1028 051d Radeon HD 6450M / 7430M 103c 161a Radeon HD 6470M 103c 161b Radeon HD 6470M 103c 161e Radeon HD 6470M 103c 161f Radeon HD 6470M 103c 1622 Radeon HD 6450M 103c 1623 Radeon HD 6450M 103c 164a Radeon HD 6470M 103c 164d Radeon HD 6470M 103c 1651 Radeon HD 6470M 103c 1656 Radeon HD 6490M 103c 1658 Radeon HD 6490M 103c 1659 Radeon HD 6490M 103c 165b Radeon HD 6490M 103c 165d Radeon HD 6470M 103c 165f Radeon HD 6470M 103c 1661 Radeon HD 6470M 103c 1663 Radeon HD 6470M 103c 1665 Radeon HD 6470M 103c 1667 Radeon HD 6470M 103c 1669 Radeon HD 6470M 103c 166b Radeon HD 6470M 103c 166c Radeon HD 6470M 103c 166e Radeon HD 6470M 103c 1670 Radeon HD 6470M 103c 1672 Radeon HD 6470M 103c 167a Radeon HD 6470M 103c 167b Radeon HD 6470M 103c 167d Radeon HD 6490M 103c 167f Radeon HD 6490M 103c 168c Radeon HD 6470M 103c 168f Radeon HD 6470M 103c 1694 Radeon HD 6470M 103c 1696 Radeon HD 6470M 103c 1698 Radeon HD 6470M 103c 169a Radeon HD 6470M 103c 169c Radeon HD 6490M 103c 1855 Radeon HD 7450M 103c 1859 Radeon HD 7450M 103c 185c Radeon HD 7450M 103c 185d Radeon HD 7470M 103c 185f Radeon HD 7470M 103c 1863 Radeon HD 7450M 103c 355c Radeon HD 6490M 103c 355f Radeon HD 6490M 103c 3563 Radeon HD 6470M 103c 3565 Radeon HD 6470M 103c 3567 Radeon HD 6470M 103c 3569 Radeon HD 6470M 103c 3581 Radeon HD 6490M 103c 3584 Radeon HD 6470M 103c 358c Radeon HD 6490M 103c 358f Radeon HD 6490M 103c 3592 Radeon HD 6490M 103c 3596 Radeon HD 6490M 103c 366b Radeon HD 6470M 103c 3671 FirePro M3900 103c 3673 Radeon HD 6470M 1043 100a Radeon HD 7470M 1043 100c Radeon HD 6470M 1043 101b Radeon HD 6470M 1043 101c Radeon HD 6470M 1043 102a Radeon HD 7450M 1043 102c Radeon HD 6470M 1043 104b Radeon HD 7470M 1043 105d Radeon HD 7470M 1043 106b Radeon HD 7470M 1043 106d Radeon HD 7470M 1043 107d Radeon HD 7470M 1043 1cb2 Radeon HD 6470M 1043 1d22 Radeon HD 6470M 1043 1d32 Radeon HD 6470M 1043 2001 Radeon HD 6470M 1043 2002 Radeon HD 7470M 1043 2107 Radeon HD 7470M 1043 2108 Radeon HD 7470M 1043 2109 Radeon HD 7470M 1043 84a0 Radeon HD 6470M 1043 84e9 Radeon HD 6470M 1043 8515 Radeon HD 7470M 1043 8517 Radeon HD 7470M 1043 855a Radeon HD 7470M 104d 907b Radeon HD 6470M 104d 9081 Radeon HD 6470M 104d 9084 Radeon HD 6470M 104d 9085 Radeon HD 6470M 1179 0001 Radeon HD 6450M 1179 0003 Radeon HD 6450M 1179 0004 Radeon HD 6450M 1179 fb22 Radeon HD 7470M 1179 fb23 Radeon HD 7470M 1179 fb2c Radeon HD 7470M 1179 fb31 Radeon HD 7470M 1179 fb32 Radeon HD 7470M 1179 fb33 Radeon HD 7470M 1179 fb38 Radeon HD 7470M 1179 fb39 Radeon HD 7470M 1179 fb3a Radeon HD 7470M 1179 fb40 Radeon HD 7470M 1179 fb41 Radeon HD 7470M 1179 fb42 Radeon HD 7470M 1179 fb47 Radeon HD 7470M 1179 fb48 Radeon HD 7470M 1179 fb51 Radeon HD 7470M 1179 fb52 Radeon HD 7470M 1179 fb53 Radeon HD 7470M 1179 fb81 Radeon HD 7470M 1179 fb82 Radeon HD 7470M 1179 fb83 Radeon HD 7470M 1179 fc51 Radeon HD 6470M 1179 fc52 Radeon HD 7470M 1179 fc56 Radeon HD 7470M 1179 fcd3 Radeon HD 7470M 1179 fcd4 Radeon HD 7470M 1179 fcee Radeon HD 7470M 1179 fdee Radeon HD 7470M 144d b074 Radeon HD 6470M 144d b084 Radeon HD 6470M 144d c095 Radeon HD 6470M 144d c0b3 Radeon HD 6490M 144d c538 Radeon HD 6470M 144d c581 Radeon HD 6470M 144d c589 Radeon HD 6470M 144d c609 Radeon HD 7470M 144d c625 Radeon HD 7470M 144d c636 Radeon HD 7450M 1462 10ac Radeon HD 6470M 152d 0916 Radeon HD 6470M 17aa 21e5 Radeon HD 6470M 17aa 3900 Radeon HD 7450M 17aa 3902 Radeon HD 7450M 17aa 3969 Radeon HD 6470M 17aa 3970 Radeon HD 7450M 17aa 3976 Radeon HD 6470M 17aa 397b Radeon HD 6470M 17aa 397d Radeon HD 6470M 17aa 5101 Radeon HD 7470M 17aa 5102 Radeon HD 7450M 17aa 5103 Radeon HD 7450M 17aa 5106 Radeon HD 7450M 1854 0897 Radeon HD 6470M 1854 0900 Radeon HD 6470M 1854 0908 Radeon HD 6470M 1854 2015 Radeon HD 6470M 6761 Seymour LP [Radeon HD 6430M] 6763 Seymour [Radeon E6460] 6764 Seymour [Radeon HD 6400M Series] 6765 Seymour [Radeon HD 6400M Series] 6766 Caicos 6767 Caicos 6768 Caicos 6770 Caicos [Radeon HD 6450A/7450A] 17aa 308d Radeon HD 7450A 17aa 3623 Radeon HD 6450A 17aa 3627 Radeon HD 6450A 17aa 3629 Radeon HD 6450A 17aa 363c Radeon HD 6450A 17aa 3658 Radeon HD 7470A 6771 Caicos XTX [Radeon HD 8490 / R5 235X OEM] 6772 Caicos [Radeon HD 7450A] 6778 Caicos XT [Radeon HD 7470/8470 / R5 235/310 OEM] 1019 0024 Radeon HD 7470 1019 0027 Radeon HD 8470 1028 2120 Radeon HD 7470 1462 b491 Radeon HD 8470 1462 b492 Radeon HD 8470 1462 b493 Radeon HD 8470 OEM 1462 b499 Radeon R5 235 OEM 1642 3c65 Radeon HD 8470 1642 3c75 Radeon HD 8470 174b 8145 Radeon HD 8470 174b d145 Radeon R5 235 OEM 174b d335 Radeon R5 310 OEM 174b e145 Radeon HD 7470 17aa 3694 Radeon R5 A220 6779 Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM] 1019 0016 Radeon HD 6450 1019 0017 Radeon HD 6450 1019 0018 Radeon HD 6450 1028 2120 Radeon HD 6450 103c 2128 Radeon HD 6450 103c 2aee Radeon HD 7450A 1043 047b EAH6450 SILENT/DI/1GD3(LP) 1092 6450 Radeon HD 6450 1462 2125 Radeon HD 6450 1462 2346 Radeon HD 7450 1462 2490 Radeon HD 6450 1462 2494 Radeon HD 6450 1462 2496 Radeon HD 7450 148c 7450 Radeon HD 7450 148c 8450 Radeon HD 8450 OEM 1545 7470 Radeon HD 7470 1642 3a65 Radeon HD 6450 1642 3a66 Radeon HD 7450 1642 3a75 Radeon HD 6450 1642 3a76 Radeon HD 7450 1682 3200 Radeon HD 7450 174b 7450 Radeon HD 7450 174b e127 Radeon HD 6450 174b e153 Radeon HD 6450 174b e164 Radeon HD 6450 1 GB DDR3 174b e180 Radeon HD 6450 174b e201 Radeon HD 6450 1787 2311 Radeon HD 6450 17af 8450 Radeon HD 8450 OEM 1b0a 9096 Radeon HD 6450 1b0a 9097 Radeon HD 6450 1b0a 90a8 Radeon HD 6450A 1b0a 90b1 Radeon HD 6450 1b0a 90b3 Radeon HD 7450A 1b0a 90bb Radeon HD 7450A 677b Caicos PRO [Radeon HD 7450] 6780 Tahiti XT GL [FirePro W9000] 6784 Tahiti [FirePro Series Graphics Adapter] 6788 Tahiti [FirePro Series Graphics Adapter] 678a Tahiti PRO GL [FirePro Series] 1002 030c FirePro W8000 1002 0310 FirePro S9000 1002 0420 Radeon Sky 700 1002 0422 Radeon Sky 900 1002 0710 FirePro S9050 1002 0b0e FirePro S10000 Passive 1002 0b2a FirePro S10000 1028 030c FirePro W8000 1028 0710 FirePro S9000 6798 Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X] 1002 3000 Tahiti XT2 [Radeon HD 7970 GHz Edition] 1002 3001 Tahiti XTL [Radeon R9 280X] 1002 4000 Radeon HD 8970 OEM 1043 041c HD 7970 DirectCU II 1043 0420 HD 7970 DirectCU II TOP 1043 0444 HD 7970 DirectCU II TOP 1043 0448 HD 7970 DirectCU II TOP 1043 044a Tahiti XT2 [Matrix HD 7970] 1043 044c Tahiti XT2 [Matrix HD 7970 Platinum] 1043 3001 Tahiti XTL [ROG Matrix R9 280X] 1043 3006 Tahiti XTL [Radeon R9 280X DirectCU II TOP] 1043 9999 ARES II 106b 0127 FirePro D700 106b 0128 FirePro D700 1092 3000 Tahiti XT2 [Radeon HD 7970 GHz Edition] 1458 2261 Tahiti XT2 [Radeon HD 7970 GHz Edition OC] # GV-R928XOC-3GD 1458 3001 Tahiti XTL [Radeon R9 280X OC] 1462 2774 HD 7970 TwinFrozr III Boost Edition OC 1682 3001 Tahiti XTL [Radeon R9 280X] 1682 3211 Double D HD 7970 Black Edition # FX-797A-TNBC 1682 3213 HD 7970 Black Edition 1682 3214 Double D HD 7970 1787 201c HD 7970 IceQ X² # Radeon HD 7970 X2 1787 2317 Radeon HD 7990 1787 3000 Tahiti XT2 [Radeon HD 7970 GHz Edition] 679a Tahiti PRO [Radeon HD 7950/8950 OEM / R9 280] 1002 0b01 Radeon HD 8950 OEM 1002 3000 Tahiti PRO2 [Radeon HD 7950 Boost] 1462 3000 Radeon HD 8950 OEM 174b a003 Radeon R9 280 679b Malta [Radeon HD 7990/8990 OEM] 1002 0b28 Radeon HD 8990 OEM 1002 0b2a Radeon HD 7990 1462 8036 Radeon HD 8990 OEM 148c 8990 Radeon HD 8990 OEM 679e Tahiti LE [Radeon HD 7870 XT] 106b 0125 FirePro D500 106b 0126 FirePro D500 1787 2328 Radeon HD 7870 Black Edition 2 GB GDDR5 [2GBD5-2DHV3E] 679f Tahiti 67a0 Hawaii XT GL [FirePro W9100] 1002 0335 FirePro S9150 1002 0735 FirePro S9170 1028 031f FirePro W9100 1028 0335 FirePro S9150 67a1 Hawaii PRO GL [FirePro W8100] 1002 0335 FirePro S9100 1028 0335 FirePro S9100 67a2 Hawaii GL 67a8 Hawaii 67a9 Hawaii 67aa Hawaii 67b0 Hawaii XT / Grenada XT [Radeon R9 290X/390X] 1028 0b00 Grenada XT [Radeon R9 390X] 103c 6566 Radeon R9 390X 1043 046a R9 290X DirectCU II 1043 046c R9 290X DirectCU II OC 1043 0474 Matrix R9 290X Platinum 1043 0476 ARES III 1043 04d7 Radeon R9 390X 1043 04db Radeon R9 390X 1043 04df Radeon R9 390X 1043 04e9 Radeon R9 390X 1458 227c R9 290X WindForce 3X OC 1458 2281 R9 290X WindForce 3X OC 1458 228c R9 290X WindForce 3X 1458 228d R9 290X WindForce 3X OC 1458 2290 R9 290X WindForce 3X 1458 22bc Radeon R9 390X 1458 22c1 Grenada PRO [Radeon R9 390] 1462 2015 Radeon R9 390X 1462 3070 R9 290X Lightning 1462 3071 R9 290X Lightning 1462 3072 R9 290X Lightning LE 1462 3080 R9 290X Gaming 1462 3082 R9 290X Gaming OC 148c 2347 Devil 13 Dual Core R9 290X 148c 2357 Grenada XT [Radeon R9 390X] 1682 9290 Double Dissipation R9 290X 1682 9395 Grenada XT [Radeon R9 390X] 174b 0e34 Radeon R9 390X 174b e282 Vapor-X R9 290X Tri-X OC 174b e285 R9 290X Tri-X OC 174b e324 Grenada XT2 [Radeon R9 390X] 1787 2020 R9 290X IceQ X² Turbo 1787 2357 Grenada XT [Radeon R9 390X] 67b1 Hawaii PRO [Radeon R9 290/390] 1043 04dd STRIX R9 390 148c 2358 Radeon R9 390 174b e324 Sapphire Nitro R9 390 67b8 Hawaii XT [Radeon R9 290X Engineering Sample] 67b9 Vesuvius [Radeon R9 295X2] 67be Hawaii LE 67c0 Ellesmere [Radeon Pro WX 7100 Mobile] 67c2 Ellesmere [Radeon Pro V7300X / V7350x2] 67c4 Ellesmere [Radeon Pro WX 7100] 1002 0336 Radeon Pro Duo 1002 1336 Radeon Pro Duo 67c7 Ellesmere [Radeon Pro WX 5100] 67ca Ellesmere [Polaris10] 67cc Ellesmere [Polaris10] 67cf Ellesmere [Polaris10] 67d0 Ellesmere [Radeon Pro V7300X / V7350x2] 67d4 Ellesmere [Radeon Pro WX 7100 / Barco MXRT-8700] 67d7 Ellesmere [Radeon Pro WX 5100 / Barco MXRT-6700] 67df Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] 1002 0b37 Radeon RX 480 1028 1722 Radeon RX 570X 1028 1723 Radeon RX 580X 103c 840e Radeon RX 580 4GB 1043 04a8 Radeon RX 480 1043 04b0 Radeon RX 470 1043 04fb Radeon RX 480 1043 04fd Radeon RX 480 8GB 1043 056a Radeon RX 590 106b 0161 Radeon Pro 580 106b 0162 Radeon Pro 575 106b 0163 Radeon Pro 570 1458 22f0 Radeon RX 570 1458 22f7 Radeon RX 570 Gaming 4G 1462 3411 Radeon RX 470 1462 3413 Radeon RX 480 Gaming X 8GB 1462 3416 Radeon RX 570 1462 3418 Radeon RX 580 ARMOR 8G OC 1462 341b Radeon RX 570 Armor 8G OC 1462 341e Radeon RX 570 Armor 4G OC 1462 809e Radeon RX 480 4GB 1462 8a92 Radeon RX 580 148c 2372 Radeon RX 480 [Red Dragon] 148c 2373 Radeon RX 470 148c 2377 Red Devil RX 580 8G Golden 148c 2378 Radeon RX 580 148c 2379 Radeon RX 570 4G [Red Dragon] 148c 2391 Radeon RX 590 [Red Devil] 1682 9470 Radeon RX 470 1682 9480 Radeon RX 480 1682 9587 Radeon RX 590 FATBOY 8GB 1682 9588 Radeon RX 580 XTR 1682 c570 Radeon RX 570 1682 c580 Radeon RX 580 174b e347 Radeon RX 470/480 174b e349 Radeon RX 470 1787 a470 Radeon RX 470 1787 a480 Radeon RX 480 1849 5001 Phantom Gaming X RX 580 OC 1849 5030 Phantom Gaming D Radeon RX580 8G OC 1da2 e343 Radeon RX 570 Pulse ITX 4GB 1da2 e353 Radeon RX 570 Pulse 4GB 1da2 e366 Nitro+ Radeon RX 570/580/590 1da2 e387 Radeon RX 580 Pulse 4GB 67e0 Baffin [Radeon Pro WX 4170] 103c 8270 Radeon Pro WX 4170 103c 8272 Radeon Pro WX 4170 67e1 Baffin [Polaris11] 67e3 Baffin [Radeon Pro WX 4100] 67e8 Baffin [Radeon Pro WX 4130/4150] 1028 075d Radeon Pro WX 4150 1028 07b0 Radeon Pro WX 4130/4150 1028 07b1 Radeon Pro WX 4130 1028 175d Radeon Pro WX 4150 1028 17b0 Radeon Pro WX 4130/4150 1028 17b1 Radeon Pro WX 4130 103c 8275 Radeon Pro WX 4150 103c 8277 Radeon Pro WX 4150 67e9 Baffin [Polaris11] 67eb Baffin [Radeon Pro V5300X] 67ef Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X] 1025 1367 RX560X 4GB 1028 1703 RX 560D OEM OC 2 GB 103c 3421 Radeon RX 460 1043 0561 AREZ Radeon RX 560 106b 0160 Radeon Pro 460 106b 0166 Radeon Pro 455 106b 0167 Radeon Pro 450 106b 0179 Radeon Pro 560 106b 017a Radeon Pro 555 106b 018f Radeon Pro 560X 106b 0190 Radeon Pro 555X 1642 1727 Polaris 21 XL [Radeon RX 560D] 1682 956d Polaris 21 XL [Radeon RX 560D] 67ff Baffin [Radeon RX 550 640SP / RX 560/560X] 1002 0b04 Radeon RX 560 1028 1721 Radeon RX 560X 1028 1726 Radeon RX 560DX 103c 8479 Radeon RX 560X Mobile 1043 04bc Radeon RX 560 1043 052f Radeon RX 560 1458 22ed Radeon RX 560 148c 2381 Radeon RX 560 1682 9560 Radeon RX 560 1849 5037 PHANTOM G R RX550 2G/M/ASRK 1da2 e348 Radeon RX 560 1da2 e367 Radeon RX 550 640SP 6800 Wimbledon XT [Radeon HD 7970M] 1002 0124 Radeon HD 7970M 8086 2110 Radeon HD 7970M 8086 2111 Radeon HD 7970M 6801 Neptune XT [Radeon HD 8970M] 1002 0124 Radeon HD 8970M 1462 1117 Radeon R9 M290X 8086 2110 Radeon HD 8970M 8086 2111 Radeon HD 8970M 6802 Wimbledon 6806 Neptune 6808 Pitcairn XT GL [FirePro W7000] 1002 0310 FirePro S7000 1002 0420 Radeon Sky 500 103c 030c MED-X7000 13cc 3d25 MXRT-7500 15c3 030c MED-X7000 6809 Pitcairn LE GL [FirePro W5000] 13cc 3d23 MXRT-5500 13cc 3d24 MXRT-5550 15c3 0b06 MED-X5000 6810 Curacao XT / Trinidad XT [Radeon R7 370 / R9 270X/370X] 106b 012a FirePro D300 106b 012b FirePro D300 148c 0908 Radeon R9 370 OEM 1682 7370 Radeon R7 370 6811 Curacao PRO [Radeon R7 370 / R9 270/370 OEM] 1028 0b00 Trinidad PRO [Radeon R9 370 OEM] 1043 2016 Trinidad PRO [Radeon R9 370 OEM] 1458 2016 Trinidad PRO [Radeon R9 370 OEM] 1462 2016 Trinidad PRO [Radeon R9 370 OEM] 1462 3050 R9 270 Gaming OC 148c 2016 Trinidad PRO [Radeon R9 370 OEM] 1682 2015 Trinidad PRO [Radeon R7 370] 174b 2015 NITRO Radeon R7 370 174b 2016 Trinidad PRO [Radeon R9 370 OEM] 1787 2016 Trinidad PRO [Radeon R9 370 OEM] 6816 Pitcairn 6817 Pitcairn 6818 Pitcairn XT [Radeon HD 7870 GHz Edition] 1002 0b05 Radeon HD 8870 OEM 174b 8b04 Radeon HD 8860 6819 Pitcairn PRO [Radeon HD 7850 / R7 265 / R9 270 1024SP] 1043 042c Radeon HD 7850 1682 7269 Radeon R9 270 1024SP 1682 9278 Radeon R9 270 1024SP 174b a008 Radeon R9 270 1024SP 174b e221 Radeon HD 7850 2GB GDDR5 DVI-I/DVI-D/HDMI/DP 6820 Venus XTX [Radeon HD 8890M / R9 M275X/M375X] 103c 1851 Radeon HD 7750M 17aa 3643 Radeon R9 A375 17aa 3801 Radeon R9 M275 17aa 3824 Radeon R9 M375 1da2 e26a Radeon R7 250 6821 Venus XT [Radeon HD 8870M / R9 M270X/M370X] 1002 031e FirePro SX4000 1028 05cc FirePro M5100 1028 15cc FirePro M5100 106b 0149 Radeon R9 M370X Mac Edition 6822 Venus PRO [Radeon E8860] 6823 Venus PRO [Radeon HD 8850M / R9 M265X] 6825 Heathrow XT [Radeon HD 7870M] 1028 053f FirePro M6000 1028 05cd FirePro M6000 1028 15cd FirePro M6000 103c 176c FirePro M6000 8086 2111 Chelsea PRO 6826 Chelsea LP [Radeon HD 7700M Series] 6827 Heathrow PRO [Radeon HD 7850M/8850M] 6828 Cape Verde PRO [FirePro W600] 15c3 2b1e MED-X6000 6829 Cape Verde 682a Venus PRO 682b Cape Verde PRO / Venus LE / Tropo PRO-L [Radeon HD 8830M / R7 250 / R7 M465X] 0128 079c Radeon R7 465X 1462 3012 Radeon R7 250 682c Cape Verde GL [FirePro W4100] 682d Chelsea XT GL [FirePro M4000] 682f Chelsea LP [Radeon HD 7730M] 103c 1851 Radeon HD 7750M 6835 Cape Verde PRX [Radeon R9 255 OEM] 6837 Cape Verde LE [Radeon HD 7730/8730] 1462 2796 Radeon HD 8730 1462 8092 Radeon HD 8730 148c 8730 Radeon HD 8730 1787 3000 Radeon HD 6570 683d Cape Verde XT [Radeon HD 7770/8760 / R7 250X] 1002 0030 Radeon HD 8760 OEM 1019 0030 Radeon HD 8760 OEM 103c 6890 Radeon HD 8760 OEM 1043 8760 Radeon HD 8760 OEM 1462 2710 R7770-PMD1GD5 174b 8304 Radeon HD 8760 OEM 683f Cape Verde PRO [Radeon HD 7750/8740 / R7 250E] 1462 2790 Radeon HD 8740 1462 2791 Radeon HD 8740 1642 3b97 Radeon HD 8740 6840 Thames [Radeon HD 7500M/7600M Series] 1025 050e Radeon HD 7670M 1025 050f Radeon HD 7670M 1025 0513 Radeon HD 7670M 1025 0514 Radeon HD 7670M 1025 056d Radeon HD 7670M 1025 059a Radeon HD 7670M 1025 059b Radeon HD 7670M 1025 059e Radeon HD 7670M 1025 0600 Radeon HD 7670M 1025 0606 Radeon HD 7670M 1025 0696 Radeon HD 7650M 1025 0697 Radeon HD 7650M 1025 0698 Radeon HD 7650M 1025 0699 Radeon HD 7650M 1025 0757 Radeon HD 7670M 1028 056a Radeon HD 7670M 1028 056e Radeon HD 7670M 1028 0598 Radeon HD 7670M 1028 059d Radeon HD 7670M 1028 05a3 Radeon HD 7670M 1028 05b9 Radeon HD 7670M 1028 05bb Radeon HD 7670M 103c 1789 FirePro M2000 103c 17f1 Radeon HD 7570M 103c 17f4 Radeon HD 7650M 103c 1813 Radeon HD 7590M 103c 182f Radeon HD 7670M 103c 1830 Radeon HD 7670M 103c 1835 Radeon HD 7670M 103c 183a Radeon HD 7670M 103c 183c Radeon HD 7670M 103c 183e Radeon HD 7670M 103c 1840 Radeon HD 7670M 103c 1842 Radeon HD 7670M 103c 1844 Radeon HD 7670M 103c 1848 Radeon HD 7670M 103c 184a Radeon HD 7670M 103c 184c Radeon HD 7670M 103c 1895 Radeon HD 7670M 103c 1897 Radeon HD 7670M 103c 18a5 Radeon HD 7670M 103c 18a7 Radeon HD 7670M 103c 18f4 Radeon HD 7670M 1043 100a Radeon HD 7670M 1043 104b Radeon HD 7670M 1043 10dc Radeon HD 7670M 1043 2121 Radeon HD 7670M 1043 2122 Radeon HD 7670M 1043 2123 Radeon HD 7670M 1043 2125 Radeon HD 7670M 1043 2127 Radeon HD 7670M 1179 fb11 Radeon HD 7670M 1179 fb22 Radeon HD 7670M 1179 fb23 Radeon HD 7670M 1179 fb2c Radeon HD 7670M 1179 fb31 Radeon HD 7670M 1179 fb32 Radeon HD 7670M 1179 fb38 Radeon HD 7670M 1179 fb39 Radeon HD 7670M 1179 fb3a Radeon HD 7670M 1179 fb40 Radeon HD 7670M 1179 fb41 Radeon HD 7670M 1179 fb47 Radeon HD 7670M 1179 fb48 Radeon HD 7670M 1179 fb51 Radeon HD 7670M 1179 fb52 Radeon HD 7670M 1179 fb53 Radeon HD 7670M 1179 fb81 Radeon HD 7670M 1179 fb82 Radeon HD 7670M 1179 fb83 Radeon HD 7670M 1179 fc56 Radeon HD 7670M 1179 fcd4 Radeon HD 7670M 1179 fcee Radeon HD 7670M 144d c0c5 Radeon HD 7690M 144d c0ce Radeon HD 7670M 144d c0da Radeon HD 7670M 17aa 3970 Radeon HD 7670M 17aa 397b Radeon HD 7670M 17aa 5101 Radeon HD 7670M 17aa 5102 Radeon HD 7670M 17aa 5103 Radeon HD 7670M 6841 Thames [Radeon HD 7550M/7570M/7650M] 1028 0561 Radeon HD 7650M 1028 056c Radeon HD 7650M 1028 057f Radeon HD 7570M 103c 17f1 Radeon HD 7570M 103c 17f4 Radeon HD 7650M 103c 1813 Radeon HD 7570M 103c 183a Radeon HD 7650M 103c 183c Radeon HD 7650M 103c 183e Radeon HD 7650M 103c 1840 Radeon HD 7650M 103c 1842 Radeon HD 7650M 103c 1844 Radeon HD 7650M 1043 100a Radeon HD 7650M 1043 104b Radeon HD 7650M 1043 10dc Radeon HD 7650M 1043 2134 Radeon HD 7650M 1179 0001 Radeon HD 7570M 1179 0002 Radeon HD 7570M 1179 fb43 Radeon HD 7550M 1179 fb91 Radeon HD 7550M 1179 fb92 Radeon HD 7550M 1179 fb93 Radeon HD 7550M 1179 fba2 Radeon HD 7550M 1179 fba3 Radeon HD 7550M 144d c0c7 Radeon HD 7550M 6842 Thames LE [Radeon HD 7000M Series] 6843 Thames [Radeon HD 7670M] 6860 Vega 10 [Instinct MI25/MI25x2/V340/V320] 1002 0c35 Radeon PRO V320 1002 6c75 Radeon PRO V320 106b 017c Radeon Pro Vega 64 6861 Vega 10 XT [Radeon PRO WX 9100] 6862 Vega 10 XT [Radeon PRO SSG] 6863 Vega 10 XTX [Radeon Vega Frontier Edition] 6864 Vega 10 [Radeon Pro V340/Instinct MI25x2] 6867 Vega 10 XL [Radeon Pro Vega 56] 6868 Vega 10 [Radeon PRO WX 8100/8200] 6869 Vega 10 XGA [Radeon Pro Vega 48] 686a Vega 10 LEA 686b Vega 10 XTXA [Radeon Pro Vega 64X] 686c Vega 10 [Instinct MI25 MxGPU/MI25x2 MxGPU/V340 MxGPU/V340L MxGPU] 686d Vega 10 GLXTA 686e Vega 10 GLXLA 687f Vega 10 XL/XT [Radeon RX Vega 56/64] 1002 0b36 RX Vega64 1002 6b76 AMD Radeon RX Vega 56 8GB # ROG-STRIX-RXVEGA64-O8G-GAMING 1043 04c4 Radeon RX Vega 64 1043 0555 ROG STRIX RX Vega 56 8GB 1458 230c Radeon RX VEGA 56 GAMING OC 8G 1da2 e376 Radeon RX VEGA 56 Pulse 8GB OC HBM2 6880 Lexington [Radeon HD 6550M] 103c 163c Pavilion dv6 Radeon HD 6550M 6888 Cypress XT [FirePro V8800] 6889 Cypress PRO [FirePro V7800] 1002 0301 FirePro V7800P 13cc 3d1f MXRT-7400 688a Cypress XT [FirePro V9800] 1002 030c FirePro V9800P 688c Cypress XT GL [FireStream 9370] 688d Cypress PRO GL [FireStream 9350] 6898 Cypress XT [Radeon HD 5870] 1002 0b00 Radeon HD 5870 Eyefinity Edition 106b 00d0 Radeon HD 5870 Mac Edition # R5870-PM2D1G 1462 8032 Radeon HD 5870 1 GB GDDR5 174b 6870 Radeon HD 6870 1600SP Edition 6899 Cypress PRO [Radeon HD 5850] # EAH5850 1043 0330 Radeon HD 5850 174b 237b Radeon HD 5850 X2 174b 6850 Radeon HD 6850 1440SP Edition 689b Cypress PRO [Radeon HD 6800 Series] 689c Hemlock [Radeon HD 5970] 1043 0352 ARES 689d Hemlock [Radeon HD 5970] 689e Cypress LE [Radeon HD 5830] 68a0 Broadway XT [Mobility Radeon HD 5870] 1028 12ef FirePro M7820 103c 1520 FirePro M7820 68a1 Broadway PRO [Mobility Radeon HD 5850] 106b 00cc iMac MC511 Mobility Radeon HD 5850 MXM Module 68a8 Granville [Radeon HD 6850M/6870M] 1025 0442 Radeon HD 6850M 1025 0451 Radeon HD 6850M 1025 050a Radeon HD 6850M 1025 050b Radeon HD 6850M 1025 050c Radeon HD 6850M 1025 050e Radeon HD 6850M 1025 050f Radeon HD 6850M 1025 0513 Radeon HD 6850M 1025 0514 Radeon HD 6850M 1025 0515 Radeon HD 6850M 1025 0516 Radeon HD 6850M 1025 0525 Radeon HD 6850M 1025 0526 Radeon HD 6850M 1025 056d Radeon HD 6850M 1028 048f Radeon HD 6870M 1028 0490 Radeon HD 6870M 1028 04b9 Radeon HD 6870M 1028 04ba Radeon HD 6870M 103c 159b Radeon HD 6850M 144d c0ad Radeon HD 6850M 68a9 Juniper XT [FirePro V5800] 13cc 3d1e MXRT-5400 13cc 3d20 MXRT-5450 68b8 Juniper XT [Radeon HD 5770] 106b 00cf MacPro5,1 [Mac Pro 2.8GHz DDR3] 68b9 Juniper LE [Radeon HD 5670 640SP Edition] 68ba Juniper XT [Radeon HD 6770] 68be Juniper PRO [Radeon HD 5750] 148c 3000 Radeon HD 6750 68bf Juniper PRO [Radeon HD 6750] 174b 6750 Radeon HD 6750 68c0 Madison [Mobility Radeon HD 5730 / 6570M] 1019 2383 Mobility Radeon HD 5730 1028 02a2 Mobility Radeon HD 5730 1028 02fe Mobility Radeon HD 5730 1028 0419 Mobility Radeon HD 5730 103c 147d Mobility Radeon HD 5730 103c 1521 Madison XT [FirePro M5800] 103c 1593 Mobility Radeon HD 6570 103c 1596 Mobility Radeon HD 6570 103c 1599 Mobility Radeon HD 6570 1043 1c22 Mobility Radeon HD 5730 17aa 3927 Mobility Radeon HD 5730 17aa 3952 Mobility Radeon HD 5730 17aa 3978 Radeon HD 6570M 68c1 Madison [Mobility Radeon HD 5650/5750 / 6530M/6550M] 1025 0205 Mobility Radeon HD 5650 1025 0293 Mobility Radeon HD 5650 1025 0294 Mobility Radeon HD 5650 1025 0296 Mobility Radeon HD 5650 1025 0308 Mobility Radeon HD 5650 1025 030a Mobility Radeon HD 5650 1025 0311 Mobility Radeon HD 5650 1025 0312 Mobility Radeon HD 5650 1025 031c Mobility Radeon HD 5650 1025 031d Mobility Radeon HD 5650 1025 033d Mobility Radeon HD 5650 1025 033e Mobility Radeon HD 5650 1025 033f Mobility Radeon HD 5650 1025 0346 Mobility Radeon HD 5650 1025 0347 Aspire 7740G 1025 0348 Mobility Radeon HD 5650 1025 0356 Mobility Radeon HD 5650 1025 0357 Mobility Radeon HD 5650 1025 0358 Mobility Radeon HD 5650 1025 0359 Mobility Radeon HD 5650 1025 035a Mobility Radeon HD 5650 1025 035b Mobility Radeon HD 5650 1025 035c Mobility Radeon HD 5650 1025 035d Mobility Radeon HD 5650 1025 035e Mobility Radeon HD 5650 1025 0360 Mobility Radeon HD 5650 1025 0362 Mobility Radeon HD 5650 1025 0364 Mobility Radeon HD 5650 1025 0365 Mobility Radeon HD 5650 1025 0366 Mobility Radeon HD 5650 1025 0367 Mobility Radeon HD 5650 1025 0368 Mobility Radeon HD 5650 1025 036c Mobility Radeon HD 5650 1025 036d Mobility Radeon HD 5650 1025 036e Mobility Radeon HD 5650 1025 036f Mobility Radeon HD 5650 1025 0372 Mobility Radeon HD 5650 1025 0373 Mobility Radeon HD 5650 1025 0377 Mobility Radeon HD 5650 1025 0378 Mobility Radeon HD 5650 1025 0379 Mobility Radeon HD 5650 1025 037a Mobility Radeon HD 5650 1025 037b Mobility Radeon HD 5650 1025 037e Mobility Radeon HD 5650 1025 037f Mobility Radeon HD 5650 1025 0382 Mobility Radeon HD 5650 1025 0383 Mobility Radeon HD 5650 1025 0384 Mobility Radeon HD 5650 1025 0385 Mobility Radeon HD 5650 1025 0386 Mobility Radeon HD 5650 1025 0387 Mobility Radeon HD 5650 1025 0388 Mobility Radeon HD 5650 1025 038b Mobility Radeon HD 5650 1025 038c Mobility Radeon HD 5650 1025 039a Mobility Radeon HD 5650 1025 0411 Mobility Radeon HD 5650 1025 0412 Mobility Radeon HD 5650 1025 0418 Mobility Radeon HD 5650 1025 0419 Mobility Radeon HD 5650 1025 0420 Mobility Radeon HD 5650 1025 0421 Mobility Radeon HD 5650 1025 0425 Mobility Radeon HD 5650 1025 042a Mobility Radeon HD 5650 1025 042e Mobility Radeon HD 5650 1025 042f Mobility Radeon HD 5650 1025 0432 Mobility Radeon HD 5650 1025 0433 Mobility Radeon HD 5650 1025 0442 Mobility Radeon HD 5650 1025 044c Mobility Radeon HD 5650 1025 044e Mobility Radeon HD 5650 1025 0451 Mobility Radeon HD 5650 1025 0454 Mobility Radeon HD 5650 1025 0455 Mobility Radeon HD 5650 1025 0475 Mobility Radeon HD 5650 1025 0476 Mobility Radeon HD 5650 1025 0487 Mobility Radeon HD 5650 1025 0489 Mobility Radeon HD 5650 1025 0498 Mobility Radeon HD 5650 1025 0517 Radeon HD 6550M 1025 051a Radeon HD 6550M 1025 051b Radeon HD 6550M 1025 051c Radeon HD 6550M 1025 051d Radeon HD 6550M 1025 0525 Radeon HD 6550M 1025 0526 Radeon HD 6550M 1025 052b Radeon HD 6550M 1025 052c Radeon HD 6550M 1025 053c Radeon HD 6550M 1025 053d Radeon HD 6550M 1025 053e Radeon HD 6550M 1025 053f Radeon HD 6550M 1025 0607 Radeon HD 6550M 1028 041b Mobility Radeon HD 5650 1028 0447 Mobility Radeon HD 5650 1028 0448 Mobility Radeon HD 5650 1028 0456 Mobility Radeon HD 5650 1028 0457 Mobility Radeon HD 5650 103c 1436 Mobility Radeon HD 5650 103c 1437 Mobility Radeon HD 5650 103c 1440 Mobility Radeon HD 5650 103c 1448 Mobility Radeon HD 5650 103c 1449 Mobility Radeon HD 5650 103c 144a Mobility Radeon HD 5650 103c 144b Mobility Radeon HD 5650 103c 147b Mobility Radeon HD 5650 103c 149c Mobility Radeon HD 5650 103c 149e Mobility Radeon HD 5650 103c 1521 Madison Pro [FirePro M5800] 1043 1bc2 Mobility Radeon HD 5650 104d 9071 Mobility Radeon HD 5650 104d 9077 Mobility Radeon HD 5650 104d 9081 Mobility Radeon HD 5650 1179 fd00 Mobility Radeon HD 5650 1179 fd12 Mobility Radeon HD 5650 1179 fd1a Mobility Radeon HD 5650 1179 fd30 Mobility Radeon HD 5650 1179 fd31 Mobility Radeon HD 5650 1179 fd50 Mobility Radeon HD 5650 1179 fd52 Radeon HD 6530M 1179 fd63 Radeon HD 6530M 1179 fd65 Radeon HD 6530M 1179 fdd0 Mobility Radeon HD 5650 1179 fdd2 Radeon HD 6530M 144d c07e Mobility Radeon HD 5650 144d c085 Mobility Radeon HD 5650 14c0 0043 Mobility Radeon HD 5650 14c0 004d Mobility Radeon HD 5650 17aa 3928 Mobility Radeon HD 5650 17aa 3951 Mobility Radeon HD 5650 17aa 3977 Radeon HD 6550M 68c7 Pinewood [Mobility Radeon HD 5570/6550A] 1462 2241 Mobility Radeon HD 5570 1462 2243 Mobility Radeon HD 5570 1462 2244 Mobility Radeon HD 5570 1462 2245 Radeon HD 6550A 1462 2246 Radeon HD 6550A 68c8 Redwood XT GL [FirePro V4800] 68c9 Redwood PRO GL [FirePro V3800] 13cc 3d1d MXRT-2400 68d8 Redwood XT [Radeon HD 5670/5690/5730] 1028 68e0 Radeon HD 5670 174b 5690 Radeon HD 5690 174b 5730 Radeon HD 5730 174b e151 Radeon HD 5670 1787 3000 Radeon HD 5730 17af 3010 Radeon HD 5730 17af 3011 Radeon HD 5690 68d9 Redwood PRO [Radeon HD 5550/5570/5630/6510/6610/7570] 103c 6870 Radeon HD 5570 103c 6872 Radeon HD 5570 1043 03ce Radeon HD 5550 1462 2151 Radeon HD 5570 1462 2240 Radeon HD 5570 148c 3000 Radeon HD 6510 148c 3001 Radeon HD 6610 1545 5550 Radeon HD 5550 1545 7570 Radeon HD 7570 1642 3985 Radeon HD 5570 1642 3996 Radeon HD 5570 174b 3000 Radeon HD 6510 174b 6510 Radeon HD 6510 174b 6610 Radeon HD 6610 174b e142 Radeon HD 5570 1787 3000 Radeon HD 6510 17af 3000 Radeon HD 6510 17af 3010 Radeon HD 5630 68da Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570] 1462 8071 VR5550-MD1G (Radeon HD 5550) 148c 3000 Radeon HD 6390 148c 3001 Radeon HD 6490 1545 7570 Radeon HD 7570 174b 3000 Radeon HD 6390 174b 5570 Radeon HD 5570 174b 5630 Radeon HD 5630 174b 6490 Radeon HD 6490 1787 3000 Radeon HD 5630 17af 3000 Radeon HD 6390 17af 3010 Radeon HD 5630 68de Redwood 68e0 Park [Mobility Radeon HD 5430/5450/5470] 1028 0404 Mobility Radeon HD 5450 1028 0414 Mobility Radeon HD 5450 1028 0434 Mobility Radeon HD 5450 103c 1433 Mobility Radeon HD 5450 103c 1434 Mobility Radeon HD 5450 103c 1469 Mobility Radeon HD 5450 103c 146b Mobility Radeon HD 5450 103c 1486 TouchSmart tm2-2050er discrete GPU (Mobility Radeon HD 5450) 103c 1622 Mobility Radeon HD 5450 103c 1623 Mobility Radeon HD 5450 103c eeee Mobility Radeon HD 5450 104d 9076 Mobility Radeon HD 5450 1682 304e Caicos [Radeon HD 5450] 1682 6000 Caicos [Radeon HD 5450] 17aa 9e52 FirePro M3800 17aa 9e53 FirePro M3800 68e1 Park [Mobility Radeon HD 5430] 1043 041f Caicos [Radeon HD 7350] 1043 3000 Caicos [Radeon HD 5450] 148c 3000 Caicos [Radeon HD 5450] 148c 3001 Caicos [Radeon HD 6230] 148c 3002 Caicos [Radeon HD 6250] 148c 3003 Caicos [Radeon HD 6350] 148c 7350 Caicos [Radeon HD 7350] 148c 8350 Caicos [Radeon HD 8350] 1545 5450 Caicos [Radeon HD 5450] 1545 7350 Caicos [Radeon HD 7350] 1682 3000 Caicos [Radeon HD 5450] 1682 6000 Caicos [Radeon HD 5450] 1682 7350 Caicos [Radeon HD 7350] 174b 3000 Caicos [Radeon HD 5450] 174b 5470 Caicos [Radeon HD 5470] 174b 6000 Caicos [Radeon HD 5450] 174b 6230 Caicos [Radeon HD 6230] 174b 6350 Caicos [Radeon HD 6350] 174b 7350 Caicos [Radeon HD 7350] 1787 3000 Caicos [Radeon HD 5450] 17af 3000 Caicos [Radeon HD 5450] 17af 3001 Caicos [Radeon HD 6230] 17af 3014 Caicos [Radeon HD 6350] 17af 3015 Caicos [Radeon HD 7350] 17af 8350 Caicos [Radeon HD 8350 OEM] 68e4 Robson CE [Radeon HD 6370M/7370M] 1019 2386 Radeon HD 6350M 1019 2387 Radeon HD 6350M 1019 238d Radeon HD 6370M 1019 238e Radeon HD 6370M 1025 0382 Radeon HD 6370M 1025 0489 Radeon HD 6370M 1025 048a Radeon HD 6370M 1025 048b Radeon HD 6370M 1025 048c Radeon HD 6370M 1028 04c1 Radeon HD 6370M 1028 04ca Radeon HD 6370M 1028 04cc Radeon HD 6370M 1028 04cd Radeon HD 6370M 1028 04d7 Radeon HD 6370M 103c 1411 Radeon HD 6370M 103c 1421 Radeon HD 6370M 103c 1426 Radeon HD 6370M 103c 1428 Radeon HD 6370M 103c 142a Radeon HD 6370M 103c 142b Radeon HD 6370M 103c 143a Radeon HD 6370M 103c 143c Radeon HD 6370M 103c 1445 Radeon HD 6370M 103c 162c Radeon HD 6370M 103c 162d Radeon HD 6370M 103c 162e Radeon HD 6370M 103c 162f Radeon HD 6370M 103c 1639 Radeon HD 6370M 103c 163a Radeon HD 6370M 103c 163b Radeon HD 6370M 103c 163c Radeon HD 6370M 103c 163d Radeon HD 6370M 103c 163e Radeon HD 6370M 103c 163f Radeon HD 6370M 103c 1641 Radeon HD 6370M 103c 1643 Radeon HD 6370M 103c 3578 Radeon HD 6370M 103c 357a Radeon HD 6370M 103c 3673 Radeon HD 6370M 103c 3675 Radeon HD 6370M 1043 1c92 Radeon HD 6370M 1043 84a1 Radeon HD 6370M 1043 84ad Radeon HD 6370M 104d 9081 Radeon HD 6370M 1545 7350 Cedar [Radeon HD 7350] 1558 4510 Radeon HD 6370M 1558 5505 Radeon HD 6370M 174b 5450 Cedar [Radeon HD 5450] 17aa 21dd Radeon HD 6370M 17aa 21e9 Radeon HD 6370M 17aa 3971 Radeon HD 6370M 17aa 3972 Radeon HD 7370M 17aa 397a Radeon HD 6370M/7370M 17aa 397b Radeon HD 6370M/7370M 17aa 397f Radeon HD 7370M 68e5 Robson LE [Radeon HD 6330M] 1179 fd3c Radeon HD 6330M 1179 fd50 Radeon HD 6330M 1179 fd52 Radeon HD 6330M 1179 fd63 Radeon HD 6330M 1179 fd65 Radeon HD 6330M 1179 fd73 Radeon HD 6330M 1179 fd75 Radeon HD 6330M 1179 fdd0 Radeon HD 6330M 1179 fdd2 Radeon HD 6330M 1179 fdea Radeon HD 6330M 1179 fdf8 Radeon HD 6330M 148c 5450 Cedar [Radeon HD 5450] 148c 6350 Cedar [Radeon HD 6350] 148c 7350 Cedar [Radeon HD 7350] 148c 8350 Cedar [Radeon HD 8350] 1545 7350 Cedar [Radeon HD 7350] 68e8 Cedar 68e9 Cedar [ATI FirePro (FireGL) Graphics Adapter] 68f1 Cedar GL [FirePro 2460] 68f2 Cedar GL [FirePro 2270] 68f8 Cedar [Radeon HD 7300 Series] 68f9 Cedar [Radeon HD 5000/6000/7350/8350 Series] 1019 0001 Radeon HD 5450 1019 0002 Radeon HD 5450 1019 0019 Radeon HD 6350 1025 0518 Radeon HD 5450 1025 0519 Radeon HD 5450 1028 010e XPS 8300 1028 2126 Radeon HD 6350 103c 2126 Radeon HD 6350 103c 2aac Radeon HD 5450 103c 2aae Radeon HD 5450 103c 3580 Radeon HD 5450 1043 0386 Radeon HD 5450 1043 03c2 EAH5450 SILENT/DI/512MD2 (LP) # GV-R545SC-1GI 1458 21d8 Radeon HD 5450 1GB DDR3 Silent 1462 2130 Radeon HD 5450 1462 2131 Radeon HD 5450 1462 2133 Radeon HD 6350 1462 2180 Radeon HD 5450 1462 2181 Radeon HD 5450 1462 2182 Radeon HD 6350 1462 2183 Radeon HD 6350 1462 2230 Radeon HD 5450 1462 2231 Radeon HD 5450 1462 2495 Radeon HD 6350 148c 3001 Radeon HD 5530/6250 148c 3002 Radeon HD 6290 148c 3003 Radeon HD 6230 148c 3004 Radeon HD 6350 148c 7350 Radeon HD 7350 148c 8350 Radeon HD 8350 1545 7350 Radeon HD 7350 1642 3983 Radeon HD 5450 1642 3984 Radeon HD 6350 1642 3987 Radeon HD 6350 1642 3997 Radeon HD 5450 1642 3a05 Radeon HD 5450 1642 3b31 Radeon HD 6350A 1682 3270 Radeon HD 7350 174b 3000 Radeon HD 6230 174b 3987 Radeon HD 6350 174b 5470 Radeon HD 5470 174b 5490 Radeon HD 5490 174b 5530 Radeon HD 5530 174b 6230 Radeon HD 6230 174b 6250 Radeon HD 6250 174b 6290 Radeon HD 6290 174b 6350 Radeon HD 6350 174b 7350 Radeon HD 7350 174b 8350 Radeon HD 8350 174b e127 Radeon HD 5450 174b e145 Radeon HD 5450 174b e153 Radeon HD 5450 1787 3000 Radeon HD 5470 1787 3001 Radeon HD 5530 1787 3002 Radeon HD 5490 17aa 3602 Radeon HD 5450 17aa 3603 Radeon HD 5450 17aa 360f Radeon HD 5450 17aa 3619 Radeon HD 5450 17af 3000 Radeon HD 6250 17af 3001 Radeon HD 6230 17af 3002 Radeon HD 6290 17af 3011 Radeon HD 5470 17af 3012 Radeon HD 5490 17af 3013 Radeon HD 5470 17af 3014 Radeon HD 6350 68fa Cedar [Radeon HD 7350/8350 / R5 220] 1019 0019 Radeon HD 7350 1019 0021 Radeon HD 7350 1019 0022 Radeon HD 7350 1019 0026 Radeon HD 8350 103c 2adf Radeon HD 7350A 103c 2ae8 Radeon HD 7350A 1043 8350 Radeon HD 8350 1462 2128 Radeon HD 7350 1462 2184 Radeon HD 7350 1462 2186 Radeon HD 7350 1462 2495 Radeon HD 7350 1462 b490 Radeon HD 7350 1642 3985 Radeon HD 7350 174b 3510 Radeon HD 8350 174b 3521 Radeon R5 220 174b 3522 Radeon R5 220 174b 7350 Radeon HD 7350 174b 8153 Radeon HD 8350 174b e127 Radeon HD 7350 174b e153 Radeon HD 7350 174b e180 Radeon HD 7350 17af 3015 Radeon HD 7350 68fe Cedar LE 6900 Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] 1025 1056 Radeon R7 M360 / R8 M365DX 1028 0640 Radeon R7 M260/M265 1028 0643 Radeon R7 M260/M265 1028 067f Radeon R7 M260 1028 0767 Radeon R7 M445 1028 0810 Radeon 530 1028 130a Radeon R7 M260 103c 2263 Radeon R7 M260 103c 2269 Radeon R7 M260 103c 22c6 Radeon R7 M260 103c 22c8 Radeon R7 M260 103c 2b45 Radeon R7 A360 103c 808c Radeon R7 M260 103c 8099 Radeon R7 M360 103c 80b5 Radeon R7 M360 103c 80b9 Radeon R7 M360 103c 811c Radeon R7 M340 103c 8226 Radeon R7 M440 10cf 1906 Radeon R7 M260 1170 9979 Radeon R7 M360 1179 f903 Radeon R7 M260 1179 f922 Radeon R7 M260 1179 f923 Radeon R7 M260 1179 f934 Radeon R7 M260 17aa 3822 Radeon R7 M360 17aa 3824 Radeon R7 M360 17aa 5021 Radeon R7 M260 6901 Topaz PRO [Radeon R5 M255] 103c 1318 Radeon R6 M255DX 6907 Meso XT [Radeon R5 M315] 6920 Amethyst [Radeon R9 M395/ M395X Mac Edition] 6921 Amethyst XT [Radeon R9 M295X / M390X] 6929 Tonga XT GL [FirePro S7150] 692b Tonga PRO GL [FirePro W7100] 13cc 3d2b MXRT-7600 692f Tonga XTV GL [FirePro S7150V] 6930 Tonga PRO [Radeon R9 380 4GB] 6938 Tonga XT / Amethyst XT [Radeon R9 380X / R9 M295X] 1043 04f5 Radeon R9 380X 1043 04f7 Radeon R9 380X 106b 013a Radeon R9 M295X Mac Edition 1458 22c8 Radeon R9 380X 148c 2350 Radeon R9 380X 1682 9385 Radeon R9 380X 174b e308 Radeon R9 380X Nitro 4G D5 17af 2006 Radeon R9 380X 6939 Tonga PRO [Radeon R9 285/380] 1462 2015 Radeon R9 380 Gaming 4G 148c 9380 Radeon R9 380 174b e308 Radeon R9 380 Nitro 4G D5 174b e315 Radeon R9 285 693b Tonga PRO GL [FirePro W7100 / Barco MXRT-7600] 694c Polaris 22 XT [Radeon RX Vega M GH] 694e Polaris 22 XL [Radeon RX Vega M GL] 694f Polaris 22 MGL XL [Radeon Pro WX Vega M GL] 6980 Polaris12 6981 Lexa XT [Radeon PRO WX 3200] 6985 Lexa XT [Radeon PRO WX 3100] 103c 83b5 Radeon PRO WX 3100 6986 Polaris12 6987 Lexa [Radeon 540X/550X/630 / RX 640 / E9171 MCM] 698f Lexa XT [Radeon PRO WX 3100 / Barco MXRT 4700] 6995 Lexa XT [Radeon PRO WX 2100] 699f Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X] 1028 1720 Radeon RX 550X 148c 2380 Lexa XL [Radeon RX 550] 17aa 5069 Thinkpad E480/E580 1da2 e367 Lexa PRO [Radeon RX 550] 69a0 Vega 12 69a1 Vega 12 69a2 Vega 12 69a3 Vega 12 69af Vega 12 [Radeon Pro Vega 20] 6fdf Polaris 20 XL [Radeon RX 580 2048SP] 700f RS100 AGP Bridge 7010 RS200/RS250 AGP Bridge 7100 R520 [Radeon X1800 XT] 7101 R520/M58 [Mobility Radeon X1800 XT] 7102 R520/M58 [Mobility Radeon X1800] 7104 R520 GL [FireGL V7200 / Barco MXTR-5100] 13cc 3d0a MXRT-5100 7109 R520 [Radeon X1800 XL] 1002 0322 All-in-Wonder X1800XL 1002 0d02 Radeon X1800 CrossFire Edition 710a R520 [Radeon X1800 GTO] 1002 0b12 Radeon X1800 GTO² 710b R520 [Radeon X1800 GTO] 710e R520 GL [FireGL V7300] 13cc 3d0c MXRT-5150 710f R520 GL [FireGL V7350] 13cc 3d0e MXRT-7100 7120 R520 [Radeon X1800] (Secondary) 7124 R520 GL [FireGL V7200] (Secondary) 13cc 3d0b MXRT-5100 (Secondary) 7129 R520 [Radeon X1800] (Secondary) 1002 0323 All-In-Wonder X1800 XL (Secondary) 1002 0d03 Radeon X1800 CrossFire Edition (Secondary) 712e R520 GL [FireGL V7300] (Secondary) 13cc 3d0d MXRT-5150 (Secondary) 712f R520 GL [FireGL V7350] (Secondary) 13cc 3d0f MXRT-7100 (Secondary) 7140 RV515 [Radeon X1300/X1550/X1600 Series] 7142 RV515 PRO [Radeon X1300/X1550 Series] 1002 0322 All-in-Wonder 2006 PCI-E Edition 1043 0142 EAX1300PRO/TD/256M 7143 RV505 [Radeon X1300/X1550 Series] 7145 RV515/M54 [Mobility Radeon X1400] 17aa 2006 Thinkpad T60 model 2007 7146 RV515 [Radeon X1300/X1550] 1002 0322 All-in-Wonder 2006 PCI-E Edition 1545 1996 Radeon X1300 512MB PCI-e 7147 RV505 [Radeon X1550 64-bit] 7149 RV515/M52 [Mobility Radeon X1300] 714a RV515/M52 [Mobility Radeon X1300] 7152 RV515 GL [FireGL V3300] 7153 RV515 GL [FireGL V3350] 715f RV505 CE [Radeon X1550 64-bit] 7162 RV515 PRO [Radeon X1300/X1550 Series] (Secondary) 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) 7163 RV505 [Radeon X1550 Series] (Secondary) 7166 RV515 [Radeon X1300/X1550 Series] (Secondary) 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) 1545 1997 Radeon X1300 512MB PCI-e (Secondary) 7167 RV515 [Radeon X1550 64-bit] (Secondary) 7172 RV515 GL [FireGL V3300] (Secondary) 7173 RV515 GL [FireGL V3350] (Secondary) 7181 RV516 [Radeon X1600/X1650 Series] 7183 RV516 [Radeon X1300/X1550 Series] 7186 RV516/M64 [Mobility Radeon X1450] 7187 RV516 [Radeon X1300/X1550 Series] 7188 RV516/M64-S [Mobility Radeon X2300] 103c 30c1 6910p 718a RV516/M64 [Mobility Radeon X2300] 718b RV516/M62 [Mobility Radeon X1350] 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 718c RV516/M62-CSP64 [Mobility Radeon X1350] 718d RV516/M64-CSP128 [Mobility Radeon X1450] 7193 RV516 [Radeon X1550 Series] 7196 RV516/M62-S [Mobility Radeon X1350] 719b RV516 GL [FireMV 2250] 13cc 3d12 MXRT-1150 13cc 3d14 MXRT-2150 719f RV516 [Radeon X1550 Series] 71a0 RV516 [Radeon X1300/X1550 Series] (Secondary) 71a1 RV516 [Radeon X1600/X1650 Series] (Secondary) 71a3 RV516 [Radeon X1300/X1550 Series] (Secondary) 71a7 RV516 [Radeon X1300/X1550 Series] (Secondary) 71bb RV516 GL [FireMV 2250] (Secondary) 13cc 3d13 MXRT-1150 (Secondary) 13cc 3d15 MXRT-2150 (Secondary) 71c0 RV530 [Radeon X1600 XT/X1650 GTO] 1002 e160 Radeon X1650 GTO 174b e160 Radeon X1650 GTO 71c1 RV535 [Radeon X1650 PRO] 174b 0880 Radeon X1700 FSC 71c2 RV530 [Radeon X1600 PRO] 71c3 RV530 [Radeon X1600 PRO] 71c4 RV530/M56 GL [Mobility FireGL V5200] 17aa 2007 ThinkPad T60p 71c5 RV530/M56-P [Mobility Radeon X1600] 103c 309f Compaq nx9420 Notebook 103c 30a3 Compaq NW8440 1043 10b2 A6J-Q008 106b 0080 MacBook Pro 71c6 RV530LE [Radeon X1600/X1650 PRO] 71c7 RV535 [Radeon X1650 PRO] 1787 3000 PowerColor X1650 PRO AGP 71ce RV530 [Radeon X1300 XT/X1600 PRO] 71d2 RV530 GL [FireGL V3400] 13cc 3d08 MXRT-2100 71d4 RV530/M66 GL [Mobility FireGL V5250] 71d5 RV530/M66-P [Mobility Radeon X1700] 71d6 RV530/M66-XT [Mobility Radeon X1700] 71de RV530/M66 [Mobility Radeon X1700/X2500] 71e0 RV530 [Radeon X1600] (Secondary) 174b e161 Radeon X1600 GTO (Secondary) 71e1 RV535 [Radeon X1650 PRO] (Secondary) 174b 0881 Radeon X1700 FSC (Secondary) 71e2 RV530 [Radeon X1600] (Secondary) 71e6 RV530 [Radeon X1650] (Secondary) 71e7 RV535 [Radeon X1650 PRO] (Secondary) 1787 3001 Radeon X1650 PRO AGP 71f2 RV530 GL [FireGL V3400] (Secondary) 13cc 3d09 MXRT-2100 (Secondary) 7210 RV550/M71 [Mobility Radeon HD 2300] 7211 RV550/M71 [Mobility Radeon X2300 HD] 7240 R580+ [Radeon X1950 XTX] 1002 0d02 Radeon X1950 CrossFire Edition 7244 R580+ [Radeon X1950 XT] 7248 R580 [Radeon X1950] 7249 R580 [Radeon X1900 XT] 1002 0412 All-In-Wonder X1900 1002 0b12 Radeon X1900 XT/XTX 1002 0d02 Radeon X1900 CrossFire Edition 1043 0160 Radeon X1900 XTX 512 MB GDDR3 724b R580 [Radeon X1900 GT] 1002 0b12 Radeon X1900 (Primary) 1002 0b13 Radeon X1900 (Secondary) 724e R580 GL [FireGL V7350] 7269 R580 [Radeon X1900 XT] (Secondary) 726b R580 [Radeon X1900 GT] (Secondary) 726e R580 [AMD Stream Processor] (Secondary) 7280 RV570 [Radeon X1950 PRO] 7288 RV570 [Radeon X1950 GT] 7291 RV560 [Radeon X1650 XT] 1462 0810 Radeon X1700 SE 7293 RV560 [Radeon X1650 GT] 72a0 RV570 [Radeon X1950 PRO] (Secondary) 72a8 RV570 [Radeon X1950 GT] (Secondary) 72b1 RV560 [Radeon X1650 XT] (Secondary) 72b3 RV560 [Radeon X1650 GT] (Secondary) 7300 Fiji [Radeon R9 FURY / NANO Series] 1002 0b35 FirePro S9300 X2 1002 0b36 Radeon R9 FURY X / NANO 1002 1b36 Radeon Pro Duo 1043 049e Radeon R9 FURY 1043 04a0 Radeon R9 FURY X 174b e329 Radeon R9 FURY 7310 Navi 10 [Radeon Pro W5700X] 7312 Navi 10 [Radeon Pro W5700] 7314 Navi 10 USB 7319 Navi 10 [Radeon Pro 5700 XT] 731b Navi 10 [Radeon Pro 5700] 731e TDC-150 731f Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] 1002 0b36 Reference RX 5700 XT 1458 2313 Radeon RX 5700 XT Gaming OC 1458 231d Radeon RX 5600 XT/REV 2.0 [Windforce 6GB OC] 148c 2398 AXRX 5700 XT 8GBD6-3DHE/OC [PowerColor Red Devil Radeon RX 5700 XT] 1682 5701 RX 5700 XT RAW II 1849 5102 RX5700 CLD 8GO [ASRock Challenger D RX 5700 OC] 1849 5120 Radeon RX 5600 XT 1da2 e409 Sapphire Technology Limited Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] 1da2 e410 Sapphire NITRO+ RX 5700 XT 1da2 e411 Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] 7340 Navi 14 [Radeon RX 5500/5500M / Pro 5500M] 106b 0210 Radeon Pro 5300M 7341 Navi 14 [Radeon Pro W5500] 7347 Navi 14 [Radeon Pro W5500M] 734f Navi 14 [Radeon Pro W5300M] 7360 Navi 12 [Radeon Pro 5600M/V520/BC-160] 7362 Navi 12 [Radeon Pro V520/V540] 7388 Arcturus GL-XL 738c Arcturus GL-XL [Instinct MI100] 738e Arcturus GL-XL [Instinct MI100] 73a1 Navi 21 [Radeon Pro V620] 73a2 Navi 21 Pro-XTA [Radeon Pro W6900X] 73a3 Navi 21 GL-XL [Radeon PRO W6800] 73a4 Navi 21 USB 73a5 Navi 21 [Radeon RX 6950 XT] # Reference 1002 0e3a Radeon RX 6950 XT 1849 5230 Navi 21 [ASRock OC Forumla Radeon RX 6950XT] 1849 5238 Navi 21 [ASRock Radeon RX 6950 XT Phantom Gaming OC] 1da2 441d Navi 21 [Sapphire Nitro+ Radeon RX 6950 XT] 1eae 6950 Navi 21 [XFX Speedster MERC319 Radeon RX 6950 XT] 73ab Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo] 73ae Navi 21 [Radeon Pro V620 MxGPU] 73af Navi 21 [Radeon RX 6900 XT] 148c 2414 Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate] 73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] 1002 0e3a Radeon RX 6900 XT 148c 2408 Red Devil AMD Radeon RX 6900 XT 1da2 438e NITRO+ Radeon RX 6800 XT 1da2 440f TOXIC RX 6900 XT 1da2 e437 Pulse Radeon RX 6800 1eae 6701 Speedster MERC 319 AMD Radeon RX 6800 XT Black 1eae 6901 Speedster MERC 319 AMD Radeon RX 6900 XT Black 73c3 Navi 22 73c4 Navi 22 USB 73ce Navi 22-XL SRIOV MxGPU 73df Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] 1043 16c2 Radeon RX 6800M 1458 2408 Radeon RX 6750 XT GAMING OC 12G 1462 3980 Radeon RX 6700 XT Mech 2X 12G [MSI] 148c 2409 Red Devil RX 6700 XT # Dual fan version 1849 5210 Radeon RX 6700 XT Challenger D 1849 5219 Radeon RX 6700 XT Challenger D 1849 5222 RX 6700 XT Challenger D OC # Gaming 1440/QHD Overclock edition with 12 Gb GDDR6 and PCIe 4.0 of Radeon RX 6700 XT by Sapphire PULSE manufactured on autumn 2022 / C1 reviseion 1da2 445e Radeon RX 6700 XT GAMING OC 12G [Sapphire PULSE] 1da2 465e Radeon RX 6750 XT PULSE OC 1da2 e445 Sapphire Radeon RX 6700 1eae 6601 Speedster QICK 319 RX 6700 XT 1eae 661a Radeon RX 6700 [SPEEDSTER SWFT 309] 73e0 Navi 23 73e1 Navi 23 WKS-XM [Radeon PRO W6600M] 73e3 Navi 23 WKS-XL [Radeon PRO W6600] 73e4 Navi 23 USB 73ef Navi 23 [Radeon RX 6650 XT / 6700S / 6800S] 1458 2405 Navi 23 [Radeon RX 6650 XT] # This is the refreshed MSI MECH series card equipped with the same Navi 23 GPU as ID 5021 1462 5027 RX 6650XT MECH 2X 1849 5236 RX 6650 XT Challenger D OC 73f0 Navi 33 [Radeon RX 7600M XT] 73ff Navi 23 [Radeon RX 6600/6600 XT/6600M] 1462 5021 MSI RX 6600XT MECH 2X 1462 5022 RX 6600 MECH 2X 148c 2412 PowerColor Red Devil RX 6600 XT 1849 5218 Radeon RX 6600 Challenger ITX 8GB 1da2 448e Radeon RX 6600 XT Pulse 7408 Aldebaran/MI200 [Instinct MI250X] 740c Aldebaran/MI200 [Instinct MI250X/MI250] 740f Aldebaran/MI200 [Instinct MI210] 7421 Navi 24 [Radeon PRO W6500M] 7422 Navi 24 [Radeon PRO W6400] 7423 Navi 24 [Radeon PRO W6300/W6300M] 7424 Navi 24 [Radeon RX 6300] 743f Navi 24 [Radeon RX 6400/6500 XT/6500M] 1da2 e457 PULSE AMD Radeon RX 6500 XT 7446 Navi 31 USB 7448 Navi 31 [Radeon Pro W7900] 744a Navi 31 [Radeon Pro W7900 Dual Slot] 744c Navi 31 [Radeon RX 7900 XT/7900 XTX/7900 GRE/7900M] 1002 0e3b RX 7900 XTX / RX 7900 GRE [XFX] 1043 0506 TUF Gaming Radeon RX 7900 XTX OC 148c 2425 HELLHOUND RX 7900 GRE 1849 5304 Radeon RX 7900 XTX 1da2 471e PULSE RX 7900 XTX 1da2 475e PULSE RX 7900 GRE 1da2 e471 NITRO+ RX 7900 XTX Vapor-X 1eae 7901 RX-79XMERCB9 [SPEEDSTER MERC 310 RX 7900 XTX] 1eae 790a RX-79GMERCBR [XFX RX 7900 GRE] 745e Navi 31 [Radeon Pro W7800] 7460 Navi32 GL-XL [AMD Radeon PRO V710] 7461 Navi 32 [AMD Radeon PRO V710] 7470 Navi 32 [Radeon PRO W7700] 747e Navi 32 [Radeon RX 7700 XT / 7800 XT] 148c 2427 RX 7800 XT [Hellhound / Red Devil] 7480 Navi 33 [Radeon RX 7600/7600 XT/7600M XT/7600S/7700S / PRO W7600] 1849 5313 RX 7600 Challenger OC 7481 Navi 33 [Radeon Graphics] 7483 Navi 33 [Radeon RX 7600M/7600M XT] 7487 Navi 33 [Radeon Graphics] 7489 Navi 33 [Radeon Pro W7500] 748b Navi 33 [Radeon Graphics] 7499 Navi 33 [Radeon RX 7400/7300/Pro W7400] 749f Navi 33 [Radeon RX 7500] 74a0 Aqua Vanjaram [Instinct MI300A] 74a1 Aqua Vanjaram [Instinct MI300X] 74a2 Aqua Vanjaram [Instinct MI308X] 74a5 Aqua Vanjaram [Instinct MI325X] 74a9 Aqua Vanjaram [Instinct MI300X HF] 74b5 Aqua Vanjaram [Instinct MI300X VF] 74b9 Aqua Vanjaram [Instinct MI325X VF] 74bd Aqua Vanjaram [Instinct MI300X HF] 7550 Navi 48 [Radeon RX 9070/9070 XT/9070 GRE] 148c 2435 Reaper Radeon RX 9070 XT 16GB GDDR6 (RX9070XT 16G-A) 1da2 e490 Navi 48 XTX [Sapphire Pulse Radeon RX 9070 XT] 7551 Navi 48 [Radeon AI PRO R9700] 7590 Navi 44 [Radeon RX 9060 XT] 7833 RS350 Host Bridge 7834 RS350 [Radeon 9100 PRO/XT IGP] 7835 RS350M [Mobility Radeon 9000 IGP] 7838 RS350 AGP Bridge 7910 RS690 Host Bridge 1179 ff50 Satellite P305D-S8995E 17f2 5000 KI690-AM2 Motherboard 7911 RS690/RS740 Host Bridge 1002 7910 RS690/RS740 Host Bridge 7912 RS690/RS740 PCI to PCI Bridge (Internal gfx) 7913 RS690 PCI to PCI Bridge (PCI Express Graphics Port 0) 7915 RS690 PCI to PCI Bridge (PCI Express Port 1) 7916 RS690 PCI to PCI Bridge (PCI Express Port 2) 7917 RS690 PCI to PCI Bridge (PCI Express Port 3) 1002 7910 RS690 PCI to PCI Bridge 7919 RS690 HDMI Audio [Radeon Xpress 1200 Series] 1179 7919 Satellite P305D-S8995E 17f2 5000 KI690-AM2 Motherboard 791e RS690 [Radeon X1200] 1462 7327 K9AG Neo2 17f2 5000 KI690-AM2 Motherboard 791f RS690M [Radeon Xpress 1200/1250/1270] 1179 ff50 Satellite P305D-S8995E 7930 RS600 Host Bridge 7932 RS600 PCI to PCI Bridge (Internal gfx) 7933 RS600 PCI to PCI Bridge (PCI Express Graphics Port 0) 7935 RS600 PCI to PCI Bridge (PCI Express Port 1) 7936 RS600 PCI to PCI Bridge (PCI Express Port 2) 7937 RS690 PCI to PCI Bridge (PCI Express Port 3) 793b RS600 HDMI Audio [Radeon Xpress 1250] 793f RS690M [Radeon Xpress 1200/1250/1270] (Secondary) 7941 RS600 [Radeon Xpress 1250] 7942 RS600M [Radeon Xpress 1250] 796e RS740 [Radeon 2100] 105b 0e13 N15235/A74MX mainboard 9400 R600 [Radeon HD 2900 PRO/XT] 1002 2552 Radeon HD 2900 XT 1002 3000 Radeon HD 2900 PRO 1002 3142 HIS Radeon HD 2900XT 512MB GDDR3 VIVO PCIe 9401 R600 [Radeon HD 2900 XT] 9403 R600 [Radeon HD 2900 PRO] 9405 R600 [Radeon HD 2900 GT] 940a R600 GL [FireGL V8650] 13cc 3d16 MXRT-7200 940b R600 GL [FireGL V8600] 940f R600 GL [FireGL V7600] 9440 RV770 [Radeon HD 4870] 9441 R700 [Radeon HD 4870 X2] 9442 RV770 [Radeon HD 4850] 1002 0502 MSI Radeon HD 4850 512MB GDDR3 174b e810 Radeon HD 4850 512MB GDDR3 9443 R700 [Radeon HD 4850 X2] 9444 RV770 GL [FirePro V8750] 9446 RV770 GL [FirePro V7760] 944a RV770/M98L [Mobility Radeon HD 4850] 944b RV770/M98 [Mobility Radeon HD 4850 X2] 944c RV770 LE [Radeon HD 4830] 944e RV770 CE [Radeon HD 4710] 174b 3261 Radeon HD 4810 9450 RV770 GL [FireStream 9270] 9452 RV770 GL [FireStream 9250] 9456 RV770 GL [FirePro V8700] 945a RV770/M98-XT [Mobility Radeon HD 4870] 9460 RV790 [Radeon HD 4890] 9462 RV790 [Radeon HD 4860] 946a RV770 GL [FirePro M7750] 9480 RV730/M96 [Mobility Radeon HD 4650/5165] 103c 3628 Mobility Radeon HD 4650 [dv6-1190en] 9488 RV730/M96-XT [Mobility Radeon HD 4670] 9489 RV730/M96 GL [Mobility FireGL V5725] 9490 RV730 XT [Radeon HD 4670] 174b e880 Radeon HD 4670 512MB GDDR3 Dual DVI-I/TVO 9491 RV730/M96-CSP [Radeon E4690] 9495 RV730 [Radeon HD 4600 AGP Series] 1002 0028 Radeon HD 4650/4670 AGP 1092 0028 Radeon HD 4670 AGP 512MB DDR2 1458 0028 Radeon HD 4650 AGP 1682 0028 Radeon HD 4650 AGP 174b 0028 Radeon HD 4650 AGP DDR2 9498 RV730 PRO [Radeon HD 4650] 949c RV730 GL [FirePro V7750] 13cc 3d1b MXRT-7300 949e RV730 GL [FirePro V5700] 949f RV730 GL [FirePro V3750] 94a0 RV740/M97 [Mobility Radeon HD 4830] 94a1 RV740/M97-XT [Mobility Radeon HD 4860] 94a3 RV740/M97 GL [FirePro M7740] 94b3 RV740 PRO [Radeon HD 4770] 94b4 RV740 PRO [Radeon HD 4750] 94c1 RV610 [Radeon HD 2400 PRO/XT] 1028 0211 Optiplex 755 1028 0d02 Optiplex 755 94c3 RV610 [Radeon HD 2400 PRO] 1028 0302 Radeon HD 2400 Pro 174b e400 Radeon HD 2400 PRO 18bc 3550 Radeon HD 2400 PRO 94c4 RV610 LE [Radeon HD 2400 PRO AGP] 94c5 RV610 [Radeon HD 2400 LE] 94c7 RV610 [Radeon HD 2350] 94c8 RV610/M74 [Mobility Radeon HD 2400 XT] 94c9 RV610/M72-S [Mobility Radeon HD 2400] 1002 94c9 Radeon HD2400 94cb RV610 [Radeon E2400] 94cc RV610 LE [Radeon HD 2400 PRO PCI] 9500 RV670 [Radeon HD 3850 X2] 9501 RV670 [Radeon HD 3870] 174b e620 Radeon HD 3870 9504 RV670/M88 [Mobility Radeon HD 3850] 9505 RV670 [Radeon HD 3690/3850] 148c 3000 Radeon HD 3850 174b 3000 Radeon HD 3690/3850 1787 3000 Radeon HD 3690 9506 RV670/M88 [Mobility Radeon HD 3850 X2] 9507 RV670 [Radeon HD 3830] 9508 RV670/M88-XT [Mobility Radeon HD 3870] 9509 RV670/M88 [Mobility Radeon HD 3870 X2] 950f R680 [Radeon HD 3870 X2] 9511 RV670 GL [FireGL V7700] 9513 RV670 [Radeon HD 3850 X2] 9515 RV670 PRO [Radeon HD 3850 AGP] 9519 RV670 GL [FireStream 9170] 9540 RV710 [Radeon HD 4550] 954f RV710 [Radeon HD 4350/4550] 1462 1618 R4350 MD512H (MS-V161) 9552 RV710/M92 [Mobility Radeon HD 4330/4350/4550] 1028 1103 M92 [Mobility Radeon HD 4330] # GV-R435OC-512I/FF1 1458 21ac Radeon HD 4350 # GV-R455HM-512I/F41 1458 21ed Radeon HD 4550 # 113-100928-J01 148c 3000 Radeon HD 4350 Go! Green 512MB GDDR3 # 113-2E172001-003 174b 3000 Radeon HD 4350/4550 HyperMemory DDR2 9553 RV710/M92 [Mobility Radeon HD 4530/4570/5145/530v/540v/545v] 1025 015e Mobility Radeon HD 4570 1025 017d Mobility Radeon HD 4570 1025 0205 Mobility Radeon HD 4570 / 545v 1025 0206 Mobility Radeon HD 4570 1025 0237 Mobility Radeon HD 4570 1028 02be Mobility Radeon HD 4570 / 545v 1028 02e8 Mobility Radeon HD 4530 103c 143c Mobility Radeon HD 545v 103c 1446 Mobility Radeon HD 545v 103c 3624 Mobility Radeon HD 4530 103c 3628 Mobility Radeon HD 4530 103c 3636 Mobility Radeon HD 4530 1043 1b32 Mobility Radeon HD 4570 1043 1b42 Mobility Radeon HD 4570 104d 9056 Mobility Radeon HD 4570 1179 ff82 Satellite L505-13T GPU (Mobility Radeon HD 5145) 144d c07f Mobility Radeon HD 545v 144d c571 Mobility Radeon HD 545v 1462 1006 Mobility Radeon HD 545v 17aa 2129 Mobility Radeon HD 545v 17aa 215b Mobility Radeon HD 545v 17aa 21bb Mobility Radeon HD 545v 9555 RV711/M93 [Mobility Radeon HD 4350/4550/530v/540v/545v / FirePro RG220] 103c 1411 ProBook 4720s GPU (Mobility Radeon HD 4350) 9557 RV711/M93 GL [FirePro RG220] 955f RV710/M92 [Mobility Radeon HD 4330] 9580 RV630 [Radeon HD 2600 PRO] 9581 RV630/M76 [Mobility Radeon HD 2600] 9583 RV630/M76 [Mobility Radeon HD 2600 XT/2700] 106b 0083 iMac 7,1 1734 1107 Mobility Radeon HD 2700 9586 RV630 XT [Radeon HD 2600 XT AGP] 9587 RV630 PRO [Radeon HD 2600 PRO AGP] 9588 RV630 XT [Radeon HD 2600 XT] 1458 216c Radeon HD 2600 XT, 256MB GDDR3, 2x DVI, TV-out, PCIe (GV-RX26T256H) 9589 RV630 PRO [Radeon HD 2600 PRO] 1787 3000 Radeon HD 3610 958a RV630 [Radeon HD 2600 X2] 958b RV630/M76 [Mobility Radeon HD 2600 XT] 958c RV630 GL [FireGL V5600] 13cc 3d18 MXRT-5200 958d RV630 GL [FireGL V3600] 9591 RV635/M86 [Mobility Radeon HD 3650] 1002 9591 Mobility Radeon HD 3650 9593 RV635/M86 [Mobility Radeon HD 3670] 9595 RV635/M86 GL [Mobility FireGL V5700] 9596 RV635 PRO [Radeon HD 3650 AGP] 1043 0028 EAH3650 SILENT/HTDI/512M/A 9597 RV635 PRO [Radeon HD 3650 AGP] 9598 RV635 [Radeon HD 3650/3750/4570/4580] 1002 9598 Mobility Radeon HD 3600 1043 01d6 EAH3650 Silent 1043 3001 Radeon HD 4570 174b 3001 Radeon HD 3750 174b 4580 RV635 PRO [Radeon HD 4580] 17af 3011 RV635 PRO [Radeon HD 4580] 9599 RV635 PRO [Radeon HD 3650 AGP] 95c0 RV620 PRO [Radeon HD 3470] 1002 95c0 Mobility Radeon HD 3470 1028 3243 C120D 95c2 RV620/M82 [Mobility Radeon HD 3410/3430] 95c4 RV620/M82 [Mobility Radeon HD 3450/3470] 1002 95c4 Mobility Radeon HD 3400 95c5 RV620 LE [Radeon HD 3450] 1028 0342 Radeon HD 3450 DMS-59 95c6 RV620 LE [Radeon HD 3450 AGP] 95c9 RV620 LE [Radeon HD 3450 PCI] 95cc RV620 GL [FirePro V3700] 95cd RV620 GL [FirePro 2450] 95cf RV620 GL [FirePro 2260] 960f RS780 HDMI Audio [Radeon 3000/3100 / HD 3200/3300] 1462 7596 760GM-E51(MS-7596) Motherboard 9610 RS780 [Radeon HD 3200] 1458 d000 GA-MA78GM-S2H Motherboard 9611 RS780C [Radeon 3100] 9612 RS780M [Mobility Radeon HD 3200] 9613 RS780MC [Mobility Radeon HD 3100] 9614 RS780D [Radeon HD 3300] 9615 RS780E [Radeon HD 3200] 9616 RS780L [Radeon 3000] # ID is probably a copy-paste error by a MSI developer from another mainboard, since all other ID numbers on this mainboard including the sub-device of this device has used subsystem ID 1462:7596 1462 7501 760GM-E51(MS-7596) Motherboard 9640 Sumo [Radeon HD 6550D] 9641 Sumo [Radeon HD 6620G] 9642 SuperSumo [Radeon HD 6370D] 9643 SuperSumo [Radeon HD 6380G] 9644 SuperSumo [Radeon HD 6410D] 9645 SuperSumo [Radeon HD 6410D] 9647 Sumo [Radeon HD 6520G] 9648 Sumo [Radeon HD 6480G] 9649 SuperSumo [Radeon HD 6480G] 964a Sumo [Radeon HD 6530D] 964b Sumo 964c Sumo 964e Sumo 964f Sumo 970f RS880 HDMI Audio [Radeon HD 4200 Series] 1019 2120 A785GM-M 1043 83a2 M4A785TD Motherboard 1043 843e M5A88-V EVO 9710 RS880 [Radeon HD 4200] 1019 2120 A785GM-M 1043 83a2 M4A785TD Motherboard 9712 RS880M [Mobility Radeon HD 4225/4250] 103c 1609 ProLiant MicroServer N36L 9713 RS880M [Mobility Radeon HD 4100] 9714 RS880 [Radeon HD 4290] 9715 RS880 [Radeon HD 4250] 1043 843e M5A88-V EVO # Radeon HD 6250 too? 9802 Wrestler [Radeon HD 6310] 174b 1001 PURE Fusion Mini 9803 Wrestler [Radeon HD 6310] 9804 Wrestler [Radeon HD 6250] 9805 Wrestler [Radeon HD 6250] 9806 Wrestler [Radeon HD 6320] 9807 Wrestler [Radeon HD 6290] 9808 Wrestler [Radeon HD 7340] 9809 Wrestler [Radeon HD 7310] 980a Wrestler [Radeon HD 7290] 9830 Kabini [Radeon HD 8400 / R3 Series] 1043 8623 AM1I-A Motherboard 9831 Kabini [Radeon HD 8400E] 9832 Kabini [Radeon HD 8330] 1849 9832 QC5000-ITX/PH 9833 Kabini [Radeon HD 8330E] 9834 Kabini [Radeon HD 8210] 9835 Kabini [Radeon HD 8310E] 9836 Kabini [Radeon HD 8280 / R3 Series] 9837 Kabini [Radeon HD 8280E] 9838 Kabini [Radeon HD 8240 / R3 Series] 9839 Kabini [Radeon HD 8180] 983d Temash [Radeon HD 8250/8280G] 9840 Kabini HDMI/DP Audio 1043 8623 AM1I-A Motherboard 1849 9840 QC5000-ITX/PH 9850 Mullins [Radeon R2/R3 Graphics] 9851 Mullins [Radeon R4/R5 Graphics] 1179 f928 Beema [Radeon R5 Graphics] 9852 Mullins [Radeon R2 Graphics] 9853 Mullins [Radeon R2 Graphics] 9854 Mullins [Radeon R3E Graphics] 9855 Mullins [Radeon R6 Graphics] 9856 Mullins [Radeon R1E/R2E Graphics] 9857 Mullins [Radeon APU XX-2200M with R2 Graphics] 9858 Mullins 9859 Mullins 985a Mullins 985b Mullins 985c Mullins 985d Mullins 985e Mullins 985f Mullins 9874 Wani [Radeon R5/R6/R7 Graphics] 1002 1871 Radeon R5 Graphics 1002 1e20 Radeon R7 Graphics 1028 06bd Radeon R6 Graphics 103c 2b44 Radeon R6 Graphics 103c 8221 Radeon R5 Graphics 103c 8223 Radeon R5 Graphics 103c 8238 Radeon R7 Graphics 103c 8353 Radeon R7 Graphics 1458 d000 Radeon R7 Graphics 17aa 5113 Radeon R6 Graphics 17aa 5116 Radeon R6 Graphics 17aa 5118 Radeon R5 Graphics 9890 Amur 98c0 Nolan 98e4 Stoney [Radeon R2/R3/R4/R5 Graphics] 9900 Trinity [Radeon HD 7660G] 103c 1985 Pavilion 17-e163sg Notebook PC # AMD A10-5800K CPU 9901 Trinity [Radeon HD 7660D] 9902 Trinity HDMI Audio Controller 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 9903 Trinity [Radeon HD 7640G] 103c 194e ProBook 455 G1 Notebook 103c 1952 ProBook 455 G1 Notebook 9904 Trinity [Radeon HD 7560D] 9905 Trinity GL [FirePro A300] 9906 Trinity GL [FirePro A320] 9907 Trinity [Radeon HD 7620G] 9908 Trinity [Radeon HD 7600G] 9909 Trinity [Radeon HD 7500G] 990a Trinity [Radeon HD 7500G] 990b Richland [Radeon HD 8650G] 990c Richland [Radeon HD 8670D] 990d Richland [Radeon HD 8550G] 990e Richland [Radeon HD 8570D] 990f Richland [Radeon HD 8610G] 9910 Trinity [Radeon HD 7660G] 9913 Trinity [Radeon HD 7640G] 9917 Trinity [Radeon HD 7620G] 9918 Trinity [Radeon HD 7600G] 9919 Trinity [Radeon HD 7500G] 991e Bishop [Xbox One S APU] 9920 Liverpool [Playstation 4 APU] 9921 Liverpool HDMI/DP Audio Controller 9922 Starshp 9923 Starsha2 [Kingston/Clayton] 9924 Gladius 9925 Kingston/Clayton/Jupiter/Gladius/Montego HDMI Controller 9926 Jupiter 9990 Trinity 2 [Radeon HD 7520G] 9991 Trinity 2 [Radeon HD 7540D] 9992 Trinity 2 [Radeon HD 7420G] 9993 Trinity 2 [Radeon HD 7480D] 9994 Trinity 2 [Radeon HD 7400G] 9995 Richland [Radeon HD 8450G] 9996 Richland [Radeon HD 8470D] 9997 Richland [Radeon HD 8350G] 9998 Richland [Radeon HD 8370D] 9999 Richland [Radeon HD 8510G] 999a Richland [Radeon HD 8410G] 999b Richland [Radeon HD 8310G] 999c Richland [Radeon HD 8650D] # AMD Quad-Core A8-Series APU A8-6500T with Radeon HD 8550D 999d Richland [Radeon HD 8550D] 99a0 Trinity 2 [Radeon HD 7520G] 99a2 Trinity 2 [Radeon HD 7420G] 99a4 Trinity 2 [Radeon HD 7400G] aa00 R600 HDMI Audio [Radeon HD 2900 GT/PRO/XT] aa08 RV630 HDMI Audio [Radeon HD 2600 PRO/XT / HD 3610] aa10 RV610 HDMI Audio [Radeon HD 2350 PRO / 2400 PRO/XT / HD 3410] 174b aa10 Radeon HD 2400 PRO 18bc aa10 Radeon HD 2400 PRO aa18 RV670/680 HDMI Audio [Radeon HD 3690/3800 Series] aa20 RV635 HDMI Audio [Radeon HD 3650/3730/3750] aa28 RV620 HDMI Audio [Radeon HD 3450/3470/3550/3570] aa30 RV770 HDMI Audio [Radeon HD 4850/4870] 174b aa30 Radeon HD 4850 512MB GDDR3 PCI-E Dual Slot Fansink aa38 RV710/730 HDMI Audio [Radeon HD 4000 series] 103c 3628 dv6-1190en aa50 Cypress HDMI Audio [Radeon HD 5830/5850/5870 / 6850/6870 Rebrand] aa58 Juniper HDMI Audio [Radeon HD 5700 Series] # 5500, 5600 and mobile 5700 series aa60 Redwood HDMI Audio [Radeon HD 5000 Series] 1025 033d Mobility Radeon HD 5650 1025 0347 Aspire 7740G aa68 Cedar HDMI Audio [Radeon HD 5400/6300/7300 Series] 1028 aa68 XPS 8300 aa80 Cayman/Antilles HDMI Audio [Radeon HD 6930/6950/6970/6990] aa88 Barts HDMI Audio [Radeon HD 6790/6850/6870 / 7720 OEM] aa90 Turks HDMI Audio [Radeon HD 6500/6600 / 6700M Series] 1028 04a3 Precision M4600 aa98 Caicos HDMI Audio [Radeon HD 6450 / 7450/8450/8490 OEM / R5 230/235/235X OEM] 1043 aa98 EAH6450 SILENT/DI/1GD3(LP) 174b aa98 Radeon HD 6450 1GB DDR3 aaa0 Tahiti HDMI Audio [Radeon HD 7870 XT / 7950/7970] aab0 Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series] aab8 Tiran HDMI Audio aac0 Tobago HDMI Audio [Radeon R7 360 / R9 360 OEM] 1043 aac0 R7260X-DC2OC-2GD5 aac8 Hawaii HDMI Audio [Radeon R9 290/290X / 390/390X] aad8 Tonga HDMI Audio [Radeon R9 285/380] 174b aad8 Radeon R9 285/380 HDMI Audio aae0 Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X] aae8 Fiji HDMI/DP Audio [Radeon R9 Nano / FURY/FURY X] aaf0 Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] aaf8 Vega 10 HDMI Audio [Radeon Vega 56/64] ab00 Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X] ab08 Polaris 22 HDMI Audio ab10 Lexa HDMI Audio ab18 Vega 12 HDMI Audio ab20 Vega 20 HDMI Audio [Radeon VII] ab28 Navi 21/23 HDMI/DP Audio Controller ab30 Navi 31 HDMI/DP Audio ab38 Navi 10 HDMI Audio ab40 Navi 48 HDMI/DP Audio Controller ac00 Theater 506 World-Wide Analog Decoder ac01 Theater 506 World-Wide Analog Decoder ac02 TV Wonder HD 600 PCIe ac03 Theater 506 PCIe ac04 Theater 506 USB ac05 Theater 506 USB ac06 Theater 506 External USB ac07 Theater 506 External USB ac08 Theater 506A World-Wide Analog Decoder + Demodulator ac09 Theater 506A World-Wide Analog Decoder + Demodulator ac0a Theater 506A PCIe ac0b Theater 506A PCIe ac0c Theater 506A USB ac0d Theater 506A USB ac0e Theater 506A External USB ac0f Theater 506A External USB ac12 Theater HD T507 (DVB-T) TV tuner/capture device cab0 RS100 Host Bridge cab2 RS200 Host Bridge cab3 RS250 Host Bridge cbb2 RS200 Host Bridge 1003 ULSI Systems 0201 US201 1004 VLSI Technology Inc 0005 82C592-FC1 0006 82C593-FC1 0007 82C594-AFC2 0008 82C596/7 [Wildcat] 0009 82C597-AFC2 000c 82C541 [Lynx] 000d 82C543 [Lynx] 0101 82C532 0102 82C534 [Eagle] 0103 82C538 0104 82C535 0105 82C147 0200 82C975 0280 82C925 0304 QSound ThunderBird PCI Audio 1004 0304 QSound ThunderBird PCI Audio 122d 1206 DSP368 Audio 1483 5020 XWave Thunder 3D Audio 0305 QSound ThunderBird PCI Audio Gameport 1004 0305 QSound ThunderBird PCI Audio Gameport 122d 1207 DSP368 Audio Gameport 1483 5021 XWave Thunder 3D Audio Gameport 0306 QSound ThunderBird PCI Audio Support Registers 1004 0306 QSound ThunderBird PCI Audio Support Registers 122d 1208 DSP368 Audio Support Registers 1483 5022 XWave Thunder 3D Audio Support Registers 0307 SAA7785 ThunderBird PCI Audio 1004 0703 Philips Rhythmic Edge PSC703 1004 0705 Philips Seismic Edge PSC705 1004 0706 Philips Acoustic Edge PSC706 0308 SAA7785 ThunderBird PCI Audio Gameport 0702 VAS96011 [Golden Gate II] 0703 Tollgate 1005 Avance Logic Inc. [ALI] 2064 ALG2032/2064 2128 ALG2364A 2301 ALG2301 2302 ALG2302 2364 ALG2364 2464 ALG2364A 2501 ALG2564A/25128A 1006 Reply Group 1007 NetFrame Systems Inc 1008 Epson 100a Phoenix Technologies 100b National Semiconductor Corporation 0001 DP83810 0002 87415/87560 IDE 000e 87560 Legacy I/O 000f FireWire Controller 0011 NS87560 National PCI System I/O 0012 USB Controller 0020 DP83815 (MacPhyter) Ethernet Controller 103c 0024 Pavilion ze4400 builtin Network 12d9 000c Aculab E1/T1 PMXc cPCI carrier card 1385 f311 FA311 / FA312 (FA311 with WoL HW) 1385 f312 FA312 (rev. A1) Fast Ethernet PCI Adapter 0021 PC87200 PCI to ISA Bridge 0022 DP83820 10/100/1000 Ethernet Controller 1186 4900 DGE-500T 1385 621a GA621 1385 622a GA622T 0028 Geode GX2 Host Bridge 002a CS5535 South Bridge 002b CS5535 ISA bridge 002d CS5535 IDE 002e CS5535 Audio 002f CS5535 USB 0030 Geode GX2 Graphics Processor 0035 DP83065 [Saturn] 10/100/1000 Ethernet Controller 0500 SCx200 Bridge 0501 SCx200 SMI 0502 SCx200, SC1100 IDE controller 100b 0502 IDE Controller 0503 SCx200, SC1100 Audio Controller 100b 0503 XpressAudio controller 0504 SCx200 Video 0505 SCx200 XBus 0510 SC1100 Bridge 100b 0500 GPIO and LPC support bridge 0511 SC1100 SMI & ACPI 100b 0501 SC1100 SMI & ACPI bridge 0515 SC1100 XBus 100b 0505 SC1100 PCI to XBus bridge d001 87410 IDE 100c Tseng Labs Inc 3202 ET4000/W32p rev A 3205 ET4000/W32p rev B 3206 ET4000/W32p rev C 3207 ET4000/W32p rev D 3208 ET6000 4702 ET6300 100d AST Research Inc 100e Weitek 9000 P9000 Viper 9001 P9000 Viper 9002 P9000 Viper 9100 P9100 Viper Pro/SE 1010 Video Logic, Ltd. 1011 Digital Equipment Corporation 0001 DECchip 21050 0002 DECchip 21040 [Tulip] 0004 DECchip 21030 [TGA] 0007 NVRAM [Zephyr NVRAM] 0008 KZPSA [KZPSA] 0009 DECchip 21140 [FasterNet] 1025 0310 21140 Fast Ethernet 10b8 2001 SMC9332BDT EtherPower 10/100 10b8 2002 SMC9332BVT EtherPower T4 10/100 10b8 2003 SMC9334BDT EtherPower 10/100 (1-port) 1109 2400 ANA-6944A/TX Fast Ethernet 1112 2300 RNS2300 Fast Ethernet 1112 2320 RNS2320 Fast Ethernet 1112 2340 RNS2340 Fast Ethernet 1113 1207 EN-1207-TX Fast Ethernet 1186 1100 DFE-500TX Fast Ethernet 1186 1112 DFE-570TX Fast Ethernet 1186 1140 DFE-660 Cardbus Ethernet 10/100 1186 1142 DFE-660 Cardbus Ethernet 10/100 11f6 0503 Freedomline Fast Ethernet 1282 9100 AEF-380TXD Fast Ethernet 1385 1100 FA310TX Fast Ethernet 2646 0001 KNE100TX Fast Ethernet 000a 21230 Video Codec 000d PBXGB [TGA2] 000f PCI-to-PDQ Interface Chip [PFI] FDDI (DEFPA) 1011 def1 FDDIcontroller/PCI (DEFPA) 103c def1 FDDIcontroller/PCI (3X-DEFPA) 0014 DECchip 21041 [Tulip Pass 3] 1186 0100 DE-530+ 0016 ATMworks 350 Adapter [OPPO] (DGLPB) 0017 PV-PCI Graphics Controller (ZLXp-L) 0018 Memory Channel interface 0019 DECchip 21142/43 1011 500a DE500A Fast Ethernet 1011 500b DE500B Fast Ethernet 1014 0001 10/100 EtherJet Cardbus 1025 0315 ALN315 Fast Ethernet 1033 800c PC-9821-CS01 100BASE-TX Interface Card 1033 800d PC-9821NR-B06 100BASE-TX Interface Card 103c 125a 10/100Base-TX (PCI) [A5506B] 108d 0016 Rapidfire 2327 10/100 Ethernet 108d 0017 GoCard 2250 Ethernet 10/100 Cardbus 10b8 2005 SMC8032DT Extreme Ethernet 10/100 10b8 8034 SMC8034 Extreme Ethernet 10/100 10ef 8169 Cardbus Fast Ethernet 1109 2a00 ANA-6911A/TX Fast Ethernet 1109 2b00 ANA-6911A/TXC Fast Ethernet 1109 3000 ANA-6922/TX Fast Ethernet 1113 1207 Cheetah Fast Ethernet 1113 2220 Cardbus Fast Ethernet 115d 0002 Cardbus Ethernet 10/100 1179 0203 Fast Ethernet 1179 0204 Cardbus Fast Ethernet 1186 1100 DFE-500TX Fast Ethernet 1186 1101 DFE-500TX Fast Ethernet 1186 1102 DFE-500TX Fast Ethernet 1186 1112 DFE-570TX Quad Fast Ethernet 11f0 4235 21143 [FASTLine-II UTP 10/100] 1259 2800 AT-2800Tx Fast Ethernet 1266 0004 Eagle Fast EtherMAX 12af 0019 NetFlyer Cardbus Fast Ethernet 1374 0001 Cardbus Ethernet Card 10/100 1374 0002 Cardbus Ethernet Card 10/100 1374 0007 Cardbus Ethernet Card 10/100 1374 0008 Cardbus Ethernet Card 10/100 1385 2100 FA510 1395 0001 10/100 Ethernet CardBus PC Card 13d1 ab01 EtherFast 10/100 Cardbus (PCMPC200) 1498 000a TPMC880-10 10/100Base-T and 10Base2 PMC Ethernet Adapter 1498 000b TPMC880-11 Single 10/100Base-T PMC Ethernet Adapter 1498 000c TPMC880-12 Single 10Base2 PMC Ethernet Adapter 14cb 0100 LNDL-100N 100Base-TX Ethernet PC Card 1668 2000 FastNet Pro (PE2000) 2646 0001 KNE100TX 2646 0002 KNE-CB4TX 8086 0001 EtherExpress PRO/100 Mobile CardBus 32 001a Farallon PN9000SX Gigabit Ethernet 0021 DECchip 21052 0022 DECchip 21150 0023 DECchip 21150 0024 DECchip 21152 0025 DECchip 21153 0026 DECchip 21154 0034 56k Modem Cardbus 1374 0003 56k Modem Cardbus 0045 DECchip 21553 0046 DECchip 21554 0e11 4050 Smart Array 4200 Controller 0e11 4051 Smart Array 4250ES Controller 0e11 4058 Smart Array 431 Controller 103c 10c2 NetRAID-4M 12d9 000a IP Telephony card 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard 9005 0364 5400S (Mustang) 9005 0365 5400S (Mustang) 9005 1364 Dell PowerEdge RAID Controller 2 9005 1365 Dell PowerEdge RAID Controller 2 e4bf 1000 CC8-1-BLUES 1065 StrongARM DC21285 1069 0020 DAC960P / DAC1164P 1012 Micronics Computers Inc 1013 Cirrus Logic 0038 GD 7548 0040 GD 7555 Flat Panel GUI Accelerator 004c GD 7556 Video/Graphics LCD/CRT Ctrlr 00a0 GD 5430/40 [Alpine] 00a2 GD 5432 [Alpine] 00a4 GD 5434-4 [Alpine] 00a8 GD 5434-8 [Alpine] 00ac GD 5436 [Alpine] 00b0 GD 5440 00b8 GD 5446 1af4 1100 QEMU Virtual Machine 00bc GD 5480 1013 00bc CL-GD5480 00d0 GD 5462 00d2 GD 5462 [Laguna I] 00d4 GD 5464 [Laguna] 00d5 GD 5464 BD [Laguna] 00d6 GD 5465 [Laguna] 13ce 8031 Barco Metheus 2 Megapixel, Dual Head 13cf 8031 Barco Metheus 2 Megapixel, Dual Head 00e8 GD 5436U 1100 CL 6729 1110 PD 6832 PCMCIA/CardBus Ctrlr 1112 PD 6834 PCMCIA/CardBus Ctrlr 1113 PD 6833 PCMCIA/CardBus Ctrlr 1200 GD 7542 [Nordic] 1202 GD 7543 [Viking] 1204 GD 7541 [Nordic Light] 4000 MD 5620 [CLM Data Fax Voice] 4400 CD 4400 6001 CS 4610/11 [CrystalClear SoundFusion Audio Accelerator] 1014 1010 CS4610 SoundFusion Audio Accelerator 6003 CS 4614/22/24/30 [CrystalClear SoundFusion Audio Accelerator] 1013 4280 Crystal SoundFusion PCI Audio Accelerator 1014 0153 ThinkPad 600X/A20m 153b 112e DMX XFire 1024 153b 1136 SiXPack 5.1+ 1681 0050 Game Theater XP 1681 a010 Gamesurround Fortissimo II 1681 a011 Gamesurround Fortissimo III 7.1 5053 3357 Santa Cruz 6004 CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator] 6005 Crystal CS4281 PCI Audio 1013 4281 Crystal CS4281 PCI Audio 10cf 10a8 Crystal CS4281 PCI Audio 10cf 10a9 Crystal CS4281 PCI Audio 10cf 10aa Crystal CS4281 PCI Audio 10cf 10ab Crystal CS4281 PCI Audio 10cf 10ac Crystal CS4281 PCI Audio 10cf 10ad Crystal CS4281 PCI Audio 10cf 10b4 Crystal CS4281 PCI Audio 1179 0001 Crystal CS4281 PCI Audio 14c0 000c Crystal CS4281 PCI Audio 1014 IBM 0002 PCI to MCA Bridge 0005 Processor to I/O Controller [Alta Lite] 0007 Processor to I/O Controller [Alta MP] 000a PCI to ISA Bridge (IBM27-82376) [Fire Coral] 0017 CPU to PCI Bridge 0018 TR Auto LANstreamer 001b GXT-150P 001c Carrera 001d SCSI-2 FAST PCI Adapter (82G2675) 0020 GXT1000 Graphics Adapter 0022 PCI to PCI Bridge (IBM27-82351) 002d Processor to I/O Controller [Python] 002e SCSI RAID Adapter [ServeRAID] 1014 002e ServeRAID-3x 1014 022e ServeRAID-4H 0031 2 Port Serial Adapter # AS400 iSeries PCI sync serial card 1014 0031 2721 WAN IOA - 2 Port Sync Serial Adapter 0036 PCI to 32-bit LocalBus Bridge [Miami] 0037 PowerPC to PCI Bridge (IBM27-82660) 003a CPU to PCI Bridge 003c GXT250P/GXT255P Graphics Adapter 003e 16/4 Token ring UTP/STP controller 1014 003e Token-Ring Adapter 1014 00cd Token-Ring Adapter + Wake-On-LAN 1014 00ce 16/4 Token-Ring Adapter 2 1014 00cf 16/4 Token-Ring Adapter Special 1014 00e4 High-Speed 100/16/4 Token-Ring Adapter 1014 00e5 16/4 Token-Ring Adapter 2 + Wake-On-LAN 1014 016d iSeries 2744 Card 0045 SSA Adapter 0046 MPIC interrupt controller 0047 PCI to PCI Bridge 0048 PCI to PCI Bridge 0049 Warhead SCSI Controller 004e ATM Controller (14104e00) 004f ATM Controller (14104f00) 0050 ATM Controller (14105000) 0053 25 MBit ATM Controller 0054 GXT500P/GXT550P Graphics Adapter 0057 MPEG PCI Bridge 0058 SSA Adapter [Advanced SerialRAID/X] 005e GXT800P Graphics Adapter 007c ATM Controller (14107c00) 007d 3780IDSP [MWave] 008b EADS PCI to PCI Bridge 008e GXT3000P Graphics Adapter 0090 GXT 3000P 1014 008e GXT-3000P 0091 SSA Adapter 0095 20H2999 PCI Docking Bridge 0096 Chukar chipset SCSI controller 1014 0097 iSeries 2778 DASD IOA 1014 0098 iSeries 2763 DASD IOA 1014 0099 iSeries 2748 DASD IOA 009f PCI 4758 Cryptographic Accelerator 00a5 ATM Controller (1410a500) 00a6 ATM 155MBPS MM Controller (1410a600) 00b7 GXT2000P Graphics Adapter 1092 00b8 FireGL1 AGP 32Mb 00b8 GXT2000P Graphics Adapter 00be ATM 622MBPS Controller (1410be00) 00dc Advanced Systems Management Adapter (ASMA) 00fc CPC710 Dual Bridge and Memory Controller (PCI-64) 0105 CPC710 Dual Bridge and Memory Controller (PCI-32) 010f Remote Supervisor Adapter (RSA) 0142 Yotta Video Compositor Input 1014 0143 Yotta Input Controller (ytin) 0144 Yotta Video Compositor Output 1014 0145 Yotta Output Controller (ytout) 0156 405GP PLB to PCI Bridge 015e 622Mbps ATM PCI Adapter 0160 64bit/66MHz PCI ATM 155 MMF 016e GXT4000P Graphics Adapter 0170 GXT6000P Graphics Adapter 1092 0172 Fire GL2 1092 0173 Fire GL3 1092 0174 Fire GL4 1092 0184 Fire GL4s 017d GXT300P Graphics Adapter 0180 Snipe chipset SCSI controller 1014 0241 iSeries 2757 DASD IOA 1014 0264 Quad Channel PCI-X U320 SCSI RAID Adapter (2780) 0188 EADS-X PCI-X to PCI-X Bridge 01a7 PCI-X to PCI-X Bridge 01bd ServeRAID Controller 1014 01bd ServeRAID 4Lx 1014 01be ServeRAID-4M 1014 01bf ServeRAID-4L 1014 0208 ServeRAID-4Mx 1014 020e ServeRAID-4Lx 1014 022e ServeRAID-4H 1014 0258 ServeRAID-5i 1014 0259 ServeRAID-5i 01c1 64bit/66MHz PCI ATM 155 UTP 01e6 Cryptographic Accelerator 01ef PowerPC 440GP PCI Bridge 1734 102b PCEAS PCI-X Dual Port ESCON Adapter 1734 10f8 PCEAT PCI-Express Dual Port ESCON Adapter 01ff 10/100 Mbps Ethernet 0219 Multiport Serial Adapter 1014 021a Dual RVX 1014 0251 Internal Modem/RVX 1014 0252 Quad Internal Modem 021b GXT6500P Graphics Adapter 021c GXT4500P Graphics Adapter 0233 GXT135P Graphics Adapter # Internal debugging card for CELL based systems 025a Drone card 028c Citrine chipset SCSI controller 1014 028d Dual Channel PCI-X DDR SAS RAID Adapter (572E) 1014 02be Dual Channel PCI-X DDR U320 SCSI RAID Adapter (571B) 1014 02c0 Dual Channel PCI-X DDR U320 SCSI Adapter (571A) 1014 030d PCI-X DDR Auxiliary Cache Adapter (575B) 02a1 Calgary PCI-X Host Bridge 02bd Obsidian chipset SCSI controller 1014 02c1 PCI-X DDR 3Gb SAS Adapter (572A/572C) 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/571D) 1014 0338 PCI-X DDR Auxiliary Cache Adapter (575C) 0302 Winnipeg PCI-X Host Bridge 0308 CalIOC2 PCI-E Root Port 0311 FC 5740/1954 4-Port 10/100/1000 Base-TX PCI-X Adapter for POWER 0314 ZISC 036 Neural accelerator card 032d Axon - Cell Companion Chip 1014 03a1 PCIe PowerXCell 8i Cell Accelerator Board 0339 Obsidian-E PCI-E SCSI controller 1014 030a PCIe 3Gb SAS RAID Adapter (574E) 1014 033a PCIe 3Gb SAS Adapter (57B3) 1014 035c PCIe x8 Internal 3Gb SAS adapter (57CC) 1014 0360 PCI-E Auxiliary Cache Adapter (57B7) 033d PCI-E IPR SAS Adapter (FPGA) 1014 033c PCIe2 1.8GB Cache 6Gb SAS RAID Adapter Tri-port (57B5) 1014 0353 PCIe2 3.1GB Cache 6Gb SAS RAID Enclosure (57C3) 1014 0354 PCIe2 6Gb SAS Adapter Dual-port (57C4) 1014 0356 PCIe2 1.8GB Cache 6Gb SAS RAID & SSD Adapter (574D) 1014 035f PCIe2 6Gb SAS Adapter Quad-port (57B2) 034a PCI-E IPR SAS Adapter (ASIC) 1014 033b PCIe2 6Gb SAS RAID Adapter Quad-port (57B4) 1014 0355 PCIe2 3.6GB Cache 6Gb SAS RAID Adapter Quad-port (57B1) 1014 0357 PCIe2 6Gb SAS Adapter Quad-port (57C6) 1014 035d PCIe3 1.8GB Cache RAID SAS Adapter Quad-port 6GB (57C8) 1014 035e PCIe2 3.6GB Cache 6Gb SAS RAID Adapter Quad-port (57CE) 1014 03fb PCIe3 28GB Cache RAID SAS Enclosure 6Gb x 16 (57D5) 1014 03fe PCIe3 x8 Cache SAS RAID Internal Adapter 6Gb (57D8) 1014 03ff PCIe3 x8 SAS RAID Internal Adapter 6Gb (57D7) 1014 0474 PCIe3 x16 Cache SAS RAID Internal Adapter 6Gb (57EB) 1014 0475 PCIe3 x16 SAS RAID Internal Adapter 6Gb (57EC) 1014 0499 PCIe3 x16 Cache SAS RAID Internal Adapter 6Gb (57ED) 1014 049a PCIe3 x16 SAS RAID Internal Adapter 6Gb (57EE) 1014 04c7 PCIe3 x 8 Cache SAS RAID Internal Adapter 6GB(2CCA) 1014 04c8 PCIe3 x 8 Cache SAS RAID Internal Adapter 6GB(2CD2) 1014 04c9 PCIe3 x 8 Cache SAS RAID Internal Adapter 6GB(2CCD) 03dc POWER8 Host Bridge (PHB3) 044b GenWQE Accelerator Adapter 04aa Flash Adapter 90 (PCIe2 0.9TB) 04c1 POWER9 Host Bridge (PHB4) 04da PCI-E IPR SAS+ Adapter (ASIC) 1014 04fb PCIe3 x16 20GB Cache 12Gb Quad SAS RAID+ Adapter(580B) 1014 04fc PCIe3 x8 12Gb Quad SAS RAID+ Adapter(580A) 04ed Internal Shared Memory (ISM) virtual PCI device 0611 4769 Cryptographic Adapter 06a2 4770 Cryptographic Adapter 06a7 Spyre Accelerator 06a8 Spyre Accelerator Virtual Function 3022 QLA3022 Network Adapter 4022 QLA3022 Network Adapter ffff MPIC-2 interrupt controller 1015 LSI Logic Corp of Canada 1016 ICL Personal Systems 1017 SPEA Software AG 5343 SPEA 3D Accelerator 1018 Unisys Systems 1019 Elitegroup Computer Systems 9602 RS780/RS880 PCI to PCI bridge (int gfx) 101a AT&T GIS (NCR) 0005 100VG ethernet 0007 BYNET BIC4G/2C/2G 101a 0019 BYNET BIC2C 101a 001c BYNET BIC2G 101a 001f BYNET BIC4G 0009 PQS Memory Controller 000a BYNET BPCI Adapter 000b BYNET 4 Port BYA Switch (BYA4P) 000c BYNET 4 Port BYA Switch (BYA4G) 0010 NCR AMC Memory Controller 1dc1 BYNET BIC2M/BIC4M/BYA4M 101a 0019 BIC2M 101a 001f BIC4M 101a 0ece BYA4M 1fa8 BYNET Multi-port BIC Adapter (XBIC Based) 101a 00c3 BYNET BIC2SE 101b Vitesse Semiconductor # Maxim VSC452 Super BMC Controller with Video 0452 VSC452 [SuperBMC] 101c Western Digital 0193 33C193A 0196 33C196A 0197 33C197A 0296 33C296A 3193 7193 3197 7197 3296 33C296A 4296 34C296 9710 Pipeline 9710 9712 Pipeline 9712 c24a 90C # ID for Newly Acquired Storage Products from Vitesse 101d Maxim Integrated Products 101e American Megatrends Inc. 0009 MegaRAID 428 Ultra RAID Controller (rev 03) 1960 MegaRAID 101e 0471 MegaRAID 471 Enterprise 1600 RAID Controller 101e 0475 MegaRAID 475 Express 500/500LC RAID Controller 101e 0477 MegaRAID 477 Elite 3100 RAID Controller 101e 0493 MegaRAID 493 Elite 1600 RAID Controller 101e 0494 MegaRAID 494 Elite 1650 RAID Controller 101e 0503 MegaRAID 503 Enterprise 1650 RAID Controller 101e 0511 MegaRAID 511 i4 IDE RAID Controller 101e 0522 MegaRAID 522 i4133 RAID Controller 1028 0471 PowerEdge RAID Controller 3/QC 1028 0475 PowerEdge RAID Controller 3/SC 1028 0493 PowerEdge RAID Controller 3/DC 1028 0511 PowerEdge Cost Effective RAID Controller ATA100/4Ch 103c 60e7 NetRAID-1M 103c 60e8 NetRaid 2M [AMI MegaRaid 493] 9010 MegaRAID 428 Ultra RAID Controller 9030 EIDE Controller 9031 EIDE Controller 9032 EIDE & SCSI Controller 9033 SCSI Controller 9040 Multimedia card 9060 MegaRAID 434 Ultra GT RAID Controller 9063 MegaRAC 101e 0767 Dell Remote Assistant Card 2 101f PictureTel 1020 Hitachi Computer Products 1021 OKI Electric Industry Co. Ltd. 1022 Advanced Micro Devices, Inc. [AMD] 1100 K8 [Athlon64/Opteron] HyperTransport Technology Configuration 1101 K8 [Athlon64/Opteron] Address Map 1102 K8 [Athlon64/Opteron] DRAM Controller 1103 K8 [Athlon64/Opteron] Miscellaneous Control 1110 Krackan Internal PCIe GPP Bridge 0 to Bus A 1111 Krackan Internal PCIe GPP Bridge 0 to Bus B 1112 Krackan Internal PCIe GPP Bridge 0 to Bus C 1113 Krackan PCIe Dummy Function 1116 Krackan PCIe Dummy Function 1117 Krackan PCIe Dummy Function 1122 Krackan Root Complex 1123 Krackan IOMMU 1200 Family 10h Processor HyperTransport Configuration 1201 Family 10h Processor Address Map 1202 Family 10h Processor DRAM Controller 1203 Family 10h Processor Miscellaneous Control 1204 Family 10h Processor Link Control 1248 Krackan Data Fabric; Function 0 1249 Krackan Data Fabric; Function 1 124a Krackan Data Fabric; Function 2 124b Krackan Data Fabric; Function 3 124c Krackan Data Fabric; Function 4 124d Krackan Data Fabric; Function 5 124e Krackan Data Fabric; Function 6 124f Krackan Data Fabric; Function 7 12b8 Strix Halo Data Fabric; Function 0 12b9 Strix Halo Data Fabric; Function 1 12ba Strix Halo Data Fabric; Function 2 12bb Strix Halo Data Fabric; Function 3 12bc Strix Halo Data Fabric; Function 4 12bd Strix Halo Data Fabric; Function 5 12be Strix Halo Data Fabric; Function 6 12bf Strix Halo Data Fabric; Function 7 12c0 Turin Data Fabric; Function 0 12c1 Turin Data Fabric; Function 1 12c2 Turin Data Fabric; Function 2 12c3 Turin Data Fabric; Function 3 12c4 Turin Data Fabric; Function 4 12c5 Turin Data Fabric; Function 5 12c6 Turin Data Fabric; Function 6 12c7 Turin Data Fabric; Function 7 1300 Family 11h Processor HyperTransport Configuration 1301 Family 11h Processor Address Map 1302 Family 11h Processor DRAM Controller 1303 Family 11h Processor Miscellaneous Control 1304 Family 11h Processor Link Control 1305 Griffin Function 5 1306 Griffin Function 6 1307 Griffin Function 7 1308 Kaveri Audio Controller 1314 Wrestler/Bheem/Ontario/Krishna Audio Controller 13e0 Ariel Root Complex 13e1 Ariel IOMMU 13e2 Ariel PCIe Dummy Host Bridge 13e3 Ariel PCIe GPP Bridge 13e4 Ariel PCIe Dummy Host Bridge 13e5 Ariel Internal PCIe GPP Bridge 0 to Bus A 13e6 Ariel Internal PCIe GPP Bridge 0 to Bus B 13e7 Ariel SMBus Controller 13e8 Ariel LPC Bridge 13e9 Ariel Internal GPU 13ea Ariel HD Audio Controller 13eb Ariel HD Audio Coprocessor 13ec Ariel Cryptographic Coprocessor 13ed Ariel USB 3.1 Type C: Gen2 x 1port + DP Alt Mode 13ee Ariel USB 3.1 Type A: Gen2 x 2 ports 13ef Ariel ZCN/MP4 13f0 Ariel Device 24: Function 0 13f1 Ariel Device 24: Function 1 13f2 Ariel Device 24: Function 2 13f3 Ariel Device 24: Function 3 13f4 Ariel Device 24: Function 4 13f5 Ariel Device 24: Function 5 13f6 Ariel Device 24: Function 6 13f7 Ariel Device 24: Function 7 1400 Family 15h (Models 10h-1fh) Processor Function 0 1401 Family 15h (Models 10h-1fh) Processor Function 1 1402 Family 15h (Models 10h-1fh) Processor Function 2 1403 Family 15h (Models 10h-1fh) Processor Function 3 1404 Family 15h (Models 10h-1fh) Processor Function 4 1405 Family 15h (Models 10h-1fh) Processor Function 5 1410 Family 15h (Models 10h-1fh) Processor Root Complex 103c 1985 Pavilion 17-e163sg Notebook PC 1412 Family 15h (Models 10h-1fh) Processor Root Port 1022 1234 Trinity A-series APU 1413 Family 15h (Models 10h-1fh) Processor Root Port 1414 Family 15h (Models 10h-1fh) Processor Root Port 1022 1234 Trinity A-series APU 1415 Family 15h (Models 10h-1fh) Processor Root Port 1416 Family 15h (Models 10h-1fh) Processor Root Port 1417 Family 15h (Models 10h-1fh) Processor Root Port 1418 Family 15h (Models 10h-1fh) Processor Root Port 1419 Family 15h (Models 10h-1fh) I/O Memory Management Unit 141a Family 15h (Models 30h-3fh) Processor Function 0 141b Family 15h (Models 30h-3fh) Processor Function 1 141c Family 15h (Models 30h-3fh) Processor Function 2 141d Family 15h (Models 30h-3fh) Processor Function 3 141e Family 15h (Models 30h-3fh) Processor Function 4 141f Family 15h (Models 30h-3fh) Processor Function 5 1422 Family 15h (Models 30h-3fh) Processor Root Complex 1423 Family 15h (Models 30h-3fh) I/O Memory Management Unit 1424 Family 15h (Models 30h-3fh) Processor Root Port 1425 Kaveri P2P Bridge for GFX PCIe Port [1:0] 1426 Family 15h (Models 30h-3fh) Processor Root Port 142e Liverpool Processor HT configuration 142f Liverpool Processor Address Maps 1430 Liverpool Processor DRAM configuration 1431 Liverpool Processor Misc configuration 1432 Liverpool Processor PM configuration 1433 Liverpool Processor NB Performance Monitor 1434 Liverpool Processor SPLL Configuration 1436 Liverpool Processor Root Complex 1437 Liverpool I/O Memory Management Unit 1438 Liverpool UMI PCIe Dummy Host Bridge 1439 Family 16h Processor Functions 5:1 143a Kingston/Clayton/Gladius/Montego Root Complex 143b Kingston/Clayton/Gladius/Montego P2P Bridge for UMI Link 1440 Matisse/Vermeer Data Fabric: Device 18h; Function 0 1441 Matisse/Vermeer Data Fabric: Device 18h; Function 1 1442 Matisse/Vermeer Data Fabric: Device 18h; Function 2 1443 Matisse/Vermeer Data Fabric: Device 18h; Function 3 1444 Matisse/Vermeer Data Fabric: Device 18h; Function 4 1445 Matisse/Vermeer Data Fabric: Device 18h; Function 5 1446 Matisse/Vermeer Data Fabric: Device 18h; Function 6 1447 Matisse/Vermeer Data Fabric: Device 18h; Function 7 1448 Renoir Device 24: Function 0 1449 Renoir Device 24: Function 1 144a Renoir Device 24: Function 2 144b Renoir Device 24: Function 3 144c Renoir Device 24: Function 4 144d Renoir Device 24: Function 5 144e Renoir Device 24: Function 6 144f Renoir Device 24: Function 7 1450 Family 17h (Models 00h-0fh) Root Complex 1451 Family 17h (Models 00h-0fh) I/O Memory Management Unit 1452 Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge ea50 ce19 mCOM10-L1900 1453 Family 17h (Models 00h-0fh) PCIe GPP Bridge 1454 Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B 1455 Zeppelin/Renoir PCIe Dummy Function 1456 Family 17h (Models 00h-0fh) Platform Security Processor (PSP) 3.0 Device 1457 Family 17h (Models 00h-0fh) HD Audio Controller 1458 XGMAC 10GbE Controller 1459 XGMAC 10GbE Controller 145a Zeppelin/Raven/Raven2 PCIe Dummy Function 145b Zeppelin Non-Transparent Bridge 145c Family 17h (Models 00h-0fh) USB 3.0 Host Controller 145d Zeppelin Switch Upstream (PCIE SW.US) 145e Zeppelin Switch Downstream (PCIE SW.DS) 145f Zeppelin USB 3.0 xHCI Compliant Host Controller 1460 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 0 1461 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 1 1462 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 2 1463 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 3 1464 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 4 1465 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 5 1466 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 6 1467 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 7 1468 Zeppelin Cryptographic Coprocessor NTBCCP 1470 Vega 10 PCIe Bridge 1471 Vega 10 PCIe Bridge 1480 Starship/Matisse Root Complex 1462 7c37 X570-A PRO motherboard 15d9 1b95 H12SSL-i 1849 1480 ROME2D32LM3 1481 Starship/Matisse IOMMU 1482 Starship/Matisse PCIe Dummy Host Bridge 1483 Starship/Matisse GPP Bridge 01de fff9 Gimlet Baseboard 1484 Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B] 1485 Starship/Matisse Reserved SPP 1486 Starship/Matisse Cryptographic Coprocessor PSPCPP 1487 Starship/Matisse HD Audio Controller 1462 9c37 X570-A PRO motherboard 1488 Starship Reserved SSP 1489 Starship Reserved SSP 148a Starship/Matisse PCIe Dummy Function 148b Starship/Matisse Non-Transparent Bridge 148c Starship USB 3.0 Host Controller 15d9 145c H12SSL-i 148d Starship/Matisse Switch Upstream (PCIE SW.US) 148e Starship/Matisse Switch Downstream (PCIE SW.DS) 148f Starship Reserved SSP 1490 Starship Device 24; Function 0 1491 Starship Device 24; Function 1 1492 Starship Device 24; Function 2 1493 Starship Device 24; Function 3 1494 Starship Device 24; Function 4 1495 Starship Device 24; Function 5 1496 Starship Device 24; Function 6 1497 Starship Device 24; Function 7 1498 Starship/Matisse PTDMA 1499 Starship/Matisse NVMe 149a Starship PCIe GPP Bridge [1:0] 149b Starship Reserved SSP 149c Matisse USB 3.0 Host Controller 1462 7c37 X570-A PRO motherboard 149d Vangogh CVIP 149e Genoa/Bergamo IOMMU 149f Genoa/Bergamo Dummy Host Bridge 14a4 Genoa/Bergamo Root Complex 14a5 Genoa/Bergamo GPP Bridge 14a6 Genoa/Bergamo RCEC 14a7 Genoa/Bergamo Internal PCIe GPP Bridge to Bus [D:B] 14aa Genoa/Bergamo GPP Bridge 14ab Genoa/Bergamo GPP Bridge 14ac Genoa/Bergamo Dummy Function 14ad Genoa/Bergamo Data Fabric; Function 0 14ae Genoa/Bergamo Data Fabric; Function 1 14af Genoa/Bergamo Data Fabric; Function 2 14b0 Genoa/Bergamo Data Fabric; Function 3 14b1 Genoa/Bergamo Data Fabric; Function 4 14b2 Genoa/Bergamo Data Fabric; Function 5 14b3 Genoa/Bergamo Data Fabric; Function 6 14b4 Genoa/Bergamo Data Fabric; Function 7 14b5 Family 17h-19h PCIe Root Complex 14b6 Family 17h-19h IOMMU 14b7 Family 17h-19h PCIe Dummy Host Bridge 14b8 Family 17h-19h PCIe GPP Bridge 14b9 Family 17h-19h Internal PCIe GPP Bridge 14ba Family 17h-19h PCIe GPP Bridge 14c1 Secondary vNTB # Server device 14ca Genoa CCP/PSP 4.0 Device 14cd Family 19h USB4/Thunderbolt PCIe tunnel 14d8 Raphael/Granite Ridge Root Complex 14d9 Raphael/Granite Ridge IOMMU 14da Raphael/Granite Ridge Dummy Host Bridge 14db Raphael/Granite Ridge GPP Bridge 14dc SDXI 14dd Raphael/Granite Ridge Internal GPP Bridge to Bus [C:A] 14de Raphael/Granite Ridge PCIe Dummy Function 14e0 Raphael/Granite Ridge Data Fabric; Function 0 14e1 Raphael/Granite Ridge Data Fabric; Function 1 14e2 Raphael/Granite Ridge Data Fabric; Function 2 14e3 Raphael/Granite Ridge Data Fabric; Function 3 14e4 Raphael/Granite Ridge Data Fabric; Function 4 14e5 Raphael/Granite Ridge Data Fabric; Function 5 14e6 Raphael/Granite Ridge Data Fabric; Function 6 14e7 Raphael/Granite Ridge Data Fabric; Function 7 14e8 Phoenix Root Complex 14e9 Phoenix IOMMU 14ea Phoenix Dummy Host Bridge 14eb Phoenix Internal GPP Bridge to Bus [C:A] 14ec Phoenix Dummy Function 14ed Phoenix GPP Bridge 14ee Phoenix GPP Bridge 14ef Family 19h USB4/Thunderbolt PCIe tunnel 14f0 Phoenix Data Fabric; Function 0 14f1 Phoenix Data Fabric; Function 1 14f2 Phoenix Data Fabric; Function 2 14f3 Phoenix Data Fabric; Function 3 14f4 Phoenix Data Fabric; Function 4 14f5 Phoenix Data Fabric; Function 5 14f6 Phoenix Data Fabric; Function 6 14f7 Phoenix Data Fabric; Function 7 1502 AMD IPU Device 1507 Strix/Strix Halo Root Complex 1508 Strix/Strix Halo IOMMU 1509 Strix/Strix Halo Dummy Host Bridge 150a Strix/Strix Halo PCIe USB4 Bridge 150b Strix/Strix Halo GPP Bridge 150c Strix/Strix Halo Internal GPP Bridge to Bus [C:A] 150d Strix/Strix Halo PCIe Dummy Function 1510 Family 14h Processor Root Complex 174b 1001 PURE Fusion Mini 1512 Family 14h Processor Root Port 1513 Family 14h Processor Root Port 1514 Family 14h Processor Root Port 1515 Family 14h Processor Root Port 1516 Family 14h Processor Root Port 151c USB4 Router 0 151d USB4 Router 1 1530 Family 16h Processor Function 0 1531 Family 16h Processor Function 1 1532 Family 16h Processor Function 2 1533 Family 16h Processor Function 3 1534 Family 16h Processor Function 4 1535 Family 16h Processor Function 5 1536 Family 16h Processor Root Complex 1043 8623 AM1I-A Motherboard 1849 1536 QC5000-ITX/PH 1537 Kabini/Mullins PSP-Platform Security Processor 1538 Family 16h Processor Function 0 1539 Kabini P2P Bridge for PCIe Ports[4:0] 153a Turin Root Complex 153b Turin IOMMU 153c Turin RCEC 153d Turin PCIe Dummy Host Bridge 153e Turin GPP Bridge 01de fff8 Cosmo Baseboard 1540 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky HT Configuration 1541 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Address Maps 1542 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky DRAM Configuration 1543 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Miscellaneous Configuration 1544 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky PM Configuration 1545 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky NB Performance Monitor 1546 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Root Complex 1547 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky IOMMU 1548 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky UMI PCIe Dummy Host Bridge 1549 Kryptos/Cato/Garfield/Garfield+ P2P Bridge for PCIe Port [3:0] 154a Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Audio Processor 154b Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Security Processor 154d Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky/Anubis HDMI Controller 154f Anubis Audio Processor 1550 Garfield+/Arlene/Pooky/Anubis SPLL Configuration 1553 Arlene/Pooky P2P Bridge for PCIE (3:0) 1554 Turin GPP Bridge 1555 Turin Internal PCIe GPP Bridge to Bus [D:C] 1556 Turin PCIe Dummy Function 1557 Turin USB 3.1 xHCI 1559 Turin Secondary PCIe Dummy Function 155b Anubis Root Complex 155c Anubis IOMMU 155d Anubis UMI PCIe Dummy Bridge 155e Anubis P2P Bridge for PCIe Ports [4:0] 1560 Anubis Security Processor 1566 Family 16h (Models 30h-3fh) Processor Root Complex 1567 Mullins IOMMU 156b Family 16h (Models 30h-3fh) Host Bridge 156e Turin CCP/ASP 1570 Family 15h (Models 60h-6fh) Processor Function 0 1571 Family 15h (Models 60h-6fh) Processor Function 1 1572 Family 15h (Models 60h-6fh) Processor Function 2 1573 Family 15h (Models 60h-6fh) Processor Function 3 1574 Family 15h (Models 60h-6fh) Processor Function 4 1575 Family 15h (Models 60h-6fh) Processor Function 5 1576 Family 15h (Models 60h-6fh) Processor Root Complex 1577 Family 15h (Models 60h-6fh) I/O Memory Management Unit 1578 Carrizo Platform Security Processor 1579 Carrizo Audio Processor 157a Family 15h (Models 60h-6fh) Audio Controller 157b Family 15h (Models 60h-6fh) Host Bridge 157c Family 15h (Models 60h-6fh) Processor Root Port 157d Carrizo Audio Dummy Host Bridge 157e Carrizo Audio Controller 1580 Family 16h (Models 30h-3fh) Processor Function 0 1581 Family 16h (Models 30h-3fh) Processor Function 1 1582 Family 16h (Models 30h-3fh) Processor Function 2 1583 Family 16h (Models 30h-3fh) Processor Function 3 1584 Family 16h (Models 30h-3fh) Processor Function 4 1585 Family 16h (Models 30h-3fh) Processor Function 5 1587 Strix Halo USB 3.1 xHCI 1588 Strix Halo USB 3.1 xHCI 1589 Strix Halo USB 3.1 xHCI 158b Strix Halo USB 3.1 xHCI 158d Strix Halo USB4 Host Router 158e Strix Halo USB4 Host Router 1590 Amur/Nolan HT Configuration 1591 Amur/Nolan Address Maps 1592 Amur/Nolan DRAM Configuration 1593 Amur/Nolan Miscellaneous Configuration 1594 Amur/Nolan PM Configuration 1595 Amur/Nolan NB Performance Monitor 1596 Amur/Nolan Root Complex 1597 Amur/Nolan IOMMU 1598 Amur/Nolan Platform Security Processor 1599 Amur/Nolan PCIe Dummy Host Bridge 159d Amur Function 6: Gasket 15b0 Stoney HT Configuration 15b1 Stoney Address Maps 15b2 Stoney DRAM Configuration 15b3 Stoney Miscellaneous Configuration 15b4 Stoney PM Configuration 15b5 Stoney NB Performance Monitor 15b6 Raphael/Granite Ridge USB 3.1 xHCI 15b7 Raphael/Granite Ridge USB 3.1 xHCI 15b8 Raphael/Granite Ridge USB 2.0 xHCI 15bc Stoney PCIe [GFX,GPP] Bridge [4:0] 15be Stoney Audio Processor 15c4 Phoenix USB4/Thunderbolt NHI controller #1 15c5 Phoenix USB4/Thunderbolt NHI controller #2 15c7 Phoenix CCP/PSP 3.0 Device 15d0 Raven/Raven2 Root Complex 103c 8615 Pavilion Laptop 15-cw1xxx 1043 876b PRIME B450M-A Motherboard ea50 ce19 mCOM10-L1900 15d1 Raven/Raven2 IOMMU 103c 8615 Pavilion Laptop 15-cw1xxx 1043 876b PRIME B450M-A Motherboard ea50 ce19 mCOM10-L1900 15d2 Raven/Raven2 PCIe Dummy Host Bridge 15d3 Raven/Raven2 PCIe GPP Bridge [6:0] ea50 ce19 mCOM10-L1900 15d4 FireFlight USB 3.1 15d5 FireFlight USB 3.1 15d6 Rembrandt USB4 XHCI controller #5 15d7 Rembrandt USB4 XHCI controller #6 15da Raven/Raven2 PCIe Dummy Host Bridge 15db Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A ea50 ce19 mCOM10-L1900 15dc Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B ea50 ce19 mCOM10-L1900 15de Raven/Raven2/FireFlight HD Audio Controller 15df Raven/Raven2/FireFlight/Renoir/Cezanne Platform Security Processor 1043 876b PRIME Motherboard 17aa 5124 ThinkPad E595 ea50 ce19 mCOM10-L1900 15e0 Raven USB 3.1 103c 8615 Pavilion Laptop 15-cw1xxx 1043 876b PRIME Motherboard 17aa 5124 ThinkPad E595 ea50 ce19 mCOM10-L1900 15e1 Raven USB 3.1 103c 8615 Pavilion Laptop 15-cw1xxx 1043 876b PRIME Motherboard 17aa 5124 ThinkPad E595 ea50 ce19 mCOM10-L1900 15e2 Audio Coprocessor 17aa 5124 ThinkPad E595 ea50 ce19 mCOM10-L1900 15e3 Family 17h/19h/1ah HD Audio Controller 103c 8615 Pavilion Laptop 15-cw1xxx 103c 8b17 ProBook 445 G9/455 G9 1043 86c7 PRIME B450M-A Motherboard 17aa 5124 ThinkPad E595 15e4 Sensor Fusion Hub 15e5 Raven2 USB 3.1 ea50 ce19 mCOM10-L1900 15e6 Raven/Raven2/Renoir Non-Sensor Fusion Hub KMDF driver 1022 15e4 Raven/Raven2/Renoir Sensor Fusion Hub ea50 ce19 mCOM10-L1900 15e8 Raven/Raven2 Device 24: Function 0 15e9 Raven/Raven2 Device 24: Function 1 15ea Raven/Raven2 Device 24: Function 2 15eb Raven/Raven2 Device 24: Function 3 15ec Raven/Raven2 Device 24: Function 4 15ed Raven/Raven2 Device 24: Function 5 15ee Raven/Raven2 Device 24: Function 6 15ef Raven/Raven2 Device 24: Function 7 15f0 FireFlight Device 24: Function 0 15f1 FireFlight Device 24: Function 1 15f2 FireFlight Device 24: Function 2 15f3 FireFlight Device 24: Function 3 15f4 FireFlight Device 24: Function 4 15f5 FireFlight Device 24: Function 5 15f6 FireFlight Device 24: Function 6 15f7 FireFlight Device 24: Function 7 15f8 FireFlight Root Complex 15f9 FireFlight IOMMU 15fa FireFlight PCIe Dummy Host Bridge 15fb FireFlight PCIe GPP Bride 3:0 15fc FireFlight PCIe Dummy Host Bridge 15fd FireFlight Internal PCIe GPP Bridge 0 to Bus A 15fe FireFlight Internal PCIe GPP Bridge 0 to Bus B 15ff FireFlight Bus A; Device 0: Function 0: Internal GPU 1600 Family 15h Processor Function 0 1601 Family 15h Processor Function 1 1602 Family 15h Processor Function 2 1603 Family 15h Processor Function 3 1604 Family 15h Processor Function 4 1605 Family 15h Processor Function 5 1606 Arden Security Processor 1608 Arden Device 18h: Function 0 1609 Arden Device 18h: Function 1 160a Arden Device 18h: Function 2 160b Arden Device 18h: Function 3 160c Arden Device 18h: Function 4 160d Arden Device 18h: Function 5 160e Arden Device 18h: Function 6 160f Arden Device 18h: Function 7 161a Rembrandt USB4 XHCI controller #1 161b Rembrandt USB4 XHCI controller #2 161c Rembrandt USB4 XHCI controller #7 161d Rembrandt USB4 XHCI controller #3 161e Rembrandt USB4 XHCI controller #4 161f Rembrandt USB4 XHCI controller #8 1620 Anubis HT Configuration 1621 Anubis Address Maps 1622 Anubis DRAM Configuration 1623 Anubis Miscellaneous Configuration 1624 Anubis PM Configuration 1625 Anubis NB Performance Monitor 1626 Arden Root Complex 1627 Arden IOMMU 1628 Arden PCIe Dummy Host Bridge 1629 Arden PCIe GPP Bridge 162a Arden Internal PCIe GPP Bridge 0 to bus X 162b Arden PCIe Non-Transparent Bridge 162c VanGogh USB2 162e Rembrandt USB4/Thunderbolt NHI controller #1 162f Rembrandt USB4/Thunderbolt NHI controller #2 1630 Renoir/Cezanne Root Complex 1631 Renoir/Cezanne IOMMU 1632 Renoir PCIe Dummy Host Bridge 1633 Renoir PCIe GPP Bridge 1634 Renoir/Cezanne PCIe GPP Bridge 1635 Renoir Internal PCIe GPP Bridge to Bus 1637 Renoir HD Audio Controller 1639 Renoir/Cezanne USB 3.1 163a VanGogh USB0 163b VanGogh USB1 163c VanGogh SecUSB 163d VanGogh SecureFunction 163e VanGogh HSP 1641 Renoir 10GbE Controller Port 0 (XGBE0/1) 1642 Renoir WLAN 1643 Renoir BT 1644 Renoir I2S 1645 VanGogh Root Complex 1646 VanGogh IOMMU 1647 VanGogh PCIe GPP Bridge 1648 VanGogh Internal PCIe GPP Bridge to Bus 1649 Family 19h PSP/CCP 164a Sensor Fusion Hub 164b Non-Sensor Fusion Hub 164f Milan IOMMU 1650 Milan Data Fabric; Function 0 1651 Milan Data Fabric; Function 1 1652 Milan Data Fabric; Function 2 1653 Milan Data Fabric; Function 3 1654 Milan Data Fabric; Function 4 1655 Milan Data Fabric; Function 5 1656 Milan Data Fabric; Function 6 1657 Milan Data Fabric; Function 7 1660 VanGogh Data Fabric; Function 0 1661 VanGogh Data Fabric; Function 1 1662 VanGogh Data Fabric; Function 2 1663 VanGogh Data Fabric; Function 3 1664 VanGogh Data Fabric; Function 4 1665 VanGogh Data Fabric; Function 5 1666 VanGogh Data Fabric; Function 6 1667 VanGogh Data Fabric; Function 7 1668 Pink Sardine USB4/Thunderbolt NHI controller #1 1669 Pink Sardine USB4/Thunderbolt NHI controller #2 166a Cezanne Data Fabric; Function 0 166b Cezanne Data Fabric; Function 1 166c Cezanne Data Fabric; Function 2 166d Cezanne Data Fabric; Function 3 166e Cezanne Data Fabric; Function 4 166f Cezanne Data Fabric; Function 5 1670 Cezanne Data Fabric; Function 6 1671 Cezanne Data Fabric; Function 7 1679 Rembrandt Data Fabric: Device 18h; Function 0 167a Rembrandt Data Fabric: Device 18h; Function 1 167b Rembrandt Data Fabric: Device 18h; Function 2 167c Rembrandt Data Fabric: Device 18h; Function 3 167d Rembrandt Data Fabric: Device 18h; Function 4 167e Rembrandt Data Fabric: Device 18h; Function 5 167f Rembrandt Data Fabric: Device 18h; Function 6 1680 Rembrandt Data Fabric: Device 18h; Function 7 16f8 Strix Data Fabric; Function 0 16f9 Strix Data Fabric; Function 1 16fa Strix Data Fabric; Function 2 16fb Strix Data Fabric; Function 3 16fc Strix Data Fabric; Function 4 16fd Strix Data Fabric; Function 5 16fe Strix Data Fabric; Function 6 16ff Strix Data Fabric; Function 7 1700 Family 12h/14h Processor Function 0 1701 Family 12h/14h Processor Function 1 1702 Family 12h/14h Processor Function 2 1703 Family 12h/14h Processor Function 3 1704 Family 12h/14h Processor Function 4 1705 Family 12h Processor Root Complex 1706 Llano P2P Bridge to external GPU 1707 Family 12h Processor Root Port 1708 Family 12h Processor Root Port 1709 Family 12h Processor Root Port 170a Family 12h Processor Root Port 170b Family 12h Processor Root Port 170c Family 12h Processor Root Port 170d Family 12h Processor Root Port 1716 Family 12h/14h Processor Function 5 1718 Family 12h/14h Processor Function 6 1719 Family 12h/14h Processor Function 7 17e0 Strix/Krackan/Strix Halo CCP/ASP 17f0 Strix/Krackan/Strix Halo Neural Processing Unit 2000 79C97x [PCnet32 LANCE] 1014 2000 NetFinity 10/100 Fast Ethernet 1022 2000 PCnet - Fast 79C971 103c 104c Ethernet with LAN remote power Adapter 103c 1064 Ethernet with LAN remote power Adapter 103c 1065 Ethernet with LAN remote power Adapter 103c 106c Ethernet with LAN remote power Adapter 103c 106e Ethernet with LAN remote power Adapter 103c 10ea Ethernet with LAN remote power Adapter 1113 1220 EN1220 10/100 Fast Ethernet 1259 2450 AT-2450 10/100 Fast Ethernet 1259 2454 AT-2450v4 10Mb Ethernet Adapter 1259 2700 AT-2700TX 10/100 Fast Ethernet 1259 2701 AT-2700FX 100Mb Ethernet 1259 2702 AT-2700FTX (AM79C976KD [PCnet-PRO] chipset) 10/100 Mb Fiber/Copper Fast Ethernet 1259 2703 AT-2701FX 1259 2704 AT-2701FTX 10/100 Mb Fiber/Copper Fast Ethernet 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 4c53 1010 CP5/CR6 mainboard 4c53 1020 VR6 mainboard 4c53 1030 PC5 mainboard 4c53 1040 CL7 mainboard 4c53 1060 PC7 mainboard # Via AMD's own technical reference on their Am79C978 NICs; https://www.amd.com/system/files/TechDocs/22206.pdf 2001 Am79C978 PCnet Home (HomePNA) 1/10 PCI Ethernet Adapter [Am79C971 PHY] 1092 0a78 Multimedia Home Network Adapter 1668 0299 ActionLink Home Network Adapter 2003 Am 1771 MBW [Alchemy] 2020 AM53/79C974 [PC-SCSI] 1af4 1100 QEMU Virtual Machine 2040 79c974 2080 CS5536 [Geode companion] Host Bridge 2081 Geode LX Video 2082 Geode LX AES Security Block 208f CS5536 GeodeLink PCI South Bridge 2090 CS5536 [Geode companion] ISA 2091 CS5536 [Geode companion] FLASH 2093 CS5536 [Geode companion] Audio 2094 CS5536 [Geode companion] OHC 2095 CS5536 [Geode companion] EHC 2096 CS5536 [Geode companion] UDC 2097 CS5536 [Geode companion] UOC 209a CS5536 [Geode companion] IDE 2625 Am79C973 [Lance/PCI PCNet/32] 2627 Am79C975 [Lance/PCI PCNet/32] 3000 ELanSC520 Microcontroller 43a0 Hudson PCI to PCI bridge (PCIE port 0) 43a1 Hudson PCI to PCI bridge (PCIE port 1) 43a2 Hudson PCI to PCI bridge (PCIE port 2) 43a3 Hudson PCI to PCI bridge (PCIE port 3) 43b0 X370 Series Chipset PCIe Upstream Port 1849 43c6 Fatal1ty X370 Professional Gaming 43b1 X399 Series Chipset PCIe Bridge 43b4 300 Series Chipset PCIe Port 43b5 X370 Series Chipset SATA Controller 1849 43c8 Fatal1ty X370 Professional Gaming 43b6 X399 Series Chipset SATA Controller 43b7 300 Series Chipset SATA Controller 43b8 A320 Chipset SATA Controller [AHCI mode] 43b9 X370 Series Chipset USB 3.1 xHCI Controller 1849 43d0 Fatal1ty X370 Professional Gaming 43ba X399 Series Chipset USB 3.1 xHCI Controller 43bb 300 Series Chipset USB 3.1 xHCI Controller 43bc A320 USB 3.1 XHCI Host Controller 43c6 400 Series Chipset PCIe Bridge 43c7 400 Series Chipset PCIe Port 43c8 400 Series Chipset SATA Controller 43d5 400 Series Chipset USB 3.1 xHCI Compliant Host Controller 43e9 500 Series Chipset Switch Upstream Port 43ea 500 Series Chipset Switch Downstream Port 43eb 500 Series Chipset SATA Controller # or ASM106X Serial ATA Controller 1b21 1062 ASM1062 Serial ATA Controller 43ec A520 Series Chipset USB 3.1 XHCI Controller 43ee 500 Series Chipset USB 3.1 XHCI Controller # maybe 1b21 1142 ASM1042A USB 3.0 Host Controller 43f4 600 Series Chipset PCIe Switch Upstream Port 43f5 600 Series Chipset PCIe Switch Downstream Port 43f6 600 Series Chipset SATA Controller 43f7 600 Series Chipset USB 3.2 Controller 43fc 800 Series Chipset USB 3.x XHCI Controller 43fd 800 Series Chipset USB 3.x XHCI Controller 57a3 Matisse PCIe GPP Bridge 57a4 Matisse PCIe GPP Bridge 57ad Matisse Switch Upstream 7006 AMD-751 [Irongate] System Controller 7007 AMD-751 [Irongate] AGP Bridge 700a AMD-IGR4 AGP Host to PCI Bridge 700b AMD-IGR4 PCI to PCI Bridge 700c AMD-760 MP [IGD4-2P] System Controller 700d AMD-760 MP [IGD4-2P] AGP Bridge 700e AMD-760 [IGD4-1P] System Controller 700f AMD-760 [IGD4-1P] AGP Bridge 7400 AMD-755 [Cobra] ISA 7401 AMD-755 [Cobra] IDE 7403 AMD-755 [Cobra] ACPI 7404 AMD-755 [Cobra] USB 7408 AMD-756 [Viper] ISA 7409 AMD-756 [Viper] IDE 740b AMD-756 [Viper] ACPI 740c AMD-756 [Viper] USB 7410 AMD-766 [ViperPlus] ISA 7411 AMD-766 [ViperPlus] IDE 7413 AMD-766 [ViperPlus] ACPI 7414 AMD-766 [ViperPlus] USB 7440 AMD-768 [Opus] ISA 1043 8044 A7M-D Mainboard 7441 AMD-768 [Opus] IDE 7443 AMD-768 [Opus] ACPI 1043 8044 A7M-D Mainboard 7445 AMD-768 [Opus] Audio 7446 AMD-768 [Opus] MC97 Modem 7448 AMD-768 [Opus] PCI 7449 AMD-768 [Opus] USB 7450 AMD-8131 PCI-X Bridge 7451 AMD-8131 PCI-X IOAPIC 7454 AMD-8151 System Controller 7455 AMD-8151 AGP Bridge 7458 AMD-8132 PCI-X Bridge 7459 AMD-8132 PCI-X IOAPIC 7460 AMD-8111 PCI 161f 3017 HDAMB 7461 AMD-8111 USB 7462 AMD-8111 Ethernet 7463 AMD-8111 USB EHCI 7464 AMD-8111 USB OHCI 161f 3017 HDAMB 7468 AMD-8111 LPC 161f 3017 HDAMB 7469 AMD-8111 IDE 1022 2b80 AMD-8111 IDE [Quartet] 161f 3017 HDAMB 746a AMD-8111 SMBus 2.0 746b AMD-8111 ACPI 161f 3017 HDAMB 746d AMD-8111 AC97 Audio 161f 3017 HDAMB 746e AMD-8111 MC97 Modem 756b AMD-8111 ACPI 7800 FCH SATA Controller [IDE mode] 7801 FCH SATA Controller [AHCI mode] 103c 168b ProBook 4535s Notebook 103c 194e ProBook 455 G1 Notebook 1043 8623 AM1I-A Motherboard 17aa 3988 Z50-75 1849 7801 QC5000-ITX/PH 7802 FCH SATA Controller [RAID mode] 7803 FCH SATA Controller [RAID mode] 7804 FCH SATA Controller [AHCI mode] 103c 1985 Pavilion 17-e163sg Notebook PC 7805 FCH SATA Controller [RAID mode] 7806 FCH SD Flash Controller 7807 FCH USB OHCI Controller 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 1043 8623 AM1I-A Motherboard 17aa 3988 Z50-75 1849 7807 QC5000-ITX/PH 7808 FCH USB EHCI Controller 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 1043 8623 AM1I-A Motherboard 17aa 3988 Z50-75 1849 7808 QC5000-ITX/PH 7809 FCH USB OHCI Controller 103c 194e ProBook 455 G1 Notebook 17aa 3988 Z50-75 780a Kabini/Mullins SATA Raid/AHCI Mode (DotHill driver) 780b FCH SMBus Controller 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 1043 8623 AM1I-A Motherboard 17aa 3988 Z50-75 1849 780b QC5000-ITX/PH 780c FCH IDE Controller 780d FCH Azalia Controller 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 1043 8444 F2A85-M Series 1043 8576 AM1I-A Motherboard 17aa 3988 Z50-75 1849 8892 QC5000-ITX/PH 780e FCH LPC Bridge 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 1043 8623 AM1I-A Motherboard 17aa 3988 Z50-75 1849 780e QC5000-ITX/PH 780f FCH PCI Bridge 7812 FCH USB XHCI Controller 7813 FCH SD Flash Controller 7814 FCH USB XHCI Controller 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 1043 8623 AM1I-A Motherboard 17aa 3988 Z50-75 1849 7814 QC5000-ITX/PH 7900 FCH SATA Controller [IDE mode] 7901 FCH SATA Controller [AHCI mode] 103c 8615 Pavilion Laptop 15-cw1xxx 1043 876b PRIME Motherboard 1462 7c37 X570-A PRO motherboard 15d9 7901 H12SSL-i ea50 ce19 mCOM10-L1900 7902 FCH SATA Controller [RAID mode] 7903 FCH SATA Controller [RAID mode] 7904 FCH SATA Controller [AHCI mode] 7906 FCH SD Flash Controller 7908 FCH USB EHCI Controller 790b FCH SMBus Controller 103c 8615 Pavilion Laptop 15-cw1xxx 103c 8b17 ProBook 445 G9/455 G9 1043 876b PRIME Motherboard 1462 7c37 X570-A PRO motherboard 15d9 790b H12SSL-i 17aa 5124 ThinkPad E595 ea50 ce19 mCOM10-L1900 790e FCH LPC Bridge 103c 8615 Pavilion Laptop 15-cw1xxx 1043 876b PRIME B450M-A Motherboard 1462 7c37 X570-A PRO motherboard 15d9 790e H12SSL-i 17aa 5124 ThinkPad E595 ea50 ce19 mCOM10-L1900 790f FCH PCI Bridge 7914 FCH USB XHCI Controller 9600 RS780 Host Bridge 1043 82ee M378A-CM Motherboard 1043 82f1 M3A78-EH Motherboard 9601 RS880 Host Bridge 1019 2120 A785GM-M 1028 0433 Optiplex 580 103c 1609 ProLiant MicroServer N36L 1043 83a2 M4A785-M Mainboard 1043 843e M5A88-V EVO 9602 RS780/RS880 PCI to PCI bridge (int gfx) 9603 RS780 PCI to PCI bridge (ext gfx port 0) 1028 0433 Optiplex 580 103c 1609 ProLiant MicroServer N36L 9604 RS780/RS880 PCI to PCI bridge (PCIE port 0) 1028 0433 OptiPlex 580 9605 RS780/RS880 PCI to PCI bridge (PCIE port 1) 9606 RS780 PCI to PCI bridge (PCIE port 2) 103c 1609 ProLiant MicroServer N36L 9607 RS780/RS880 PCI to PCI bridge (PCIE port 3) 9608 RS780/RS880 PCI to PCI bridge (PCIE port 4) 1028 0433 OptiPlex 580 9609 RS780/RS880 PCI to PCI bridge (PCIE port 5) 960a RS780 PCI to PCI bridge (NB-SB link) 960b RS780 PCI to PCI bridge (ext gfx port 1) # Takes over NVMe PCI ID when RAID is enabled b000 RAID Bottom Device 1023 Trident Microsystems 0194 82C194 2000 4DWave DX 2001 4DWave NX 122d 1400 Trident PCI288-Q3DII (NX) 2100 CyberBlade XP4m32 2200 XGI Volari XP5 8400 CyberBlade/i7 1023 8400 CyberBlade i7 AGP 8420 CyberBlade/i7d 0e11 b15a CyberBlade i7 AGP 8500 CyberBlade/i1 8520 CyberBlade i1 0e11 b16e CyberBlade i1 AGP 1023 8520 CyberBlade i1 AGP 8620 CyberBlade/i1 1014 0502 ThinkPad R30/T30 1014 1025 Travelmate 352TE 8820 CyberBlade XPAi1 9320 TGUI 9320 9350 GUI Accelerator 9360 Flat panel GUI Accelerator 9382 Cyber 9382 [Reference design] 9383 Cyber 9383 [Reference design] 9385 Cyber 9385 [Reference design] 9386 Cyber 9386 9388 Cyber 9388 9397 Cyber 9397 939a Cyber 9397DVD 9420 TGUI 9420 9430 TGUI 9430 9440 TGUI 9440 9460 TGUI 9460 9470 TGUI 9470 9520 Cyber 9520 9525 Cyber 9525 9540 Cyber 9540 9660 TGUI 9660/938x/968x 9680 TGUI 9680 9682 TGUI 9682 9683 TGUI 9683 9685 ProVIDIA 9685 9750 3DImage 9750 1014 9750 3DImage 9750 1023 9750 3DImage 9750 9753 TGUI 9753 9754 TGUI 9754 9759 TGUI 975 9783 TGUI 9783 9785 TGUI 9785 9850 3DImage 9850 9880 Blade 3D PCI/AGP 1023 9880 Blade 3D 9910 CyberBlade/XP 9930 CyberBlade/XPm 9960 CyberBlade XP2 1024 Beijing Dajia Internet Information Technology Co. 0101 StreamLake 200 AI-VPU 1024 0201 SL200-NP 1024 0301 SL200-P 1025 Acer Incorporated [ALI] 1435 M1435 1445 M1445 1449 M1449 1451 M1451 1461 M1461 1489 M1489 1511 M1511 1512 ALI M1512 Aladdin 1513 M1513 1521 ALI M1521 Aladdin III CPU Bridge 10b9 1521 ALI M1521 Aladdin III CPU Bridge 1523 ALI M1523 ISA Bridge 10b9 1523 ALI M1523 ISA Bridge 1531 M1531 Northbridge [Aladdin IV/IV+] 1533 M1533 PCI-to-ISA Bridge 10b9 1533 ALI M1533 Aladdin IV/V ISA South Bridge 1535 M1535 PCI Bridge + Super I/O + FIR 1541 M1541 Northbridge [Aladdin V] 10b9 1541 ALI M1541 Aladdin V/V+ AGP+PCI North Bridge 1542 M1542 Northbridge [Aladdin V] 1543 M1543 PCI-to-ISA Bridge + Super I/O + FIR 1561 M1561 Northbridge [Aladdin 7] 1621 M1621 Northbridge [Aladdin-Pro II] 1631 M1631 Northbridge+3D Graphics [Aladdin TNT2] 1641 M1641 Northbridge [Aladdin-Pro IV] 1647 M1647 [MaGiK1] PCI North Bridge 1671 M1671 Northbridge [ALADDiN-P4] 1672 Northbridge [CyberALADDiN-P4] 3141 M3141 3143 M3143 3145 M3145 3147 M3147 3149 M3149 3151 M3151 3307 M3307 MPEG-I Video Controller 3309 M3309 MPEG-II Video w/ Software Audio Decoder 3321 M3321 MPEG-II Audio/Video Decoder 5212 M4803 5215 ALI PCI EIDE Controller 5217 M5217H 5219 M5219 5225 M5225 5229 M5229 5235 M5235 5237 OHCI USB Controller 5239 EHCI USB Controller 5240 EIDE Controller 5241 PCMCIA Bridge 5242 General Purpose Controller 5243 PCI to PCI Bridge Controller 5244 Floppy Disk Controller 5247 M1541 PCI to PCI Bridge 5251 M5251 P1394 Controller 5427 PCI to AGP Bridge 5451 M5451 PCI AC-Link Controller Audio Device 5453 M5453 PCI AC-Link Controller Modem Device 7101 M7101 PCI PMU Power Management Controller 10b9 7101 M7101 PCI PMU Power Management Controller # should be 1022:9602 9602 AMD RS780/RS880 PCI to PCI bridge (int gfx) 1028 Dell 0001 PowerEdge Expandable RAID Controller 2/Si 1028 0001 PowerEdge 2400 0002 PowerEdge Expandable RAID Controller 3/Di 1028 0002 PowerEdge 4400 1028 00d1 PERC 3/DiV [Viper] 1028 00d9 PERC 3/DiL [Lexus] 0003 PowerEdge Expandable RAID Controller 3/Si 1028 0003 PowerEdge 2450 # PowerEdge Codename Iguana 0004 PowerEdge Expandable RAID Controller 3/Di [Iguana] 1028 0004 PERC 3/DiF [Iguana] 0006 PowerEdge Expandable RAID Controller 3/Di 0007 Remote Access Card III 0008 Remote Access Card III 0009 Remote Access Card III: BMC/SMIC device not present 000a PowerEdge Expandable RAID Controller 3/Di 1028 0106 PERC 3/DiJ [Jaguar] 1028 011b PERC 3/DiD [Dagger] 1028 0121 PERC 3/DiB [Boxster] 000c Embedded Remote Access or ERA/O 000d Embedded Remote Access: BMC/SMIC device 000e PowerEdge Expandable RAID controller 4/Di 000f PowerEdge Expandable RAID controller 4/Di 1028 014a PowerEdge 1750 0010 Remote Access Card 4 0011 Remote Access Card 4 Daughter Card 0012 Remote Access Card 4 Daughter Card Virtual UART 0013 PowerEdge Expandable RAID controller 4 1028 016c PowerEdge Expandable RAID Controller 4e/Si 1028 016d PowerEdge Expandable RAID Controller 4e/Di 1028 016e PowerEdge Expandable RAID Controller 4e/Di 1028 016f PowerEdge Expandable RAID Controller 4e/Di 1028 0170 PowerEdge Expandable RAID Controller 4e/Di 0014 Remote Access Card 4 Daughter Card SMIC interface 0015 PowerEdge Expandable RAID controller 5 1028 1f01 PERC 5/E Adapter RAID Controller 1028 1f02 PERC 5/i Adapter RAID Controller 1028 1f03 PERC 5/i Integrated RAID Controller 0016 PowerEdge Expandable RAID controller S300 1028 1f24 PERC S300 Controller # NV-RAM Adapter used in Dell DR appliances 0073 NV-RAM Adapter 0c46 PERC S160 RAID controller 1028 PCIe Bridge riser 2600 ENT NVMe RT1 1028 215e ENT NVMe RT1 RI 3.84TB 1028 215f ENT NVMe RT1 RI 7.68TB 1028 2160 ENT NVMe RT1 FIPS RI 3.84TB 1028 2161 ENT NVMe RT1 FIPS RI 7.68TB 9602 RS780/RS880 PCI to PCI bridge (int gfx) 1029 Siemens Nixdorf IS 102a LSI Logic 0000 HYDRA 0010 ASPEN 001f AHA-2940U2/U2W /7890/7891 SCSI Controllers 9005 000f 2940U2W SCSI Controller 9005 0106 2940U2W SCSI Controller 9005 a180 2940U2W SCSI Controller 00c5 AIC-7899 U160/m SCSI Controller 1028 00c5 PowerEdge 2550/2650/4600 00cf AIC-7899P U160/m 1028 0106 PowerEdge 4600 1028 0121 PowerEdge 2650 102b Matrox Electronics Systems Ltd. # DJ: I've a suspicion that 0010 is a duplicate of 0d10. 0010 MGA-I [Impression?] 0100 MGA 1064SG [Mystique] 0518 MGA-II [Athena] 0519 MGA 2064W [Millennium] 051a MGA 1064SG [Mystique] 102b 0100 MGA-1064SG Mystique 102b 051a MGA-1164SG Mystique 220 102b 1100 MGA-1084SG Mystique 102b 1200 MGA-1084SG Mystique 1100 102b MGA-1084SG Mystique 110a 0018 Scenic Pro C5 (D1025) 051b MGA 2164W [Millennium II] 102b 051b MGA-2164W Millennium II 102b 1100 MGA-2164W Millennium II 102b 1200 MGA-2164W Millennium II 102b 2100 MGA-2164W Millennium II 051e MGA 1064SG [Mystique] AGP 051f MGA 2164W [Millennium II] AGP 102b 2100 MGA-2164WA [Millennium II A] 0520 MGA G200 102b dbc2 G200 Multi-Monitor 102b dbc8 G200 Multi-Monitor 102b dbe2 G200 Multi-Monitor 102b dbe8 G200 Multi-Monitor 102b ff03 Millennium G200 SD 102b ff04 Marvel G200 0521 MGA G200 AGP 1014 ff03 Millennium G200 AGP 102b 48e9 Mystique G200 AGP 102b 48f8 Millennium G200 SD AGP 102b 4a60 Millennium G200 LE AGP 102b 4a64 Millennium G200 AGP 102b c93c Millennium G200 AGP 102b c9b0 Millennium G200 AGP 102b c9bc Millennium G200 AGP 102b ca60 Millennium G250 LE AGP 102b ca6c Millennium G250 AGP 102b dbbc Millennium G200 AGP 102b dbc2 Millennium G200 MMS (Dual G200) 102b dbc3 G200 Multi-Monitor 102b dbc8 Millennium G200 MMS (Dual G200) 102b dbd2 G200 Multi-Monitor 102b dbd3 G200 Multi-Monitor 102b dbd4 G200 Multi-Monitor 102b dbd5 G200 Multi-Monitor 102b dbd8 G200 Multi-Monitor 102b dbd9 G200 Multi-Monitor 102b dbe2 Millennium G200 MMS (Quad G200) 102b dbe3 G200 Multi-Monitor 102b dbe8 Millennium G200 MMS (Quad G200) 102b dbf2 G200 Multi-Monitor 102b dbf3 G200 Multi-Monitor 102b dbf4 G200 Multi-Monitor 102b dbf5 G200 Multi-Monitor 102b dbf8 G200 Multi-Monitor 102b dbf9 G200 Multi-Monitor 102b f806 Mystique G200 Video AGP 102b ff00 MGA-G200 AGP 102b ff02 Mystique G200 AGP 102b ff03 Millennium G200A AGP 102b ff04 Marvel G200 AGP 110a 0032 MGA-G200 AGP 0522 MGA G200e [Pilot] ServerEngines (SEP1) 103c 31fa ProLiant DL140 G3 0525 MGA G400/G450 0e11 b16f MGA-G400 AGP 102b 0328 Millennium G400 16Mb SDRAM 102b 0338 Millennium G400 16Mb SDRAM 102b 0378 Millennium G400 32Mb SDRAM 102b 0541 Millennium G450 Dual Head 102b 0542 Millennium G450 Dual Head LX 102b 0543 Millennium G450 Single Head LX 102b 0641 Millennium G450 32Mb SDRAM Dual Head 102b 0642 Millennium G450 32Mb SDRAM Dual Head LX 102b 0643 Millennium G450 32Mb SDRAM Single Head LX 102b 07c0 Millennium G450 Dual Head LE 102b 07c1 Millennium G450 SDR Dual Head LE 102b 0d41 Millennium G450 Dual Head PCI 102b 0d42 Millennium G450 Dual Head LX PCI 102b 0d43 Millennium G450 32Mb Dual Head PCI 102b 0e00 Marvel G450 eTV 102b 0e01 Marvel G450 eTV 102b 0e02 Marvel G450 eTV 102b 0e03 Marvel G450 eTV 102b 0f80 Millennium G450 Low Profile 102b 0f81 Millennium G450 Low Profile 102b 0f82 Millennium G450 Low Profile DVI 102b 0f83 Millennium G450 Low Profile DVI 102b 19d8 Millennium G400 16Mb SGRAM 102b 19f8 Millennium G400 32Mb SGRAM 102b 2159 Millennium G400 Dual Head 16Mb 102b 2179 Millennium G400 MAX/Dual Head 32Mb 102b 217d Millennium G400 Dual Head Max 102b 23c0 Millennium G450 102b 23c1 Millennium G450 102b 23c2 Millennium G450 DVI 102b 23c3 Millennium G450 DVI 102b 2f58 Millennium G400 102b 2f78 Millennium G400 102b 3693 Marvel G400 AGP 102b 5dd0 4Sight II 102b 5f50 4Sight II 102b 5f51 4Sight II 102b 5f52 4Sight II 102b 9010 Millennium G400 Dual Head 1458 0400 GA-G400 1705 0001 Millennium G450 32MB SGRAM 1705 0002 Millennium G450 16MB SGRAM 1705 0003 Millennium G450 32MB 1705 0004 Millennium G450 16MB 0527 Parhelia 102b 0840 Parhelia 128Mb 102b 0850 Parhelia 256MB 102b 0870 MED2mp-DVI 102b 0880 P-256 Edge Overlap Controller 0528 Parhelia 102b 1020 Parhelia 128MB 102b 1030 Parhelia 256 MB Dual DVI 102b 1040 MED2mp-DVI 102b 1050 Sono S20 102b 1060 PJ-30L 102b 1070 PJ-40L 102b 1421 MED5mp 102b 1431 MED3mp-DVI 102b 1451 MED5mp-DVI 102b 1491 MED2mp-DVI 102b 14b1 MED3mp-DVI 102b 14c1 MED5mp-DVI 102b 14e1 Parhelia PCI 256MB 102b 14f1 Parhelia Precision SGT 102b 1501 ATC-4MP 102b 1511 ATC-4MP 102b 1521 TheatreVUE T30 102b 1531 TheatreVUE T20 102b 1541 MED2mp-DVI 102b 1551 MED3mp-DVI 102b 1561 MED5mp-DVI 102b 1571 Parhelia DL256 PCI 102b 1591 Parhelia Precision SDT 102b 15a1 MED4mp-DVI 102b 2011 Parhelia HR256 102b 2021 QID Pro 102b 2061 PJ-40LP 102b 2081 EWS Quad 102b 2411 PPX-OUT8 102b 2421 VPX-OUT8 102b 2441 PPX-OUT4 102b 2451 VPX-OUT4 102b 2491 LPX-OUT4 0530 MGA G200EV 0532 MGA G200eW WPCM450 1028 0235 PowerEdge R710 MGA G200eW WPCM450 1028 0236 PowerEdge R610 MGA G200eW WPCM450 1028 0237 PowerEdge T610 MGA G200eW WPCM450 1028 0287 PowerEdge M610 MGA G200eW WPCM450 1028 028c PowerEdge R410 MGA G200eW WPCM450 1028 028d PowerEdge T410 MGA G200eW WPCM450 1028 029c PowerEdge M710 MGA G200eW WPCM450 1028 02a4 PowerEdge T310 MGA G200eW WPCM450 15d9 0605 X8SIL 15d9 0624 X9SCM-F Motherboard 15d9 066b X9SRL-F 15d9 a811 H8DGU 0533 MGA G200EH 103c 3381 iLO4 0534 G200eR2 1028 04f7 PowerEdge R320 server 0536 Integrated Matrox G200eW3 Graphics Controller 0538 MGA G200eH3 1590 00e4 iLO5 VGA 0540 M91XX 102b 2080 M9140 LP PCIe x16 102b 20c0 Xenia 102b 20c1 Xenia Pro 102b 2100 M9120 PCIe x16 102b 2140 M9125 PCIe x16 102b 2180 M9120 Plus LP PCIe x16 102b 21c0 M9120 Plus LP PCIe x1 102b 2200 VDA1164 Output Board 102b 2240 M9148 LP PCIe x16 102b 2241 M9138 LP PCIe x16 102b 2280 M9188 ATX PCIe x16 102b 22c0 M9128 LP PCIe x16 0550 SV2 102b 00c0 MURA-IPX-I4EF 102b 00c1 MURA-IPX-I4DF 102b 00c3 MURA-IPX-I4DHF 102b 00c5 MURA-IPX-I4EHF 0d10 MGA Ultima/Impression 1000 MGA G100 [Productiva] 102b ff01 Productiva G100 102b ff05 Productiva G100 Multi-Monitor 1001 MGA G100 [Productiva] AGP 102b 1001 MGA-G100 AGP 102b ff00 MGA-G100 AGP 102b ff01 MGA-G100 Productiva AGP 102b ff03 Millennium G100 AGP 102b ff04 MGA-G100 AGP 102b ff05 MGA-G100 Productiva AGP Multi-Monitor 110a 001e MGA-G100 AGP 2007 MGA Mistral 2527 Millennium G550 102b 0f42 Matrox G550 Low Profile PCI 102b 0f83 Millennium G550 102b 0f84 Millennium G550 Dual Head DDR 32Mb 102b 1e41 Millennium G550 102b 22c0 G550 PCIe 102b 2300 Millennium G550 LP PCIE 2537 Millennium P650/P750 102b 1820 Millennium P750 64MB 102b 1830 Millennium P650 64MB 102b 1850 RAD2mp 102b 1860 RAD3mp 102b 1880 Sono S10 102b 1c10 QID 128MB 102b 2811 Millennium P650 Low-profile PCI 64MB 102b 2821 Millennium P650 Low-profile PCI 102b 2841 RAD PCI 102b 2851 Spectrum PCI 102b 2871 EpicA TC2 102b 2c11 QID Low-profile PCI 102b 2c21 QID LP PCI LW 102b 2c31 QID LP PCI 102b 2c41 EpicA TC4 102b 3001 Extio F1400 102b 3011 Extio F1220 102b 3041 RG-200DL 102b 3051 RG-400SL 102b 3061 Extio F1420 102b 3081 Extio F1240 2538 Millennium P650 PCIe 102b 0847 RAD PCIe 102b 08c7 Millennium P650 PCIe 128MB 102b 0907 Millennium P650 PCIe 64MB 102b 0947 Parhelia APVe 102b 0987 ATC PCIe 4MP 102b 1047 Millennium P650 LP PCIe 128MB 102b 1087 Millennium P650 LP PCIe 64MB 102b 1801 Millennium P650 PCIe x1 102b 2538 Parhelia APVe 102b 3007 QID Low-profile PCIe 102b 3087 Aurora VX3mp 102b 30c7 QID LP PCIe 2539 Millennium P690 102b 0040 Millennium P690 PCIe x16 102b 0042 ONYX 102b 0043 SPECTRA 102b 0080 Millennium P690 Plus LP PCIe x16 102b 0081 Millennium P690 LP PCIe x16 102b 0082 RAD LPX PCIe x16 102b 00c0 Millennium P690 Plus LP PCI 102b 00c2 Millennium P690 LP PCI 102b 00c3 RAD LPX PCI 102b 0101 Millennium P690 PCI 102b 0140 Millennium P690 LP PCIe x1 102b 0180 Display Wall IP Decode 128 MB 4164 Morphis QxT frame grabber 43b4 Morphis Qxt encoding engine 4510 Morphis COM port 4536 VIA Framegrabber 4686 Concord GX (customized Intel 82541) 475b Solios eCL/XCL-B frame grabber 475d Vio frame grabber family 102b 4b90 Vio Duo frame grabber (single channel) 102b 4b91 Vio Duo frame grabber 102b 4b92 Vio Analog frame grabber 102b 4b93 Vio SDI Frame Grabber 102b 4b94 Vio DVI-A frame grabber 475f Solios (single-Full) CL frame grabber 102b 475f Solios eCL/XCL-F frame grabber 102b 4d5f Solios eV-CL (single-Full) frame grabber 102b 4e5f Solios eM-CL (single-Full) frame grabber 47a1 Solios eA/XA frame grabber 102b 4be0 Solios eA/XA (single) frame grabber 102b 4be1 Solios eA/XA (dual) frame grabber 102b 4be2 Solios eA/XA (quad) frame grabber 47a2 Solios COM port 47c1 Solios (dual-Base/single-Medium) CL frame grabber 102b 0000 Solios frame grabber 102b 4b80 Solios eCL/XCL (single-Medium) frame grabber 102b 4b81 Solios eCL/XCL (dual-Base) frame grabber 102b 4d80 Solios eV-CL (single-Medium) frame grabber 102b 4d81 Solios eV-CL (dual-Base) frame grabber 102b 4e80 Solios eM-CL (single-Medium) frame grabber 102b 4e81 Solios eM-CL (dual-Base) frame grabber 47c2 Solios COM port 4949 Radient frame grabber family 102b 0010 Radient eCL (Single-full) frame grabber 102b 0011 Radient eCLV (Single-full) frame grabber 102b 0020 Radient eCL (Dual-base) frame grabber 102b 0030 Radient eCL (Dual-full) frame grabber 102b 0040 Radient eCL (Quad-base) frame grabber 102b 0050 Radient eCL (Golden) frame grabber 102b 1010 Radient eV-CXP (quad CXP-6) frame grabber 102b 1015 Radient eV-CXP (dual CXP-6) frame grabber 102b 1020 Radient eV-CXP (quad CXP-3) frame grabber 102b 1050 Radient eV-CXP (Golden) frame grabber 4cdc Morphis JPEG2000 accelerator 4f54 Morphis (e)Quad frame grabber 4fc5 Morphis (e)Dual frame grabber 5e10 Morphis aux I/O 6573 Shark 10/100 Multiport SwitchNIC 102c Chips and Technologies 00b8 F64310 00c0 F69000 HiQVideo 102c 00c0 F69000 HiQVideo 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 4c53 1010 CP5/CR6 mainboard 4c53 1020 VR6 mainboard 4c53 1030 PC5 mainboard 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard 00d0 F65545 00d8 F65545 00dc F65548 00e0 F65550 00e4 F65554 00e5 F65555 HiQVPro 0e11 b049 Armada 1700 Laptop Display Controller 1179 0001 Satellite Pro/Satellite 00f0 F68554 00f4 F68554 HiQVision 00f5 F68555 0c30 F69030 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard 4c53 1080 CT8 mainboard 102d Wyse Technology Inc. 50dc 3328 Audio 102e Olivetti Advanced Technology 102f Toshiba America 0009 r4x00 000a TX3927 MIPS RISC PCI Controller 0020 ATM Meteor 155 102f 00f8 ATM Meteor 155 0030 TC35815CF PCI 10/100 Mbit Ethernet Controller 0031 TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL 0032 TC35815CF PCI 10/100 Mbit Ethernet Controller on TX4939 0105 TC86C001 [goku-s] IDE 0106 TC86C001 [goku-s] USB 1.1 Host 0107 TC86C001 [goku-s] USB Device Controller 0108 TC86C001 [goku-s] I2C/SIO/GPIO Controller 0180 TX4927/38 MIPS RISC PCI Controller 0181 TX4925 MIPS RISC PCI Controller 0182 TX4937 MIPS RISC PCI Controller 01b4 Celleb platform IDE interface 01b5 SCC USB 2.0 EHCI controller 01b6 SCC USB 1.1 OHCI controller 1030 TMC Research 1031 Miro Computer Products AG 5601 DC20 ASIC 5607 Video I/O & motion JPEG compressor 5631 Media 3D 6057 MiroVideo DC10/DC30+ 1032 Compaq 1033 NEC Corporation 0000 Vr4181A USB Host or Function Control Unit 0001 PCI to 486-like bus Bridge 0002 PCI to VL98 Bridge 0003 ATM Controller 0004 R4000 PCI Bridge 0005 PCI to 486-like bus Bridge 0006 PC-9800 Graphic Accelerator 0007 PCI to UX-Bus Bridge 0008 PC-9800 Graphic Accelerator 0009 PCI to PC9800 Core-Graph Bridge 0016 PCI to VL Bridge 001a [Nile II] 0021 Vrc4373 [Nile I] 0029 PowerVR PCX1 002a PowerVR 3D 002c Star Alpha 2 002d PCI to C-bus Bridge 0035 OHCI USB Controller 1033 0035 USB Controller 103c 1293 USB add-in card 103c 1294 USB 2.0 add-in card 1179 0001 USB 1186 0035 DUB-C2 USB 2.0 2-port 32-bit cardbus controller 12ee 7000 Root Hub 14c2 0105 PTI-205N USB 2.0 Host Controller 1799 0001 Root Hub 1931 000a GlobeTrotter Fusion Quad Lite (PPP data) 1931 000b GlobeTrotter Fusion Quad Lite (GSM data) 807d 0035 PCI-USB2 (OHCI subsystem) 8086 4d44 D850EMV2 motherboard 003b PCI to C-bus Bridge 003e NAPCCARD Cardbus Controller 0046 PowerVR PCX2 [midas] 005a Vrc5074 [Nile 4] 0063 uPD72862 [Firewarden] IEEE1394 OHCI 1.0 Link Controller 0067 PowerVR Neon 250 Chipset 1010 0020 PowerVR Neon 250 AGP 32Mb 1010 0080 PowerVR Neon 250 AGP 16Mb 1010 0088 PowerVR Neon 250 16Mb 1010 0090 PowerVR Neon 250 AGP 16Mb 1010 0098 PowerVR Neon 250 16Mb 1010 00a0 PowerVR Neon 250 AGP 32Mb 1010 00a8 PowerVR Neon 250 32Mb 1010 0120 PowerVR Neon 250 AGP 32Mb 0072 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr 0074 56k Voice Modem 1033 8014 RCV56ACF 56k Voice Modem 009b Vrc5476 00a5 VRC4173 00a6 VRC5477 AC97 00cd uPD72870 [Firewarden] IEEE1394a OHCI 1.0 Link/3-port PHY Controller 12ee 8011 Root hub 00ce uPD72871 [Firewarden] IEEE1394a OHCI 1.0 Link/1-port PHY Controller 00df Vr4131 00e0 uPD72010x USB 2.0 Controller 1186 f100 DUB-C2 USB 2.0 2-port 32-bit cardbus controller 12ee 7001 Root hub 14c2 0205 PTI-205N USB 2.0 Host Controller 1799 0002 Root Hub 807d 1043 PCI-USB2 (EHCI subsystem) 8086 4d44 D850EMV2 motherboard 00e7 uPD72873 [Firewarden] IEEE1394a OHCI 1.1 Link/2-port PHY Controller 00f2 uPD72874 [Firewarden] IEEE1394a OHCI 1.1 Link/3-port PHY Controller 00f3 uPD6113x Multimedia Decoder/Processor [EMMA2] 010c VR7701 0125 uPD720400 PCI Express - PCI/PCI-X Bridge 013a Dual Tuner/MPEG Encoder 0194 uPD720200 USB 3.0 Host Controller 1028 04a3 Precision M4600 1028 04b2 Vostro 3350 1028 04da Vostro 3750 1043 8413 P8P67 Deluxe Motherboard 104d 907a Vaio VPCF1 1af4 1100 QEMU Virtual Machine 1b96 0001 USB 3.0 PCIe Card 01e7 uPD72873 [Firewarden] IEEE1394a OHCI 1.1 Link/2-port PHY Controller 01f2 uPD72874 [Firewarden] IEEE1394a OHCI 1.1 Link/3-port PHY Controller 1034 Framatome Connectors USA Inc. 1035 Comp. & Comm. Research Lab 1036 Future Domain Corp. 0000 TMC-18C30 [36C70] 1037 Hitachi Micro Systems 1038 AMP, Inc 1039 Silicon Integrated Systems [SiS] 0001 AGP Port (virtual PCI-to-PCI bridge) 0002 AGP Port (virtual PCI-to-PCI bridge) 0003 AGP Port (virtual PCI-to-PCI bridge) 0004 PCI-to-PCI bridge 1039 0000 PCIe x16 port 0006 85C501/2/3 0008 SiS85C503/5513 (LPC Bridge) 0009 5595 Power Management Controller 000a PCI-to-PCI bridge 1039 0000 PCIe x1 port 0016 SiS961/2/3 SMBus controller 0018 SiS85C503/5513 (LPC Bridge) 0163 163 802.11b/g Wireless LAN Adapter 0180 RAID bus controller 180 SATA/PATA [SiS] 0181 SATA 0182 182 SATA/RAID Controller 1734 1095 D2030-A1 0186 AHCI Controller (0106) 0190 190 Ethernet Adapter 0191 191 Gigabit Ethernet Adapter 1043 8139 P5SD2-FM/S mainboard 0200 5597/5598/6326 VGA 1039 0000 SiS5597 SVGA (Shared RAM) 0204 82C204 0205 SG86C205 0300 300/305 PCI/AGP VGA Display Adapter 107d 2720 Leadtek WinFast VR300 0310 315H PCI/AGP VGA Display Adapter 0315 315 PCI/AGP VGA Display Adapter 0325 315PRO PCI/AGP VGA Display Adapter 0330 330 [Xabre] PCI/AGP VGA Display Adapter 0406 85C501/2 0496 SiS85C496 PCI & CPU Memory Controller (PCM) 0530 530 Host 0540 540 Host 0550 550 Host 0597 5513C 0601 85C601 0620 620 Host 0630 630 Host 0633 633 Host 0635 635 Host 0645 SiS645 Host & Memory & AGP Controller 0646 SiS645DX Host & Memory & AGP Controller 0648 645xx 0649 SiS649 Host 0650 650/M650 Host 0651 651 Host 0655 655 Host 0660 660 Host 0661 661FX/M661FX/M661MX Host 0662 662 Host 0671 671MX 0730 730 Host 0733 733 Host 0735 735 Host 0740 740 Host 0741 741/741GX/M741 Host 1849 0741 K7S41/K7S41GX motherboard 0745 745 Host 0746 746 Host 0755 755 Host 0760 760/M760 Host 0761 761/M761 Host 1734 1099 D2030-A1 Motherboard 0900 SiS900 PCI Fast Ethernet 1019 0a14 K7S5A motherboard 1039 0900 SiS900 10/100 Ethernet Adapter onboard 1043 8035 CUSI-FX motherboard 1043 80a7 Motherboard P4S800D-X 1462 0900 MS-6701 motherboard 0961 SiS961 [MuTIOL Media IO] 0962 SiS962 [MuTIOL Media IO] LPC Controller 0963 SiS963 [MuTIOL Media IO] LPC Controller 0964 SiS964 [MuTIOL Media IO] LPC Controller 0965 SiS965 [MuTIOL Media IO] 0966 SiS966 [MuTIOL Media IO] 0968 SiS968 [MuTIOL Media IO] 1180 SATA Controller / IDE mode 1182 SATA Controller / RAID mode 1039 0180 SiS 966 4-port SATA controller 1183 SATA Controller / IDE mode 1039 0180 SiS 966 4-port SATA controller 1184 AHCI Controller / RAID mode 1185 AHCI IDE Controller (0106) 3602 83C602 5107 5107 5300 SiS540 PCI Display Adapter 5315 550 PCI/AGP VGA Display Adapter 5401 486 PCI Chipset 5511 5511/5512 5513 5513 IDE Controller 1019 0970 P6STP-FL motherboard 1039 5513 SiS5513 EIDE Controller (A,B step) 1043 8035 CUSI-FX motherboard 1462 7010 MS-6701 motherboard 1631 5513 GA-8SIML Rev1.0 Motherboard 1734 1095 D2030-A1 Motherboard 5517 5517 5571 5571 5581 5581 Pentium Chipset 5582 5582 5591 5591/5592 Host 5596 5596 Pentium Chipset 5597 5597 [SiS5582] 5600 5600 Host 6204 Video decoder & MPEG interface 6205 VGA Controller 6236 6236 3D-AGP 6300 630/730 PCI/AGP VGA Display Adapter 1019 0970 P6STP-FL motherboard 1043 8035 CUSI-FX motherboard 104d 80e2 VAIO PCV-J200 6306 530/620 PCI/AGP VGA Display Adapter 6325 65x/M650/740 PCI/AGP VGA Display Adapter 1039 6325 SiS 651 onboard [Asus P4SC-EA] 1631 1004 SiS 651C onboard [Gigabyte GA-8SIML Rev1.0] 6326 86C326 5598/6326 1039 6326 SiS6326 GUI Accelerator 1092 0a50 SpeedStar A50 1092 0a70 SpeedStar A70 1092 4910 SpeedStar A70 1092 4920 SpeedStar A70 10b0 6326 S6110-B (AGP) 1569 6326 SiS6326 GUI Accelerator 6330 661/741/760 PCI/AGP or 662/761Gx PCIE VGA Display Adapter 1039 6330 [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter 1043 8113 SiS Real 256E (ASUS P5S800-VM motherboard) 1458 d000 SiS661FX GUI 2D/3D Accelerator 1734 1099 D2030-A1 6350 770/670 PCIE VGA Display Adapter 6351 771/671 PCIE VGA Display Adapter 7001 USB 1.1 Controller 1019 0a14 K7S5A motherboard 1039 7000 Onboard USB Controller 1462 5470 ECS K7SOM+ motherboard 1462 7010 MS-6701 motherboard 1734 1095 D2030-A1 Motherboard 7002 USB 2.0 Controller 1462 5470 K7SOM+ 5.2C Motherboard 1462 7010 MS-6701 motherboard 1509 7002 Onboard USB Controller 1734 1095 D2030-A1 7007 FireWire Controller 1462 701d MS-6701 7012 SiS7012 AC'97 Sound Controller 1019 0f05 A928 (i-Buddie) 1039 7012 SiS 7012 onboard [Asus P4SC-EA] AC'97 Sound Controller 1043 818f A8S-X Motherboard 13f6 0300 CMI9739(A) on ECS K7S series motherboard 1462 5850 MSI 648 Max (MS-6585) 1462 7010 MS-6701 motherboard 15bd 1001 DFI 661FX motherboard 1734 109f D2030-A1 Motherboard 1849 7012 K7S41GX motherboard # There are may be different modem codecs here (Intel537 compatible and incompatible) 7013 AC'97 Modem Controller 7016 SiS7016 PCI Fast Ethernet Adapter 1039 7016 SiS7016 10/100 Ethernet Adapter 7018 SiS PCI Audio Accelerator 1014 01b6 SiS PCI Audio Accelerator 1014 01b7 SiS PCI Audio Accelerator 1019 7018 SiS PCI Audio Accelerator 1025 000e SiS PCI Audio Accelerator 1025 0018 SiS PCI Audio Accelerator 1039 7018 SiS PCI Audio Accelerator 1043 1453 SiS PCI Audio Accelerator 1043 800b SiS PCI Audio Accelerator 104d 80e2 VAIO PCV-J200 1054 7018 SiS PCI Audio Accelerator 107d 5330 SiS PCI Audio Accelerator 107d 5350 SiS PCI Audio Accelerator 1170 3209 SiS PCI Audio Accelerator 1462 400a SiS PCI Audio Accelerator 14a4 2089 SiS PCI Audio Accelerator 14cd 2194 SiS PCI Audio Accelerator 14ff 1100 SiS PCI Audio Accelerator 152d 8808 SiS PCI Audio Accelerator 1558 1103 SiS PCI Audio Accelerator 1558 2200 SiS PCI Audio Accelerator 1563 7018 SiS PCI Audio Accelerator 15c5 0111 SiS PCI Audio Accelerator 270f a171 SiS PCI Audio Accelerator a0a0 0022 SiS PCI Audio Accelerator 7019 SiS7019 Audio Accelerator 7502 Azalia Audio Controller 1043 81a1 P5SD2-FM/S mainboard 103a Seiko Epson Corporation 103b Tatung Corp. Of America 103c Hewlett-Packard Company 1005 A4977A Visualize EG 1008 Visualize FX 1020 548XX Scope Interface 1028 Tach TL Fibre Channel Host Adapter 1029 Tach XL2 Fibre Channel Host Adapter 107e 000f Interphase 5560 Fibre Channel Adapter 9004 9210 1Gb/2Gb Family Fibre Channel Controller 9004 9211 1Gb/2Gb Family Fibre Channel Controller 102a Tach TS Fibre Channel Host Adapter 107e 000e Interphase 5540/5541 Fibre Channel Adapter 9004 9110 1Gb/2Gb Family Fibre Channel Controller 9004 9111 1Gb/2Gb Family Fibre Channel Controller 1030 J2585A DeskDirect 10/100VG NIC 1031 J2585B HP 10/100VG PCI LAN Adapter 103c 1040 J2973A DeskDirect 10BaseT NIC 103c 1041 J2585B DeskDirect 10/100VG NIC 103c 1042 J2970A DeskDirect 10BaseT/2 NIC 1040 J2973A DeskDirect 10BaseT NIC 1041 J2585B DeskDirect 10/100 NIC 1042 J2970A DeskDirect 10BaseT/2 NIC 1048 Diva Serial [GSP] Multiport UART 103c 1049 Tosca Console 103c 104a Tosca Secondary 103c 104b Maestro SP2 103c 1223 Superdome Console 103c 1226 Keystone SP2 103c 1227 Powerbar SP2 103c 1282 Everest SP2 103c 1301 Diva RMP3 1054 PCI Local Bus Adapter 1064 79C970 PCnet Ethernet Controller 108b Visualize FXe 10c1 NetServer Smart IRQ Router 10ed TopTools Remote Control 10f0 rio System Bus Adapter 10f1 rio I/O Controller 1219 NetServer PCI Hot-Plug Controller 121a NetServer SMIC Controller 121b NetServer Legacy COM Port Decoder 121c NetServer PCI COM Port Decoder 1229 zx1 System Bus Adapter 122a zx1 I/O Controller 122e PCI-X Local Bus Adapter 127b sx1000 System Bus Adapter 127c sx1000 I/O Controller 128d Diva [GSP] Management Board 1290 Auxiliary Diva Serial Port 103c 1291 Diva SP2 1291 Auxiliary Diva Serial Port 12b4 zx1 QuickSilver AGP8x Local Bus Adapter 12eb sx2000 System Bus Adapter 12ec sx2000 I/O Controller 12ee PCI-X 2.0 Local Bus Adapter 1302 RMP-3 Shared Memory Driver 1303 RMP-3 (Remote Management Processor) 22f6 iLO5 Virtual USB Controller 1590 00e4 iLO5 Standard Virtual USB Controller 2910 E2910A PCIBus Exerciser 2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer 3206 Adaptec Embedded Serial ATA HostRAID 3220 Smart Array P600 103c 3225 3 Gb/s SAS RAID 3230 Smart Array Controller 103c 3223 Smart Array P800 103c 3234 P400 SAS Controller 103c 3235 P400i SAS Controller 103c 3237 E500 SAS Controller 103c 323d P700m SAS Controller 3238 Smart Array E200i (SAS Controller) 103c 3211 Smart Array E200i 103c 3212 Smart Array E200 3239 Smart Array Gen9 Controllers 103c 21bd P244br 103c 21be P741m 103c 21bf H240ar 103c 21c0 P440ar 103c 21c1 P840ar 103c 21c2 P440 103c 21c3 P441 103c 21c4 Smart Array 103c 21c5 P841 103c 21c6 H244br 103c 21c7 H240 103c 21c8 H241 103c 21c9 Smart Array 103c 21ca P246br 103c 21cb P840 103c 21cc Smart Array 103c 21cd P240nr 103c 21ce H240nr 323a Smart Array G6 controllers 103c 3241 Smart Array P212 103c 3243 Smart Array P410 103c 3245 Smart Array P410i 103c 3247 Smart Array P411 103c 3249 Smart Array P812 103c 324a Smart Array 712m (Mezzanine RAID controller) 103c 324b Smart Array P711m (Mezzanine RAID controller) 323b Smart Array Gen8 Controllers 103c 3350 P222 103c 3351 P420 103c 3352 P421 103c 3354 P420i 103c 3355 P220i 323c Smart Array Gen8+ Controllers 103c 1920 P430i 103c 1921 P830i 103c 1922 P430 103c 1923 P431 103c 1924 P830 103c 1925 Smart Array 103c 1926 P731m 103c 1928 P230i 3300 Integrated Lights-Out Standard Virtual USB Controller 103c 3304 iLO2 103c 3305 iLO2 103c 3309 iLO2 GXL/iLO3 GXE 103c 330e iLO3 103c 3381 iLO4 3301 Integrated Lights-Out Standard Serial Port 103c 3304 iLO2 103c 3305 iLO2 103c 330e iLO3 103c 3381 iLO4 # Virtual serial port which is presented on a Java applet 3302 Integrated Lights-Out Standard KCS Interface 103c 3304 iLO2 103c 3305 iLO2 103c 330e iLO3 103c 3381 iLO4 3305 Integrated Lights-Out (iLO2) Controller 3306 Integrated Lights-Out Standard Slave Instrumentation & System Support 103c 330e iLO3 103c 3381 iLO4 1590 00e4 iLO5 3307 Integrated Lights-Out Standard Management Processor Support and Messaging # HP DL380 G6 103c 3309 iLO 2 103c 330e iLO3 103c 3381 iLO4 3308 Integrated Lights-Out Standard MS Watchdog Timer 103c 330e iLO3 103c 3381 iLO4 4030 zx2 System Bus Adapter 4031 zx2 I/O Controller 4037 PCIe Local Bus Adapter 9602 AMD RS780/RS880 PCI to PCI bridge (int gfx) 103c 1609 ProLiant MicroServer N36L 103e Solliday Engineering 103f Synopsys/Logic Modeling Group 1040 Accelgraphics Inc. 1041 Computrend 1042 Micron 1000 PC Tech RZ1000 1001 PC Tech RZ1001 3000 Samurai_0 3010 Samurai_1 3020 Samurai_IDE 1043 ASUSTeK Computer Inc. 0675 ISDNLink P-IN100-ST-D 0675 1704 ISDN Adapter (PCI Bus, D, C) 0675 1707 ISDN Adapter (PCI Bus, DV, W) 10cf 105e ISDN Adapter (PCI Bus, DV, W) # Should be 1022:9602 9602 AMD RS780/RS880 PCI to PCI bridge (int gfx) 1043 83a2 M4A785TD Motherboard 1044 Adaptec (formerly DPT) 1012 Domino RAID Engine a400 SmartCache/Raid I-IV Controller a500 PCI Bridge a501 SmartRAID V Controller 1044 c001 PM1554U2 Ultra2 Single Channel 1044 c002 PM1654U2 Ultra2 Single Channel 1044 c003 PM1564U3 Ultra3 Single Channel 1044 c004 PM1564U3 Ultra3 Dual Channel 1044 c005 PM1554U2 Ultra2 Single Channel (NON ACPI) 1044 c00a PM2554U2 Ultra2 Single Channel 1044 c00b PM2654U2 Ultra2 Single Channel 1044 c00c PM2664U3 Ultra3 Single Channel 1044 c00d PM2664U3 Ultra3 Dual Channel 1044 c00e PM2554U2 Ultra2 Single Channel (NON ACPI) 1044 c00f PM2654U2 Ultra2 Single Channel (NON ACPI) 1044 c014 PM3754U2 Ultra2 Single Channel (NON ACPI) 1044 c015 PM3755U2B Ultra2 Single Channel (NON ACPI) 1044 c016 PM3755F Fibre Channel (NON ACPI) 1044 c01e PM3757U2 Ultra2 Single Channel 1044 c01f PM3757U2 Ultra2 Dual Channel 1044 c020 PM3767U3 Ultra3 Dual Channel 1044 c021 PM3767U3 Ultra3 Quad Channel 1044 c028 PM2865U3 Ultra3 Single Channel 1044 c029 PM2865U3 Ultra3 Dual Channel 1044 c02a PM2865F Fibre Channel 1044 c03c 2000S Ultra3 Single Channel 1044 c03d 2000S Ultra3 Dual Channel 1044 c03e 2000F Fibre Channel 1044 c046 3000S Ultra3 Single Channel 1044 c047 3000S Ultra3 Dual Channel 1044 c048 3000F Fibre Channel 1044 c050 5000S Ultra3 Single Channel 1044 c051 5000S Ultra3 Dual Channel 1044 c052 5000F Fibre Channel 1044 c05a 2400A UDMA Four Channel 1044 c05b 2400A UDMA Four Channel DAC 1044 c064 3010S Ultra3 Dual Channel 1044 c065 3410S Ultra160 Four Channel 1044 c066 3010S Fibre Channel a511 SmartRAID V Controller 1044 c032 ASR-2005S I2O Zero Channel 1044 c035 ASR-2010S I2O Zero Channel c066 3010S Ultra3 Dual Channel 1045 OPTi Inc. a0f8 82C750 [Vendetta] USB Controller c101 82C264 GUI Accelerator c178 92C178 c556 82X556 [Viper] c557 82C557 [Viper-M] c558 82C558 [Viper-M ISA+IDE] c567 82C750 [Vendetta] Host Bridge c568 82C750 [Vendetta] ISA Bridge c569 82C579 [Viper XPress+ Chipset] c621 82C621A PCI IDE Contoller c700 82C700 [FireStar] c701 82C700 [FireStar] Host Bridge c814 82C814 [FireBridge II] Docking Stration Controller c822 82C822 c824 82C824 [FireFox] 32-Bit PC Card Controller c825 82C825 [FireBridge II] Docking Stration Controller c832 82C832 c861 82C861/2/3 [FireLink] PCI-USB Host Bridge c881 82C881 [FireLink] 1394 OHCI Link Controller c895 82C895 c935 82С935 [MachOne] Integrated PCI Audio Processor d568 82C700 [FireStar] PCI IDE Controller d721 82C700 [FireStar] PCI IDE Controller 1046 IPC Corporation, Ltd. 1047 Genoa Systems Corp 1048 Elsa AG 0c60 Gladiac MX 0d22 Quadro4 900XGL [ELSA GLoria4 900XGL] 1000 QuickStep 1000 3000 QuickStep 3000 8901 Gloria XL 1048 0935 GLoria XL (Virge) 1049 Fountain Technologies, Inc. # nee SGS Thomson Microelectronics 104a STMicroelectronics 0000 STLS2F Host Bridge 0008 STG 2000X 0009 STG 1764X 0010 STG4000 [3D Prophet Kyro Series] 104a 4018 ST PowerVR Kyro (64MB AGP TVO) 1681 0010 PowerVR Kyro II [3D Prophet 4500] 1681 0028 3D Prophet 4000XT 1681 c010 3D Prophet 4500 TV-Out 1681 c069 3D Prophet 4000XT 0201 STPC Vega Northbridge 0209 STPC Consumer/Industrial North- and Southbridge 020a STPC Atlas/ConsumerS/Consumer IIA Northbridge 020b STPC Consumer II ISA Bridge 0210 STPC Atlas ISA Bridge 021a STPC Consumer S Southbridge 021b STPC Consumer IIA Southbridge 0220 STPC Industrial PCI to PCCard bridge 0228 STPC Atlas IDE 0229 STPC Vega IDE 0230 STPC Atlas/Vega OHCI USB Controller 0238 STPC Vega LAN 0500 ST70137 [Unicorn] ADSL DMT Transceiver 104a 0500 BeWAN ADSL PCI st 0564 STPC Client Northbridge 0981 21x4x DEC-Tulip compatible 10/100 Ethernet 1746 STG 1764X 2774 21x4x DEC-Tulip compatible 10/100 Ethernet 3520 MPEG-II decoder card 55cc STPC Client Southbridge 104b BusLogic 0140 BT-946C (old) [multimaster 01] 1040 BT-946C (BA80C30) [MultiMaster 10] 8130 Flashpoint LT 104c Texas Instruments 0500 100 MBit LAN Controller 0508 TMS380C2X Compressor Interface 1000 Eagle i/f AS 104c PCI1510 PC card Cardbus Controller 3d04 TVP4010 [Permedia] 3d07 TVP4020 [Permedia 2] 1011 4d10 Comet 1040 000f AccelStar II 1040 0011 AccelStar II 1048 0a31 WINNER 2000 1048 0a32 GLoria Synergy 1048 0a34 GLoria Synergy 1048 0a35 GLoria Synergy 1048 0a36 GLoria Synergy 1048 0a43 GLoria Synergy 1048 0a44 GLoria Synergy 107d 2633 WinFast 3D L2300 1092 0126 FIRE GL 1000 PRO 1092 0127 FIRE GL 1000 PRO 1092 0136 FIRE GL 1000 PRO 1092 0141 FIRE GL 1000 PRO 1092 0146 FIRE GL 1000 PRO 1092 0148 FIRE GL 1000 PRO 1092 0149 FIRE GL 1000 PRO 1092 0152 FIRE GL 1000 PRO 1092 0154 FIRE GL 1000 PRO 1092 0155 FIRE GL 1000 PRO 1092 0156 FIRE GL 1000 PRO 1092 0157 FIRE GL 1000 PRO 1097 3d01 Jeronimo Pro 1102 100f Graphics Blaster Extreme 3d3d 0100 Reference Permedia 2 3D 8000 PCILynx/PCILynx2 IEEE 1394 Link Layer Controller 105e 8003 FireBoard200 1443 8003 FireBoard200 1443 8005 FireBoard400 1443 8006 FireBoard400 e4bf 1010 CF1-1-SNARE e4bf 1020 CF1-2-SNARE e4bf 1040 FireCompact400 8009 TSB12LV22 IEEE-1394 Controller 104d 8032 8032 OHCI i.LINK (IEEE 1394) Controller 1443 8010 FireBoard400-OHCI 8017 PCI4410 FireWire Controller 8019 TSB12LV23 IEEE-1394 Controller 11bd 000a Studio DV500-1394 11bd 000e Studio DV 1443 8010 FireBoard400-OHCI e4bf 1010 CF2-1-CYMBAL 8020 TSB12LV26 IEEE-1394 Controller (Link) 1028 00d8 Precision 530 104d 80e2 VAIO PCV-J200 11bd 000f Studio DV500-1394 11bd 001c Excalibur 4.1 1443 8010 FireBoard400-OHCI 8021 TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated) 104d 80df Vaio PCG-FX403 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 8022 TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link) [iOHCI-Lynx] 104c 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) 8023 TSB43AB22A IEEE-1394a-2000 Controller (PHY/Link) [iOHCI-Lynx] 1028 0168 Precision Workstation 670 Mainboard 103c 088c NC8000 laptop 1043 808b K8N4/A8N Series Mainboard 1043 815b P5W DH Deluxe Motherboard 1443 8023 FireCard400 8086 5044 Desktop Board DP35DP 8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link) 107d 6620 Winfast DV2000 FireWire Controller 1443 8024 FireBoard Blue 1458 1000 Motherboard 8025 TSB82AA2 IEEE-1394b Link Layer Controller 1043 813c P5P series mainboard 1443 8025 FireBoard800 1458 1000 GA-K8N Ultra-9 Mainboard 1546 8025 FWB-PCI01 17fc 8025 GIC3800 8026 TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link) 1025 0035 TravelMate 660 1025 003c Aspire 2001WLCi (Compaq CL50 motherboard) 103c 0025 XE4500 Notebook 103c 006a NX9500 1043 808d A7V333 mainboard. 8027 PCI4451 IEEE-1394 Controller 1028 00e5 Latitude C810 1028 00e6 PCI4451 IEEE-1394 Controller (Dell Inspiron 8100) 8029 PCI4510 IEEE-1394 Controller 1028 0163 Latitude D505 1028 0196 Inspiron 5160 1071 8160 MIM2900 802b PCI7410,7510,7610 OHCI-Lynx Controller 1028 0139 Latitude D400 1028 014e PCI7410,7510,7610 OHCI-Lynx Controller (Latitude D800) 802e PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller 1028 018d Inspiron 700m/710m 8031 PCIxx21/PCIxx11/PCIx515 PC Card Controller 1025 0064 Extensa 3000 series laptop 1025 0080 Aspire 5024WLMi 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 103c 308b MX6125 8032 OHCI Compliant IEEE 1394 Host Controller 1025 0064 Extensa 3000 series laptop 1025 0080 Aspire 5024WLMi 103c 0934 Compaq nw8240/nx8220 103c 099c NX6110/NC6120 103c 308b MX6125 8033 PCIxx21/PCIxx11 Flash Media Controller 1025 0064 Extensa 3000 series laptop 1025 0080 Aspire 5024WLMi 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 103c 308b MX6125 8034 PCIxx21/PCIxx11 SD Host Controller 1025 0080 Aspire 5024WLMi 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 103c 308b MX6125 8035 PCIxx21/PCIxx11 Smart Card Controller 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 8036 PCI6515 Cardbus Controller 8038 PCI6515 SmartCard Controller 8039 PCIxx12 Cardbus Controller 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 104d 902d VAIO VGN-NR120E 803a PCIxx12 OHCI Compliant IEEE 1394 Host Controller 103c 309f nx9420 103c 30a1 NC2400 103c 30a3 Compaq nw8440 104d 902d VAIO VGN-NR120E 803b PCIxx12 Flash Media Controller 103c 309f nx9420 103c 30a3 Compaq nw8440 104d 8212 VAIO VGN-N21E 104d 902d VAIO VGN-NR120E 803c PCIxx12 SDA Standard Compliant SD Host Controller 103c 309f nx9420 103c 30a3 Compaq nw8440 803d PCIxx12 GemCore based SmartCard controller 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 nc8430 103c 30aa nc6310 8101 TSB43DB42 IEEE-1394a-2000 Controller (PHY/Link) 8201 PCI1620 Firmware Loading Function 8204 PCI7410/7510/7610 PCI Firmware Loading Function 1028 0139 Latitude D400 1028 014e Latitude D800 8231 XIO2000(A)/XIO2200A PCI Express-to-PCI Bridge 5678 1234 DC-1394 PCIe 8232 XIO3130 PCI Express Switch (Upstream) 8233 XIO3130 PCI Express Switch (Downstream) 8235 XIO2200A IEEE-1394a-2000 Controller (PHY/Link) 5678 1234 DC-1394 PCIe 823e XIO2213A/B/XIO2221 PCI Express to PCI Bridge [Cheetah Express] 823f XIO2213A/B/XIO2221 IEEE-1394b OHCI Controller [Cheetah Express] 1546 803c FWB-PCIE1X11B 8240 XIO2001 PCI Express-to-PCI Bridge 8241 TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller 1014 04b2 S824 (8286-42A) 8400 ACX 100 22Mbps Wireless Interface 1186 3b00 DWL-650+ PC Card cardbus 22Mbs Wireless Adapter [AirPlus] 1186 3b01 DWL-520+ 22Mbps PCI Wireless Adapter 1395 2201 WL22-PC 16ab 8501 WL-8305 IEEE802.11b+ Wireless LAN PCI Adapter 8401 ACX 100 22Mbps Wireless Interface 8888 Multicore DSP+ARM KeyStone II SOC 9000 Wireless Interface (of unknown type) 9065 TMS320DM642 9066 ACX 111 54Mbps Wireless Interface 0308 3404 G-102 v1 802.11g Wireless Cardbus Adapter 0308 3406 G-162 v2 802.11g Wireless Cardbus Adapter 104c 9066 WL212 Sitecom Wireless Network PCI-Card 100M (Version 1) # Found in Philips ADSL ANNEX A WLAN Router SNA6500/18 sold by Belgacom 104c 9067 TNETW1130GVF 104c 9096 Trendnet TEW-412PC Wireless PCI Adapter (Version A) 1186 3b04 DWL-G520+ Wireless PCI Adapter 1186 3b05 DWL-G650+ AirPlusG+ CardBus Wireless LAN 1186 3b08 AirPlus G DWL-G630 Wireless Cardbus Adapter (rev.B1) 1385 4c00 WG311v2 802.11g Wireless PCI Adapter 13d1 aba0 SWLMP-54108 108Mbps Wireless mini PCI card 802.11g+ 14ea ab07 GW-NS54GM Wireless Cardbus Adapter 16ec 010d USR5416 802.11g Wireless Turbo PCI Adapter 16ec 010e USR5410 802.11g Wireless Cardbus Adapter 1737 0033 WPC54G v2 802.11g Wireless-G Notebook Adapter 17cf 0032 G-162 v1 802.11g Wireless Cardbus Adapter 17cf 0033 Z-Com XG650 Wireless miniPCI 802.11b/g 187e 340b G-302 v2 802.11g Wireless PCI Adapter 187e 340c G-360 v2 802.11g Wireless PCI Adapter a001 TDC1570 a100 TDC1561 a102 TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f a106 TMS320C6414 TMS320C6415 TMS320C6416 175c 5000 ASI50xx Audio Adapter 175c 6400 ASI6400 Cobranet series 175c 8700 ASI87xx Radio Tuner card ac10 PCI1050 ac11 PCI1053 ac12 PCI1130 ac13 PCI1031 ac15 PCI1131 ac16 PCI1250 1014 0092 ThinkPad 600 ac17 PCI1220 ac18 PCI1260 ac19 PCI1221 ac1a PCI1210 ac1b PCI1450 0e11 b113 Armada M700 1014 0130 ThinkPad 600X/A21m/T20/T22 ac1c PCI1225 0e11 b121 Armada E500 1028 0088 Latitude CPi A400XT ac1d PCI1251A ac1e PCI1211 ac1f PCI1251B ac20 TI 2030 ac21 PCI2031 ac22 PCI2032 PCI Docking Bridge ac23 PCI2250 PCI-to-PCI Bridge ac28 PCI2050 PCI-to-PCI Bridge ac2c PCI2060 PCI-to-PCI Bridge ac30 PCI1260 PC card Cardbus Controller ac40 PCI4450 PC card Cardbus Controller ac41 PCI4410 PC card Cardbus Controller ac42 PCI4451 PC card Cardbus Controller 1028 00e6 PCI4451 PC card CardBus Controller (Inspiron 8100) ac44 PCI4510 PC card Cardbus Controller 1028 0149 Inspiron 5100 1028 0163 Latitude D505 1028 0196 Inspiron 5160 1071 8160 MIM2000 ac46 PCI4520 PC card Cardbus Controller 1014 0552 ThinkPad ac47 PCI7510 PC card Cardbus Controller 1028 0139 Latitude D400 1028 013f Precision M60 1028 014e Latitude D800 ac48 PCI7610 PC Card Cardbus Controller ac49 PCI7410 PC Card Cardbus Controller ac4a PCI7510/7610 CardBus Bridge 1028 0139 Latitude D400 1028 014e Latitude D800 ac4b PCI7610 SD/MMC controller ac4c PCI7610 Memory Stick controller ac50 PCI1410 PC card Cardbus Controller ac51 PCI1420 PC card Cardbus Controller 0e11 004e Evo N600c 1014 0148 ThinkPad A20m 1014 023b ThinkPad T23 1028 00b1 Latitude C600 1028 012a Latitude C640 1033 80cd Versa Note VXi 10cf 1095 Lifebook S-4510/C6155 e4bf 1000 CP2-2-HIPHOP ac52 PCI1451 PC card Cardbus Controller ac53 PCI1421 PC card Cardbus Controller ac54 PCI1620 PC Card Controller 103c 08b0 tc1100 tablet ac55 PCI1520 PC card Cardbus Controller 1014 0512 ThinkPad T30/T40 103c 0025 XE4500 Notebook ac56 PCI1510 PC card Cardbus Controller 1014 0512 ThinkPad R50e 1014 0528 ThinkPad R40e 17aa 2012 ThinkPad T60/R60 series ac60 PCI2040 PCI to DSP Bridge Controller 175c 5100 ASI51xx Audio Adapter 175c 6100 ASI61xx Audio Adapter 175c 6200 ASI62xx Audio Adapter 175c 8800 ASI88xx Audio Adapter 186f 3001 WR-G303 PCI radio receiver 186f 3005 WR-G305 PCI radio receiver 186f 3101 WR-G313 PCI radio receiver 186f 3105 WR-G315 PCI radio receiver ac8d PCI 7620 ac8e PCI7420 CardBus Controller 1028 018d Inspiron 700m/710m ac8f PCI7420/7620 SD/MS-Pro Controller 1028 018d Inspiron 700m/710m b001 TMS320C6424 fe00 FireWire Host Controller fe03 12C01A FireWire Host Controller 104d Sony Corporation 8004 DTL-H2500 [Playstation development board] 8009 CXD1947Q i.LINK Controller 800c DTL-H800 [PS1 sound development board] 800d DVBK-2000(E) DV Still Image Capture Board 8039 CXD3222 i.LINK Controller 8047 PS2 TOOL MRP 8056 Rockwell HCF 56K modem 808a Memory Stick Controller 80ff PS2 Performance Analyzer 814a PS2 Performance Analyzer 8183 ATHENS [PS3 prototype developer interface card] 81b0 BM-1 [PSP TOOL Board Management Device] 81c3 VO-4 [PSP TOOL Video Output Device] 81ce SxS Pro memory card 81ff PS3 TOOL MRP 8200 PS3 TOOL RSX Tracing FPGA 820e CXD9208GP [PS3 PS2 emulation subsystem adapter] # 2nd ID 905c SxS Pro memory card # 2nd ID 907f SxS Pro+ memory card 908f Aeolia ACPI 909e Aeolia Ethernet Controller (Marvell Yukon 2 Family) 909f Aeolia SATA AHCI Controller 90a0 Aeolia SD/MMC Host Controller 90a1 Aeolia PCI Express Glue and Miscellaneous Devices 90a2 Aeolia DMA Controller 90a3 Aeolia Memory (DDR3/SPM) 90a4 Aeolia USB 3.0 xHCI Host Controller 90bc SxS Pro+ memory card 90c0 PCIe x8 XAVC Codec Board 90c8 Belize ACPI 90c9 Belize Ethernet Controller 90ca Belize SATA AHCI Controller 90cb Belize SD/MMC Host Controller 90cc Belize PCI Express Glue and Miscellaneous Devices 90cd Belize DMA Controller 90ce Belize Memory (DDR3/SPM) 90cf Belize USB 3.0 xHCI Host Controller 90d7 Baikal ACPI 90d8 Baikal Ethernet Controller 90d9 Baikal SATA AHCI Controller 90da Baikal SD/MMC Host Controller 90db Baikal PCI Express Glue and Miscellaneous Devices 90dc Baikal DMA Controller 90dd Baikal Memory (DDR3/SPM) 90de Baikal USB 3.0 xHCI Host Controller 90eb CXD90062GG 9121 Nextorage NEM-PA NVMe SSD for PlayStation 104e Oak Technology, Inc 0017 OTI-64017 0107 OTI-107 [Spitfire] 0109 Video Adapter 0111 OTI-64111 [Spitfire] 0217 OTI-64217 0317 OTI-64317 104f Co-time Computer Ltd 1050 Winbond Electronics Corp 0000 NE2000 0001 W83769F 0033 W89C33D 802.11 a/b/g BB/MAC 0105 W82C105 0628 W83628F/W83629D PCI to ISA Bridge Set 0840 W89C840 1050 0001 W89C840 Ethernet Adapter 1050 0840 W89C840 Ethernet Adapter 0940 W89C940 5a5a W89C940 Twisted-pair Ether-LAN Controller With PCI Interface [ELANC-PCI] 6692 W6692 PCI ISDN S/T-Controller 1043 1702 ISDN Adapter (PCI Bus, D, W) 1043 1703 ISDN Adapter (PCI Bus, DV, W) 1043 1707 ISDN Adapter (PCI Bus, DV, W) 144f 1702 ISDN Adapter (PCI Bus, D, W) 144f 1703 ISDN Adapter (PCI Bus, DV, W) 144f 1707 ISDN Adapter (PCI Bus, DV, W) 9921 W99200F MPEG-1 Video Encoder 9922 W99200F/W9922PF MPEG-1/2 Video Encoder 9960 W9960CF Video Codec 9970 W9970CF 1051 Anigma, Inc. 1052 ?Young Micro Systems 1053 Young Micro Systems 1054 Hitachi, Ltd 3009 2Gbps Fibre Channel to PCI HBA 3009 300a 4Gbps Fibre Channel to PCI-X HBA 300a 300b 4Gbps Fibre Channel to PCI-X HBA 300b 300f ColdFusion 3 Chipset Processor to I/O Controller 3010 ColdFusion 3 Chipset Memory Controller Hub 3011 ColdFusion 3e Chipset Processor to I/O Controller 3012 ColdFusion 3e Chipset Memory Controller Hub 3017 Unassigned Hitachi Shared FC Device 3017 301b Virtual VGA Device 301d PCIe-to-PCIe Bridge with Virtualization IO Assist Feature 3020 FIVE-EX based Fibre Channel to PCIe HBA 302c M001 PCI Express Switch Upstream Port 302d M001 PCI Express Switch Downstream Port 3070 Hitachi FIVE-FX Fibre Channel to PCIe HBA 3505 SH7751 PCI Controller (PCIC) 350e SH7751R PCI Controller (PCIC) 1055 Microchip Technology / SMSC 7430 LAN7430 7431 LAN7431 1059 01a0 RD10055 M.2 Dual 1GbE-T1 40m 9130 SLC90E66 [Victory66] IDE 9460 SLC90E66 [Victory66] ISA 9462 SLC90E66 [Victory66] USB 9463 SLC90E66 [Victory66] ACPI e420 LAN9420/LAN9420i 1056 ICL # Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this. 1057 Motorola 0001 MPC105 [Eagle] 0002 MPC106 [Grackle] 0003 MPC8240 [Kahlua] 0004 MPC107 0006 MPC8245 [Unity] 0008 MPC8540 0009 MPC8560 0012 MPC8548 [PowerQUICC III] 0100 MC145575 [HFC-PCI] 0431 KTI829c 100VG 1073 Nokia N770 1219 Nokia N800 1801 DSP56301 Digital Signal Processor 14fb 0101 Transas Radar Imitator Board [RIM] 14fb 0102 Transas Radar Imitator Board [RIM-2] 14fb 0202 Transas Radar Integrator Board [RIB-2] 14fb 0611 1 channel CAN bus Controller [CanPci-1] 14fb 0612 2 channels CAN bus Controller [CanPci-2] 14fb 0613 3 channels CAN bus Controller [CanPci-3] 14fb 0614 4 channels CAN bus Controller [CanPci-4] 14fb 0621 1 channel CAN bus Controller [CanPci2-1] 14fb 0622 2 channels CAN bus Controller [CanPci2-2] 14fb 0810 Transas VTS Radar Integrator Board [RIB-4] 175c 4200 ASI4215 Audio Adapter 175c 4300 ASI43xx Audio Adapter 175c 4400 ASI4401 Audio Adapter ecc0 0010 Darla ecc0 0020 Gina ecc0 0030 Layla rev.0 ecc0 0031 Layla rev.1 ecc0 0040 Darla24 rev.0 ecc0 0041 Darla24 rev.1 ecc0 0050 Gina24 rev.0 ecc0 0051 Gina24 rev.1 ecc0 0070 Mona rev.0 ecc0 0071 Mona rev.1 ecc0 0072 Mona rev.2 18c0 MPC8265A/8266/8272 18c1 MPC8271/MPC8272 3052 SM56 Data Fax Modem 3410 DSP56361 Digital Signal Processor ecc0 0050 Gina24 rev.0 ecc0 0051 Gina24 rev.1 ecc0 0060 Layla24 ecc0 0070 Mona rev.0 ecc0 0071 Mona rev.1 ecc0 0072 Mona rev.2 ecc0 0080 Mia rev.0 ecc0 0081 Mia rev.1 ecc0 0090 Indigo ecc0 00a0 Indigo IO ecc0 00b0 Indigo DJ ecc0 0100 3G 4801 Raven 4802 Falcon 4803 Hawk 4806 CPX8216 # MPC7410 PowerPC microprocessor and PCI host bridge 480b MPC7410 4d68 20268 5600 SM56 PCI Modem 1057 0300 SM56 PCI Speakerphone Modem 1057 0301 SM56 PCI Voice Modem 1057 0302 SM56 PCI Fax Modem 1057 5600 SM56 PCI Voice modem 13d2 0300 SM56 PCI Speakerphone Modem 13d2 0301 SM56 PCI Voice modem 13d2 0302 SM56 PCI Fax Modem 1436 0300 SM56 PCI Speakerphone Modem 1436 0301 SM56 PCI Voice modem 1436 0302 SM56 PCI Fax Modem 144f 100c SM56 PCI Fax Modem 1494 0300 SM56 PCI Speakerphone Modem 1494 0301 SM56 PCI Voice modem 14c8 0300 SM56 PCI Speakerphone Modem 14c8 0302 SM56 PCI Fax Modem 1668 0300 SM56 PCI Speakerphone Modem 1668 0302 SM56 PCI Fax Modem 5608 Wildcard X100P 5803 MPC5200 5806 MCF54 Coldfire 5808 MPC8220 5809 MPC5200B 6400 MPC190 Security Processor (S1 family, encryption) 6405 MPC184 Security Processor (S1 family) 1058 Electronics & Telecommunications RSH 1059 Kontron 0004 FPGA M.2 (K20058) 1059 0000 FPGA M.2 (K20058) 105a Promise Technology, Inc. 0d30 PDC20265 (FastTrak100 Lite/Ultra100) 1043 8042 AV7266-E South Bridge Promise RAID 105a 4d33 Ultra100 0d38 20263 105a 4d39 Fasttrak66 1275 20275 3318 PDC20318 (SATA150 TX4) 3319 PDC20319 (FastTrak S150 TX4) 105a 3319 FastTrak S150 TX4 4 port SATA PCI board 8086 3427 S875WP1-E mainboard 3371 PDC20371 (FastTrak S150 TX2plus) 3373 PDC20378 (FastTrak 378/SATA 378) 1043 80f5 K8V Deluxe/PC-DL Deluxe motherboard 1462 590d KT6 Delta-FIS2R (MS-6590) 1462 702e K8T NEO FIS2R motherboard 3375 PDC20375 (SATA150 TX2plus) 3376 PDC20376 (FastTrak 376) 1043 809e A7V8X motherboard 3515 PDC40719 [FastTrak TX4300/TX4310] 3519 PDC40519 (FastTrak TX4200) 3570 PDC20771 [FastTrak TX2300] 3571 PDC20571 (FastTrak TX2200) 3574 PDC20579 SATAII 150 IDE Controller 3577 PDC40779 (SATA 300 779) 3d17 PDC40718 (SATA 300 TX4) 3d18 PDC20518/PDC40518 (SATAII 150 TX4) 3d73 PDC40775 (SATA 300 TX2plus) 3d75 PDC20575 (SATAII150 TX2plus) 3f20 PDC42819 [FastTrak TX2650/TX4650] 4302 80333 [SuperTrak EX4350] 4d30 PDC20267 (FastTrak100/Ultra100) 105a 4d33 Ultra100 105a 4d39 FastTrak100 8086 5744 S845WD1-E mainboard 4d33 20246 105a 4d33 20246 IDE Controller 4d38 PDC20262 (FastTrak66/Ultra66) 105a 4d30 Ultra Device on SuperTrak 105a 4d33 Ultra66 105a 4d39 FastTrak66 4d68 PDC20268 [Ultra100 TX2] 105a 4d68 Ultra100 TX2 4d69 20269 105a 4d68 Ultra133TX2 5275 PDC20276 (MBFastTrak133 Lite) 1043 807e A7V333 motherboard. 105a 0275 SuperTrak SX6000 IDE 105a 1275 MBFastTrak133 Lite (tm) Controller (RAID mode) 1458 b001 MBUltra 133 5300 DC5300 6268 PDC20270 (FastTrak100 LP/TX2/TX4) 105a 4d68 FastTrak100 TX2 6269 PDC20271 (FastTrak TX2000) 105a 6269 FastTrak TX2/TX2000 6300 PDC81731 [FastTrak SX8300] 6621 PDC20621 (FastTrak S150 SX4/FastTrak SX4000 lite) 6622 PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller 6624 PDC20621 [FastTrak SX4100] 6626 PDC20618 (Ultra 618) 6629 PDC20619 (FastTrak TX4000) 7275 PDC20277 (SBFastTrak133 Lite) 8002 SATAII150 SX8 8350 80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300] 8650 81384 [SuperTrak EX SAS and SATA RAID Controller] 105a 4600 SuperTrak EX4650A 105a 4601 SuperTrak EX4650 105a 4610 SuperTrak EX4650EL 105a 8600 SuperTrak EX8650EL 105a 8601 SuperTrak EX8650A 105a 8602 SuperTrak EX8654 105a 8603 SuperTrak EX8658 105a 8604 SuperTrak EX8650 105a 8610 SuperTrak EX8650M 105a a600 SuperTrak EX12650 105a b600 SuperTrak EX16650 105a b601 SuperTrak EX16654 105a b602 SuperTrak EX16658 8760 PM8010 [SuperTrak EX SAS and SATA 6G RAID Controller] c350 80333 [SuperTrak EX12350] e350 80333 [SuperTrak EX24350] 105b Foxconn International, Inc. 9602 RS780/RS880 PCI to PCI bridge (int gfx) e0c3 T99W175 5G Modem [Snapdragon X55] 105c Wipro Infotech Limited 105d Number 9 Computer Company 2309 Imagine 128 2339 Imagine 128-II 105d 0000 Imagine 128 series 2 4Mb VRAM 105d 0001 Imagine 128 series 2 4Mb VRAM 105d 0002 Imagine 128 series 2 4Mb VRAM 105d 0003 Imagine 128 series 2 4Mb VRAM 105d 0004 Imagine 128 series 2 4Mb VRAM 105d 0005 Imagine 128 series 2 4Mb VRAM 105d 0006 Imagine 128 series 2 4Mb VRAM 105d 0007 Imagine 128 series 2 4Mb VRAM 105d 0008 Imagine 128 series 2e 4Mb DRAM 105d 0009 Imagine 128 series 2e 4Mb DRAM 105d 000a Imagine 128 series 2 8Mb VRAM 105d 000b Imagine 128 series 2 8Mb H-VRAM 11a4 000a Metheus 5 Megapixel 13cc 0000 Metheus 5 Megapixel 13cc 0004 Metheus 5 Megapixel 13cc 0005 Metheus 5 Megapixel 13cc 0006 Metheus 5 Megapixel 13cc 0008 Metheus 5 Megapixel 13cc 0009 Metheus 5 Megapixel 13cc 000a Metheus 5 Megapixel 13cc 000c Metheus 5 Megapixel 493d Imagine 128 T2R [Ticket to Ride] 11a4 000a Metheus 5 Megapixel, Dual Head 11a4 000b Metheus 5 Megapixel, Dual Head 13cc 0002 Metheus 4 Megapixel, Dual Head 13cc 0003 Metheus 5 Megapixel, Dual Head 13cc 0007 Metheus 5 Megapixel, Dual Head 13cc 0008 Metheus 5 Megapixel, Dual Head 13cc 0009 Metheus 5 Megapixel, Dual Head 13cc 000a Metheus 5 Megapixel, Dual Head 5348 Revolution 4 105d 0037 Revolution IV-FP AGP (For SGI 1600SW) 11a4 0028 PVS5600M 11a4 0038 PVS5600D 105e Vtech Computers Ltd 105f Infotronic America Inc 1060 United Microelectronics [UMC] 0001 UM82C881 0002 UM82C886 0101 UM8673F 0881 UM8881 0886 UM8886F 0891 UM8891A 1001 UM886A 673a UM8886BF 673b EIDE Master/DMA 8710 UM8710 886a UM8886A 8881 UM8881F 8886 UM8886F 888a UM8886A 8891 UM8891A 9017 UM9017F 9018 UM9018 9026 UM9026 e881 UM8881N e886 UM8886N e88a UM8886N e891 UM8891N 1061 I.I.T. 0001 AGX016 0002 IIT3204/3501 1062 Maspar Computer Corp 1063 Ocean Office Automation 1064 Alcatel 1102 Dynamite 2840 (ADSL PCI modem) 1065 Texas Microsystems 1066 PicoPower Technology 0000 PT80C826 0001 PT86C521 [Vesuvius v1] Host Bridge 0002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Master 0003 PT86C524 [Nile] PCI-to-PCI Bridge 0004 PT86C525 [Nile-II] PCI-to-PCI Bridge 0005 National PC87550 System Controller 8002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave 1067 Mitsubishi Electric 0301 AccelGraphics AccelECLIPSE 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] 0308 Tornado 3000 [OEM Evans & Sutherland] 1002 VG500 [VolumePro Volume Rendering Accelerator] 1068 Diversified Technology 1069 Mylex Corporation 0001 DAC960P 0002 DAC960PD 0010 DAC960PG 0020 DAC960LA 0050 AcceleRAID 352/170/160 support Device 1069 0050 AcceleRAID 352 support Device 1069 0052 AcceleRAID 170 support Device 1069 0054 AcceleRAID 160 support Device b166 AcceleRAID 600/500/400/Sapphire support Device 1014 0242 iSeries 2872 DASD IOA 1014 0266 Dual Channel PCI-X U320 SCSI Adapter 1014 0278 Dual Channel PCI-X U320 SCSI RAID Adapter 1014 02d3 Dual Channel PCI-X U320 SCSI Adapter 1014 02d4 Dual Channel PCI-X U320 SCSI RAID Adapter 1069 0200 AcceleRAID 400, Single Channel, PCI-X, U320, SCSI RAID 1069 0202 AcceleRAID Sapphire, Dual Channel, PCI-X, U320, SCSI RAID 1069 0204 AcceleRAID 500, Dual Channel, Low-Profile, PCI-X, U320, SCSI RAID 1069 0206 AcceleRAID 600, Dual Channel, PCI-X, U320, SCSI RAID ba55 eXtremeRAID 1100 support Device ba56 eXtremeRAID 2000/3000 support Device 1069 0030 eXtremeRAID 3000 support Device 1069 0040 eXtremeRAID 2000 support Device ba57 eXtremeRAID 4000/5000 support Device 1069 0072 eXtremeRAID 5000 support Device 106a Aten Research Inc 106b Apple Inc. 0001 Bandit PowerPC host bridge 0002 Grand Central I/O 0003 Control Video 0004 PlanB Video-In 0007 O'Hare I/O 000b Apple Camera 000c DOS on Mac 000e Hydra Mac I/O 0010 Heathrow Mac I/O 0017 Paddington Mac I/O 0018 UniNorth FireWire 0019 KeyLargo USB 001e UniNorth Internal PCI 001f UniNorth PCI 0020 UniNorth AGP 0021 UniNorth GMAC (Sun GEM) 0022 KeyLargo Mac I/O 0024 UniNorth/Pangea GMAC (Sun GEM) 0025 KeyLargo/Pangea Mac I/O 0026 KeyLargo/Pangea USB 0027 UniNorth/Pangea AGP 0028 UniNorth/Pangea PCI 0029 UniNorth/Pangea Internal PCI 002d UniNorth 1.5 AGP 002e UniNorth 1.5 PCI 002f UniNorth 1.5 Internal PCI 0030 UniNorth/Pangea FireWire 0031 UniNorth 2 FireWire 106b 5811 iBook G4 2004 0032 UniNorth 2 GMAC (Sun GEM) 0033 UniNorth 2 ATA/100 0034 UniNorth 2 AGP 0035 UniNorth 2 PCI 0036 UniNorth 2 Internal PCI 003b UniNorth/Intrepid ATA/100 003e KeyLargo/Intrepid Mac I/O 003f KeyLargo/Intrepid USB 1af4 1100 QEMU Virtual Machine 0040 K2 KeyLargo USB 0041 K2 KeyLargo Mac/IO 0042 K2 FireWire 0043 K2 ATA/100 0045 K2 HT-PCI Bridge 0046 K2 HT-PCI Bridge 0047 K2 HT-PCI Bridge 0048 K2 HT-PCI Bridge 0049 K2 HT-PCI Bridge 004a CPC945 HT Bridge 004b U3 AGP 004c K2 GMAC (Sun GEM) 004f Shasta Mac I/O 0050 Shasta IDE 0051 Shasta (Sun GEM) 0052 Shasta Firewire 0053 Shasta PCI Bridge 0054 Shasta PCI Bridge 0055 Shasta PCI Bridge 0056 U4 PCIe 0057 U3 HT Bridge 0058 U3L AGP Bridge 0059 U3H AGP Bridge 005b CPC945 PCIe Bridge 0066 Intrepid2 AGP Bridge 0067 Intrepid2 PCI Bridge 0068 Intrepid2 PCI Bridge 0069 Intrepid2 ATA/100 006a Intrepid2 Firewire 006b Intrepid2 GMAC (Sun GEM) 0074 U4 HT Bridge 100c Apple Silicon PCI Express Root Port 1010 Apple Silicon USB4/Thunderbolt PCI Express Root Port # should be 14e4:1645 1645 Broadcom NetXtreme BCM5701 Gigabit Ethernet 1801 T2 Bridge Controller 1802 T2 Secure Enclave Processor 1803 Apple Audio Device 2001 S1X NVMe Controller 2002 S3ELab NVMe Controller 2003 S3X NVMe Controller 2005 ANS2 NVMe Controller 106c Hynix Semiconductor 8139 8139c 100BaseTX Ethernet Controller 8801 Dual Pentium ISA/PCI Motherboard 8802 PowerPC ISA/PCI Motherboard 8803 Dual Window Graphics Accelerator 8804 LAN Controller 8805 100-BaseT LAN 106d Sequent Computer Systems 106e DFI, Inc 106f City Gate Development Ltd 1070 Daewoo Telecom Ltd 1071 Mitac 8160 Mitac 8060B Mobile Platform 1072 GIT Co Ltd 1073 Yamaha Corporation 0001 3D GUI Accelerator 0002 YGV615 [RPA3 3D-Graphics Controller] 0003 YMF-740 0004 YMF-724 1073 0004 YMF724-Based PCI Audio Adapter 0005 DS1 Audio 1073 0005 DS-XG PCI Audio CODEC 0006 DS1 Audio 0008 DS1 Audio 1073 0008 DS-XG PCI Audio CODEC 000a DS1L Audio 1073 0004 DS-XG PCI Audio CODEC 1073 000a DS-XG PCI Audio CODEC 8086 4d55 DS-XG PCI Audio CODEC [Intel MU440EX] 000c YMF-740C [DS-1L Audio Controller] 107a 000c DS-XG PCI Audio CODEC 000d YMF-724F [DS-1 Audio Controller] 1073 000d DS-XG PCI Audio CODEC 0010 YMF-744B [DS-1S Audio Controller] 1073 0006 DS-XG PCI Audio CODEC 1073 0010 DS-XG PCI Audio CODEC 0012 YMF-754 [DS-1E Audio Controller] 1073 0012 DS-XG PCI Audio Codec 0020 DS-1 Audio 1000 SW1000XG [XG Factory] 2000 DS2416 Digital Mixing Card 1073 2000 DS2416 Digital Mixing Card 1074 NexGen Microsystems 4e78 82c500/1 1075 Advanced Integrations Research 1076 Chaintech Computer Co. Ltd 1077 QLogic Corp. 1016 ISP10160 Single Channel Ultra3 SCSI Processor 1020 ISP1020/1040 Fast-wide SCSI 1022 ISP1022 Fast-wide SCSI 1080 ISP1080 SCSI Host Adapter 1216 ISP12160 Dual Channel Ultra3 SCSI Processor 101e 8471 QLA12160 on AMI MegaRAID 101e 8493 QLA12160 on AMI MegaRAID 1240 ISP1240 SCSI Host Adapter 1280 ISP1280 SCSI Host Adapter 1634 FastLinQ QL45000 Series 40GbE Controller 1077 e4f1 FastLinQ QL45212H 40GbE Adapter 1077 e4f2 FastLinQ QL45211H 40GbE Adapter 1077 e4f3 FastLinQ QL45412H 40GbE Adapter 1077 e4f4 FastLinQ QL45411H 40GbE Adapter 1644 FastLinQ QL45000 Series 100GbE Controller 1077 e4f8 FastLinQ QL45611H 100GbE Adapter 1654 FastLinQ QL45000 Series 50GbE Controller 1077 0032 QL45212 Flex 50Gb 2-port Ethernet Adapter 1590 0223 Synergy 6810C 25/50Gb Ethernet Adapter 1590 0287 Synergy 6820C 25/50Gb CNA 1656 FastLinQ QL45000 Series 25GbE Controller 1077 0033 QL45214 Flex 25Gb 4-port Ethernet Adapter 1077 02a7 QL45212-DE 25GbE Adapter 1077 e4f6 FastLinQ QL45211H 25GbE Adapter 1077 e4f7 FastLinQ QL45212H 25GbE Adapter 1590 0245 10/20/25GbE 2P 4820c CNA 165c FastLinQ QL45000 Series 10/25/40/50GbE Controller (FCoE) 1077 0034 QL45262 Flex 50Gb 2-port Ethernet Adapter w/ iSCSI/FCoE 1077 e4f1 FastLinQ QL45462H 40GbE FCoE Adapter 1077 e4f2 FastLinQ QL45461H 40GbE FCoE Adapter 1590 0245 10/20/25GbE 2P 4820c CNA FCoE 165e FastLinQ QL45000 Series 10/25/40/50GbE Controller (iSCSI) 1077 0034 QL45262 Flex 50Gb 2-port Ethernet Adapter w/ iSCSI/FCoE 1077 e4f1 FastLinQ QL45462H 40GbE iSCSI Adapter 1077 e4f2 FastLinQ QL45461H 40GbE iSCSI Adapter 1590 0245 10/20/25GbE 2P 4820c CNA iSCSI 1664 FastLinQ QL45000 Series Gigabit Ethernet Controller (SR-IOV VF) 1077 e4f1 FastLinQ QL45462H 40GbE Adapter (SR-IOV VF) 1077 e4f2 FastLinQ QL45461H 40GbE Adapter (SR-IOV VF) 1077 e4f3 FastLinQ QL45412H 40GbE Adapter (SR-IOV VF) 1077 e4f4 FastLinQ QL45411H 40GbE Adapter (SR-IOV VF) 1077 e4f6 FastLinQ QL45211H 25GbE Adapter (SR-IOV VF) 1077 e4f7 FastLinQ QL45212H 25GbE Adapter (SR-IOV VF) 1077 e4f8 FastLinQ QL45611H 100GbE Adapter (SR-IOV VF) 1590 0245 10/20/25GbE 2P 4820c CNA SRIOV 2020 ISP2020A Fast!SCSI Basic Adapter 2031 ISP8324-based 16Gb Fibre Channel to PCI Express Adapter 103c 17e7 SN1000Q 16Gb Single Port Fibre Channel Adapter 103c 17e8 SN1000Q 16Gb Dual Port Fibre Channel Adapter 103c 1939 QMH2672 16Gb Dual Port Fibre Channel Adapter 103c 8002 3830C 16G Fibre Channel Host Bus Adapter 1077 0241 QLE2670 16Gb Single Port Fibre Channel Adapter 1077 0249 QLE2672 16Gb Dual Port Fibre Channel Adapter 2071 ISP2714-based 16/32Gb Fibre Channel to PCIe Adapter 1077 0283 QLE2764 Quad Port 32Gb Fibre Channel to PCIe Adapter 1077 029e QLE2694 Quad Port 16Gb Fibre Channel to PCIe Adapter 1077 02a2 QLE2694L Quad Port 16Gb Fibre Channel to PCIe Adapter 1077 02ad QLE2694U Quad Port 16/32Gb Fibre Channel to PCIe Adapter 2081 ISP2814-based 64/32G Fibre Channel to PCIe Controller 1077 02e1 QLE2874 Quad Port 64GFC PCIe Gen4 x16 Adapter 1077 02e3 QLE2774 Quad Port 32GFC PCIe Gen4 x16 Adapter 2089 ISP2854-based 64/32G Fibre Channel to PCIe Controller with StorCryption 1077 02e8 QLE2884 Quad Port 64GFC PCIe Gen4 x16 Adapter with StorCryption 1077 02ea QLE2784 Quad Port 32GFC PCIe Gen4 x16 Adapter with StorCryption 2100 QLA2100 64-bit Fibre Channel Adapter 1077 0001 QLA2100 64-bit Fibre Channel Adapter 2200 QLA2200 64-bit Fibre Channel Adapter 1077 0002 QLA2200 2261 ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter 1077 0299 QLE2740 Single Port 32Gb Fibre Channel to PCIe Adapter 1077 029a QLE2742 Dual Port 32Gb Fibre Channel to PCIe Adapter 1077 029b QLE2690 Single Port 16Gb Fibre Channel to PCIe Adapter 1077 029c QLE2692 Dual Port 16Gb Fibre Channel to PCIe Adapter 1077 02a7 QLE2690 Single Port 16Gb FC to PCIe Gen3 x8 Adapter 1077 02a8 QLE2692 Dual Port 16Gb FC to PCIe Gen3 x8 Adapter 1077 02ab QLE2740 Single Port 32Gb FC to PCIe Gen3 x8 Adapter 1077 02ac QLE2742 Dual Port 32Gb FC to PCIe Gen3 x8 Adapter 1077 02b8 2x16Gb QME2692 FC HBA 1077 02b9 2x32Gb QME2742 FC HBA 1590 00f9 StoreFabric SN1100Q 16Gb Single Port Fibre Channel Host Bus Adapter 1590 00fa StoreFabric SN1100Q 16Gb Dual Port Fibre Channel Host Bus Adapter 1590 0203 StoreFabric SN1600Q 32Gb Single Port Fibre Channel Host Bus Adapter 1590 0204 StoreFabric SN1600Q 32Gb Dual Port Fibre Channel Host Bus Adapter 1590 022d 5830C 32Gb Dual Port Fibre Channel Adapter 193d 100d NIC-FC680i-Mb-2x16G 2281 ISP2812-based 64/32G Fibre Channel to PCIe Controller 1077 02e2 QLE2872 Dual Port 64GFC PCIe Gen4 x8 Adapter 1077 02e4 QLE2772 Dual Port 32GFC PCIe Gen4 x8 Adapter 1077 02ee QLE2870 Single Port 64GFC PCIe Gen4 x8 Adapter 1077 02f0 QLE2770 Single Port 32GFC PCIe Gen4 x8 Adapter 1077 02f2 QLogic 1x32Gb QLE2770 FC HBA 1077 02f3 QLogic 2x32Gb QLE2772 FC HBA 1590 02d3 SN1610Q - 1P Enhanced 32GFC Single Port Fibre Channel Host Bus Adapter 1590 02d4 SN1610Q - 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter 2289 ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption 1077 02e9 QLE2882 Dual Port 64GFC PCIe Gen4 x8 Adapter with StorCryption 1077 02eb QLE2782 Dual Port 32GFC PCIe Gen4 x8 Adapter with StorCryption 1077 02ef QLE2880 Single Port 64GFC PCIe Gen4 x8 Adapter with StorCryption 1077 02f1 QLE2780 Single Port 32GFC PCIe Gen4 x8 Adapter with StorCryption 2300 QLA2300 64-bit Fibre Channel Adapter 2312 ISP2312-based 2Gb Fibre Channel to PCI-X HBA 103c 0131 2Gb Fibre Channel - Single port [A7538A] 103c 12ba 2Gb Fibre Channel - Dual port [A6826A] 2322 ISP2322-based 2Gb Fibre Channel to PCI-X HBA 2422 ISP2422-based 4Gb Fibre Channel to PCI-X HBA 103c 12d7 4Gb Fibre Channel [AB379A] 103c 12dd 4Gb Fibre Channel [AB429A] 2432 ISP2432-based 4Gb Fibre Channel to PCI Express HBA 103c 7040 FC1142SR 4Gb 1-port PCIe Fibre Channel Host Bus Adapter [HPAE311A] 1077 0137 QLE2460 Single-Port 4Gbps FC-to-PCI-X/PCIe Host Bus Adapter 1077 0138 QLE2462 Dual-Port 4Gbps FC-to-PCI-X/PCIe Host Bus Adapter 2532 ISP2532-based 8Gb Fibre Channel to PCI Express HBA 1014 041e FC EN0Y/EN12 PCIe2 LP 8 Gb 4-port Fibre Channel Adapter for POWER 103c 3262 StorageWorks 81Q 103c 3263 StorageWorks 82Q 1077 015c QLE2560 PCI Express to 8Gb FC Single Channel 1077 015d QLE2562 PCI Express to 8Gb FC Dual Channel 1077 015e QLE2564 PCI Express to 8Gb FC Quad Channel 1077 0167 QME2572 Dual Port FC8 HBA Mezzanine 1590 00fc StoreFabric 84Q 8Gb Quad Port Fibre Channel Host Bus Adapter 2971 ISP2684 2981 32G SFP28 EP2744 Apatter 1bd4 00b0 32G SFP28 EP2744 Apatter 3022 ISP4022-based Ethernet NIC 3032 ISP4032-based Ethernet IPv6 NIC 4010 ISP4010-based iSCSI TOE HBA 4022 ISP4022-based iSCSI TOE HBA 4032 ISP4032-based iSCSI TOE IPv6 HBA 5432 SP232-based 4Gb Fibre Channel to PCI Express HBA 6312 SP202-based 2Gb Fibre Channel to PCI-X HBA 6322 SP212-based 2Gb Fibre Channel to PCI-X HBA 7220 IBA7220 InfiniBand HCA 7322 IBA7322 QDR InfiniBand HCA 8000 10GbE Converged Network Adapter (TCP/IP Networking) 8001 10GbE Converged Network Adapter (FCoE) 1014 03af FC 5708/5270 10 Gb FCoE PCIe Dual Port Adapter for POWER 8020 cLOM8214 1/10GbE Controller 1028 1f64 QMD8262-k 10G DP bNDC KR 103c 3346 CN1000Q Dual Port Converged Network Adapter 103c 3733 NC523SFP 10Gb 2-port Server Adapter 1077 0203 8200 Series Single Port 10GbE Converged Network Adapter (TCP/IP Networking) 1077 0207 8200 Series Dual Port 10GbE Converged Network Adapter (TCP/IP Networking) 1077 020b 3200 Series Dual Port 10Gb Intelligent Ethernet Adapter 1077 020c 3200 Series Quad Port 1Gb Intelligent Ethernet Adapter 1077 020f 3200 Series Single Port 10Gb Intelligent Ethernet Adapter 1077 0210 QME8242-k 10GbE Dual Port Mezzanine Card 1077 0233 QME8262-k 10GbE Dual Port Mezzanine Card 8021 8200 Series 10GbE Converged Network Adapter (FCoE) 103c 3348 CN1000Q Dual Port Converged Network Adapter 1077 0211 QME8242-k 10GbE Dual Port Mezzanine Card, FCoE 8022 8200 Series 10GbE Converged Network Adapter (iSCSI) 103c 3347 CN1000Q Dual Port Converged Network Adapter 1077 0212 QME8242-k 10GbE Dual Port Mezzanine Card, iSCSI 8030 ISP8324 1/10GbE Converged Network Controller 1077 0243 8300 Series Single Port 10GbE Converged Network Adapter (TCP/IP Networking) 1077 0246 8300 Series Dual Port 10GbE Converged Network Adapter (TCP/IP Networking) 8031 8300 Series 10GbE Converged Network Adapter (FCoE) 8032 8300 Series 10GbE Converged Network Adapter (iSCSI) 8070 FastLinQ QL41000 Series 10/25/40/50GbE Controller 1077 0001 10GE 2P QL41162HxRJ-DE Adapter 1077 0002 10GE 2P QL41112HxCU-DE Adapter 1077 0004 4x10GE QL41164HFCU CNA 1077 0005 QLogic 4x10GE QL41164HMRJ CNA 1077 0006 QLogic 4x10GE QL41164HMCU CNA 1077 0007 QLogic 2x1GE+2x10GE QL41264HMCU CNA 1077 0009 QLogic 2x1GE+2x10GE QL41162HMRJ CNA 1077 000b 25GE 2P QL41262HxCU-DE Adapter 1077 000f 2x25GE QL41262HMKR CNA 1077 0010 2x25GE QL41232HMKR NIC 1077 0011 FastLinQ QL41212HLCU 25GbE Adapter 1077 0012 FastLinQ QL41112H 10GbE Adapter 1077 0019 QL41232HOCU - Dual Port 25/10GbE SFP28 OCP Adapter 1077 0039 QLogic QL41262 PCIe 25Gb 2-Port SFP28 Ethernet Adapter 1077 0053 QLogic 2x25GE QL41232HQCU NIC 1077 0054 2x10GE QL41132HQRJ NIC 1077 0055 QLogic 2x10GE QL41132HQCU NIC 1077 0056 2x10GE QL41132HxRJ NIC 1077 0057 2x25GE QL41232HxCU NIC 1077 0065 QLogic 4x10GE QL41154HQRJ CNA 1077 0066 QLogic 4x10GE QL41154HQCU CNA 1077 0068 10GbE 2p SFP+ QL41132HLCU-HC Adapter 1077 0069 10GbE 2p BASE-T QL41132HQRJ-HC OCP3 Adapter 1077 0070 10GbE 2p BASE-T QL41132HLRJ-HC Adapter 1077 0071 10GbE 2p SFP+ QL41132HQCU-HC OCP3 Adapter 1077 0072 10GbE 4p SFP+ QL41134HLCU-HC Adapter 1077 0073 10/25GbE 2p SFP28 QL41232HQCU-HC OCP3 Adapter 1077 0074 10/25GbE 2p SFP28 QL41232HLCU-HC Adapter 1590 021a 10GbE 2P QL41162HLRJ-HP Adapter 1590 021b 10GbE 2P QL41162HLRJ-HP Adapter 1590 021d 10/25GbE 2P QL41222HLCU-HP Adapter 1590 021e 10/25GbE 2P QL41162HMRJ-HP Adapter 1590 021f 10/25GbE 2P QL41262HMCU-HP Adapter 1590 0220 10/25GbE 2P QL41122HLRJ-HP Adapter 1590 02bd 10Gb 2P 524SFP+ NIC 193d 1030 NIC-ETH681i-Mb-2x25G 193d 1032 NIC-ETH682i-Mb-2x25G 8080 FastLinQ QL41000 Series 10/25/40/50GbE Controller (FCoE) 1077 0001 10GE 2P QL41162HxRJ-DE Adapter 1077 0002 10GE 2P QL41112HxCU-DE Adapter 1077 0004 4x10GE QL41164HFCU CNA 1077 0005 QLogic 4x10GE QL41164HMRJ CNA 1077 0006 QLogic 4x10GE QL41164HMCU CNA 1077 0007 QLogic 2x1GE+2x10GE QL41264HMCU CNA 1077 0009 QLogic 2x1GE+2x10GE QL41162HMRJ CNA 1077 000b 25GE 2P QL41262HxCU-DE Adapter 1077 000c QLogic 2x25GE QL41262HMCU CNA 1077 000d FastLinQ QL41262H 25GbE FCoE Adapter 1077 000e FastLinQ QL41162H 10GbE FCoE Adapter 1077 000f 2x25GE QL41262HMKR CNA 1590 021a 10GbE 2P QL41162HLRJ-HP Adapter 1590 021b 10GbE 2P QL41162HLRJ-HP Adapter 8084 FastLinQ QL41000 Series 10/25/40/50GbE Controller (iSCSI) 1077 0001 10GE 2P QL41162HxRJ-DE Adapter 1077 0002 10GE 2P QL41112HxCU-DE Adapter 1077 0003 4x10GE QL41164HxRJ CNA 1077 0004 4x10GE QL41164HFCU CNA 1077 0005 QLogic 4x10GE QL41164HMRJ CNA 1077 0006 QLogic 4x10GE QL41164HMCU CNA 1077 0007 QLogic 2x25GE QL41262HMCU CNA 1077 0009 QLogic 2x1GE+2x10GE QL41162HMRJ CNA 1077 000b 25GE 2P QL41262HxCU-DE Adapter 1077 000c QLogic 2x25GE QL41262HMCU CNA 1077 000d FastLinQ QL41262H 25GbE iSCSI Adapter 1077 000e FastLinQ QL41162H 10GbE iSCSI Adapter 1077 000f 2x25GE QL41262HMKR CNA 1077 0065 QLogic 4x10GE QL41154HQRJ CNA 1077 0066 QLogic 4x10GE QL41154HQCU CNA 1590 021a 10GbE 2P QL41162HLRJ-HP Adapter 1590 021b 10GbE 2P QL41162HLRJ-HP Adapter 8090 FastLinQ QL41000 Series Gigabit Ethernet Controller (SR-IOV VF) 1077 0001 25GE 2P QL41262HxCU-DE Adapter 1077 0002 10GE 2P QL41112HxCU-DE Adapter 1077 0003 4x10GE QL41164HxRJ CNA 1077 0004 4x10GE QL41164HFCU CNA 1077 0005 QLogic 4x10GE QL41164HMRJ CNA 1077 0006 QLogic 4x10GE QL41164HMCU CNA 1077 0007 QLogic 2x1GE+2x10GE QL41264HMCU CNA 1077 0009 QLogic 2x1GE+2x10GE QL41162HMRJ CNA 1077 000b 25GE 2P QL41262HxCU-DE Adapter 1077 000c QLogic 2x25GE QL41262HMCU CNA 1077 000d FastLinQ QL41262H 25GbE FCoE Adapter (SR-IOV VF) 1077 000e FastLinQ QL41162H 10GbE iSCSI Adapter (SR-IOV VF) 1077 000f 2x25GE QL41262HMKR CNA 1077 0010 2x25GE QL41232HMKR NIC 1077 0011 FastLinQ QL41212H 25GbE Adapter (SR-IOV VF) 1077 0012 FastLinQ QL41112H 10GbE Adapter (SR-IOV VF) 1077 0053 QLogic 2x25GE QL41232HQCU NIC 1077 0054 QLogic 2x10GE QL41132HQRJ NIC 1077 0055 QLogic 2x10GE QL41132HQCU NIC 1077 0056 2x10GE QL41132HxRJ NIC 1077 0057 2x25GE QL41232HxCU NIC 1077 0065 QLogic 4x10GE QL41154HQRJ CNA 1077 0066 QLogic 4x10GE QL41154HQCU CNA 1590 021a 10GbE 2P QL41162HLRJ-HP Adapter 1590 021b 10GbE 2P QL41162HLRJ-HP Adapter 1590 021e 10/25GbE 2P QL41162HMRJ-HP Adapter 1590 021f 10/25GbE 2P QL41262HMCU-HP Adapter 1590 02bd 10Gb 2P 524SFP+ NIC 8430 ISP8324 1/10GbE Converged Network Controller (NIC VF) 8431 8300 Series 10GbE Converged Network Adapter (FCoE VF) 8432 ISP2432M-based 10GbE Converged Network Adapter (CNA) 1078 Cyrix Corporation 0000 5510 [Grappa] 0001 PCI Master 0002 5520 [Cognac] 0100 5530 Legacy [Kahlua] 0101 5530 SMI [Kahlua] 0102 5530 IDE [Kahlua] 0103 5530 Audio [Kahlua] 0104 5530 Video [Kahlua] 0400 ZFMicro PCI Bridge 0401 ZFMicro Chipset SMI 0402 ZFMicro Chipset IDE 0403 ZFMicro Expansion Bus 1079 I-Bus 107a NetWorth # formerly Gateway 2000 / acquired by Acer Inc. 107b Gateway, Inc. 107c LG Electronics [Lucky Goldstar Co. Ltd] 107d LeadTek Research Inc. 0000 P86C850 107e Interphase Corporation 0001 5515 ATM Adapter [Flipper] 0002 100 VG AnyLan Controller 0004 5526 Fibre Channel Host Adapter 0005 x526 Fibre Channel Host Adapter 0008 5525/5575 ATM Adapter (155 Mbit) [Atlantic] 9003 5535-4P-BRI-ST 9007 5535-4P-BRI-U 9008 5535-1P-SR 900c 5535-1P-SR-ST 900e 5535-1P-SR-U 9011 5535-1P-PRI 9013 5535-2P-PRI 9023 5536-4P-BRI-ST 9027 5536-4P-BRI-U 9031 5536-1P-PRI 9033 5536-2P-PRI 107f Data Technology Corporation 0802 SL82C105 1080 Contaq Microsystems 0600 82C599 c691 Cypress CY82C691 c693 82c693 1081 Supermac Technology 0d47 Radius PCI to NuBUS Bridge 1082 EFA Corporation of America 1083 Forex Computer Corporation 0001 FR710 1084 Parador 1086 J. Bond Computer Systems 1087 Cache Computer 1088 Microcomputer Systems (M) Son 1089 Data General Corporation # Formerly Bit3 Computer Corp. 108a SBS Technologies 0001 VME Bridge Model 617 0010 VME Bridge Model 618 0040 dataBLIZZARD 3000 VME Bridge Model 2706 108c Oakleigh Systems Inc. 108d Olicom 0001 Token-Ring 16/4 PCI Adapter (3136/3137) 0002 16/4 Token Ring 0004 RapidFire OC-3139/3140 Token-Ring 16/4 PCI Adapter 108d 0004 OC-3139/3140 RapidFire Token-Ring 16/4 Adapter 0005 GoCard 3250 Token-Ring 16/4 CardBus PC Card 0006 OC-3530 RapidFire Token-Ring 100 0007 RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter 108d 0007 OC-3141 RapidFire Token-Ring 16/4 Adapter 0008 RapidFire 3540 HSTR 100/16/4 PCI Adapter 108d 0008 OC-3540 RapidFire HSTR 100/16/4 Adapter 0011 OC-2315 0012 OC-2325 0013 OC-2183/2185 0014 OC-2326 0019 OC-2327/2250 10/100 Ethernet Adapter 108d 0016 OC-2327 Rapidfire 10/100 Ethernet Adapter 108d 0017 OC-2250 GoCard 10/100 Ethernet Adapter 0021 OC-6151/6152 [RapidFire ATM 155] 0022 ATM Adapter 108e Oracle/SUN 0001 EBUS 1000 STP2003QFP [PCIO] EBUS 1001 Happy Meal 10/100 Ethernet [hme] 1100 RIO EBUS 108e 1100 RIO EBUS on Blade 100 motherboard 1101 RIO 10/100 Ethernet [eri] 108e 1101 RIO GEM on Blade 100 motherboard 1102 RIO 1394 108e 1102 RIO 1394 on Blade 100 motherboard 1103 RIO USB 108e 1103 RIO USB on Blade 100 motherboard 1647 Broadcom 570x 10/100/1000 Ethernet [bge] 1648 Broadcom 570x 10/100/1000 Ethernet [bge] 16a7 Broadcom 570x 10/100/1000 Ethernet [bge] 16a8 Broadcom 570x 10/100/1000 Ethernet [bge] 2bad GEM 10/100/1000 Ethernet [ge] 5000 Simba Advanced PCI Bridge 108e 5000 Netra AX1105-500 5043 SunPCI Co-processor 5ca0 Crypto Accelerator 6000 [mca] 6300 Intel 21554 PCI-PCI bus bridge [db21554] 6301 Intel 21554 PCI-PCI bus bridge [db21554] 6302 Intel 21554 PCI-PCI bus bridge [db21554] 6303 Intel 21554 PCI-PCI bus bridge [db21554] 6310 Intel 21554 PCI-PCI bus bridge [db21554] 6311 Intel 21554 PCI-PCI bus bridge [db21554] 6312 Intel 21554 PCI-PCI bus bridge [db21554] 6313 Intel 21554 PCI-PCI bus bridge [db21554] 6320 Intel 21554 PCI-PCI bus bridge [db21554] 6323 Intel 21554 PCI-PCI bus bridge [db21554] 6330 Intel 21554 PCI-PCI bus bridge [db21554] 6331 Intel 21554 PCI-PCI bus bridge [db21554] 6332 Intel 21554 PCI-PCI bus bridge [db21554] 6333 Intel 21554 PCI-PCI bus bridge [db21554] 6340 Intel 21554 PCI-PCI bus bridge [db21554] 6343 Intel 21554 PCI-PCI bus bridge [db21554] 6350 Intel 21554 PCI-PCI bus bridge [db21554] 6353 Intel 21554 PCI-PCI bus bridge [db21554] 6722 Intel 21554 PCI-PCI bus bridge [db21554] 676e SunPCiIII 7063 SunPCiII / SunPCiIIpro 8000 Psycho PCI Bus Module 8001 Schizo PCI Bus Module 8002 Schizo+ PCI Bus Module 80f0 PCIe switch [px] 80f8 PCIe switch [px] 9010 PCIe/PCI bridge switch [pxb_plx] 9020 PCIe/PCI bridge switch [pxb_plx] 9102 Davicom Fast Ethernet driver for Davicom DM9102A [dmfe] a000 Psycho UPA-PCI Bus Module [pcipsy] a001 Psycho UPA-PCI Bus Module [pcipsy] 108e a001 Ultra IIe on Blade 100 motherboard a801 Schizo Fireplane-PCI bus bridge module [pcisch] aaaa Multithreaded Shared 10GbE Ethernet Network Controller abba Cassini 10/100/1000 abcd Multithreaded 10-Gigabit Ethernet Network Controller c416 Sun Fire System/System Controller Interface chip [sbbc] 108f Systemsoft 1090 Compro Computer Services, Inc. 4610 PCI RTOM 4620 GPIO HSD 1091 Intergraph Corporation 0020 3D graphics processor 0021 3D graphics processor w/Texturing 0040 3D graphics frame buffer 0041 3D graphics frame buffer 0060 Proprietary bus bridge 00e4 Powerstorm 4D50T 0720 Motion JPEG codec 0780 Intense3D Wildcat 3410 (MSMT496) 07a0 Sun Expert3D-Lite Graphics Accelerator 1091 Sun Expert3D Graphics Accelerator 1092 Diamond Multimedia Systems 0028 Viper V770 1092 4a00 Viper V770 32MB 00a0 Speedstar Pro SE 00a8 Speedstar 64 0550 Viper V550 08d4 Supra 2260 Modem 094c SupraExpress 56i Pro 1001 Video Crunch It 1001 capture card 1092 Viper V330 6120 Maximum DVD 8810 Stealth SE 8811 Stealth 64/SE 8880 Stealth 8881 Stealth 88b0 Stealth 64 88b1 Stealth 64 88c0 Stealth 64 88c1 Stealth 64 88d0 Stealth 64 88d1 Stealth 64 88f0 Stealth 64 88f1 Stealth 64 9999 DMD-I0928-1 "Monster sound" sound chip 1093 National Instruments 0160 PCI-DIO-96 0162 PCI-MIO-16XE-50 0fe1 PXI-8320 1150 PCI-6533 (PCI-DIO-32HS) 1170 PCI-MIO-16XE-10 1180 PCI-MIO-16E-1 1190 PCI-MIO-16E-4 11b0 PXI-6070E 11c0 PXI-6040E 11d0 PXI-6030E 1270 PCI-6032E 1290 PCI-6704 12b0 PCI-6534 1310 PCI-6602 1320 PXI-6533 1330 PCI-6031E 1340 PCI-6033E 1350 PCI-6071E 1360 PXI-6602 13c0 PXI-6508 1490 PXI-6534 14e0 PCI-6110 14f0 PCI-6111 1580 PXI-6031E 15b0 PXI-6071E 1710 PXI-6509 17c0 PXI-5690 17d0 PCI-6503 1870 PCI-6713 1880 PCI-6711 18b0 PCI-6052E 18c0 PXI-6052E 1920 PXI-6704 1930 PCI-6040E 19c0 PCI-4472 1aa0 PXI-4110 1ad0 PCI-6133 1ae0 PXI-6133 1e30 PCI-6624 1e40 PXI-6624 1e50 PXI-5404 2410 PCI-6733 2420 PXI-6733 2430 PCI-6731 2470 PCI-4474 24a0 PCI-4065 24b0 PXI-4200 24f0 PXI-4472 2510 PCI-4472 2520 PCI-4474 27a0 PCI-6123 27b0 PXI-6123 2880 DAQCard-6601 2890 PCI-6036E 28a0 PXI-4461 28b0 PCI-6013 28c0 PCI-6014 28d0 PCI-5122 28e0 PXI-5122 29f0 PXI-7334 2a00 PXI-7344 2a60 PCI-6023E 2a70 PCI-6024E 2a80 PCI-6025E 2ab0 PXI-6025E 2b10 PXI-6527 2b20 PCI-6527 2b80 PXI-6713 2b90 PXI-6711 2c60 PCI-6601 2c70 PXI-6601 2c80 PCI-6035E 2c90 PCI-6703 2ca0 PCI-6034E 2cb0 PCI-7344 2cc0 PXI-6608 2d20 PXI-5600 2db0 PCI-6608 2dc0 PCI-4070 2dd0 PXI-4070 2eb0 PXI-4472 2ec0 PXI-6115 2ed0 PCI-6115 2ee0 PXI-6120 2ef0 PCI-6120 2fd1 PCI-7334 2fd2 PCI-7350 2fd3 PCI-7342 2fd5 PXI-7350 2fd6 PXI-7342 7003 PCI-6551 7004 PXI-6551 700b PXI-5421 700c PCI-5421 701a VXIpc-87xB 701b VXIpc-770 7023 PXI-2593 7027 PCI-MXI-2 Universal 702c PXI-7831R 702d PCI-7831R 702e PXI-7811R 702f PCI-7811R 7030 PCI-CAN (Series 2) 7031 PCI-CAN/2 (Series 2) 7032 PCI-CAN/LS (Series 2) 7033 PCI-CAN/LS2 (Series 2) 7034 PCI-CAN/DS (Series 2) 7035 PXI-8460 (Series 2, 1 port) 7036 PXI-8460 (Series 2, 2 ports) 7037 PXI-8461 (Series 2, 1 port) 7038 PXI-8461 (Series 2, 2 ports) 7039 PXI-8462 (Series 2) 703f PXI-2566 7040 PXI-2567 7044 MXI-4 Connection Monitor 7047 PXI-6653 704c PXI-2530 704f PXI-4220 7050 PXI-4204 7055 PXI-7830R 7056 PCI-7830R 705a PCI-CAN/XS (Series 2) 705b PCI-CAN/XS2 (Series 2) 705c PXI-8464 (Series 2, 1 port) 705d PXI-8464 (Series 2, 2 ports) 705e cRIO-9102 7060 PXI-5610 7064 PXI-1045 Trigger Routing Module 7065 PXI-6652 7066 PXI-6651 7067 PXI-2529 7068 PCI-CAN/SW (Series 2) 7069 PCI-CAN/SW2 (Series 2) 706a PXI-8463 (Series 2, 1 port) 706b PXI-8463 (Series 2, 2 ports) 7073 PCI-6723 7074 PXI-7833R 7075 PXI-6552 7076 PCI-6552 707c PXI-1428 707e PXI-4462 7080 PXI-8430/2 (RS-232) Interface 7081 PXI-8431/2 (RS-485) Interface 7083 PCI-7833R 7085 PCI-6509 7086 PXI-6528 7087 PCI-6515 7088 PCI-6514 708c PXI-2568 708d PXI-2569 70a9 PCI-6528 70aa PCI-6229 70ab PCI-6259 70ac PCI-6289 70ad PXI-6251 70ae PXI-6220 70af PCI-6221 70b0 PCI-6220 70b1 PXI-6229 70b2 PXI-6259 70b3 PXI-6289 70b4 PCI-6250 70b5 PXI-6221 70b6 PCI-6280 70b7 PCI-6254 70b8 PCI-6251 70b9 PXI-6250 70ba PXI-6254 70bb PXI-6280 70bc PCI-6284 70bd PCI-6281 70be PXI-6284 70bf PXI-6281 70c0 PCI-6143 70c3 PCI-6511 70c4 PXI-7330 70c5 PXI-7340 70c6 PCI-7330 70c7 PCI-7340 70c8 PCI-6513 70c9 PXI-6515 70ca PCI-1405 70cc PCI-6512 70cd PXI-6514 70ce PXI-1405 70cf PCIe-GPIB 70d0 PXI-2570 70d1 PXI-6513 70d2 PXI-6512 70d3 PXI-6511 70d4 PCI-6722 70d6 PXI-4072 70d7 PXI-6541 70d8 PXI-6542 70d9 PCI-6541 70da PCI-6542 70db PCI-8430/2 (RS-232) Interface 70dc PCI-8431/2 (RS-485) Interface 70dd PXI-8430/4 (RS-232) Interface 70de PXI-8431/4 (RS-485) Interface 70df PCI-8430/4 (RS-232) Interface 70e0 PCI-8431/4 (RS-485) Interface 70e1 PXI-2532 70e2 PXI-8430/8 (RS-232) Interface 70e3 PXI-8431/8 (RS-485) Interface 70e4 PCI-8430/8 (RS-232) Interface 70e5 PCI-8431/8 (RS-485) Interface 70e6 PXI-8430/16 (RS-232) Interface 70e7 PCI-8430/16 (RS-232) Interface 70e8 PXI-8432/2 (Isolated RS-232) Interface 70e9 PXI-8433/2 (Isolated RS-485) Interface 70ea PCI-8432/2 (Isolated RS-232) Interface 70eb PCI-8433/2 (Isolated RS-485) Interface 70ec PXI-8432/4 (Isolated RS-232) Interface 70ed PXI-8433/4 (Isolated RS-485) Interface 70ee PCI-8432/4 (Isolated RS-232) Interface 70ef PCI-8433/4 (Isolated RS-485) Interface 70f0 PXI-5922 70f1 PCI-5922 70f2 PCI-6224 70f3 PXI-6224 70f6 cRIO-9101 70f7 cRIO-9103 70f8 cRIO-9104 70ff PXI-6723 7100 PXI-6722 7104 PCIx-1429 7105 PCIe-1429 710a PXI-4071 710d PXI-6143 710e PCIe-GPIB 710f PXI-5422 7110 PCI-5422 7111 PXI-5441 7119 PXI-6561 711a PXI-6562 711b PCI-6561 711c PCI-6562 7120 PCI-7390 7121 PXI-5122EX 7122 PCI-5122EX 7123 PXIe-5653 7124 PCI-6510 7125 PCI-6516 7126 PCI-6517 7127 PCI-6518 7128 PCI-6519 7137 PXI-2575 713c PXI-2585 713d PXI-2586 7142 PXI-4224 7144 PXI-5124 7145 PCI-5124 7146 PCI-6132 7147 PXI-6132 7148 PCI-6122 7149 PXI-6122 714c PXI-5114 714d PCI-5114 7150 PXI-2564 7152 PCI-5640R 7156 PXI-1044 Trigger Routing Module 715d PCI-1426 7167 PXI-5412 7168 PCI-5412 716b PCI-6230 716c PCI-6225 716d PXI-6225 716f PCI-4461 7170 PCI-4462 7171 PCI-6010 7174 PXI-8360 7177 PXI-6230 717d PCIe-6251 717f PCIe-6259 7187 PCI-1410 718b PCI-6521 718c PXI-6521 7191 PCI-6154 7193 PXI-7813R 7194 PCI-7813R 7195 PCI-8254R 7197 PXI-5402 7198 PCI-5402 719f PCIe-6535 71a0 PCIe-6536 71a3 PXI-5650 71a4 PXI-5652 71a5 PXI-2594 71a7 PXI-2595 71a9 PXI-2596 71aa PXI-2597 71ab PXI-2598 71ac PXI-2599 71ad PCI-GPIB+ 71ae PCIe-1430 71b7 PXI-1056 Trigger Routing Module 71b8 PXI-1045 Trigger Routing Module 71b9 PXI-1044 Trigger Routing Module 71bb PXI-2584 71bc PCI-6221 (37-pin) 71bf PCIe-1427 71c5 PCI-6520 71c6 PXI-2576 71c7 cRIO-9072 71dc PCI-1588 71e0 PCI-6255 71e1 PXI-6255 71e2 PXI-5406 71e3 PCI-5406 71fc PXI-4022 7209 PCI-6233 720a PXI-6233 720b PCI-6238 720c PXI-6238 7260 PXI-5142 7261 PCI-5142 726d PXI-5651 7273 PXI-4461 7274 PXI-4462 7279 PCI-6232 727a PXI-6232 727b PCI-6239 727c PXI-6239 727e SMBus Controller 1093 75ac PXIe-8388 1093 75ad PXIe-8389 1093 7650 PXIe-8381 1093 8360 PXIe-8360 1093 8370 PXIe-8370 1093 8375 PXIe-8375 7281 PCI-6236 7282 PXI-6236 7283 PXI-2554 7288 PXIe-5611 7293 PCIe-8255R 729d cRIO-9074 72a4 PCIe-4065 72a7 PCIe-6537 72a8 PXI-5152 72a9 PCI-5152 72aa PXI-5105 72ab PCI-5105 72b8 PXI-6682 72d0 PXI-2545 72d1 PXI-2546 72d2 PXI-2547 72d3 PXI-2548 72d4 PXI-2549 72d5 PXI-2555 72d6 PXI-2556 72d7 PXI-2557 72d8 PXI-2558 72d9 PXI-2559 72e8 PXIe-6251 72e9 PXIe-6259 72ef PXI-4498 72f0 PXI-4496 72fb PXIe-6672 730e PXI-4130 730f PXI-5922EX 7310 PCI-5922EX 731c PXI-2535 731d PXI-2536 7322 PXIe-6124 7327 PXI-6529 732c VXI-8360T 7331 PXIe-5602 7332 PXIe-5601 7333 PXI-5900 7335 PXI-2533 7336 PXI-2534 7342 PXI-4461 7349 PXI-5154 734a PCI-5154 7357 PXI-4065 7359 PXI-4495 7370 PXI-4461 7373 sbRIO-9601 7374 IOtech-9601 7375 sbRIO-9602 7378 sbRIO-9641 737d PXI-5124EX 7384 PXI-7851R 7385 PXI-7852R 7386 PCIe-7851R 7387 PCIe-7852R 7390 PXI-7841R 7391 PXI-7842R 7392 PXI-7853R 7393 PCIe-7841R 7394 PCIe-7842R 7397 sbRIO-9611 7398 sbRIO-9612 7399 sbRIO-9631 739a sbRIO-9632 739b sbRIO-9642 73a1 PXIe-4498 73a2 PXIe-4496 73a5 PXIe-5641R 73a7 PXI-8250 Chassis Monitor Module 73a8 PXI-8511 CAN/LS 73a9 PXI-8511 CAN/LS 73aa PXI-8512 CAN/HS 73ab PXI-8512 CAN/HS 73ac PXI-8513 CAN/XS 73ad PXI-8513 CAN/XS 73af PXI-8516 LIN 73b1 PXI-8517 FlexRay 73b2 PXI-8531 CANopen 73b3 PXI-8531 CANopen 73b4 PXI-8532 DeviceNet 73b5 PXI-8532 DeviceNet 73b6 PCI-8511 CAN/LS 73b7 PCI-8511 CAN/LS 73b8 PCI-8512 CAN/HS 73b9 PCI-8512 CAN/HS 73ba PCI-8513 CAN/XS 73bb PCI-8513 CAN/XS 73bd PCI-8516 LIN 73bf PCI-8517 FlexRay 73c0 PCI-8531 CANopen 73c1 PCI-8531 CANopen 73c2 PCI-8532 DeviceNet 73c3 PCI-8532 DeviceNet 73c5 PXIe-2527 73c6 PXIe-2529 73c8 PXIe-2530 73c9 PXIe-2532 73ca PXIe-2569 73cb PXIe-2575 73cc PXIe-2593 73d5 PXI-7951R 73d6 PXI-7952R 73d7 PXI-7953R 73e1 PXI-7854R 73ec PXI-7954R 73ed cRIO-9073 73f0 PXI-5153 73f1 PCI-5153 73f4 PXI-2515 73f6 cRIO-9111 73f7 cRIO-9112 73f8 cRIO-9113 73f9 cRIO-9114 73fa cRIO-9116 73fb cRIO-9118 7404 PXI-4132 7405 PXIe-6674T 7406 PXIe-6674 740e PCIe-8430/16 (RS-232) Interface 740f PCIe-8430/8 (RS-232) Interface 7410 PCIe-8431/16 (RS-485) Interface 7411 PCIe-8431/8 (RS-485) Interface 7414 PCIe-GPIB+ 741c PXI-5691 741d PXI-5695 743c CSC-3059 7448 PXI-2510 7454 PXI-2512 7455 PXI-2514 7456 PXIe-2512 7457 PXIe-2514 745a PXI-6682H 745e PXI-5153EX 745f PCI-5153EX 7460 PXI-5154EX 7461 PCI-5154EX 746d PXIe-5650 746e PXIe-5651 746f PXIe-5652 7472 PXI-2800 7495 PXIe-5603 7497 PXIe-5605 74ae PXIe-2515 74b4 PXI-2531 74b5 PXIe-2531 74c1 PXIe-8430/16 (RS-232) Interface 74c2 PXIe-8430/8 (RS-232) Interface 74c3 PXIe-8431/16 (RS-485) Interface 74c4 PXIe-8431/8 (RS-485) Interface 74d5 PXIe-5630 74d9 PCIe-8432/2 (Isolated RS-232) Interface 74da PCIe-8433/2 (Isolated RS-485) Interface 74db PCIe-8432/4 (Isolated RS-232) Interface 74dc PCIe-8433/4 (Isolated RS-485) Interface 74e8 NI 9148 7515 PCIe-8430/2 (RS-232) Interface 7516 PCIe-8430/4 (RS-232) Interface 7517 PCIe-8431/2 (RS-485) Interface 7518 PCIe-8431/4 (RS-485) Interface 751b cRIO-9081 751c cRIO-9082 7528 PXIe-4497 7529 PXIe-4499 752a PXIe-4492 7539 NI 9157 753a NI 9159 7598 PXI-2571 75a4 PXI-4131A 75b1 PCIe-7854R 75ba PXI-2543 75bb PXIe-2543 75e5 PXI-6683 75e6 PXI-6683H 75ef PXIe-5632 761c VXI-8360LT 761f PXI-2540 7620 PXIe-2540 7621 PXI-2541 7622 PXIe-2541 7626 NI 9154 7627 NI 9155 7638 PXI-2720 7639 PXI-2722 763a PXIe-2725 763b PXIe-2727 763c PXI-4465 764b PXIe-2790 764c PXI-2520 764d PXI-2521 764e PXI-2522 764f PXI-2523 7652 PXIe-4080 7654 PXI-2796 7655 PXI-2797 7656 PXI-2798 7657 PXI-2799 765d PXI-2542 765e PXIe-2542 765f PXI-2544 7660 PXIe-2544 766d PCIe-6535B 766e PCIe-6536B 766f PCIe-6537B 76a3 PXIe-6535B 76a4 PXIe-6536B 76a5 PXIe-6537B 76d8 PXIe-4081 76d9 PXIe-4082 77a8 PXIe-6375 783e PXI-8368 7882 PXIe-6376 7883 PXIe-6378 799e PXIe-6386 799f PXIe-6396 9020 PXI-2501 9030 PXI-2503 9040 PXI-2527 9050 PXI-2565 9060 PXI-2590 9070 PXI-2591 9080 PXI-2580 9090 PCI-4021 90a0 PXI-4021 a001 PCI-MXI-2 b001 PCI-1408 b011 PXI-1408 b021 PCI-1424 b022 PXI-1424 b031 PCI-1413 b041 PCI-1407 b051 PXI-1407 b061 PCI-1411 b071 PCI-1422 b081 PXI-1422 b091 PXI-1411 b0b1 PCI-1409 b0c1 PXI-1409 b0e1 PCI-1428 c4c4 PXIe/PCIe Device 1093 728a PXIe-5421 1093 728b PXIe-5442 1093 728d PXIe-5451 1093 72a2 PXIe-5122 1093 72da PXIe-5422 1093 72f7 PXIe-6535 1093 72f8 PXIe-6536 1093 72f9 PXIe-6537 1093 730a PXIe-5142 1093 7326 PCIe-6509 1093 736c PXIe-4140 1093 738b PXIe-5622 1093 73c4 PXIe-5450 1093 73c7 PXIe-6545 1093 73d4 PXIe-6544 1093 7425 PCIe-6320 1093 7427 PCIe-6321 1093 7428 PXIe-6323 1093 7429 PCIe-6323 1093 742a PXIe-6341 1093 742b PCIe-6341 1093 742c PXIe-6343 1093 742d PCIe-6343 1093 742f PCIe-6351 1093 7431 PCIe-6353 1093 7432 PXIe-6361 1093 7433 PCIe-6361 1093 7434 PXIe-6363 1093 7435 PCIe-6363 1093 7436 PXIe-6356 1093 7437 PXIe-6358 1093 7438 PXIe-6366 1093 7439 PXIe-6368 1093 7468 PXIe-5185 1093 7469 PXIe-5186 1093 7492 PXIe-4300 1093 7498 PXIe-6548 1093 7499 PXIe-6547 1093 74a8 PXIe-4330 1093 74a9 PXIe-4331 1093 74b1 PXIe-4154 1093 74b2 PXIe-4353 1093 74b6 PCIe-1433 1093 74cd PXIe-5643R 1093 74d0 PXIe-7961R 1093 74dd PXIe-6376 1093 74de PXIe-6378 1093 74e2 PXIe-7962R 1093 74e3 PXIe-7965R 1093 74e5 PXIe-4844 1093 74f3 PCIe-5140 1093 753c PXIe-1435 1093 7548 PXIe-5622 (25MHz DDC) 1093 754d PCIe-5155 1093 7551 PXIe-6556 1093 7553 PCIe-1473R 1093 7570 PCIe-1474R 1093 7571 PXIe-1475R 1093 7572 PXIe-1476R 1093 75a2 PXIe-5693 1093 75a3 PXIe-5694 1093 75a5 PXIe-4141 1093 75ce PXIe-7966R 1093 75cf PXIe-4357 1093 75d2 PXIe-RevB-5643R 1093 75d3 PXIe-5644R 1093 75ee PXIe-5645R 1093 7613 PXIe-6555 1093 7619 PXIe-5185 1093 761a PXIe-5186 1093 7629 PXIe-4142 1093 762a PXIe-4143 1093 762b PXIe-4138 1093 762c PXIe-4144 1093 762d PXIe-4145 1093 762e PXIe-5606 1093 7644 PXIe-4841 1093 764a PCIe-8237R-S 1093 7652 PXIe-4080 1093 7658 PXIe-5162 (4CH) 1093 76ab PXIe-4322 1093 76ad PXIe-4112 1093 76ae PXIe-4113 1093 76b5 PXIe-7971R 1093 76b6 PXIe-7972R 1093 76b7 PXIe-7975R 1093 76b8 PXIe-5696 1093 76b9 PXIe-5654 1093 76c8 PXIe-6614 1093 76c9 PXIe-6612 1093 76cb PXIe-5646R 1093 76cc PXIe-5162 (2CH) 1093 76ce CVS-1459 1093 76d0 PXIe-5160 (2CH) 1093 76d1 PXIe-5160 (4CH) 1093 76d8 PXIe-4081 1093 76d9 PXIe-4082 1093 76dc PXIe-4610 1093 76ec PXIe-2524 1093 76ed PXIe-2525 1093 76ee PXIe-2526 1093 76ef PXIe-2737 1093 76f0 PXIe-2738 1093 76f1 PXIe-2739 1093 76fb PCIe-1473R-LX110 1093 76fc PXIe-5105 1093 76fd PXIe-5114 1093 76fe PXIe-5644R 1093 76ff PXIe-5644R 1093 7700 PXIe-5644R 1093 7701 PXIe-5645R 1093 7702 PXIe-5645R 1093 7703 PXIe-5645R 1093 770c PXIe-4139 1093 7711 PXIe-4464 1093 7712 PXIe-4463 1093 7716 PCIe-6612 1093 771d Unconfigured CA4 Switch 1093 771e PXIe-4339 1093 7735 cRIO-9033 1093 773e PXIe-5624R 1093 774b cRIO-9031 1093 774d cRIO-9034 1093 7755 cRIO-9030 1093 7768 PXIe-2747 1093 7769 PXIe-2748 1093 776a PXIe-2746 1093 7777 PXIe-7976R 1093 7782 PXIe-5646R 1093 7783 PXIe-5646R 1093 7784 PXIe-5646R 1093 7790 PXIe-5170R (4CH) 1093 7791 PXIe-5170R (8CH) 1093 7793 PXIe-5171R (8CH) 1093 7794 PXIe-5172 (4CH - 325T) 1093 7795 PXIe-5172 (8CH - 410T) 1093 77a5 PXIe-6345 1093 77a6 PXIe-6355 1093 77a7 PXIe-6365 1093 77a8 PXIe-6375 1093 77aa CVS-1458 1093 77ad IC-3173 1093 77b4 PXIe-7820R 1093 77b5 PXIe-7821R 1093 77b6 PXIe-7822R 1093 77b9 cRIO-9038 1093 77ba PXIe-4136 1093 77bb PXIe-4137 1093 77c0 PXIe-5624R 1093 77c1 PXIe-5624R 1093 77c2 PXIe-5624R 1093 77ca PXIe-6738 1093 77cb PXIe-6739 1093 77db cRIO-9035 1093 77dc cRIO-9036 1093 77dd cRIO-9039 1093 7802 PXIe-4302 1093 7803 PXIe-4303 1093 7805 PXIe-4305 1093 781e PXIe-4135 1093 7820 PXIe-5164 1093 783d PXIe-6570 1093 7851 PXIe-5172 (8CH - 325T) 1093 786f PXIe-4163 1093 7881 PXIe-5163 1093 788e PXIe-4304 1093 78d5 PXIe-5413 (1CH) 1093 78d6 PXIe-5413 (2CH) 1093 78d7 PXIe-5423 (1CH) 1093 78d8 PXIe-5423 (2CH) 1093 78d9 PXIe-5433 (1CH) 1093 78da NI PXIe-5433 (2CH) 1093 78f8 NI FlexRIO Module (KU035) 1093 78f9 NI FlexRIO Module (KU040) 1093 78fa NI FlexRIO Module (KU060) 1093 78ff PXIe-4162 1093 792f PXIe-4190 1093 7935 PXIe-5111 1093 7936 PXIe-5110 1093 7995 PXIe-7911R 1093 7996 PXIe-7912R 1093 7997 PXIe-7915R 1093 79cd PXIe-5113 1093 79d3 NI FlexRIO PCIe Module (KU035) 1093 79d4 NI FlexRIO PCIe Module (KU040) 1093 79d5 NI FlexRIO PCIe Module (KU060) 1093 79f8 PXIe-6571 1093 7a16 PXIe-4147 1093 7a9a PXIe-4137 (40W) 1093 7aa4 PXIe-4135 (40W) 1093 7aca PXIe-4051 1093 7acb PXIe-4150 1093 7acc PXIe-4151 1093 7ae0 PXIe-4163 (10 pA) 1093 7ae1 PXIe-4162 (10 pA) 1093 7aef PXIe-4190 (500 kHz) 1093 7b1f PXIe-6571 (8CH) c801 PCI-GPIB c811 PCI-GPIB+ c821 PXI-GPIB c831 PMC-GPIB c840 PCI-GPIB d130 PCI-232/2 Interface d140 PCI-232/4 Interface d150 PCI-232/8 Interface d160 PCI-485/2 Interface d170 PCI-485/4 Interface d190 PXI-8422/2 (Isolated RS-232) Interface d1a0 PXI-8422/4 (Isolated RS-232) Interface d1b0 PXI-8423/2 (Isolated RS-485) Interface d1c0 PXI-8423/4 (Isolated RS-485) Interface d1d0 PXI-8420/2 (RS-232) Interface d1e0 PXI-8420/4 (RS-232) Interface d1f0 PXI-8420/8 (RS-232) Interface d1f1 PXI-8420/16 (RS-232) Interface d230 PXI-8421/2 (RS-485) Interface d240 PXI-8421/4 (RS-485) Interface d250 PCI-232/2 (Isolated) Interface d260 PCI-485/2 (Isolated) Interface d270 PCI-232/4 (Isolated) Interface d280 PCI-485/4 (Isolated) Interface d290 PCI-485/8 Interface d2a0 PXI-8421/8 (RS-485) Interface d2b0 PCI-232/16 Interface e111 PCI-CAN e131 PXI-8461 (1 port) e141 PCI-CAN/LS e151 PXI-8460 (1 port) e211 PCI-CAN/2 e231 PXI-8461 (2 ports) e241 PCI-CAN/LS2 e251 PXI-8460 (2 ports) e261 PCI-CAN/DS e271 PXI-8462 f110 VMEpc-650 f120 VXIpc-650 fe00 VXIpc-87x fe41 VXIpc-860 fe51 VXIpc-74x fe61 VXIpc-850 fe70 VXIpc-880 1094 First International Computers [FIC] # nee CMD Technology Inc 1095 Silicon Image, Inc. 0240 Adaptec AAR-1210SA SATA HostRAID Controller 0242 AAR-1220SA SATA RAID Controller 0640 PCI0640 0643 PCI0643 0646 PCI0646 0647 PCI0647 0648 PCI0648 1043 8025 CUBX motherboard 0649 SiI 0649 Ultra ATA/100 PCI to ATA Host Controller 0e11 005d Integrated Ultra ATA-100 Dual Channel Controller 0e11 007e Integrated Ultra ATA-100 IDE RAID Controller 101e 0649 AMI MegaRAID IDE 100 Controller 0650 PBC0650A 0670 USB0670 1095 0670 USB0670 0673 USB0673 0680 PCI0680 Ultra ATA-133 Host Controller 1095 0680 SiI 0680 ATA/133 Controller 1095 3680 Winic W-680 (Silicon Image 680 based) 3112 SiI 3112 [SATALink/SATARaid] Serial ATA Controller 1095 3112 SiI 3112 SATALink Controller 1095 6112 SiI 3112 SATARaid Controller 9005 0250 SATAConnect 1205SA Host Controller 3114 SiI 3114 [SATALink/SATARaid] Serial ATA Controller 1043 8167 A8N-SLI Deluxe/Premium Mainboard 1095 3114 SiI 3114 SATALink Controller 1095 6114 SiI 3114 SATARaid Controller 3124 SiI 3124 PCI-X Serial ATA Controller 1095 3124 SiI 3124 PCI-X Serial ATA Controller 3132 SiI 3132 Serial ATA Raid II Controller 3512 SiI 3512 [SATALink/SATARaid] Serial ATA Controller 1095 3512 SiI 3512 SATALink Controller 1095 6512 SiI 3512 SATARaid Controller 3531 SiI 3531 [SATALink/SATARaid] Serial ATA Controller 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 1096 Alacron 1097 Appian Technology 1098 Quantum Designs (H.K.) Ltd 0001 QD-8500 0002 QD-8580 1099 Samsung Electronics Co., Ltd 109a Packard Bell 109b Gemlight Computer Ltd. 109c Megachips Corporation 109d Zida Technologies Ltd. 109e Brooktree Corporation 0310 Bt848 Video Capture 032e Bt878 Video Capture 0350 Bt848 Video Capture 0351 Bt849A Video capture 0369 Bt878 Video Capture 1002 0001 TV-Wonder 1002 0003 TV-Wonder/VE 036c Bt879(??) Video Capture 13e9 0070 Win/TV (Video Section) 036e Bt878 Video Capture 0000 0001 Euresys Picolo PCIe 0000 0002 Euresys PICOLO Pro 2 0000 0004 Euresys PICOLO Pro 3E 0070 13eb WinTV Series 0070 ff01 Viewcast Osprey 200 0071 0101 DigiTV PCI 107d 6606 WinFast TV 2000 11bd 0012 PCTV pro (TV + FM stereo receiver) 11bd 001c PCTV Sat (DBC receiver) 127a 0001 Bt878 Mediastream Controller NTSC 127a 0002 Bt878 Mediastream Controller PAL BG 127a 0003 Bt878a Mediastream Controller PAL BG 127a 0048 Bt878/832 Mediastream Controller 144f 3000 MagicTView CPH060 - Video 1461 0002 TV98 Series (TV/No FM/Remote) 1461 0003 AverMedia UltraTV PCI 350 1461 0004 AVerTV WDM Video Capture 1461 0761 AverTV DVB-T 1461 0771 AverMedia AVerTV DVB-T 771 14f1 0001 Bt878 Mediastream Controller NTSC 14f1 0002 Bt878 Mediastream Controller PAL BG 14f1 0003 Bt878a Mediastream Controller PAL BG 14f1 0048 Bt878/832 Mediastream Controller 1805 0101 Euresys PICOLO Tetra 1805 0102 Euresys PICOLO Tetra 1805 0103 Euresys PICOLO Tetra 1805 0104 Euresys PICOLO Tetra 1805 0105 Euresys PICOLO Tetra 1805 0106 Euresys PICOLO Tetra 1805 0107 Euresys PICOLO Tetra 1805 0108 Euresys PICOLO Tetra 1805 0201 Euresys PICOLO Tetra-X 1805 0202 Euresys PICOLO Tetra-X 1805 0203 Euresys PICOLO Tetra-X 1805 0204 Euresys PICOLO Tetra-X 1805 0401 Euresys PICOLO Tymo 1805 0402 Euresys PICOLO Tymo 1805 0403 Euresys PICOLO Tymo 1805 0404 Euresys PICOLO Tymo 1805 1001 Euresys PICOLO Junior 4 1822 0001 VisionPlus DVB card 1851 1850 FlyVideo'98 - Video 1851 1851 FlyVideo II 1852 1852 FlyVideo'98 - Video (with FM Tuner) 18ac d500 DViCO FusionHDTV5 Lite 270f fc00 Digitop DTT-1000 # Vendor/ID appear to be randomly chosen aa00 1460 Spectra8 CardA Input0 # Vendor/ID appear to be randomly chosen aa01 1461 Spectra8 CardA Input1 # Vendor/ID appear to be randomly chosen aa02 1462 Spectra8 CardA Input2 # Vendor/ID appear to be randomly chosen aa03 1463 Spectra8 CardA Input3 # Vendor/ID appear to be randomly chosen aa04 1464 Spectra8 CardB Input0 # Vendor/ID appear to be randomly chosen aa05 1465 Spectra8 CardB Input1 # Vendor/ID appear to be randomly chosen aa06 1466 Spectra8 CardB Input2 # Vendor/ID appear to be randomly chosen aa07 1467 Spectra8 CardB Input3 # Vendor/ID appear to be randomly chosen aa08 1468 Spectra8 CardC Input0 # Vendor/ID appear to be randomly chosen aa09 1469 Spectra8 CardC Input1 # Vendor/ID appear to be randomly chosen aa0a 146a Spectra8 CardC Input2 # Vendor/ID appear to be randomly chosen aa0b 146b Spectra8 CardC Input3 # Vendor/ID appear to be randomly chosen aa0c 146c Spectra8 CardD Input0 # Vendor/ID appear to be randomly chosen aa0d 146d Spectra8 CardD Input1 # Vendor/ID appear to be randomly chosen aa0e 146e Spectra8 CardD Input2 # Vendor/ID appear to be randomly chosen aa0f 146f Spectra8 CardD Input3 bd11 1200 PCTV pro (TV + FM stereo receiver) 036f Bt879 Video Capture 127a 0044 Bt879 Video Capture NTSC 127a 0122 Bt879 Video Capture PAL I 127a 0144 Bt879 Video Capture NTSC 127a 0222 Bt879 Video Capture PAL BG 127a 0244 Bt879a Video Capture NTSC 127a 0322 Bt879 Video Capture NTSC 127a 0422 Bt879 Video Capture NTSC 127a 1122 Bt879 Video Capture PAL I 127a 1222 Bt879 Video Capture PAL BG 127a 1322 Bt879 Video Capture NTSC 127a 1522 Bt879a Video Capture PAL I 127a 1622 Bt879a Video Capture PAL BG 127a 1722 Bt879a Video Capture NTSC 14f1 0044 Bt879 Video Capture NTSC 14f1 0122 Bt879 Video Capture PAL I 14f1 0144 Bt879 Video Capture NTSC 14f1 0222 Bt879 Video Capture PAL BG 14f1 0244 Bt879a Video Capture NTSC 14f1 0322 Bt879 Video Capture NTSC 14f1 0422 Bt879 Video Capture NTSC 14f1 1122 Bt879 Video Capture PAL I 14f1 1222 Bt879 Video Capture PAL BG 14f1 1322 Bt879 Video Capture NTSC 14f1 1522 Bt879a Video Capture PAL I 14f1 1622 Bt879a Video Capture PAL BG 14f1 1722 Bt879a Video Capture NTSC 1851 1850 FlyVideo'98 - Video 1851 1851 FlyVideo II 1852 1852 FlyVideo'98 - Video (with FM Tuner) 0370 Bt880 Video Capture 1851 1850 FlyVideo'98 1851 1851 FlyVideo'98 EZ - video 1852 1852 FlyVideo'98 (with FM Tuner) 0878 Bt878 Audio Capture 0000 0001 Euresys Picolo PCIe 0000 0002 Euresys PICOLO Pro 2 (Audio Section) 0000 0004 Euresys PICOLO Pro 3E (Audio Section) 0070 13eb WinTV Series 0070 ff01 Viewcast Osprey 200 0071 0101 DigiTV PCI 1002 0001 TV-Wonder 1002 0003 TV-Wonder/VE 11bd 0012 PCTV pro (TV + FM stereo receiver, audio section) 11bd 001c PCTV Sat (DBC receiver) 127a 0001 Bt878 Video Capture (Audio Section) 127a 0002 Bt878 Video Capture (Audio Section) 127a 0003 Bt878 Video Capture (Audio Section) 127a 0048 Bt878 Video Capture (Audio Section) 13e9 0070 Win/TV (Audio Section) 144f 3000 MagicTView CPH060 - Audio 1461 0002 Avermedia PCTV98 Audio Capture 1461 0003 UltraTV PCI 350 1461 0004 AVerTV WDM Audio Capture 1461 0761 AVerTV DVB-T 1461 0771 AverMedia AVerTV DVB-T 771 14f1 0001 Bt878 Video Capture (Audio Section) 14f1 0002 Bt878 Video Capture (Audio Section) 14f1 0003 Bt878 Video Capture (Audio Section) 14f1 0048 Bt878 Video Capture (Audio Section) 1805 0101 Euresys PICOLO Tetra (Audio Section) 1805 0102 Euresys PICOLO Tetra (Audio Section) 1805 0103 Euresys PICOLO Tetra (Audio Section) 1805 0104 Euresys PICOLO Tetra (Audio Section) 1805 0105 Euresys PICOLO Tetra (Audio Section) 1805 0106 Euresys PICOLO Tetra (Audio Section) 1805 0107 Euresys PICOLO Tetra (Audio Section) 1805 0108 Euresys PICOLO Tetra (Audio Section) 1805 0201 Euresys PICOLO Tetra-X (Audio Section) 1805 0202 Euresys PICOLO Tetra-X (Audio Section) 1805 0203 Euresys PICOLO Tetra-X (Audio Section) 1805 0204 Euresys PICOLO Tetra-X (Audio Section) 1805 0401 Euresys PICOLO Tymo (Audio Section) 1805 0402 Euresys PICOLO Tymo (Audio Section) 1805 0403 Euresys PICOLO Tymo (Audio Section) 1805 0404 Euresys PICOLO Tymo (Audio Section) 1805 1001 Euresys PICOLO Junior 4 (Audio Section) 1822 0001 VisionPlus DVB Card 18ac d500 DViCO FusionHDTV5 Lite 270f fc00 Digitop DTT-1000 bd11 1200 PCTV pro (TV + FM stereo receiver, audio section) 0879 Bt879 Audio Capture 127a 0044 Bt879 Video Capture (Audio Section) 127a 0122 Bt879 Video Capture (Audio Section) 127a 0144 Bt879 Video Capture (Audio Section) 127a 0222 Bt879 Video Capture (Audio Section) 127a 0244 Bt879 Video Capture (Audio Section) 127a 0322 Bt879 Video Capture (Audio Section) 127a 0422 Bt879 Video Capture (Audio Section) 127a 1122 Bt879 Video Capture (Audio Section) 127a 1222 Bt879 Video Capture (Audio Section) 127a 1322 Bt879 Video Capture (Audio Section) 127a 1522 Bt879 Video Capture (Audio Section) 127a 1622 Bt879 Video Capture (Audio Section) 127a 1722 Bt879 Video Capture (Audio Section) 14f1 0044 Bt879 Video Capture (Audio Section) 14f1 0122 Bt879 Video Capture (Audio Section) 14f1 0144 Bt879 Video Capture (Audio Section) 14f1 0222 Bt879 Video Capture (Audio Section) 14f1 0244 Bt879 Video Capture (Audio Section) 14f1 0322 Bt879 Video Capture (Audio Section) 14f1 0422 Bt879 Video Capture (Audio Section) 14f1 1122 Bt879 Video Capture (Audio Section) 14f1 1222 Bt879 Video Capture (Audio Section) 14f1 1322 Bt879 Video Capture (Audio Section) 14f1 1522 Bt879 Video Capture (Audio Section) 14f1 1622 Bt879 Video Capture (Audio Section) 14f1 1722 Bt879 Video Capture (Audio Section) 0880 Bt880 Audio Capture 2115 BtV 2115 Mediastream controller 2125 BtV 2125 Mediastream controller 2164 BtV 2164 2165 BtV 2165 8230 Bt8230 ATM Segment/Reassembly Ctrlr (SRC) 8472 Bt8472 8474 Bt8474 109f Trigem Computer Inc. 10a0 Meidensha Corporation 10a1 Juko Electronics Ind. Co. Ltd 10a2 Quantum Corporation 10a3 Everex Systems Inc 10a4 Globe Manufacturing Sales 10a5 Smart Link Ltd. 3052 SmartPCI562 56K Modem 5449 SmartPCI561 modem 10a6 Informtech Industrial Ltd. 10a7 Benchmarq Microelectronics 10a8 Sierra Semiconductor 0000 STB Horizon 64 10a9 Silicon Graphics Intl. Corp. 0001 Crosstalk to PCI Bridge 0002 Linc I/O controller 0003 IOC3 I/O controller 0004 O2 MACE 0005 RAD Audio 0006 HPCEX 0007 RPCEX 0008 DiVO VIP 0009 AceNIC Gigabit Ethernet 10a9 8002 AceNIC Gigabit Ethernet 0010 AMP Video I/O 0011 GRIP 0012 SGH PSHAC GSN 0208 SSIM1 SAS Adapter 1001 Magic Carpet 1002 Lithium 1003 Dual JPEG 1 1004 Dual JPEG 2 1005 Dual JPEG 3 1006 Dual JPEG 4 1007 Dual JPEG 5 1008 Cesium 100a IOC4 I/O controller 1504 SSIM1 Fibre Channel Adapter 2001 Fibre Channel 2002 ASDE 4001 TIO-CE PCI Express Bridge 4002 TIO-CE PCI Express Port 8001 O2 1394 8002 G-net NT # PCIe x1 Low Profile 802b REACT external interrupt controller 10aa ACC Microelectronics 0000 ACCM 2188 2051 2051 CPU bridge 5842 2051 ISA bridge 10ab Digicom 10ac Honeywell IAC 10ad Winbond Electronics Corp / Symphony Labs 0001 W83769F 0003 SL82C103 0005 SL82C105 0103 SL82c103 0105 SL82C105/W83C55xF Bus Master IDE 0565 W83C553F/554F ISA bridge 10ae Cornerstone Technology 10af Micro Computer Systems Inc 10b0 CardExpert Technology 10b1 Cabletron Systems Inc 10b2 Raytheon Company 10b3 Databook Inc 3106 DB87144 b106 DB87144 10b4 STB Systems Inc 1b1d Velocity 128 3D 10b4 237e Velocity 4400 10b5 PLX Technology, Inc. 0001 i960 PCI bus interface 0557 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 Digium Tormenta 2 T400P-SS7 or E400P-SS7 Quad T1 or E1 PCI card 1000 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 ATCOM AT400P Quad T1 PCI card 1024 Acromag, Inc. IndustryPack Carrier Card 1042 Brandywine / jxi2, Inc. - PMC-SyncClock32, IRIG A & B, Nasa 36 106a Dual OX16C952 4 port serial adapter [Megawolf Romulus/4] 1076 VScom 800 8 port serial adaptor 1077 VScom 400 4 port serial adaptor 1078 VScom 210 2 port serial and 1 port parallel adaptor 1103 VScom 200 2 port serial adaptor 1146 VScom 010 1 port parallel adaptor 1147 VScom 020 2 port parallel adaptor 2000 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 ATCOM AE400P Quad E1 PCI card 2300 Euresys DOMINO Gamma 2374 Euresys DOMINO Alpha 2491 Euresys GRABLINK Value 2493 Euresys GRABLINK Expert 2540 IXXAT CAN-Interface PC-I 04/PCI 2724 Thales PCSM Security Card 3376 Cosateq 4 Port CAN Card 4000 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 Tormenta 3 Varion V400P/ATCOM TE400P Quad E1/T1/J1 PCI card 4001 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 ATCOM A400PE Quad E1 PCI card 4002 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 ATCOM A400PT Quad T1 PCI card 6140 PCI6140 32-bit 33MHz PCI-to-PCI Bridge 6150 PCI6150 32-bit 33MHz PCI-to-PCI Bridge 6152 PCI6152 32-bit 66MHz PCI-to-PCI Bridge 6154 PCI6154 64-bit 66MHz PCI-to-PCI Bridge 6254 PCI6254 64-bit 66MHz PCI-to-PCI Bridge 6466 PCI6466 64-bit 66MHz PCI-to-PCI Bridge 6520 PCI6520 64-bit 133MHz PCI-X-to-PCI-X Bridge 6540 PCI6540 64-bit 133MHz PCI-X-to-PCI-X Bridge 1775 1100 CR11 Single Board Computer 4c53 10e0 PSL09 PrPMC 6541 PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side) 1775 1100 CR11 Single Board Computer 4c53 10e0 PSL09 PrPMC 6542 PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side) 1775 1100 CR11 Single Board Computer 4c53 10e0 PSL09 PrPMC 8111 PEX 8111 PCI Express-to-PCI Bridge 8112 PEX8112 x1 Lane PCI Express-to-PCI Bridge 8114 PEX 8114 PCI Express-to-PCI/PCI-X Bridge 8311 PEX8311 x1 Lane PCI Express-to-Generic Local Bus Bridge 8505 PEX 8505 5-lane, 5-port PCI Express Switch 8508 PEX 8508 8-lane, 5-port PCI Express Switch 8509 PEX 8509 8-lane, 8-port PCI Express Switch 8512 PEX 8512 12-lane, 5-port PCI Express Switch 8516 PEX 8516 Versatile PCI Express Switch 8517 PEX 8517 16-lane, 5-port PCI Express Switch 8518 PEX 8518 16-lane, 5-port PCI Express Switch 8524 PEX 8524 24-lane, 6-port PCI Express Switch 8525 PEX 8525 24-lane, 5-port PCI Express Switch 8532 PEX 8532 Versatile PCI Express Switch 8533 PEX 8533 32-lane, 6-port PCI Express Switch 8547 PEX 8547 48-lane, 3-port PCI Express Switch 8548 PEX 8548 48-lane, 9-port PCI Express Switch 8603 PEX 8603 3-lane, 3-Port PCI Express Gen 2 (5.0 GT/s) Switch 8604 PEX 8604 4-lane, 4-Port PCI Express Gen 2 (5.0 GT/s) Switch 8605 PEX 8605 PCI Express 4-port Gen2 Switch 8606 PEX 8606 6 Lane, 6 Port PCI Express Gen 2 (5.0 GT/s) Switch 8608 PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch 8609 PEX 8609 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA 8612 PEX 8612 12-lane, 4-Port PCI Express Gen 2 (5.0 GT/s) Switch 8613 PEX 8613 12-lane, 3-Port PCI Express Gen 2 (5.0 GT/s) Switch 8614 PEX 8614 12-lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch 8615 PEX 8615 12-lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA 8616 PEX 8616 16-lane, 4-Port PCI Express Gen 2 (5.0 GT/s) Switch 8617 PEX 8617 16-lane, 4-Port PCI Express Gen 2 (5.0 GT/s) Switch with P2P 8618 PEX 8618 16-lane, 16-Port PCI Express Gen 2 (5.0 GT/s) Switch 8619 PEX 8619 16-lane, 16-Port PCI Express Gen 2 (5.0 GT/s) Switch with DMA 8624 PEX 8624 24-lane, 6-Port PCI Express Gen 2 (5.0 GT/s) Switch [ExpressLane] 13a3 1845 DX1845 Acceleration Card 8625 PEX 8625 24-lane, 24-Port PCI Express Gen 2 (5.0 GT/s) Switch 8632 PEX 8632 32-lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch 8636 PEX 8636 36-lane, 24-Port PCI Express Gen 2 (5.0 GT/s) Switch 8647 PEX 8647 48-Lane, 3-Port PCI Express Gen 2 (5.0 GT/s) Switch 8648 PEX 8648 48-lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch 8649 PEX 8649 48-lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch 8664 PEX 8664 64-lane, 16-Port PCI Express Gen 2 (5.0 GT/s) Switch 8680 PEX 8680 80-lane, 20-Port PCI Express Gen 2 (5.0 GT/s) Multi-Root Switch 8696 PEX 8696 96-lane, 24-Port PCI Express Gen 2 (5.0 GT/s) Multi-Root Switch 8714 PEX 8714 12-Lane, 5-Port PCI Express Gen 3 (8 GT/s) Switch 8717 PEX 8717 16-lane, 8-Port PCI Express Gen 3 (8.0 GT/s) Switch with DMA 8718 PEX 8718 16-Lane, 5-Port PCI Express Gen 3 (8.0 GT/s) Switch 8723 PEX 8723 24-Lane, 6-Port PCI Express Gen 3 (8 GT/s) Switch 8724 PEX 8724 24-Lane, 6-Port PCI Express Gen 3 (8 GT/s) Switch, 19 x 19mm FCBGA 4c52 9234 LRNV9324 2-port Built-in 8643 NVMe Exchange Adapter 4c52 9524 LRNV9524 2-port M.2 NVMe SSD Exchange Adapter 8725 PEX 8725 24-Lane, 10-Port PCI Express Gen 3 (8.0 GT/s) Multi-Root Switch with DMA 8732 PEX 8732 32-lane, 8-Port PCI Express Gen 3 (8.0 GT/s) Switch 8733 PEX 8733 32-Lane, 19-Port PCI Express Gen 3 (8 GT/s) Switch 8734 PEX 8734 32-lane, 8-Port PCI Express Gen 3 (8.0GT/s) Switch 8747 PEX 8747 48-Lane, 5-Port PCI Express Gen 3 (8.0 GT/s) Switch 4c52 9347 LRNV9347L 2-port Built-in 8643 NVMe Switching Adapter 4c52 9547 LRNV9547 4-port M.2 NVMe SSD Exchange Adapter 8748 PEX 8748 48-Lane, 12-Port PCI Express Gen 3 (8 GT/s) Switch, 27 x 27mm FCBGA 8749 PEX 8749 48-Lane, 18-Port PCI Express Gen 3 (8.0 GT/s) Multi-Root Switch with DMA 4c52 9349 LRNV9349 8-port SFF-8643 NVMe SSD Exchange Adapter 8764 PEX 8764 64-Lane, 16-Port PCI Express Gen 3 (8 GT/s) Switch 8780 PEX 8780 80-Lane, 20-Port PCI Express Gen 3 (8 GT/s) Switch 8796 PEX8796 96-Lane, 24-Port PCIe Gen 3 (8.0 GT/s) Switch 87a0 PEX PCI Express Switch NT0 Port Link Interface 87a1 PEX PCI Express Switch NT1 Port Link Interface 87b0 PEX PCI Express Switch NT0 Port Virtual Interface 1093 7761 PXIe-8830mc 87b1 PEX PCI Express Switch NT1 Port Virtual Interface 87d0 PEX PCI Express Switch DMA interface 9016 PLX 9016 8-port serial controller 9030 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 1205 Becker & Hickl MSA-1000 10b5 2695 Hilscher CIF50-PB/DPS Profibus 10b5 2862 Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board 10b5 2906 Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board 10b5 2940 Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board 10b5 2977 IXXAT iPC-I XC16/PCI CAN Board 10b5 2978 SH ARC-PCIu/SH ARC-PCI104/SH ARC-PCIe SOHARD ARCNET card 10b5 3025 Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board 10b5 3068 Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board 10b5 3463 Alpermann+Velte PCL PCI D (v2) (3V/5V): Timecode Reader Board 10b5 3591 PLURA PCL PCI L (v2) (3.3V/5V): Time Code Reader Board 12fe 0111 CPCI-ASIO4 (ESD 4-port Serial Interface Board) 1369 9c01 VX222v2 1369 9d01 VX222-Mic 1369 9d02 VX222-Mic 1369 9e01 PCX924v2 1369 9f01 PCX924-Mic 1369 9f02 PCX924-Mic 1369 a001 PCX22v2 1369 a701 LCM220v2 1369 a801 LCM200 1397 3136 4xS0-ISDN PCI Adapter 1397 3137 S2M-E1-ISDN PCI Adapter 1518 0200 ThinkIO-C 15ed 1002 MCCS 8-port Serial Hot Swap 15ed 1003 MCCS 16-port Serial Hot Swap # MIL-STD-1553B Board e1c5 0001 TE1-PCI e1c5 0005 TA1-PCI e1c5 0006 TA1-PCI4 9036 9036 9050 PCI <-> IOBus Bridge 103c 10b0 82350 PCI GPIB 10b5 1067 IXXAT CAN i165 10b5 114e Wasco WITIO PCI168extended 10b5 1169 Wasco OPTOIO32standard 32 digital in, 32 digital out 10b5 1171 Becker & Hickl PMS-400 10b5 1172 IK220 (Heidenhain) 10b5 1201 Becker & Hickl SPC-6x0 10b5 1202 Becker & Hickl SPC-7x0 10b5 1203 Becker & Hickl MSA-300 10b5 1206 Becker & Hickl DCC-100 10b5 120a Becker & Hickl STP-340 10b5 2036 SatPak GPS 10b5 2221 Alpermann+Velte PCL PCI LV: Timecode Reader Board 10b5 2273 SH ARC-PCI SOHARD ARCNET card 10b5 2431 Alpermann+Velte PCL PCI D: Timecode Reader Board 10b5 2905 Alpermann+Velte PCI TS: Time Synchronisation Board 10b5 3196 Goramo PLX200SYN sync serial card 10b5 9050 PCI-I04 PCI Passive PC/CAN Interface 11a9 5334 PDS4 12fe 0001 CAN-PCI/331 CAN bus controller 1369 8901 PCX11+ PCI 1369 8f01 VX222 1369 9401 PCX924 1369 9501 PCX22 1498 0362 TPMC866 8 Channel Serial Card 1522 0001 RockForce 4 Port V.90 Data/Fax/Voice Modem 1522 0002 RockForce 2 Port V.90 Data/Fax/Voice Modem 1522 0003 RockForce 6 Port V.90 Data/Fax/Voice Modem 1522 0004 RockForce 8 Port V.90 Data/Fax/Voice Modem 1522 0010 RockForce2000 4 Port V.90 Data/Fax/Voice Modem 1522 0020 RockForce2000 2 Port V.90 Data/Fax/Voice Modem 15ed 1000 Macrolink MCCS 8-port Serial 15ed 1001 Macrolink MCCS 16-port Serial 15ed 1002 Macrolink MCCS 8-port Serial Hot Swap 15ed 1003 Macrolink MCCS 16-port Serial Hot Swap 5654 2036 OpenSwitch 6 Telephony card 5654 3132 OpenSwitch 12 Telephony card 5654 5634 OpenLine4 Telephony Card d531 c002 PCIntelliCAN 2xSJA1000 CAN bus d84d 4006 EX-4006 1P d84d 4008 EX-4008 1P EPP/ECP d84d 4014 EX-4014 2P d84d 4018 EX-4018 3P EPP/ECP d84d 4025 EX-4025 1S(16C550) RS-232 d84d 4027 EX-4027 1S(16C650) RS-232 d84d 4028 EX-4028 1S(16C850) RS-232 d84d 4036 EX-4036 2S(16C650) RS-232 d84d 4037 EX-4037 2S(16C650) RS-232 d84d 4038 EX-4038 2S(16C850) RS-232 d84d 4052 EX-4052 1S(16C550) RS-422/485 d84d 4053 EX-4053 2S(16C550) RS-422/485 d84d 4055 EX-4055 4S(16C550) RS-232 d84d 4058 EX-4055 4S(16C650) RS-232 d84d 4065 EX-4065 8S(16C550) RS-232 d84d 4068 EX-4068 8S(16C650) RS-232 d84d 4078 EX-4078 2S(16C552) RS-232+1P 9052 PCI9052 PCI <-> IOBus Bridge 9054 PCI9054 32-bit 33MHz PCI <-> IOBus Bridge 10b5 1171 Becker & Hickl PMS-400A 10b5 1208 Becker & Hickl SPC-830 10b5 120e Becker & Hickl SPC-930 10b5 120f Becker & Hickl SPC-150 10b5 1210 Becker & Hickl DPC-230 10b5 2455 Wessex Techology PHIL-PCI 10b5 2696 Innes Corp AM Radcap card 10b5 2717 Innes Corp Auricon card 10b5 2844 Innes Corp TVS Encoder card 12c7 4001 Intel Dialogic DM/V960-4T1 PCI 12d9 0002 PCI Prosody Card rev 1.5 14b4 d100 Dektec DTA-100 14b4 d114 Dektec DTA-120 16df 0011 PIKA PrimeNet MM PCI 16df 0012 PIKA PrimeNet MM cPCI 8 16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling) 16df 0014 PIKA PrimeNet MM cPCI 4 16df 0015 PIKA Daytona MM 16df 0016 PIKA InLine MM 9056 PCI9056 32-bit 66MHz PCI <-> IOBus Bridge 10b5 2979 CellinkBlade 11 - CPCI board VoATM AAL1 10b5 3268 IXXAT iPC-I XC16/PCIe CAN Board 10b5 3334 Cambridge Pixel HPx Radar Input Card 10b5 3352 Alpermann+Velte PCL PCIe HD: Timecode Reader Board 10b5 3353 Alpermann+Velte PCL PCIe D: Timecode Reader Board 10b5 3354 Plura PCL PCIe LV: Timecode Reader Board 10b5 3355 Plura PCL PCIe L: Timecode Reader Board 10b5 3415 Plura PCIe TS: Time Synchronisation Board 10b5 3493 Plura PCL PCIe 3G: Timecode Reader Board 10b5 3565 Cambridge Pixel HPx Radar Output Card 1369 c001 LX6464ES 1369 c201 LX1616ES 14b4 d10a DekTec DTA-110T 14b4 d128 Dektec DTA-140 14b4 d140 Dektec DTA-140 1a0e 006f Dektec DTA-111 9060 PCI9060 32-bit 33MHz PCI <-> IOBus Bridge 906d 9060SD 125c 0640 Aries 16000P 906e 9060ES 9080 PCI9080 32-bit; 33MHz PCI <-> IOBus Bridge 103c 10eb (Agilent) E2777B 83K Series Optical Communication Interface 103c 10ec (Agilent) E6978-66442 PCI CIC 10b5 1123 Sectra KK631 encryption board 10b5 9080 9080 [real subsystem ID not set] 12d9 0002 PCI Prosody Card 12df 4422 4422PCI ["Do-All" Telemetry Data Acquisition System] 1369 9601 PCX822np 1369 a102 PCX822v2 1369 a201 PCX442 1369 a301 LCM440v2 1369 a401 VX822 1369 a402 VX822v2 1369 a901 LCM420 1369 aa01 VX820v2 1517 000b ECSG-1R3ADC-PMC Clock synthesizer 9656 PCI9656 PCI <-> IOBus Bridge 1517 000f ECDR-GC314-PMC Receiver 1885 0700 Tsunami FPGA PMC with Altera Stratix S40 1885 0701 Tsunami FPGA PMC with Altera Stratix S30 9712 PEX9712 12-Lane, 5-Port PCIe Gen 3 (8.0 GT/s) ExpressFabric Switch 9733 PEX 9733 33-lane, 9-port PCI Express Gen 3 (8.0 GT/s) Switch 1d49 0001 ThinkSystem 1610-4P NVMe Switch Adapter 1d49 0002 ThinkSystem 810-4P NVMe Switch Adapter 9749 PEX 9749 49-lane, 13-port PCI Express Gen 3 (8.0 GT/s) Switch 1d49 0004 ThinkSystem 1610-8P NVMe Switch Adapter 9765 PEX9765 65-Lane, 17-Port PCIe Gen 3 (8.0 GT/s) ExpressFabric Switch 9781 PEX9781 81-Lane, 21-Port PCIe Gen 3 (8.0 GT/s) ExpressFabric Switch 9797 PEX9781 97-Lane, 25-Port PCIe Gen 3 (8.0 GT/s) ExpressFabric Switch a100 Blackmagic Design DeckLink bb04 B&B 3PCIOSD1A Isolated PCI Serial c001 CronyxOmega-PCI (8-port RS232) d00d PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 Digium Tormenta 2 T400P or E400P Quad T1 or E1 PCI card d33d PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 9030 Tormenta 3 Varion V401PT Quad T1/J1 PCI card d44d PCI9030 32-bit 33MHz PCI <-> IOBus Bridge 10b5 17f6 Allo CP100P/E 1-port E1/T1/J1 PCI/PCIe card 10b5 17f7 Allo CP400P/E 4-port E1/T1/J1 PCI/PCIe card 10b5 17f8 Allo CP200P/E 2-port E1/T1/J1 PCI/PCIe card 10b5 9030 Tormenta 3 Varion V401PE Quad E1 PCI card 10b6 Madge Networks 0001 Smart 16/4 PCI Ringnode 0002 Smart 16/4 PCI Ringnode Mk2 10b6 0002 Smart 16/4 PCI Ringnode Mk2 10b6 0006 16/4 CardBus Adapter 0003 Smart 16/4 PCI Ringnode Mk3 0e11 b0fd Compaq NC4621 PCI, 4/16, WOL 10b6 0003 Smart 16/4 PCI Ringnode Mk3 10b6 0007 Presto PCI Plus Adapter 0004 Smart 16/4 PCI Ringnode Mk1 0006 16/4 Cardbus Adapter 10b6 0006 16/4 CardBus Adapter 0007 Presto PCI Adapter 10b6 0007 Presto PCI 0009 Smart 100/16/4 PCI-HS Ringnode 10b6 0009 Smart 100/16/4 PCI-HS Ringnode 000a Token Ring 100/16/4 Ringnode/Ringrunner 10b6 000a Token Ring 100/16/4 Ringnode/Ringrunner 000b 16/4 CardBus Adapter Mk2 10b6 0008 16/4 CardBus Adapter Mk2 10b6 000b 16/4 Cardbus Adapter Mk2 000c RapidFire 3140V2 16/4 TR Adapter 10b6 000c RapidFire 3140V2 16/4 TR Adapter 1000 Collage 25/155 ATM Client Adapter 1001 Collage 155 ATM Server Adapter 10b7 3Com Corporation 0001 3c985 1000BaseSX (SX/TX) # wrong ID? 9850 0001 3c985B-SX 0013 AR5212 802.11abg NIC (3CRDAG675) 10b7 2031 3CRDAG675 11a/b/g Wireless PCI Adapter 0910 3C910-A01 1006 MINI PCI type 3B Data Fax Modem 1007 Mini PCI 56k Winmodem 10b7 615b Mini PCI 56K Modem 10b7 615c Mini PCI 56K Modem 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra] 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra] 1700 3c940 10/100/1000Base-T [Marvell] 1043 80eb A7V600/P4P800/K8V motherboard 10b7 0010 3C940 Gigabit LOM Ethernet Adapter 10b7 0020 3C941 Gigabit LOM Ethernet Adapter 147b 1407 KV8-MAX3 motherboard 3390 3c339 TokenLink Velocity 3590 3c359 TokenLink Velocity XL 10b7 3590 TokenLink Velocity XL Adapter (3C359/359B) 4500 3c450 HomePNA [Tornado] 5055 3c555 Laptop Hurricane 5057 3c575 Megahertz 10/100 LAN CardBus [Boomerang] 10b7 5a57 3C575 Megahertz 10/100 LAN Cardbus PC Card 5157 3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone] 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card 5257 3cCFE575CT CardBus [Cyclone] 10b7 5c57 FE575C-3Com 10/100 LAN CardBus-Fast Ethernet 5900 3c590 10BaseT [Vortex] 5920 3c592 EISA 10mbps Demon/Vortex 5950 3c595 100BaseTX [Vortex] 5951 3c595 100BaseT4 [Vortex] 5952 3c595 100Base-MII [Vortex] 5970 3c597 EISA Fast Demon/Vortex 5b57 3c595 Megahertz 10/100 LAN CardBus [Boomerang] 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card 6000 3CRSHPW796 [OfficeConnect Wireless CardBus] 6001 3com 3CRWE154G72 [Office Connect Wireless LAN Adapter] 6055 3c556 Hurricane CardBus [Cyclone] 6056 3c556B CardBus [Tornado] 10b7 6556 10/100 Mini PCI Ethernet Adapter 6560 3cCFE656 CardBus [Cyclone] 10b7 656a 3CCFEM656 10/100 LAN+56K Modem CardBus 6561 3cCFEM656 10/100 LAN+56K Modem CardBus 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus 6562 3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone] 10b7 656b 3CCFEM656B 10/100 LAN+56K Modem CardBus 6563 3cCFEM656B 10/100 LAN+56K Modem CardBus 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus 6564 3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado] 7646 3cSOHO100-TX Hurricane 7770 3CRWE777 PCI Wireless Adapter [Airconnect] 7940 3c803 FDDILink UTP Controller 7980 3c804 FDDILink SAS Controller 7990 3c805 FDDILink DAS Controller 80eb 3c940B 10/100/1000Base-T 8811 Token ring 9000 3c900 10BaseT [Boomerang] 9001 3c900 10Mbps Combo [Boomerang] 9004 3c900B-TPO Etherlink XL [Cyclone] 10b7 9004 3C900B-TPO Etherlink XL TPO 10Mb 9005 3c900B-Combo Etherlink XL [Cyclone] 10b7 9005 3C900B-Combo Etherlink XL Combo 9006 3c900B-TPC Etherlink XL [Cyclone] 900a 3c900B-FL 10base-FL [Cyclone] 9050 3c905 100BaseTX [Boomerang] 9051 3c905 100BaseT4 [Boomerang] 9054 3C905B-TX Fast Etherlink XL PCI 10b7 9054 3C905B-TX Fast Etherlink XL PCI 9055 3c905B 100BaseTX [Cyclone] 1028 0080 3C905B Fast Etherlink XL 10/100 1028 0081 3C905B Fast Etherlink XL 10/100 1028 0082 3C905B Fast Etherlink XL 10/100 1028 0083 3C905B Fast Etherlink XL 10/100 1028 0084 3C905B Fast Etherlink XL 10/100 1028 0085 3C905B Fast Etherlink XL 10/100 1028 0086 3C905B Fast Etherlink XL 10/100 1028 0087 3C905B Fast Etherlink XL 10/100 1028 0088 3C905B Fast Etherlink XL 10/100 1028 0089 3C905B Fast Etherlink XL 10/100 1028 0090 3C905B Fast Etherlink XL 10/100 1028 0091 3C905B Fast Etherlink XL 10/100 1028 0092 3C905B Fast Etherlink XL 10/100 1028 0093 3C905B Fast Etherlink XL 10/100 1028 0094 3C905B Fast Etherlink XL 10/100 1028 0095 3C905B Fast Etherlink XL 10/100 1028 0096 3C905B Fast Etherlink XL 10/100 1028 0097 3C905B Fast Etherlink XL 10/100 1028 0098 3C905B Fast Etherlink XL 10/100 1028 0099 3C905B Fast Etherlink XL 10/100 10b7 9055 3C905B Fast Etherlink XL 10/100 9056 3c905B-T4 Fast EtherLink XL [Cyclone] 9058 3c905B Deluxe Etherlink 10/100/BNC [Cyclone] 905a 3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone] 9200 3c905C-TX/TX-M [Tornado] 1028 0095 3C920 Integrated Fast Ethernet Controller 1028 0097 3C920 Integrated Fast Ethernet Controller 1028 00b4 OptiPlex GX110 1028 00d8 Precision 530 1028 00fe Optiplex GX240 1028 012a 3C920 Integrated Fast Ethernet Controller [Latitude C640] 10b7 1000 3C905CX-TX/TX-M Fast Etherlink for PC Management NIC 10b7 7000 10/100 Mini PCI Ethernet Adapter 10f1 2466 Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller) 144d c005 X10 Laptop 9201 3C920B-EMB Integrated Fast Ethernet Controller [Tornado] 1043 80ab A7N8X Deluxe onboard 3C920B-EMB Integrated Fast Ethernet Controller 9202 3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller 9210 3C920B-EMB-WNM Integrated Fast Ethernet Controller 9300 3CSOHO100B-TX 910-A01 [tulip] 9800 3c980-TX Fast Etherlink XL Server Adapter [Cyclone] 10b7 9800 3c980-TX Fast Etherlink XL Server Adapter 9805 3c980-C 10/100baseTX NIC [Python-T] 10b7 1201 EtherLink Server 10/100 Dual Port A 10b7 1202 EtherLink Server 10/100 Dual Port B 10b7 9805 3c980 10/100baseTX NIC [Python-T] 10f1 2462 Thunder K7 S2462 9900 3C990-TX [Typhoon] 9902 3CR990-TX-95 [Typhoon 56-bit] 9903 3CR990-TX-97 [Typhoon 168-bit] 9904 3C990B-TX-M/3C990BSVR [Typhoon2] 10b7 1000 3CR990B-TX-M [Typhoon2] 10b7 2000 3CR990BSVR [Typhoon2 Server] 9905 3CR990-FX-95/97/95 [Typhon Fiber] 10b7 1101 3CR990-FX-95 [Typhoon Fiber 56-bit] 10b7 1102 3CR990-FX-97 [Typhoon Fiber 168-bit] 10b7 2101 3CR990-FX-95 Server [Typhoon Fiber 56-bit] 10b7 2102 3CR990-FX-97 Server [Typhoon Fiber 168-bit] 9908 3CR990SVR95 [Typhoon Server 56-bit] 9909 3CR990SVR97 [Typhoon Server 168-bit] 990a 3C990SVR [Typhoon Server] 990b 3C990SVR [Typhoon Server] 10b8 Standard Microsystems Corp [SMC] 0005 83c170 EPIC/100 Fast Ethernet Adapter 1055 e000 LANEPIC 10/100 [EVB171Q-PCI] 1055 e002 LANEPIC 10/100 [EVB171G-PCI] 10b8 a011 EtherPower II 10/100 10b8 a014 EtherPower II 10/100 10b8 a015 EtherPower II 10/100 10b8 a016 EtherPower II 10/100 10b8 a017 EtherPower II 10/100 0006 83c175 EPIC/100 Fast Ethernet Adapter 1055 e100 LANEPIC Cardbus Fast Ethernet Adapter 1055 e102 LANEPIC Cardbus Fast Ethernet Adapter 1055 e300 LANEPIC Cardbus Fast Ethernet Adapter 1055 e302 LANEPIC Cardbus Fast Ethernet Adapter 10b8 a012 LANEPIC Cardbus Fast Ethernet Adapter 13a2 8002 LANEPIC Cardbus Fast Ethernet Adapter 13a2 8006 LANEPIC Cardbus Fast Ethernet Adapter 1000 FDC 37c665 1001 FDC 37C922 a011 83C170QF b106 SMC34C90 # Split off ALi Corporation in 2003 10b9 ULi Electronics Inc. 0101 CMI8338/C3DX PCI Audio Device 0111 C-Media CMI8738/C3DX Audio Device (OEM) 10b9 0111 C-Media CMI8738/C3DX Audio Device (OEM) 0780 Multi-IO Card 0782 Multi-IO Card 1435 M1435 1445 M1445 1449 M1449 1451 M1451 1461 M1461 1489 M1489 Cache-Memory PCI Controller (CMP) [FinALi 486] CPU to PCI bridge 1511 M1511 [Aladdin] 1512 M1512 [Aladdin] 1513 M1513 [Aladdin] 1521 M1521 [Aladdin III] 10b9 1521 ALI M1521 Aladdin III CPU Bridge 1523 M1523 10b9 1523 ALI M1523 ISA Bridge 1531 M1531 [Aladdin IV] 1533 M1533/M1535/M1543 PCI to ISA Bridge [Aladdin IV/V/V+] 1014 053b ThinkPad R40e 10b9 1533 ALi M1533 Aladdin IV/V ISA Bridge 1541 M1541 10b9 1541 ALI M1541 Aladdin V/V+ AGP System Controller 1543 M1543 1563 M1563 HyperTransport South Bridge 10b9 1563 ASRock 939Dual-SATA2 Motherboard 1849 1563 ASRock 939Dual-SATA2 Motherboard 1573 PCI to LPC Controller 1575 M1575 South Bridge 1621 M1621 1631 ALI M1631 PCI North Bridge Aladdin Pro III 1632 M1632M Northbridge+Trident 1641 ALI M1641 PCI North Bridge Aladdin Pro IV 1644 M1644/M1644T Northbridge+Trident 1646 M1646 Northbridge+Trident 1647 M1647 Northbridge [MAGiK 1 / MobileMAGiK 1] 1651 M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM] 1671 M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR] 1672 M1672 Northbridge [CyberALADDiN-P4] 1681 M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR] 1687 M1687 K8 Northbridge [AGP8X and HyperTransport] 1689 M1689 K8 Northbridge [Super K8 Single Chip] 1695 M1695 Host Bridge 1697 M1697 HTT Host Bridge 3141 M3141 3143 M3143 3145 M3145 3147 M3147 3149 M3149 3151 M3151 3307 M3307 3309 M3309 3323 M3325 Video/Audio Decoder 5212 M4803 5215 MS4803 5217 M5217H 5219 M5219 5225 M5225 5228 M5228 ALi ATA/RAID Controller 5229 M5229 IDE 1014 050f ThinkPad R30 1014 053d ThinkPad R40e 103c 0024 Pavilion ze4400 builtin IDE 103c 0025 XE4500 Notebook 1043 8053 A7A266 Motherboard IDE 1849 5229 ASRock 939Dual-SATA2 Motherboard IDE (PATA) 5235 M5225 5237 USB 1.1 Controller 1014 0540 ThinkPad R40e 103c 0024 Pavilion ze4400 builtin USB 103c 0025 XE4500 Notebook 104d 810f VAIO PCG-U1 USB/OHCI Revision 1.0 10b9 5237 M5273 USB OHCI PCI adapter 1849 5237 ASRock 939Dual-SATA2 Motherboard 5239 USB 2.0 Controller 10b9 5239 M5273 USB PCI adapter 1849 5239 ASRock 939Dual-SATA2 Motherboard 5243 M1541 PCI to AGP Controller 5246 AGP8X Controller 5247 PCI to AGP Controller 5249 M5249 HTT to PCI Bridge 524b PCI Express Root Port 524c PCI Express Root Port 524d PCI Express Root Port 524e PCI Express Root Port 5251 M5251 P1394 OHCI 1.0 Controller 5253 M5253 P1394 OHCI 1.1 Controller 5261 M5261 Ethernet Controller 5263 ULi 1689,1573 integrated ethernet. 5281 ALi M5281 Serial ATA / RAID Host Controller 5287 ULi 5287 SATA 5288 ULi M5288 SATA 1043 8056 A8R-MVP Mainboard 5289 ULi 5289 SATA 5450 Lucent Technologies Soft Modem AMR 5451 M5451 PCI AC-Link Controller Audio Device 1014 0506 ThinkPad R30 1014 053e ThinkPad R40e 103c 0024 Pavilion ze4400 builtin Audio 103c 0025 XE4500 Notebook 5453 M5453 PCI AC-Link Controller Modem Device 5455 M5455 PCI AC-Link Controller Audio Device 10b9 5455 ASRock 939Dual-SATA2 Motherboard 1849 0850 ASRock 939Dual-SATA2 Motherboard 5457 M5457 AC'97 Modem Controller 1014 0535 ThinkPad R40e 103c 0024 Pavilion ze4400 builtin Modem Device 103c 0025 XE4500 Notebook 5459 SmartLink SmartPCI561 56K Modem 545a SmartLink SmartPCI563 56K Modem 5461 HD Audio Controller 5471 M5471 Memory Stick Controller 5473 M5473 SD-MMC Controller 7101 M7101 Power Management Controller [PMU] 1014 0510 ThinkPad R30 1014 053c ThinkPad R40e 103c 0024 Pavilion ze4400 103c 0025 XE4500 Notebook 1849 7101 ASRock 939Dual-SATA2 Motherboard 10ba Mitsubishi Electric Corp. 0301 AccelGraphics AccelECLIPSE 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] 0308 Tornado 3000 [OEM Evans & Sutherland] 10dd 0024 Tornado 3000 1002 VG500 [VolumePro Volume Rendering Accelerator] 10bb Dapha Electronics Corporation 10bc Advanced Logic Research 10bd Surecom Technology 0e34 NE-34 10be Tseng Labs International Co. 10bf Most Inc 10c0 Boca Research Inc. 9135 iX3D Ultimate Rez 10c1 ICM Co., Ltd. 10c2 Auspex Systems Inc. 10c3 Samsung Semiconductors, Inc. 10c4 Award Software International Inc. 10c5 Xerox Corporation 10c6 Rambus Inc. 10c7 Media Vision 10c8 Neomagic Corporation 0001 NM2070 [MagicGraph 128] 0002 NM2090 [MagicGraph 128V] 0003 NM2093 [MagicGraph 128ZV] 0004 NM2160 [MagicGraph 128XD] 1014 00ba MagicGraph 128XD 1025 1007 MagicGraph 128XD 1028 0074 MagicGraph 128XD 1028 0075 MagicGraph 128XD 1028 007d MagicGraph 128XD 1028 007e MagicGraph 128XD 1033 802f MagicGraph 128XD 104d 801b MagicGraph 128XD 104d 802f MagicGraph 128XD 104d 830b MagicGraph 128XD 10ba 0e00 MagicGraph 128XD 10c8 0004 MagicGraph 128XD 10cf 1029 MagicGraph 128XD 10f7 8308 MagicGraph 128XD 10f7 8309 MagicGraph 128XD 10f7 830b MagicGraph 128XD 10f7 830d MagicGraph 128XD 10f7 8312 MagicGraph 128XD 0005 NM2200 [MagicGraph 256AV] 1014 00dd ThinkPad 570 1028 0088 Latitude CPi A 0006 NM2360 [MagicMedia 256ZX] 1014 0152 ThinkPad 600X 0016 NM2380 [MagicMedia 256XL+] 10c8 0016 MagicMedia 256XL+ 0025 NM2230 [MagicGraph 256AV+] 0083 NM2093 [MagicGraph 128ZV+] 8005 NM2200 [MagicMedia 256AV Audio] 0e11 b0d1 MagicMedia 256AV Audio Device on Discovery 0e11 b126 MagicMedia 256AV Audio Device on Durango 1014 00dd ThinkPad 390/i1720/i1721 1025 1003 MagicMedia 256AV Audio Device on TravelMate 720 1028 0088 Latitude CPi A 1028 008f MagicMedia 256AV Audio Device on Colorado Inspiron 103c 0007 MagicMedia 256AV Audio Device on Voyager II 103c 0008 MagicMedia 256AV Audio Device on Voyager III 103c 000d MagicMedia 256AV Audio Device on Omnibook 900 10c8 8005 MagicMedia 256AV Audio Device on FireAnt 110a 8005 MagicMedia 256AV Audio Device 14c0 0004 MagicMedia 256AV Audio Device 8006 NM2360 [MagicMedia 256ZX Audio] 8016 NM2380 [MagicMedia 256XL+ Audio] 10c9 Dataexpert Corporation 10ca Fujitsu Microelectr., Inc. 10cb Omron Corporation # nee Mentor ARC Inc 10cc Mai Logic Incorporated 0660 Articia S Host Bridge 0661 Articia S PCI Bridge 10cd Advanced System Products, Inc 1100 ASC1100 1200 ASC1200 [(abp940) Fast SCSI-II] 1300 ASC1300 / ASC3030 [ABP940-U / ABP960-U / ABP3925] 10cd 1310 ASC1300/3030 SCSI adapter 1195 1320 Ultra-SCSI CardBus PC Card REX CB31 2300 ABP940-UW 2500 ABP940-U2W 2700 ABP3950-U3W 10ce Radius # nee Citicorp TTI 10cf Fujitsu Limited. 01ef PCEA4 PCI-Express Dual Port ESCON Adapter 1414 On-board USB 1.1 companion controller 1415 On-board USB 2.0 EHCI controller 1422 E8410 nVidia graphics adapter 142d HD audio (Realtek ALC262) 1430 82566MM Intel 1Gb copper LAN interface 1623 PCEA4 PCI-Express Dual Port ESCON Adapter 2001 mb86605 200c MB86613L IEEE1394 OHCI 1.0 Controller 2010 MB86613S IEEE1394 OHCI 1.1 Controller 2019 MB86295S [CORAL P] 201e MB86296S [CORAL PA] 202b MB86297A [Carmine Graphics Controller] 10d1 FuturePlus Systems Corp. 10d2 Molex Incorporated 10d3 Jabil Circuit Inc 10d4 Hualon Microelectronics 10d5 Autologic Inc. 10d6 Cetia 10d7 BCM Advanced Research 10d8 Advanced Peripherals Labs 10d9 Macronix, Inc. [MXIC] 0431 MX98715 0512 MX98713 0531 MX987x5 1186 1200 DFE-540TX ProFAST 10/100 Adapter 8625 MX86250 8626 Macronix MX86251 + 3Dfx Voodoo Rush 8888 MX86200 10da Compaq IPG-Austin 0508 TC4048 Token Ring 4/16 3390 Tl3c3x9 10db Rohm LSI Systems, Inc. 10dc CERN/ECP/EDU 0001 STAR/RD24 SCI-PCI (PMC) 0002 TAR/RD24 SCI-PCI (PMC) 0021 HIPPI destination 0022 HIPPI source 10dc ATT2C15-3 FPGA 10dd Evans & Sutherland 0100 Lightning 1200 10dd 0023 Lightning 1200 15+16M 10de NVIDIA Corporation 0008 NV1 [STG2000X-B Series] 0009 NV1 [NV1 Series] 0018 NV3 [Riva 128] 0019 NV3 [Riva 128ZX] 0020 NV4 [Riva TNT] 1043 0200 V3400 TNT 1048 0c18 Erazor II SGRAM 1048 0c19 Erazor II 1048 0c1b Erazor II 1048 0c1c Erazor II 1092 0550 Viper V550 1092 0552 Viper V550 1092 4804 Viper V550 1092 4808 Viper V550 1092 4810 Viper V550 1092 4812 Viper V550 1092 4815 Viper V550 1092 4820 Viper V550 with TV out 1092 4822 Viper V550 1092 4904 Viper V550 1092 4914 Viper V550 1092 8225 Viper V550 10b4 273d Velocity 4400 10b4 273e Velocity 4400 10b4 2740 Velocity 4400 10de 0020 Riva TNT 1102 1015 Graphics Blaster CT6710 1102 1016 Graphics Blaster RIVA TNT 0028 NV5 [Riva TNT2 / TNT2 Pro] 1043 0200 AGP-V3800 SGRAM 1043 0201 AGP-V3800 SDRAM 1043 0205 PCI-V3800 1043 4000 AGP-V3800PRO 1048 0c21 Synergy II 1048 0c28 Erazor III 1048 0c29 Erazor III 1048 0c2a Erazor III 1048 0c2b Erazor III 1048 0c31 Erazor III Pro 1048 0c32 Erazor III Pro 1048 0c33 Erazor III Pro 1048 0c34 Erazor III Pro 107d 2134 WinFast 3D S320 II + TV-Out 1092 4804 Viper V770 1092 4a00 Viper V770 1092 4a02 Viper V770 Ultra 1092 5a00 RIVA TNT2/TNT2 Pro 1092 5a40 Viper V770D AGP 1092 6a02 Viper V770 Ultra 1092 7a02 Viper V770 Ultra 10de 0005 RIVA TNT2 Pro 10de 000f Compaq NVIDIA TNT2 Pro 1102 1020 3D Blaster RIVA TNT2 1102 1026 3D Blaster RIVA TNT2 Digital 1462 8806 MS-8806 AGPhantom Graphics Card 14af 5810 Maxi Gamer Xentor 0029 NV5 [Riva TNT2 Ultra] 1043 0200 AGP-V3800 Deluxe 1043 0201 AGP-V3800 Ultra SDRAM 1043 0205 PCI-V3800 Ultra 1048 0c2e Erazor III Ultra 1048 0c2f Erazor III Ultra 1048 0c30 Erazor III Ultra 1102 1021 3D Blaster RIVA TNT2 Ultra 1102 1029 3D Blaster RIVA TNT2 Ultra 1102 102f 3D Blaster RIVA TNT2 Ultra 14af 5820 Maxi Gamer Xentor 32 4843 4f34 Dynamite 002a NV5 [Riva TNT2] 002b NV5 [Riva TNT2] 002c NV5 [Vanta / Vanta LT] 1043 0200 AGP-V3800 Combat SDRAM 1043 0201 AGP-V3800 Combat 1048 0c20 TNT2 Vanta 1048 0c21 TNT2 Vanta 1048 0c25 TNT2 Vanta 16MB 1092 6820 Viper V730 1102 1031 CT6938 VANTA 8MB 1102 1034 CT6894 VANTA 16MB 14af 5008 Maxi Gamer Phoenix 2 002d NV5 [Riva TNT2 Model 64 / Model 64 Pro] 1043 0200 AGP-V3800M 1043 0201 AGP-V3800M 1048 0c3a Erazor III LT 1048 0c3b Erazor III LT 107d 2137 WinFast 3D S325 10de 0006 RIVA TNT2 Model 64/Model 64 Pro 10de 001e M64 AGP4x 1102 1023 CT6892 RIVA TNT2 Value 1102 1024 CT6932 RIVA TNT2 Value 32Mb 1102 102c CT6931 RIVA TNT2 Value [Jumper] 1102 1030 CT6931 RIVA TNT2 Value # S26361-D1243-V116 110a 006f GM1000-16 # S26361-D1243-V216 110a 0081 GM1000-16 1462 8808 MSI-8808 14af 5620 Gamer Cougar Video Edition 1554 1041 Pixelview RIVA TNT2 M64 1569 002d Palit Microsystems Daytona TNT2 M64 0034 MCP04 SMBus 0035 MCP04 IDE 0036 MCP04 Serial ATA Controller 0037 MCP04 Ethernet Controller 0038 MCP04 Ethernet Controller 003a MCP04 AC'97 Audio Controller 003b MCP04 USB Controller 003c MCP04 USB Controller 003d MCP04 PCI Bridge 003e MCP04 Serial ATA Controller 0040 NV40 [GeForce 6800 Ultra] 0041 NV40 [GeForce 6800] 1043 817b V9999 Gamer Edition 107d 2992 WinFast A400 1458 310f Geforce 6800 GV-N6812 0042 NV40 [GeForce 6800 LE] 107d 299b WinFast A400 LE 0043 NV40 [GeForce 6800 XE] 0044 NV40 [GeForce 6800 XT] 0045 NV40 [GeForce 6800 GT] 1043 817d V9999GT 1458 3140 GV-N68T256D 0047 NV40 [GeForce 6800 GS] 1682 2109 GeForce 6800 GS 0048 NV40 [GeForce 6800 XT] 004e NV40GL [Quadro FX 4000] 0050 CK804 ISA Bridge 1043 815a K8N4/A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1458 0c11 GA-K8N Ultra-9 Mainboard 1462 7100 MSI K8N Diamond 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 3402 NF4 AM2L Mainboard 0051 CK804 ISA Bridge 1028 0225 PowerEdge T105 ISA Bridge 0052 CK804 SMBus 1028 0225 PowerEdge T105 SMBus 1043 815a K8N4/A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1458 0c11 GA-K8N Ultra-9 Mainboard 1462 7100 MSI K8N Diamond 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 3402 NF4 AM2L Mainboard 0053 CK804 IDE 1043 815a K8N4/A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1458 5002 GA-K8N Ultra-9 Mainboard 1462 7100 MSI K8N Diamond 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 3402 NF4 AM2L Mainboard 0054 CK804 Serial ATA Controller 1028 0225 PowerEdge T105 Serial ATA 1043 815a A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1458 b003 GA-K8N Ultra-9 Mainboard 1462 7100 MSI K8N Diamond 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 5401 NF4 AM2L Mainboard 0055 CK804 Serial ATA Controller 1028 0225 PowerEdge T105 Serial ATA 1043 815a K8N4/A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1458 b003 GA-K8N Ultra-9 Mainboard 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 5401 NF4 AM2L Mainboard 0056 CK804 Ethernet Controller 0057 CK804 Ethernet Controller 1043 8141 K8N4/A8N Series Mainboard 10de cb84 NF4 Lanparty 10f1 2865 Tomcat K8E (S2865) 1458 e000 GA-K8N Ultra-9 Mainboard 1462 7100 MSI K8N Diamond 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 2501 NF4 AM2L Mainboard 0058 CK804 AC'97 Modem 0059 CK804 AC'97 Audio Controller 1043 812a K8N4/A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1462 7585 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 8211 NF4 AM2L Mainboard 005a CK804 USB Controller 1028 0225 PowerEdge T105 onboard USB 1043 815a K8N4/A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1458 5004 GA-K8N Ultra-9 Mainboard 1462 7100 MSI K8N Diamond 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 3402 NF4 AM2L Mainboard 005b CK804 USB Controller 1028 0225 PowerEdge T105 onboard USB 1043 815a K8N4/A8N Series Mainboard 10f1 2865 Tomcat K8E (S2865) 1458 5004 GA-K8N Ultra-9 Mainboard 1462 7100 MSI K8N Diamond 1462 7125 K8N Neo4-F mainboard 147b 1c1a KN8-Ultra Mainboard 1565 3402 NF4 AM2L Mainboard 005c CK804 PCI Bridge 005d CK804 PCIE Bridge 005e CK804 Memory Controller 1028 0225 PowerEdge T105 Memory Controller 1043 815a A8N Series Mainboard 10de 005e ECS Elitegroup NFORCE3-A939 motherboard. 10f1 2865 Tomcat K8E (S2865) 10f1 2891 Thunder K8SRE Mainboard 1458 5000 GA-K8N Ultra-9 Mainboard 1462 7100 K8N Diamond Mainboard 1462 7125 K8N Neo4-F Mainboard 147b 1c1a KN8-Ultra Mainboard 1565 3402 NF4 AM2L Mainboard 005f CK804 Memory Controller 0060 nForce2 ISA Bridge 1043 80ad A7N8X Mainboard 147b 1c02 NF7-S/NF7 (nVidia-nForce2) 2.X a0a0 03ba UK79G-1394 motherboard 0064 nForce2 SMBus (MCP) 147b 1c02 NF7-S/NF7 (nVidia-nForce2) 2.X a0a0 03bb UK79G-1394 motherboard 0065 nForce2 IDE 10de 0c11 nForce 2 EIDE Controller a0a0 03b2 UK79G-1394 motherboard 0066 nForce2 Ethernet Controller 1043 80a7 A7N8X Mainboard onboard nForce2 Ethernet 10de 0c11 nForce MCP-T Networking Adapter a0a0 03b3 UK79G-1394 motherboard 0067 nForce2 USB Controller 1043 0c11 A7N8X Mainboard a0a0 03b4 UK79G-1394 motherboard 0068 nForce2 USB Controller 1043 0c11 A7N8X Mainboard a0a0 03b4 UK79G-1394 motherboard 006a nForce2 AC97 Audio Controler (MCP) 1043 8095 nForce2 AC97 Audio Controller (MCP) a0a0 0304 UK79G-1394 motherboard 006b nForce Audio Processing Unit 10de 006b nForce2 MCP Audio Processing Unit a0a0 0304 UK79G-1394 motherboard 006c nForce2 External PCI Bridge 006d nForce2 PCI Bridge 006e nForce2 FireWire (IEEE 1394) Controller a0a0 0306 UK79G-1394 motherboard 0080 MCP2A ISA bridge 147b 1c09 NV7 Motherboard 0084 MCP2A SMBus 147b 1c09 NV7 Motherboard 0085 MCP2A IDE 147b 1c09 NV7 Motherboard 0086 MCP2A Ethernet Controller 0087 MCP2A USB Controller 147b 1c09 NV7 Motherboard 0088 MCP2A USB Controller 147b 1c09 NV7 Motherboard 008a MCP2S AC'97 Audio Controller 147b 1c09 NV7 Motherboard 008b MCP2A PCI Bridge 008c MCP2A Ethernet Controller 008e nForce2 Serial ATA Controller 0090 G70 [GeForce 7800 GTX] 0091 G70 [GeForce 7800 GTX] 0092 G70 [GeForce 7800 GT] 0093 G70 [GeForce 7800 GS] 0094 High Definition Audio 0095 G70 [GeForce 7800 SLI] 0097 G70 [GeForce GTS 250] 0098 G70M [GeForce Go 7800] 0099 G70M [GeForce Go 7800 GTX] 009d G70GL [Quadro FX 4500] 00a0 NV0A [Aladdin TNT2 IGP] 14af 5810 Maxi Gamer Xentor 00c0 NV41 [GeForce 6800 GS] 00c1 NV41 [GeForce 6800] 00c2 NV41 [GeForce 6800 LE] 00c3 NV41 [GeForce 6800 XT] 00c5 NV41 00c6 NV41 00c7 NV41 00c8 NV41M [GeForce Go 6800] 00c9 NV41M [GeForce Go 6800 Ultra] 00cc NV41GLM [Quadro FX Go1400] 00cd NV42GL [Quadro FX 3450/4000 SDI] 10de 029b Quadro FX 3450 00ce NV41GL [Quadro FX 1400] 00cf NV41 00d0 nForce3 LPC Bridge 00d1 nForce3 Host Bridge 00d2 nForce3 AGP Bridge 00d3 CK804 Memory Controller 00d4 nForce3 SMBus 00d5 nForce3 IDE 00d6 nForce3 Ethernet 00d7 nForce3 USB 1.1 00d8 nForce3 USB 2.0 00d9 nForce3 Audio 00da nForce3 Audio 00dd nForce3 PCI Bridge 00df CK8S Ethernet Controller 1043 80a7 K8N-E 105b 0c43 Winfast NF3250K8AA 147b 1c0b NF8 Mainboard 00e0 nForce3 250Gb LPC Bridge 1043 813f K8N-E 10de 0c11 Winfast NF3250K8AA 1462 7030 K8N Neo-FSR v2.0 147b 1c0b NF8 Mainboard 1849 00e0 Motherboard (one of many) 00e1 nForce3 250Gb Host Bridge 1043 813f K8N-E 1462 7030 K8N Neo-FSR v2.0 147b 1c0b NF8 Mainboard 1849 00e1 Motherboard (one of many) 00e2 nForce3 250Gb AGP Host to PCI Bridge 00e3 nForce3 Serial ATA Controller 1043 813f K8N-E 105b 0c43 Winfast NF3250K8AA 147b 1c0b NF8 Mainboard 1849 00e3 Motherboard (one of many) 00e4 nForce 250Gb PCI System Management 1043 813f K8N-E 105b 0c43 Winfast NF3250K8AA 1462 7030 K8N Neo-FSR v2.0 147b 1c0b NF8 Mainboard 1849 00e4 Motherboard (one of many) 00e5 CK8S Parallel ATA Controller (v2.5) 1043 813f K8N-E 105b 0c43 Winfast NF3250K8AA 1462 7030 K8N Neo-FSR v2.0 147b 1c0b NF8 Mainboard 1849 00e5 Motherboard (one of many) f849 00e5 Motherboard (one of many) 00e6 CK8S Ethernet Controller 00e7 CK8S USB Controller 1043 813f K8N-E 105b 0c43 Winfast NF3250K8AA 1462 7030 K8N Neo-FSR v2.0 147b 1c0b NF8 Mainboard 1849 00e7 Motherboard (one of many) 00e8 nForce3 EHCI USB 2.0 Controller 1043 813f K8N-E 105b 0c43 Winfast NF3250K8AA 1462 7030 K8N Neo-FSR v2.0 147b 1c0b NF8 Mainboard 1849 00e8 Motherboard (one of many) 00ea nForce3 250Gb AC'97 Audio Controller 1043 819d K8N-E 105b 0c43 Winfast NF3250K8AA 1462 b010 K8N Neo-FSR v2.0 147b 1c0b NF8 Mainboard 00ed nForce3 250Gb PCI-to-PCI Bridge 00ee nForce3 Serial ATA Controller 2 00f1 NV43 [GeForce 6600 GT] 1043 81a6 N6600GT TD 128M AGP 1043 81c6 N6600GT TD 128M AGP 1458 3150 GV-N66T128VP 1554 1191 PixelView PV-N43UA (128KD) 1682 2119 GeForce 6600 GT AGP 00f2 NV43 [GeForce 6600] 1554 1194 PixelView PV-N43AT (256KD) 1682 211c GeForce 6600 256MB DDR DUAL DVI TV 00f3 NV43 [GeForce 6200] 00f4 NV43 [GeForce 6600 LE] 00f5 G70/G71 [GeForce 7800 GS AGP] 00f6 NV43 [GeForce 6800 GS/XT] 1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP 00f8 NV45GL [Quadro FX 3400/4400] 00f9 NV40 [GeForce 6800 GT/GTO/Ultra] 10de 00f9 NV40 [GeForce 6800 GT] 1682 2120 GEFORCE 6800 GT PCI-E 00fa NV39 [GeForce PCX 5750] 00fb NV35 [GeForce PCX 5900] 00fc NV37GL [Quadro FX 330/GeForce PCX 5300] 00fd NV37GL [Quadro PCI-E Series] 00fe NV38GL [Quadro FX 1300] 00ff NV19 [GeForce PCX 4300] 0100 NV10 [GeForce 256 SDR] 1043 0200 AGP-V6600 SGRAM 1043 0201 AGP-V6600 SDRAM 1043 4008 AGP-V6600 SGRAM 1043 4009 AGP-V6600 SDRAM 1048 0c41 Erazor X 1048 0c43 ERAZOR X PCI 1048 0c48 Synergy Force 1102 102d CT6941 GeForce 256 14af 5022 3D Prophet SE 0101 NV10 [GeForce 256 DDR] 1043 0202 AGP-V6800 DDR 1043 400a AGP-V6800 DDR SGRAM 1043 400b AGP-V6800 DDR SDRAM 1048 0c42 Erazor X 107d 2822 WinFast GeForce 256 1102 102e CT6970/CT6971 14af 5021 3D Prophet DDR-DVI 0103 NV10GL [Quadro] 1048 0c40 GLoria II-64 1048 0c44 GLoria II 1048 0c45 GLoria II 1048 0c4a GLoria II-64 Pro 1048 0c4b GLoria II-64 Pro DVII 10a9 9002 VPro VR3 0110 NV11 [GeForce2 MX/MX 400] 1043 4015 AGP-V7100 Pro 1043 4021 V7100 Deluxe Combo 1043 4031 V7100 Pro with TV output 1048 0c60 Gladiac MX 1048 0c61 Gladiac 511PCI 1048 0c63 Gladiac 511TV-OUT 32MB 1048 0c64 Gladiac 511TV-OUT 64MB 1048 0c65 Gladiac 511TWIN 1048 0c66 Gladiac 311 10b0 0001 GeForce2 MX Jumbo TV 10de 0091 Dell OEM GeForce 2 MX 400 10de 00a1 Apple OEM GeForce2 MX 1462 8523 MS-8852 1462 8817 MSI GeForce2 MX400 Pro32S [MS-8817] 14af 7102 3D Prophet II MX 14af 7103 3D Prophet II MX Dual-Display 1545 0023 Xtasy Rev. B2 1554 1081 MVGA-NVG11AM(400) 0111 NV11 [GeForce2 MX200] 0112 NV11M [GeForce2 Go] 0113 NV11GL [Quadro2 MXR/EX/Go] 1028 00e5 Quadro2 Go 0140 NV43 [GeForce 6600 GT] 1458 3125 GV-NX66T128D 1458 3126 GV-NX66T256DE 1462 8939 MS-8983 0141 NV43 [GeForce 6600] 1043 81b0 EN6600 Silencer 107d 593a LR2A22 128MB TV OUT 107d 597b WINFAST PX6600 1458 3124 GV-NX66128DP Turbo Force Edition 0142 NV43 [GeForce 6600 LE] 0143 NV43 [GeForce 6600 VE] 0144 NV43M [GeForce Go 6600] 0145 NV43 [GeForce 6610 XL] 0146 NV43M [GeForce Go6200 TE / 6600 TE] 0147 NV43 [GeForce 6700 XL] 0148 NV43M [GeForce Go 6600] 0149 NV43M [GeForce Go 6600 GT] 014a NV43 [Quadro NVS 440] 014b NV43 014d NV43GL [Quadro FX 550] 014e NV43GL [Quadro FX 540] 014f NV43 [GeForce 6200] 0150 NV15 [GeForce2 GTS/Pro] 1043 4016 V7700 AGP Video Card 1043 402a AGP-V7700 1048 0c50 Gladiac 1048 0c52 Gladiac-64 107d 2840 WinFast GeForce2 GTS with TV output 107d 2842 WinFast GeForce 2 Pro 10de 002e GeForce2 GTS 1462 815a MS-8815 1462 8831 Creative GeForce2 Pro 0151 NV15 [GeForce2 Ti] 1043 405f V7700Ti 1462 5506 Creative 3D Blaster GeForce2 Titanium 1462 8364 MS-8836 0152 NV15 [GeForce2 Ultra] 1048 0c56 GLADIAC Ultra 0153 NV15GL [Quadro2 Pro] 0160 NV44 [GeForce 6500] 0161 NV44 [GeForce 6200 TurboCache] 0162 NV44 [GeForce 6200 SE TurboCache] 0163 NV44 [GeForce 6200 LE] 0164 NV44M [GeForce Go 6200] 0165 NV44 [Quadro NVS 285] 0166 NV44M [GeForce Go 6400] 0167 NV44M [GeForce Go 6200] 0168 NV44M [GeForce Go 6400] 0169 NV44 [GeForce 6250] 016a NV44 [GeForce 7100 GS] 016d NV44 016e NV44 016f NV44 0170 NV17 [GeForce4 MX 460] 1462 8630 MS-8863 0171 NV17 [GeForce4 MX 440] 10b0 0002 Gainward Pro/600 TV 10de 0008 Apple OEM GeForce4 MX 440 1462 8661 G4MX440-VTP 1462 8730 MX440SES-T (MS-8873) 1462 8743 MS-8874 1462 8852 GeForce4 MX440 PCI 147b 8f00 Abit Siluro GeForce4MX440 0172 NV17 [GeForce4 MX 420] 1462 8730 MS-8873 1462 8784 MS-8878 0173 NV17 [GeForce4 MX 440-SE] 0174 NV17M [GeForce4 440 Go] 0175 NV17M [GeForce4 420 Go] 0176 NV17M [GeForce4 420 Go 32M] 103c 08b0 tc1100 tablet 144d c005 X10 Laptop 4c53 1090 Cx9 / Vx9 mainboard 0177 NV17M [GeForce4 460 Go] 0178 NV17GL [Quadro4 550 XGL] 0179 NV17M [GeForce4 440 Go 64M] 10de 0179 GeForce4 MX (Mac) 017a NV17GL [Quadro NVS] 017b NV17GL [Quadro4 550 XGL] 017c NV17GL [Quadro4 500 GoGL] 017f NV17 0181 NV18 [GeForce4 MX 440 AGP 8x] 1043 8063 GeForce4 MX 440 AGP 8X 1043 806f V9180 Magic 1462 8880 MS-StarForce GeForce4 MX 440 with AGP8X 1462 8900 MS-8890 GeForce 4 MX440 AGP8X 1462 9350 MSI GeForce4 MX T8X with AGP8X 147b 8f0d Siluro GF4 MX-8X 1554 1111 PixelView MVGA-NVG18A 0182 NV18 [GeForce4 MX 440SE AGP 8x] 0183 NV18 [GeForce4 MX 420 AGP 8x] 0184 NV18 [GeForce4 MX] 0185 NV18 [GeForce4 MX 4000] 0186 NV18M [GeForce4 448 Go] 0187 NV18M [GeForce4 488 Go] 0188 NV18GL [Quadro4 580 XGL] 0189 NV18 [GeForce4 MX with AGP8X (Mac)] 018a NV18GL [Quadro NVS 280 SD] 018b NV18GL [Quadro4 380 XGL] 018c NV18GL [Quadro NVS 50 PCI] 018d NV18M [GeForce4 448 Go] 0190 G80 [GeForce 8800 GTS / 8800 GTX] 0191 G80 [GeForce 8800 GTX] 0192 G80 [GeForce 8800 GTS] 0193 G80 [GeForce 8800 GTS] 107d 20bd WinFast PX 8800 GTS TDH 0194 G80 [GeForce 8800 Ultra] 0197 G80GL [Tesla C870] 019d G80GL [Quadro FX 5600] 019e G80GL [Quadro FX 4600] 01a0 nForce 220/420 NV1A [GeForce2 MX] 01a4 nForce CPU bridge 01ab nForce 420 Memory Controller (DDR) 01ac nForce 220/420 Memory Controller 01ad nForce 220/420 Memory Controller 01b0 nForce Audio Processing Unit 01b1 nForce AC'97 Audio Controller 01b2 nForce ISA Bridge 01b4 nForce PCI System Management 01b7 nForce AGP to PCI Bridge 01b8 nForce PCI-to-PCI bridge 01bc nForce IDE 01c1 nForce AC'97 Modem Controller 01c2 nForce USB Controller 01c3 nForce Ethernet Controller 01d0 G72 [GeForce 7350 LE] 01d1 G72 [GeForce 7300 LE] 107d 5efa WinFast PX7300LE-TD128 107d 5efb WinFast PX7300LE-TD256 1462 0345 7300LE PCI Express Graphics Adapter 01d2 G72 [GeForce 7550 LE] 01d3 G72 [GeForce 7200 GS / 7300 SE] 1043 8203 EN7300SE 1043 8250 EN7200GS 01d5 G72 01d6 G72M [GeForce Go 7200] 01d7 G72M [Quadro NVS 110M/GeForce Go 7300] 01d8 G72M [GeForce Go 7400] 1028 01d7 XPS M1210 01d9 G72M [GeForce Go 7450] 01da G72M [Quadro NVS 110M] 01db G72M [Quadro NVS 120M] 01dc G72GLM [Quadro FX 350M] 01dd G72 [GeForce 7500 LE] 01de G72GL [Quadro FX 350] 10de 01dc Quadro FX Go350M 01df G72 [GeForce 7300 GS] 01e0 nForce2 IGP2 147b 1c09 NV7 Motherboard 01e8 nForce2 AGP 01ea nForce2 Memory Controller 0 a0a0 03b9 UK79G-1394 motherboard 01eb nForce2 Memory Controller 1 a0a0 03b9 UK79G-1394 motherboard 01ec nForce2 Memory Controller 2 a0a0 03b9 UK79G-1394 motherboard 01ed nForce2 Memory Controller 3 a0a0 03b9 UK79G-1394 motherboard 01ee nForce2 Memory Controller 4 10de 01ee MSI Delta-L nForce2 memory controller a0a0 03b9 UK79G-1394 motherboard 01ef nForce2 Memory Controller 5 a0a0 03b9 UK79G-1394 motherboard 01f0 NV1F C17 [GeForce4 MX IGP] a0a0 03b5 UK79G-1394 motherboard 0200 NV20 [GeForce3] 1043 402f AGP-V8200 DDR 1048 0c70 GLADIAC 920 0201 NV20 [GeForce3 Ti 200] 1462 8503 G3Ti200 Pro VT128 0202 NV20 [GeForce3 Ti 500] 1043 405b V8200 T5 1545 002f Xtasy 6964 0203 NV20GL [Quadro DCC] 0211 NV48 [GeForce 6800] 0212 NV48 [GeForce 6800 LE] 0215 NV48 [GeForce 6800 GT] 0218 NV48 [GeForce 6800 XT] 0221 NV44A [GeForce 6200] 1043 81e1 N6200/TD/256M/A 3842 a341 256A8N341DX 0222 NV44 [GeForce 6200 A-LE] 0224 NV44 0240 C51PV [GeForce 6150] 1043 81cd A8N-VM CSM 1462 7207 K8NGM2 series 0241 C51 [GeForce 6150 LE] 0242 C51G [GeForce 6100] 105b 0cad Winfast 6100K8MB 0243 C51 PCI Express Bridge 0244 C51 [GeForce Go 6150] 103c 30b5 Presario V3242AU 103c 30b7 Presario V6133CL 10de 0244 GeForce Go 6150 0245 C51 [Quadro NVS 210S/GeForce 6150LE] 0246 C51 PCI Express Bridge 0247 C51 [GeForce Go 6100] 1043 1382 MCP51 PCI-X GeForce Go 6100 0248 C51 PCI Express Bridge 0249 C51 PCI Express Bridge 024a C51 PCI Express Bridge 024b C51 PCI Express Bridge 024c C51 PCI Express Bridge 024d C51 PCI Express Bridge 024e C51 PCI Express Bridge 024f C51 PCI Express Bridge 0250 NV25 [GeForce4 Ti 4600] 0251 NV25 [GeForce4 Ti 4400] 1043 8023 v8440 GeForce 4 Ti4400 10de 0251 PNY GeForce4 Ti 4400 1462 8710 PNY GeForce4 Ti 4400 0252 NV25 [GeForce4 Ti] 0253 NV25 [GeForce4 Ti 4200] 107d 2896 WinFast A250 LE TD (Dual VGA/TV-out/DVI) 147b 8f09 Siluro (Dual VGA/TV-out/DVI) 0258 NV25GL [Quadro4 900 XGL] 0259 NV25GL [Quadro4 750 XGL] 025b NV25GL [Quadro4 700 XGL] 0260 MCP51 LPC Bridge 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81bc A8N-VM CSM Mainboard 1458 5001 GA-M55plus-S3G 1462 7207 K8NGM2 series 0261 MCP51 LPC Bridge 105b 0cad Winfast 6100K8MB 0262 MCP51 LPC Bridge 0263 MCP51 LPC Bridge 0264 MCP51 SMBus 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81bc A8N-VM CSM Mainboard 105b 0cad Winfast 6100K8MB 1462 7207 K8NGM2 series 0265 MCP51 IDE 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81bc A8N-VM CSM Mainboard 1462 7207 K8NGM2 series # Foxconn has used a wrong vendor ID for this one f05b 0cad Winfast 6100K8MB 0266 MCP51 Serial ATA Controller 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81bc A8N-VM CSM Mainboard 1462 7207 K8NGM2 series 0267 MCP51 Serial ATA Controller 103c 2a34 Pavilion a1677c 1043 81bc A8N-VM CSM Mainboard 1462 7207 K8NGM2 series 0268 MCP51 Ethernet Controller 0269 MCP51 Ethernet Controller 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 8141 A8N-VM CSM Mainboard 1462 7207 K8NGM2 series 026a MCP51 MCI 026b MCP51 AC97 Audio Controller 105b 0cad Winfast 6100K8MB 026c MCP51 High Definition Audio 103c 2a34 Pavilion a1677c 103c 30b5 Presario V3242AU 103c 30b7 Presario V6133CL 10de cb84 ASUSTeK Computer Inc. A8N-VM CSM Mainboard 1462 7207 K8NGM2 series 026d MCP51 USB Controller 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81bc A8N-VM CSM Mainboard 105b 0cad Winfast 6100K8MB 1462 7207 K8NGM2 series 026e MCP51 USB Controller 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81bc A8N-VM CSM Mainboard 105b 0cad Winfast 6100K8MB 1462 7207 K8NGM2 series 026f MCP51 PCI Bridge 103c 30b7 Presario V6133CL 0270 MCP51 Host Bridge 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81bc A8N-VM CSM Mainboard 105b 0cad Winfast 6100K8MB 1458 5001 GA-M55plus-S3G 1462 7207 K8NGM2 series 0271 MCP51 PMU 103c 30b5 Presario V3242AU 103c 30b7 Presario V6133CL 0272 MCP51 Memory Controller 0 103c 2a34 Pavilion a1677c 105b 0cad Winfast 6100K8MB 027e C51 Memory Controller 2 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1458 5000 GA-M55plus-S3G 1462 7207 K8NGM2 series 027f C51 Memory Controller 3 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1458 5000 GA-M55plus-S3G 1462 7207 K8NGM2 series 0280 NV28 [GeForce4 Ti 4800] 0281 NV28 [GeForce4 Ti 4200 AGP 8x] 0282 NV28 [GeForce4 Ti 4800 SE] 0286 NV28M [GeForce4 Ti 4200 Go AGP 8x] 0288 NV28GL [Quadro4 980 XGL] 0289 NV28GL [Quadro4 780 XGL] 028c NV28GLM [Quadro4 Go700] 0290 G71 [GeForce 7900 GTX] 0291 G71 [GeForce 7900 GT/GTO] 10de 042b NX7900GTO-T2D512E [7900 GTO] 0292 G71 [GeForce 7900 GS] 0293 G71 [GeForce 7900 GX2] 0294 G71 [GeForce 7950 GX2] 0295 G71 [GeForce 7950 GT] 1043 8225 GeForce 7950 GT 107d 2a68 WinFast PX7950GT TDH 1462 0663 NX7950GT-VT2D512EZ-HD 0297 G71M [GeForce Go 7950 GTX] 0298 G71M [GeForce Go 7900 GS] 0299 G71M [GeForce Go 7900 GTX] 029a G71GLM [Quadro FX 2500M] 029b G71GLM [Quadro FX 1500M] 029c G71GL [Quadro FX 5500] 029d G71GL [Quadro FX 3500] 1028 019b G71GLM [Quadro FX 3500M] 029e G71GL [Quadro FX 1500] 029f G71GL [Quadro FX 4500 X2] # Xbox Graphics Processing Unit (Integrated). GeForce3 derivative (NV20 < NV2A < NV25). 02a0 NV2A [XGPU] 02a5 MCPX CPU Bridge 02a6 MCPX Memory Controller 02e0 G73 [GeForce 7600 GT AGP] 02e0 2249 GF 7600GT 560M 256MB DDR3 DUAL DVI TV 02e1 G73 [GeForce 7600 GS AGP] 1682 222b PV-T73K-UAL3 (256MB) 1682 2247 GF 7600GS 512MB DDR2 02e2 G73 [GeForce 7300 GT AGP] 02e3 G71 [GeForce 7900 GS AGP] 02e4 G71 [GeForce 7950 GT AGP] 1682 2271 PV-T71A-YDF7 (512MB) 02e5 G71 [GeForce 7600 GS AGP] 02f0 C51 Host Bridge 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1462 7207 K8NGM2 series 02f1 C51 Host Bridge 1458 5000 GA-M55plus-S3G 02f2 C51 Host Bridge 02f3 C51 Host Bridge 02f4 C51 Host Bridge 02f5 C51 Host Bridge 02f6 C51 Host Bridge 02f7 C51 Host Bridge 02f8 C51 Memory Controller 5 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1458 5000 GA-M55plus-S3G 1462 7207 K8NGM2 series 02f9 C51 Memory Controller 4 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1458 5000 GA-M55plus-S3G 1462 7207 K8NGM2 series 02fa C51 Memory Controller 0 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1458 5000 GA-M55plus-S3G 1462 7207 K8NGM2 series 02fb C51 PCI Express Bridge 02fc C51 PCI Express Bridge 103c 30b7 Presario V6133CL 02fd C51 PCI Express Bridge 103c 30b7 Presario V6133CL 02fe C51 Memory Controller 1 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1458 5000 GA-M55plus-S3G 1462 7207 K8NGM2 series 02ff C51 Host Bridge 103c 2a34 Pavilion a1677c 103c 30b7 Presario V6133CL 1043 81cd A8N-VM CSM Mainboard 1458 5000 GA-M55plus-S3G 1462 7207 K8NGM2 series 0300 NV30 [GeForce FX] 0301 NV30 [GeForce FX 5800 Ultra] 0302 NV30 [GeForce FX 5800] 0308 NV30GL [Quadro FX 2000] 0309 NV30GL [Quadro FX 1000] 0311 NV31 [GeForce FX 5600 Ultra] 0312 NV31 [GeForce FX 5600] 0314 NV31 [GeForce FX 5600XT] 1043 814a V9560XT/TD 0316 NV31M 0318 NV31GL 031a NV31M [GeForce FX Go5600] 031b NV31M [GeForce FX Go5650] 031c NV31GLM [Quadro FX Go700] 0320 NV34 [GeForce FX 5200] 0321 NV34 [GeForce FX 5200 Ultra] 0322 NV34 [GeForce FX 5200] 1043 02fb V9250 Magic 1043 8180 V9520-X/TD/128M 107d 2967 WinFast A340T 128MB 1462 9110 MS-8911 (FX5200-TD128) 1462 9171 MS-8917 (FX5200-T128) 1462 9360 MS-8936 (FX5200-T128) 1682 1351 GeForce FX 5200 0323 NV34 [GeForce FX 5200LE] 0324 NV34M [GeForce FX Go5200 64M] 1028 0196 Inspiron 5160 103c 006a Pavilion ZD7000 laptop 1071 8160 MIM2000 0325 NV34M [GeForce FX Go5250] 0326 NV34 [GeForce FX 5500] 1458 310d GeForce FX 5500 128 MB 1682 2034 GeForce 5500 256 MB 0327 NV34 [GeForce FX 5100] 0328 NV34M [GeForce FX Go5200 32M/64M] 0329 NV34M [GeForce FX Go5200] 10de 0010 Powerbook G4 032a NV34GL [Quadro NVS 280 PCI] 032b NV34GL [Quadro FX 500/600 PCI] 032c NV34M [GeForce FX Go5300 / Go5350] 032d NV34M [GeForce FX Go5100] 032e NV34 032f NV34 [GeForce FX 5200] 0330 NV35 [GeForce FX 5900 Ultra] 1043 8137 V9950 Ultra / 256 MB 0331 NV35 [GeForce FX 5900] 1043 8145 V9950GE 0332 NV35 [GeForce FX 5900XT] 0333 NV38 [GeForce FX 5950 Ultra] 0334 NV35 [GeForce FX 5900ZT] 1462 9373 FX5900ZT-VTD128 (MS-8937) 0338 NV35GL [Quadro FX 3000] 033f NV35GL [Quadro FX 700] 0341 NV36 [GeForce FX 5700 Ultra] 1462 9380 MS-8938 (FX5700U-TD128) 0342 NV36 [GeForce FX 5700] 0343 NV36 [GeForce FX 5700LE] 0344 NV36 [GeForce FX 5700VE] 0347 NV36M [GeForce FX Go5700] 103c 006a NX9500 0348 NV36M [GeForce FX Go5700] 034c NV36 [Quadro FX Go1000] 034d NV36 034e NV36GL [Quadro FX 1100] 0360 MCP55 LPC Bridge 0361 MCP55 LPC Bridge 1028 0221 PowerEdge R805 MCP55 LPC Bridge 0362 MCP55 LPC Bridge 147b 1c24 KN9 series mainboard 0363 MCP55 LPC Bridge 0364 MCP55 LPC Bridge 1028 0221 PowerEdge R805 MCP55 LPC Bridge 0365 MCP55 LPC Bridge 0366 MCP55 LPC Bridge 0367 MCP55 LPC Bridge 0368 MCP55 SMBus Controller 1028 020c PowerEdge M605 MCP55 SMBus 1028 0221 PowerEdge R805 MCP55 SMBus 147b 1c24 KN9 series mainboard 0369 MCP55 Memory Controller 147b 1c24 KN9 series mainboard 036a MCP55 Memory Controller 036b MCP55 SMU 036c MCP55 USB Controller 1028 020c PowerEdge M605 MCP55 USB Controller 1028 0221 PowerEdge R805 MCP55 USB Controller 147b 1c24 KN9 series mainboard 036d MCP55 USB Controller 1028 020c PowerEdge M605 MCP55 USB Controller 1028 0221 PowerEdge R805 MCP55 USB Controller 147b 1c24 KN9 series mainboard 036e MCP55 IDE 147b 1c24 KN9 series mainboard 0370 MCP55 PCI bridge 0371 MCP55 High Definition Audio 147b 1c24 KN9 series mainboard 0372 MCP55 Ethernet 0373 MCP55 Ethernet 147b 1c24 KN9 series mainboard 0374 MCP55 PCI Express bridge 0375 MCP55 PCI Express bridge 0376 MCP55 PCI Express bridge 0377 MCP55 PCI Express bridge 0378 MCP55 PCI Express bridge 037a MCP55 Memory Controller 037e MCP55 SATA Controller 037f MCP55 SATA Controller 1028 0221 PowerEdge R805 MCP55 SATA Controller 147b 1c24 KN9 series mainboard 038b G73 [GeForce 7650 GS] 0390 G73 [GeForce 7650 GS] 0391 G73 [GeForce 7600 GT] 1458 3427 GV-NX76T128D-RH 1462 0452 NX7600GT-VT2D256E 0392 G73 [GeForce 7600 GS] 1462 0622 NX7600GS-T2D256EH 0393 G73 [GeForce 7300 GT] 10de 0412 NX7300GT-TD256EH 1462 0412 NX7300GT-TD256EH 0394 G73 [GeForce 7600 LE] 0395 G73 [GeForce 7300 GT] 0396 G73 0397 G73M [GeForce Go 7700] 0398 G73M [GeForce Go 7600] 1025 006c Aspire 9814WKMi 0399 G73M [GeForce Go 7600 GT] 039a G73M [Quadro NVS 300M] 039b G73M [GeForce Go 7900 SE] 039c G73GLM [Quadro FX 550M] 10de 039c Quadro FX 560M 039d G73 039e G73GL [Quadro FX 560] 039f G73 03a0 C55 Host Bridge 03a1 C55 Host Bridge 03a2 C55 Host Bridge 03a3 C55 Host Bridge 03a4 C55 Host Bridge 03a5 C55 Host Bridge 03a6 C55 Host Bridge 03a7 C55 Host Bridge 03a8 C55 Memory Controller 03a9 C55 Memory Controller 03aa C55 Memory Controller 03ab C55 Memory Controller 03ac C55 Memory Controller 03ad C55 Memory Controller 03ae C55 Memory Controller 03af C55 Memory Controller 03b0 C55 Memory Controller 03b1 C55 Memory Controller 03b2 C55 Memory Controller 03b3 C55 Memory Controller 03b4 C55 Memory Controller 03b5 C55 Memory Controller 03b6 C55 Memory Controller 03b7 C55 PCI Express bridge 03b8 C55 PCI Express bridge 03b9 C55 PCI Express bridge 03ba C55 Memory Controller 03bb C55 PCI Express bridge 03bc C55 Memory Controller 03d0 C61 [GeForce 6150SE nForce 430] 1028 020e Inspiron 531 03d1 C61 [GeForce 6100 nForce 405] 03d2 C61 [GeForce 6100 nForce 400] 03d5 C61 [GeForce 6100 nForce 420] 03d6 C61 [GeForce 7025 / nForce 630a] 03e0 MCP61 LPC Bridge 1028 020e Inspiron 531 1849 03e0 939NF6G-VSTA Board 03e1 MCP61 LPC Bridge 1043 83a4 M4N68T series motherboard 03e2 MCP61 Host Bridge 1043 83a4 M4N68T series motherboard 03e3 MCP61 LPC Bridge 03e4 MCP61 High Definition Audio 03e5 MCP61 Ethernet 03e6 MCP61 Ethernet 03e7 MCP61 SATA Controller 03e8 MCP61 PCI Express bridge 1028 020e Inspiron 531 1849 03e8 939NF6G-VSTA Board 03e9 MCP61 PCI Express bridge 1028 020e Inspiron 531 1849 03e9 939NF6G-VSTA Board 03ea MCP61 Memory Controller 1028 020e Inspiron 531 1849 03ea 939NF6G-VSTA Board 03eb MCP61 SMBus 1028 020e Inspiron 531 1043 83a4 M4N68T series motherboard 1849 03eb 939NF6G-VSTA Board 03ec MCP61 IDE 1025 0392 ET1350 1028 020e Inspiron 531 1043 83a4 M4N68T series motherboard 1849 03ec 939NF6G-VSTA Board 03ee MCP61 Ethernet 03ef MCP61 Ethernet 1025 8000 ET1350 1028 020e Inspiron 531 1043 83a4 M4N68T series motherboard 1849 03ef 939NF6G-VSTA Board 03f0 MCP61 High Definition Audio 1028 020e Inspiron 531 1043 8415 M4N68T series motherboard 1849 0888 939NF6G-VSTA Board 03f1 MCP61 USB 1.1 Controller 1028 020e Inspiron 531 1043 83a4 M4N68T series motherboard 1849 03f1 939NF6G-VSTA Board 03f2 MCP61 USB 2.0 Controller 1028 020e Inspiron 531 1043 83a4 M4N68T series motherboard 1849 03f2 939NF6G-VSTA Board 03f3 MCP61 PCI bridge 1028 020e Inspiron 531 1849 03f3 939NF6G-VSTA Board 03f4 MCP61 SMU 03f5 MCP61 Memory Controller 1028 020e Inspiron 531 1043 83a4 M4N68T series motherboard 1849 03eb 939NF6G-VSTA Board 03f6 MCP61 SATA Controller 1028 020e Inspiron 531 1043 83a4 M4N68T series motherboard 1849 03f6 939NF6G-VSTA Board 03f7 MCP61 SATA Controller 0400 G84 [GeForce 8600 GTS] 1043 8241 EN8600GTS 0401 G84 [GeForce 8600 GT] 0402 G84 [GeForce 8600 GT] 1458 3455 GV-NX86T512H 1462 0910 NX8600GT-T2D256EZ 0403 G84 [GeForce 8600 GS] 0404 G84 [GeForce 8400 GS] 1462 1230 NX8400GS-TD256E 0405 G84M [GeForce 9500M GS] 0406 G84 [GeForce 8300 GS] 0407 G84M [GeForce 8600M GT] 0408 G84M [GeForce 9650M GS] 0409 G84M [GeForce 8700M GT] 040a G84GL [Quadro FX 370] 040b G84GLM [Quadro NVS 320M] 040c G84GLM [Quadro FX 570M] 17aa 20d9 ThinkPad T61p 040d G84GLM [Quadro FX 1600M] 040e G84GL [Quadro FX 570] 040f G84GL [Quadro FX 1700] 0410 G92 [GeForce GT 330] 0414 G92 [GeForce 9800 GT] 0418 G92 [GeForce GT 330 OEM] 0420 G86 [GeForce 8400 SE] 0421 G86 [GeForce 8500 GT] 1462 0960 NX8500GT-TD512EH/M2 0422 G86 [GeForce 8400 GS] 0423 G86 [GeForce 8300 GS] 0424 G86 [GeForce 8400 GS] 0425 G86M [GeForce 8600M GS] 1025 0121 Aspire 5920G 1043 1514 F3SV 0426 G86M [GeForce 8400M GT] 0427 G86M [GeForce 8400M GS] 103c 30cc Pavilion dv6700 103c 30cf Pavilion dv9668eg Laptop 0428 G86M [GeForce 8400M G] 0429 G86M [Quadro NVS 140M] 17aa 20d8 ThinkPad T61 042a G86M [Quadro NVS 130M] 042b G86M [Quadro NVS 135M] 042c G86 [GeForce 9400 GT] 042d G86GLM [Quadro FX 360M] 042e G86M [GeForce 9300M G] 042f G86 [Quadro NVS 290] 0440 MCP65 LPC Bridge 0441 MCP65 LPC Bridge 0442 MCP65 LPC Bridge 103c 30cf Pavilion dv9668eg Laptop 0443 MCP65 LPC Bridge 0444 MCP65 Memory Controller 103c 30cf Pavilion dv9668eg Laptop 0445 MCP65 Memory Controller 0446 MCP65 SMBus 103c 30cf Pavilion dv9668eg Laptop 0447 MCP65 SMU 103c 30cf Pavilion dv9500/9600/9700 series 0448 MCP65 IDE 103c 30cf Pavilion dv9668eg Laptop 0449 MCP65 PCI bridge 10de cb84 HP Pavilion dv9668eg Laptop 044a MCP65 High Definition Audio 103c 30cf Pavilion dv9668eg Laptop 044b MCP65 High Definition Audio 044c MCP65 AHCI Controller 044d MCP65 AHCI Controller 044e MCP65 AHCI Controller 044f MCP65 AHCI Controller 0450 MCP65 Ethernet 103c 30cf Pavilion dv9668eg Laptop 0451 MCP65 Ethernet 0452 MCP65 Ethernet 0453 MCP65 Ethernet 0454 MCP65 USB 1.1 OHCI Controller 103c 30cf Pavilion dv9668eg Laptop 0455 MCP65 USB 2.0 EHCI Controller 103c 30cf Pavilion dv9668eg Laptop 0456 MCP65 USB Controller 0457 MCP65 USB Controller 0458 MCP65 PCI Express bridge 10de 0000 MCP65 PCI Express bridge 0459 MCP65 PCI Express bridge 10de 0000 MCP65 PCI Express bridge 045a MCP65 PCI Express bridge 10de 0000 MCP65 PCI Express bridge 045b MCP65 PCI Express bridge 10de 0000 MCP65 PCI Express bridge 045c MCP65 SATA Controller 045d MCP65 SATA Controller 103c 30cf Pavilion dv9668eg Laptop 045e MCP65 SATA Controller 045f MCP65 SATA Controller 0531 C67 [GeForce 7150M / nForce 630M] 0533 C67 [GeForce 7000M / nForce 610M] 053a C68 [GeForce 7050 PV / nForce 630a] 053b C68 [GeForce 7050 PV / nForce 630a] 1043 8308 M2N68-AM Motherboard 053e C68 [GeForce 7025 / nForce 630a] 0541 MCP67 Memory Controller 0542 MCP67 SMBus 1043 8308 M2N68-AM Motherboard 0543 MCP67 Co-processor 0547 MCP67 Memory Controller 1043 8308 M2N68-AM Motherboard 1849 0547 ALiveNF7G-HDready 0548 MCP67 ISA Bridge 1043 8308 M2N68-AM Motherboard 054c MCP67 Ethernet 1043 8308 M2N68-AM Motherboard 1849 054c ALiveNF7G-HDready, MCP67 Gigabit Ethernet 054d MCP67 Ethernet 054e MCP67 Ethernet 054f MCP67 Ethernet 0550 MCP67 AHCI Controller 1043 8308 M2N68-AM Motherboard 0554 MCP67 AHCI Controller 1043 8308 M2N68-AM Motherboard 0555 MCP67 SATA Controller 1043 8308 M2N68-AM Motherboard 055c MCP67 High Definition Audio 1043 8290 M2N68-AM Motherboard 055d MCP67 High Definition Audio 055e MCP67 OHCI USB 1.1 Controller 1043 8308 M2N68-AM Motherboard 055f MCP67 EHCI USB 2.0 Controller 1043 8308 M2N68-AM Motherboard 0560 MCP67 IDE Controller f043 8308 M2N68-AM Motherboard 0561 MCP67 PCI Bridge 0562 MCP67 PCI Express Bridge 1849 0562 ALiveNF7G-HDready 0563 MCP67 PCI Express Bridge 0568 MCP78S [GeForce 8200] Memory Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0568 K10N78FullHD-hSLI R3.0 Memory Controller 0569 MCP78S [GeForce 8200] PCI Express Bridge 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0569 K10N78FullHD-hSLI R3.0 PCI Express Bridge 056a MCP73 [nForce 630i] USB 2.0 Controller (EHCI) 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 056c MCP73 IDE Controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 056d MCP73 PCI Express bridge 1019 297a MCP73PVT-SM 10de cb73 MCP73 PCI Bridge 056e MCP73 PCI Express bridge 1019 297a MCP73PVT-SM 10de 0000 MCP73 PCIe x16 port 056f MCP73 PCI Express bridge 1019 297a MCP73PVT-SM 10de 0000 MCP73 PCIe x1 port 05b1 NF200 PCIe 2.0 switch 05b8 NF200 PCIe 2.0 switch for GTX 295 05be NF200 PCIe 2.0 switch for Quadro Plex S4 / Tesla S870 / Tesla S1070 / Tesla S2050 05e0 GT200b [GeForce GTX 295] 05e1 GT200 [GeForce GTX 280] 05e2 GT200 [GeForce GTX 260] 05e3 GT200b [GeForce GTX 285] 1682 2490 GX-285N-ZDF 05e6 GT200b [GeForce GTX 275] 05e7 GT200GL [Tesla C1060 / M1060] 10de 0595 Tesla T10 Processor 10de 068f Tesla T10 Processor 10de 0697 Tesla M1060 10de 0714 Tesla M1060 10de 0743 Tesla M1060 05ea GT200 [GeForce GTX 260] 05eb GT200 [GeForce GTX 295] 05ed GT200GL [Quadro Plex 2200 D2] 05f1 GT200 [GeForce GTX 280] 05f2 GT200 [GeForce GTX 260] 05f8 GT200GL [Quadro Plex 2200 S4] 05f9 GT200GL [Quadro CX] 05fd GT200GL [Quadro FX 5800] 05fe GT200GL [Quadro FX 4800] 05ff GT200GL [Quadro FX 3800] 0600 G92 [GeForce 8800 GTS 512] 0601 G92 [GeForce 9800 GT] 0602 G92 [GeForce 8800 GT] 0603 G92 [GeForce GT 230 OEM] 0604 G92 [GeForce 9800 GX2] 0605 G92 [GeForce 9800 GT] 0606 G92 [GeForce 8800 GS] 0607 G92 [GeForce GTS 240] 0608 G92M [GeForce 9800M GTX] 0609 G92M [GeForce 8800M GTS] 106b 00a7 GeForce 8800 GS 060a G92M [GeForce GTX 280M] 060b G92M [GeForce 9800M GT] 060c G92M [GeForce 8800M GTX] 060d G92 [GeForce 8800 GS] 060f G92M [GeForce GTX 285M] 0610 G92 [GeForce 9600 GSO] 1682 2385 GeForce 9600 GSO 768mb 0611 G92 [GeForce 8800 GT] 107d 2ab0 Winfast PX8800 GT PCI-E 1462 1170 NX8800GT series model V117 2xDVI+TV 19da 1040 ZT-88TES2P-FSP 0612 G92 [GeForce 9800 GTX / 9800 GTX+] 0613 G92 [GeForce 9800 GTX+] 0614 G92 [GeForce 9800 GT] 107d 2ab3 WinFast PX9800 GT (S-Fanpipe) 0615 G92 [GeForce GTS 250] 3842 1150 GeForce GTS 250 P/N 512-P3-1150-TR # Overclocked 3842 1151 GeForce GTS 250 P/N 512-P3-1151-TR 3842 1155 GeForce GTS 250 P/N 01G-P3-1155-TR # Overclocked 3842 1156 GeForce GTS 250 P/N 01G-P3-1156-TR 0617 G92M [GeForce 9800M GTX] 0618 G92M [GeForce GTX 260M] 0619 G92GL [Quadro FX 4700 X2] 061a G92GL [Quadro FX 3700] 061b G92GL [Quadro VX 200] 061c G92GLM [Quadro FX 3600M] 061d G92GLM [Quadro FX 2800M] 061e G92GLM [Quadro FX 3700M] 061f G92GLM [Quadro FX 3800M] 0620 G94 [GeForce 9800 GT] 0621 G94 [GeForce GT 230] 0622 G94 [GeForce 9600 GT] 107d 2ac1 WinFast PX9600GT 1024MB 1458 3481 GV-NX96T512HP 0623 G94 [GeForce 9600 GS] 0624 G94 [GeForce 9600 GT Green Edition] 0625 G94 [GeForce 9600 GSO 512] 0626 G94 [GeForce GT 130] 0627 G94 [GeForce GT 140] 0628 G94M [GeForce 9800M GTS] 062a G94M [GeForce 9700M GTS] 062b G94M [GeForce 9800M GS] 062c G94M [GeForce 9800M GTS] 062d G94 [GeForce 9600 GT] 062e G94 [GeForce 9600 GT] 106b 0605 GeForce GT 130 062f G94 [GeForce 9800 S] 0630 G94 [GeForce 9600 GT] 0631 G94M [GeForce GTS 160M] 0632 G94M [GeForce GTS 150M] 0633 G94 [GeForce GT 220] 0635 G94 [GeForce 9600 GSO] 0637 G94 [GeForce 9600 GT] 0638 G94GL [Quadro FX 1800] 063a G94GLM [Quadro FX 2700M] 063f G94 [GeForce 9600 GE] 0640 G96C [GeForce 9500 GT] 0641 G96C [GeForce 9400 GT] 1682 4009 PV-T94G-ZAFG 0642 G96 [D9M-10] 0643 G96 [GeForce 9500 GT] 0644 G96 [GeForce 9500 GS] 174b 9600 Geforce 9500GS 512M DDR2 V/D/HDMI 0645 G96C [GeForce 9500 GS] 0646 G96C [GeForce GT 120] 0647 G96CM [GeForce 9600M GT] 0648 G96CM [GeForce 9600M GS] 0649 G96CM [GeForce 9600M GT] 1043 202d GeForce GT 220M 064a G96M [GeForce 9700M GT] 064b G96M [GeForce 9500M G] 064c G96CM [GeForce 9650M GT] 064e G96C [GeForce 9600 GSO / 9800 GT] 0651 G96CM [GeForce G 110M] 0652 G96CM [GeForce GT 130M] 152d 0850 GeForce GT 240M LE 0653 G96CM [GeForce GT 120M] 0654 G96CM [GeForce GT 220M] 1043 14a2 GeForce GT 320M 1043 14d2 GeForce GT 320M 0655 G96 [GeForce GT 120 Mac Edition] 0656 G96 [GeForce GT 120 Mac Edition] 0658 G96GL [Quadro FX 380] 0659 G96CGL [Quadro FX 580] 065a G96GLM [Quadro FX 1700M] 065b G96C [GeForce 9400 GT] 065c G96GLM [Quadro FX 770M] 065d G96 [GeForce 9500 GA / 9600 GT / GTS 250] 065f G96C [GeForce G210] 06c0 GF100 [GeForce GTX 480] 06c4 GF100 [GeForce GTX 465] 06ca GF100M [GeForce GTX 480M] 06cb GF100 [GeForce GTX 480] 06cd GF100 [GeForce GTX 470] 06d0 GF100GL 06d1 GF100GL [Tesla C2050 / C2070] 10de 0771 Tesla C2050 10de 0772 Tesla C2070 06d2 GF100GL [Tesla M2070] 10de 0774 Tesla M2070 10de 0830 Tesla M2070 10de 0842 Tesla M2070 10de 088f Tesla X2070 10de 0908 Tesla M2070 06d8 GF100GL [Quadro 6000] 06d9 GF100GL [Quadro 5000] 06da GF100GLM [Quadro 5000M] 06dc GF100GL [Quadro 6000] 06dd GF100GL [Quadro 4000] 06de GF100GL [Tesla T20 Processor] 10de 0773 Tesla S2050 10de 082f Tesla M2050 10de 0840 Tesla X2070 10de 0842 Tesla M2050 10de 0846 Tesla M2050 10de 0866 Tesla M2050 10de 0907 Tesla M2050 10de 091e Tesla M2050 06df GF100GL [Tesla M2070-Q] 10de 084d Tesla M2070-Q 10de 087f Tesla M2070-Q 06e0 G98 [GeForce 9300 GE] 107d 5a96 Geforce 9300GE 06e1 G98 [GeForce 9300 GS] 06e2 G98 [GeForce 8400] 06e3 G98 [GeForce 8300 GS] 06e4 G98 [GeForce 8400 GS Rev. 2] 1458 3475 GV-NX84S256HE [GeForce 8400 GS] 06e5 G98M [GeForce 9300M GS] 06e6 G98 [GeForce G 100] 06e7 G98 [GeForce 9300 SE] 06e8 G98M [GeForce 9200M GS] 103c 360b GeForce 9200M GE 06e9 G98M [GeForce 9300M GS] 1043 19b2 U6V laptop 06ea G98M [Quadro NVS 150M] 06eb G98M [Quadro NVS 160M] 06ec G98M [GeForce G 105M] 06ed G98 [GeForce 9600 GT / 9800 GT] 06ee G98 [GeForce 9600 GT / 9800 GT / GT 240] 06ef G98M [GeForce G 103M] 06f1 G98M [GeForce G 105M] 06f8 G98 [Quadro NVS 420] 06f9 G98GL [Quadro FX 370 LP] 06fa G98 [Quadro NVS 450] 06fb G98GLM [Quadro FX 370M] 06fd G98 [Quadro NVS 295] 06ff G98 [HICx16 + Graphics] 10de 0711 HICx8 + Graphics 0751 MCP78S [GeForce 8200] Memory Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0751 K10N78FullHD-hSLI R3.0 Memory Controller 0752 MCP78S [GeForce 8200] SMBus 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0752 K10N78FullHD-hSLI R3.0 SMBus 0753 MCP78S [GeForce 8200] Co-Processor 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0753 K10N78FullHD-hSLI R3.0 Co-Processor 0754 MCP78S [GeForce 8200] Memory Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0754 K10N78FullHD-hSLI R3.0 Memory Controller 0759 MCP78S [GeForce 8200] IDE 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0759 K10N78FullHD-hSLI R3.0 IDE 075a MCP78S [GeForce 8200] PCI Bridge 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1849 075a K10N78FullHD-hSLI R3.0 PCI Bridge 075b MCP78S [GeForce 8200] PCI Express Bridge 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 075b K10N78FullHD-hSLI R3.0 PCI Express Bridge 075c MCP78S [GeForce 8200] LPC Bridge 103c 2a9e Pavilion p6310f 1462 7508 K9N2GM-FIH 1849 075c K10N78FullHD-hSLI R3.0 LPC Bridge 075d MCP78S [GeForce 8200] LPC Bridge 1043 82e8 M3N72-D 0760 MCP77 Ethernet 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0760 K10N78FullHD-hSLI R3.0 Ethernet 0761 MCP77 Ethernet 0762 MCP77 Ethernet 0763 MCP77 Ethernet 0774 MCP72XE/MCP72P/MCP78U/MCP78S High Definition Audio 103c 2a9e Pavilion p6310f # has a Realtek ALC1200 HDAudio Codec 1043 82fe M3N72-D 1462 7508 K9N2GM-FIH 1849 3662 K10N78FullHD-hSLI R3.0 High Definition Audio 0778 MCP78S [GeForce 8200] PCI Express Bridge 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 0778 K10N78FullHD-hSLI R3.0 PCI Express Bridge 077a MCP78S [GeForce 8200] PCI Bridge 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 077a K10N78FullHD-hSLI R3.0 PCI Bridge 077b MCP78S [GeForce 8200] OHCI USB 1.1 Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 077b K10N78FullHD-hSLI R3.0 OHCI USB 1.1 Controller 077c MCP78S [GeForce 8200] EHCI USB 2.0 Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 077c K10N78FullHD-hSLI R3.0 EHCI USB 2.0 Controller 077d MCP78S [GeForce 8200] OHCI USB 1.1 Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 077d K10N78FullHD-hSLI R3.0 OHCI USB 1.1 Controller 077e MCP78S [GeForce 8200] EHCI USB 2.0 Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1462 7508 K9N2GM-FIH 1849 077e K10N78FullHD-hSLI R3.0 EHCI USB 2.0 Controller 07c0 MCP73 Host Bridge 1afa 7150 JW-IN7150-HD 07c1 MCP73 Host Bridge 1019 297a MCP73PVT-SM 07c2 MCP73 Host Bridge 07c3 MCP73 Host Bridge 147b 1c3e I-N73V motherboard 07c5 MCP73 Host Bridge 07c8 MCP73 Memory Controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07cb nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07cd nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07ce nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07cf nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d0 nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d1 nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d2 nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d3 nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d6 nForce 610i/630i memory controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d7 MCP73 LPC Bridge 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d8 MCP73 SMBus 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07d9 MCP73 Memory Controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 07da MCP73 Co-processor 1afa 7150 JW-IN7150-HD 07dc MCP73 Ethernet 147b 1c3e I-N73V motherboard 07dd MCP73 Ethernet 07de MCP73 Ethernet 07df MCP73 Ethernet 07e0 C73 [GeForce 7150 / nForce 630i] 1afa 7150 JW-IN7150-HD 07e1 C73 [GeForce 7100 / nForce 630i] 1019 297a MCP73PVT-SM 07e2 C73 [GeForce 7050 / nForce 630i] 07e3 C73 [GeForce 7050 / nForce 610i] 147b 1c3e I-N73V motherboard 07e5 C73 [GeForce 7100 / nForce 620i] 07f0 MCP73 SATA Controller (IDE mode) 147b 1c3e I-N73V motherboard 07f4 GeForce 7100/nForce 630i SATA 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 07f8 MCP73 SATA RAID Controller 147b 1c3e I-N73V motherboard 07fc MCP73 High Definition Audio 1019 297a MCP73PVT-SM 10de 07fc MCP73 High Definition Audio 147b 1c3e I-N73V motherboard 07fe MCP73 OHCI USB 1.1 Controller 1019 297a MCP73PVT-SM 147b 1c3e I-N73V motherboard 1afa 7150 JW-IN7150-HD 0840 C77 [GeForce 8200M] 0844 C77 [GeForce 9100M G] 0845 C77 [GeForce 8200M G] 0846 C77 [GeForce 9200] 0847 C78 [GeForce 9100] 103c 2a9e Pavilion p6310f 0848 C77 [GeForce 8300] 0849 C77 [GeForce 8200] 1462 7508 K9N2GM-FIH 1849 0849 K10N78FullHD-hSLI R3.0 GeForce 8200 084a C77 [nForce 730a] 084b C77 [GeForce 8200] 084c C77 [nForce 780a/980a SLI] 084d C77 [nForce 750a SLI] 1043 82e8 M3N72-D mGPU 084f C77 [GeForce 8100 / nForce 720a] 0860 C79 [GeForce 9300] 0861 C79 [GeForce 9400] 0862 C79 [GeForce 9400M G] 0863 C79 [GeForce 9400M] 106b 00aa MacBook5,1 0864 C79 [GeForce 9300] 0865 C79 [GeForce 9300 / ION] 0866 C79 [GeForce 9400M G] 106b 00b1 GeForce 9400M 0867 C79 [GeForce 9400] 106b 00ad iMac 9,1 0868 C79 [nForce 760i SLI] 0869 MCP7A [GeForce 9400] 086a C79 [GeForce 9400] 086c C79 [GeForce 9300 / nForce 730i] 086d C79 [GeForce 9200] 086e C79 [GeForce 9100M G] 086f MCP79 [GeForce 8200M G] 1043 16b2 F5GL Notebook 0870 C79 [GeForce 9400M] 0871 C79 [GeForce 9200] 0872 C79 [GeForce G102M] 1043 19b4 GeForce G102M 1043 1aa2 GeForce G102M 1043 1c02 GeForce G102M 1043 1c42 GeForce G205M 0873 C79 [GeForce G102M] 1043 19b4 GeForce G102M 1043 1c12 GeForce G102M 1043 1c52 GeForce G205M 0874 C79 [ION] 0876 C79 [GeForce 9400M / ION] 087a C79 [GeForce 9400] 087d C79 [ION] 19da a123 IONITX-F-E 087e C79 [ION LE] 087f C79 [ION LE] 08a0 MCP89 [GeForce 320M] 08a2 MCP89 [GeForce 320M] 08a3 MCP89 [GeForce 320M] 08a4 MCP89 [GeForce 320M] 08a5 MCP89 [GeForce 320M] 0a20 GT216 [GeForce GT 220] 1043 8311 ENGT220/DI/1GD3(LP)/V2 0a21 GT216M [GeForce GT 330M] 0a22 GT216 [GeForce 315] 0a23 GT216 [GeForce 210] 0a24 GT216 [GeForce 405] 0a26 GT216 [GeForce 405] 0a27 GT216 [GeForce 405] 0a28 GT216M [GeForce GT 230M] 0a29 GT216M [GeForce GT 330M] 0a2a GT216M [GeForce GT 230M] 0a2b GT216M [GeForce GT 330M] 0a2c GT216M [NVS 5100M] 0a2d GT216M [GeForce GT 320M] 0a30 GT216 [GeForce 505] 0a32 GT216 [GeForce GT 415] 0a34 GT216M [GeForce GT 240M] 0a35 GT216M [GeForce GT 325M] 0a38 GT216GL [Quadro 400] 0a3c GT216GLM [Quadro FX 880M] 0a60 GT218 [GeForce G210] 0a62 GT218 [GeForce 205] 0a63 GT218 [GeForce 310] 0a64 GT218 [ION] 0a65 GT218 [GeForce 210] 1043 8334 EN210 SILENT 1458 36a9 GV-N210D3-1GI (rev. 6.0/6.1) 1462 8094 N210 [Geforce 210] PCIe graphics adapter 19da 7222 GeForce 210 1GB [Synergy Edition] 0a66 GT218 [GeForce 310] 0a67 GT218 [GeForce 315] 0a68 GT218M [GeForce G 105M] 0a69 GT218M [GeForce G 105M] 0a6a GT218M [NVS 2100M] 0a6c GT218M [NVS 3100M] 1028 040b Latitude E6510 17aa 2142 ThinkPad T410 0a6e GT218M [GeForce 305M] 0a6f GT218M [ION] 0a70 GT218M [GeForce 310M] 0a71 GT218M [GeForce 305M] 0a72 GT218M [GeForce 310M] 0a73 GT218M [GeForce 305M] 0a74 GT218M [GeForce G210M] 1b0a 903a GeForce G210 0a75 GT218M [GeForce 310M] 0a76 GT218M [ION 2] 0a78 GT218GL [Quadro FX 380 LP] 0a7a GT218M [GeForce 315M] 104d 907e GeForce 315M 1179 fc50 GeForce 315M 1179 fc61 GeForce 315M 1179 fc71 GeForce 315M 1179 fc90 GeForce 315M 1179 fcc0 GeForce 315M 1179 fcd0 GeForce 315M 1179 fce2 GeForce 315M 1179 fcf2 GeForce 315M 1179 fd16 GeForce 315M 1179 fd40 GeForce 315M 1179 fd50 GeForce 315M 1179 fd52 GeForce 315M 1179 fd61 GeForce 315M 1179 fd71 GeForce 315M 1179 fd92 GeForce 315M 1179 fd96 GeForce 315M 1179 fdd0 GeForce 315M 1179 fdd2 GeForce 315M 1179 fdfe GeForce 315M 144d c0a2 GeForce 315M 144d c0b2 GeForce 315M 144d c581 GeForce 315M 144d c587 GeForce 315M 144d c588 GeForce 315M 144d c597 GeForce 315M 144d c606 GeForce 315M 1462 aa51 GeForce 405 1462 aa58 GeForce 405 1462 ac71 GeForce 405 1462 ac81 GeForce 315M 1462 ac82 GeForce 405 1462 ae33 GeForce 405 1642 3980 GeForce 405 17aa 3950 GeForce 405M 17aa 397d GeForce 405M 1b0a 2091 GeForce 315M 1b0a 90b4 GeForce 405 1bfd 0003 GeForce 405 1bfd 8006 GeForce 405 1bfd 8007 GeForce 315M 0a7b GT218 [GeForce 505] 0a7c GT218GLM [Quadro FX 380M] 0a80 MCP79 Host Bridge 0a81 MCP79 Host Bridge 0a82 MCP79 Host Bridge 0a83 MCP79 Host Bridge 0a84 MCP79 Host Bridge 0a85 MCP79 Host Bridge 0a86 MCP79 Host Bridge 0a87 MCP79 Host Bridge 0a88 MCP79 Memory Controller 0a89 MCP79 Memory Controller 0a98 MCP79 Memory Controller 1043 1a87 F5GL Notebook 10de cb79 iMac 9,1 0aa0 MCP79 PCI Express Bridge 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 0aa2 MCP79 SMBus 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 19da a123 IONITX-F-E 0aa3 MCP79 Co-processor 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 19da a123 IONITX-F-E 0aa4 MCP79 Memory Controller 1043 1a87 F5GL Notebook 19da a123 IONITX-F-E 0aa5 MCP79 OHCI USB 1.1 Controller 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 19da a123 IONITX-F-E 0aa6 MCP79 EHCI USB 2.0 Controller 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 19da a123 IONITX-F-E 0aa7 MCP79 OHCI USB 1.1 Controller 10de cb79 Apple iMac 9,1 19da a123 IONITX-F-E 0aa8 MCP79 OHCI USB 1.1 Controller 0aa9 MCP79 EHCI USB 2.0 Controller 10de cb79 Apple iMac 9,1 19da a123 IONITX-F-E 0aaa MCP79 EHCI USB 2.0 Controller 0aab MCP79 PCI Bridge 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 0aac MCP79 LPC Bridge 0aad MCP79 LPC Bridge 19da a123 IONITX-F-E 0aae MCP79 LPC Bridge 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 0aaf MCP79 LPC Bridge 0ab0 MCP79 Ethernet 1043 1215 F5GL Notebook 10de cb79 Apple iMac 9,1 19da a123 IONITX-F-E 0ab1 MCP79 Ethernet 0ab2 MCP79 Ethernet 0ab3 MCP79 Ethernet 0ab4 MCP79 SATA Controller 19da a123 IONITX-F-E 0ab5 MCP79 SATA Controller 0ab6 MCP79 SATA Controller 0ab7 MCP79 SATA Controller 0ab8 MCP79 AHCI Controller 1043 1a87 F5GL Notebook 0ab9 MCP79 AHCI Controller 10de cb79 Apple iMac 9,1 0aba MCP79 AHCI Controller 0abb MCP79 AHCI Controller 0abc MCP79 RAID Controller 0abd MCP79 RAID Controller 0abe MCP79 RAID Controller 0abf MCP79 RAID Controller 0ac0 MCP79 High Definition Audio 1043 1903 F5GL Notebook 10de cb79 Apple iMac 9,1 0ac1 MCP79 High Definition Audio 0ac2 MCP79 High Definition Audio 0ac3 MCP79 High Definition Audio 0ac4 MCP79 PCI Express Bridge 10de cb79 Apple iMac 9,1 0ac5 MCP79 PCI Express Bridge 0ac6 MCP79 PCI Express Bridge 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 0ac7 MCP79 PCI Express Bridge 1043 1a87 F5GL Notebook 10de cb79 Apple iMac 9,1 0ac8 MCP79 PCI Express Bridge 0ad0 MCP78S [GeForce 8200] SATA Controller (non-AHCI mode) 1462 7508 K9N2GM-FIH 1849 0ad0 K10N78FullHD-hSLI R3.0 IDE 0ad4 MCP78S [GeForce 8200] AHCI Controller 103c 2a9e Pavilion p6310f 1043 82e8 M3N72-D 1849 0ad4 K10N78FullHD-hSLI R3.0 AHCI Controller 0ad8 MCP78S [GeForce 8200] SATA Controller (RAID mode) 0be2 GT216 HDMI Audio Controller 1043 8311 ENGT220/DI/1GD3(LP)/V2 0be3 High Definition Audio Controller 1028 040b Latitude E6510 10de 066d G98 [GeForce 8400GS] 1462 8094 N210 [Geforce 210] PCIe graphics adapter 0be4 High Definition Audio Controller 0be5 GF100 High Definition Audio Controller 0be9 GF106 High Definition Audio Controller 1558 8687 CLEVO/KAPOK W860CU 3842 1452 GeForce GTS 450 0bea GF108 High Definition Audio Controller 3842 1430 GeForce GT 430 0beb GF104 High Definition Audio Controller 1462 2322 N460GTX Cyclone 1GD5/OC 0bee GF116 High Definition Audio Controller 0bf0 Tegra2 PCIe x4 Bridge 0bf1 Tegra2 PCIe x2 Bridge 0ca0 GT215 [GeForce GT 330] 0ca2 GT215 [GeForce GT 320] 0ca3 GT215 [GeForce GT 240] 0ca4 GT215 [GeForce GT 340] 0ca5 GT215 [GeForce GT 220] 0ca7 GT215 [GeForce GT 330] 0ca8 GT215M [GeForce GTS 260M] 0ca9 GT215M [GeForce GTS 250M] 0cac GT215 [GeForce GT 220/315] 0caf GT215M [GeForce GT 335M] 0cb0 GT215M [GeForce GTS 350M] 0cb1 GT215M [GeForce GTS 360M] 0cbc GT215GLM [Quadro FX 1800M] 0d60 MCP89 HOST Bridge 0d68 MCP89 Memory Controller 0d69 MCP89 Memory Controller 0d76 MCP89 PCI Express Bridge 0d79 MCP89 SMBus 0d7a MCP89 Co-Processor 0d7b MCP89 Memory Controller 0d7d MCP89 Ethernet 0d80 MCP89 LPC Bridge 0d85 MCP89 SATA Controller 0d88 MCP89 SATA Controller (AHCI mode) 0d89 MCP89 SATA Controller (AHCI mode) 0d8d MCP89 SATA Controller (RAID mode) 0d94 MCP89 High Definition Audio 0d9c MCP89 OHCI USB 1.1 Controller 0d9d MCP89 EHCI USB 2.0 Controller 0dc0 GF106 [GeForce GT 440] 0dc4 GF106 [GeForce GTS 450] 0dc5 GF106 [GeForce GTS 450 OEM] 0dc6 GF106 [GeForce GTS 450 OEM] 0dcd GF106M [GeForce GT 555M] 0dce GF106M [GeForce GT 555M] 0dd1 GF106M [GeForce GTX 460M] 1558 8687 CLEVO/KAPOK W860CU 0dd2 GF106M [GeForce GT 445M] 0dd3 GF106M [GeForce GT 435M] 0dd6 GF106M [GeForce GT 550M] 0dd8 GF106GL [Quadro 2000] 10de 0914 Quadro 2000D 0dda GF106GLM [Quadro 2000M] 0de0 GF108 [GeForce GT 440] 0de1 GF108 [GeForce GT 430] 3842 1430 GeForce GT 430 0de2 GF108 [GeForce GT 420] 0de3 GF108M [GeForce GT 635M] 0de4 GF108 [GeForce GT 520] 0de5 GF108 [GeForce GT 530] 0de7 GF108 [GeForce GT 610] 0de8 GF108M [GeForce GT 620M] 0de9 GF108M [GeForce GT 620M/630M/635M/640M LE] 1025 0692 GeForce GT 620M 1025 0725 GeForce GT 620M 1025 0728 GeForce GT 620M 1025 072b GeForce GT 620M 1025 072e GeForce GT 620M 1025 0753 GeForce GT 620M 1025 0754 GeForce GT 620M 17aa 3977 GeForce GT 640M LE 1b0a 20c6 GeForce GT 630M 1b0a 2210 GeForce GT 635M 0dea GF108M [GeForce 610M] 17aa 365a GeForce 615 17aa 365b GeForce 615 17aa 365e GeForce 615 17aa 3660 GeForce 615 17aa 366c GeForce 615 0deb GF108M [GeForce GT 555M] 0dec GF108M [GeForce GT 525M] 0ded GF108M [GeForce GT 520M] 0dee GF108M [GeForce GT 415M] 0def GF108M [NVS 5400M] 0df0 GF108M [GeForce GT 425M] 0df1 GF108M [GeForce GT 420M] 0df2 GF108M [GeForce GT 435M] 0df3 GF108M [GeForce GT 420M] 0df4 GF108M [GeForce GT 540M] 152d 0952 GeForce GT 630M 152d 0953 GeForce GT 630M 0df5 GF108M [GeForce GT 525M] 0df6 GF108M [GeForce GT 550M] 0df7 GF108M [GeForce GT 520M] 0df8 GF108GL [Quadro 600] 0df9 GF108GLM [Quadro 500M] 0dfa GF108GLM [Quadro 1000M] 0dfc GF108GLM [NVS 5200M] 0e08 GF119 HDMI Audio Controller 1043 83a0 ENGT520 SILENT # 1024MB with passive cooling (heatsink) 10b0 104a Gainward GeForce GT 610 0e09 GF110 High Definition Audio Controller 0e0a GK104 HDMI Audio Controller 0e0b GK106 HDMI Audio Controller 0e0c GF114 HDMI Audio Controller 0e0f GK208 HDMI/DP Audio Controller 0e12 TegraK1 PCIe x4 Bridge 0e13 TegraK1 PCIe x1 Bridge 0e1a GK110 High Definition Audio Controller 0e1b GK107 HDMI Audio Controller 103c 197b ZBook 15 1043 8428 GTX650-DC-1GD5 0e1c Tegra3+ PCIe x4 Bridge 0e1d Tegra3+ PCIe x2 Bridge 0e22 GF104 [GeForce GTX 460] 1462 2322 N460GTX Cyclone 1GD5/OC 0e23 GF104 [GeForce GTX 460 SE] 0e24 GF104 [GeForce GTX 460 OEM] 0e30 GF104M [GeForce GTX 470M] 0e31 GF104M [GeForce GTX 485M] 0e3a GF104GLM [Quadro 3000M] 0e3b GF104GLM [Quadro 4000M] 0f00 GF108 [GeForce GT 630] 0f01 GF108 [GeForce GT 620] 0f02 GF108 [GeForce GT 730] 0f03 GF108 [GeForce GT 610] 0f06 GF108 [GeForce GT 730] 0fa0 GK11x [GK11x_FPGA] 0fa5 GK11x 0fa7 GK11x [Tegra on x86 (PEATRANS)] 0fae Tegra X1 PCIe x4 Root Complex 0faf Tegra X1 PCIe x1 Root Complex 0fb0 GM200 High Definition Audio 0fb8 GP108 High Definition Audio Controller 0fb9 GP107GL High Definition Audio Controller 0fba GM206 High Definition Audio Controller 0fbb GM204 High Definition Audio Controller 0fbc GM107 High Definition Audio Controller [GeForce 940MX] 0fc0 GK107 [GeForce GT 640 OEM] 0fc1 GK107 [GeForce GT 640] 0fc2 GK107 [GeForce GT 630 OEM] 0fc4 GK107 [D14P1-15] 0fc5 GK107 [GeForce GT 1030] 0fc6 GK107 [GeForce GTX 650] 1043 8428 GTX650-DC-1GD5 0fc8 GK107 [GeForce GT 740] 0fc9 GK107 [GeForce GT 730] 0fcb GK107 [EXK107] 0fcc GK107 [GeForce GT 720] 0fcd GK107M [GeForce GT 755M] 0fce GK107M [GeForce GT 640M LE] 0fcf GK107 [GEN3 ESI] 0fd0 GK107 [NB1G] 0fd1 GK107M [GeForce GT 650M] 1043 1597 GeForce GT 650M 1043 15a7 GeForce GT 650M 1043 2103 N56VZ 1043 2105 GeForce GT 650M 1043 2141 GeForce GT 650M 0fd2 GK107M [GeForce GT 640M] 1028 054f GeForce GT 640M 1028 055f GeForce GT 640M 1028 0595 GeForce GT 640M LE 1028 05b2 GeForce GT 640M LE 0fd3 GK107M [GeForce GT 640M LE] 0fd4 GK107M [GeForce GTX 660M] 0fd5 GK107M [GeForce GT 650M Mac Edition] 0fd6 GK107M [N13P-GS-W] 0fd7 GK107 [GK107-GTX] 0fd8 GK107M [GeForce GT 640M Mac Edition] 0fd9 GK107M [GeForce GT 645M] 0fda GK107 [GK107-ES-A1] 0fdb GK107 [GK107-ESP-A1] 0fdc GK107 [GK107-INT22-A1] 0fdd GK107 [GK107-INT11-A1] 0fde GK107 [GK107-ES-KA-E1] 0fdf GK107M [GeForce GT 740M] 0fe0 GK107M [GeForce GTX 660M Mac Edition] 0fe1 GK107M [GeForce GT 730M] 0fe2 GK107M [GeForce GT 745M] 0fe3 GK107M [GeForce GT 745M] 103c 2b16 GeForce GT 745A 17aa 3675 GeForce GT 745A 0fe4 GK107M [GeForce GT 750M] 0fe5 GK107 [GeForce K340 USM] 0fe6 GK107 [GRID K1 NVS USM] # GRID K1 USM 0fe7 GK107GL [GRID K100 vGPU] 10de 101e GRID K100 0fe8 GK107M [N14P-GS] 0fe9 GK107M [GeForce GT 750M Mac Edition] 0fea GK107M [GeForce GT 755M Mac Edition] 0fec GK107M [GeForce 710A] 0fed GK107M [GeForce 820M] 0fee GK107M [GeForce 810M] 0fef GK107GL [GRID K340] 0ff0 GK107 [NB1Q] 0ff1 GK107 [NVS 1000] 0ff2 GK107GL [GRID K1] 0ff3 GK107GL [Quadro K420] 0ff5 GK107GL [GRID K1 Tesla USM] 0ff6 GK107GLM [Quadro K1100M] 103c 197b ZBook 15 # GRID K1 Quadro USM 0ff7 GK107GL [GRID K140Q vGPU] 10de 1037 GRID K140Q 0ff8 GK107GLM [Quadro K500M] 0ff9 GK107GL [Quadro K2000D] 0ffa GK107GL [Quadro K600] 0ffb GK107GLM [Quadro K2000M] 0ffc GK107GLM [Quadro K1000M] 0ffd GK107 [NVS 510] 0ffe GK107GL [Quadro K2000] 0fff GK107GL [Quadro 410] 1001 GK110B [GeForce GTX TITAN Z] 1003 GK110 [GeForce GTX Titan LE] 1004 GK110 [GeForce GTX 780] 3842 0784 GK110B [GeForce GTX 780 SC w/ ACX Cooler] 3842 1784 GK110B [GeForce GTX 780 Dual FTW w/ ACX Cooler] 3842 1788 GK110B [GeForce GTX 780 Dual Classified w/ ACX Cooler] 1005 GK110 [GeForce GTX TITAN] 1043 8451 GTXTITAN-6GD5 # Reference Model 10de 1035 GeForce GTX Titan # 06G-P4-2790-KR 3842 2790 GeForce GTX Titan # 06G-P4-2791-KR 3842 2791 GeForce GTX Titan SC # 06G-P4-2793-KR 3842 2793 GeForce GTX Titan SC Signature # 06G-P4-2794-KR 3842 2794 GeForce GTX Titan SC Hydro Copper # 06G-P4-2795-KR 3842 2795 GeForce GTX Titan SC Hydro Copper Signature 1007 GK110 [GeForce GTX 780 Rev. 2] 1008 GK110 [GeForce GTX 780 Ti 6GB] 100a GK110B [GeForce GTX 780 Ti] 100c GK110B [GeForce GTX TITAN Black] 101e GK110GL [Tesla K20X] 101f GK110GL [Tesla K20] 1020 GK110GL [Tesla K20X] 1021 GK110GL [Tesla K20Xm] 1022 GK110GL [Tesla K20c] 1023 GK110BGL [Tesla K40m] 10de 097e 12GB Computational Accelerator 1024 GK180GL [Tesla K40c] 1026 GK110GL [Tesla K20s] 1027 GK110BGL [Tesla K40st] 1028 GK110GL [Tesla K20m] 1029 GK110BGL [Tesla K40s] 102a GK110BGL [Tesla K40t] 102d GK210GL [Tesla K80] 102e GK110BGL [Tesla K40d] 102f GK110BGL [Tesla Stella Solo] 103a GK110GL [Quadro K6000] 103c GK110GL [Quadro K5200] 103f GK110BGL [Tesla Stella SXM] 1040 GF119 [GeForce GT 520] 1043 83a0 ENGT520 SILENT 1042 GF119 [GeForce 510] 1045 GF119 1048 GF119 [GeForce 605] 1049 GF119 [GeForce GT 620 OEM] 104a GF119 [GeForce GT 610] # 1024MB with passive cooling (heatsink) 10b0 104a Gainward GeForce GT 610 104b GF119 [GeForce GT 625 OEM] 104c GF119 [GeForce GT 705] 104d GF119 [GeForce GT 710] 1050 GF119M [GeForce GT 520M] 1051 GF119M [GeForce GT 520MX] 1052 GF119M [GeForce GT 520M] 1054 GF119M [GeForce 410M] 1055 GF119M [GeForce 410M] 1056 GF119M [NVS 4200M] 1057 GF119M [Quadro NVS 4200M] 1058 GF119M [GeForce 610M] 103c 2aed GeForce 610 103c 2af1 GeForce 610 1043 10ac GeForce GT 610M 1043 10bc GeForce GT 610M 1043 1652 GeForce GT 610M 17aa 367a GeForce 610M 17aa 3682 GeForce 800A 17aa 3687 GeForce 800A 17aa 3692 GeForce 705A 17aa 3695 GeForce 800A 17aa a117 GeForce 610M 1059 GF119M [GeForce 610M] 105a GF119M [GeForce 610M] 1043 2111 GeForce GT 610M 1043 2112 GeForce GT 610M 105b GF119M [GeForce 705M] 103c 2afb GeForce 705A 17aa 309d GeForce 705A 17aa 30b1 GeForce 800A 17aa 30f3 GeForce 705A 17aa 36a1 GeForce 800A 107c GF119 [NVS 315] 107d GF119 [NVS 310] 1080 GF110 [GeForce GTX 580] 1081 GF110 [GeForce GTX 570] 10de 087e Leadtek WinFast GTX 570 1082 GF110 [GeForce GTX 560 Ti OEM] 1084 GF110 [GeForce GTX 560 OEM] 1086 GF110 [GeForce GTX 570 Rev. 2] 1087 GF110 [GeForce GTX 560 Ti 448 Cores] 1088 GF110 [GeForce GTX 590] 1089 GF110 [GeForce GTX 580 Rev. 2] 108b GF110 [GeForce GTX 580] 108e GF110GL [Tesla C2090] 1091 GF110GL [Tesla M2090] 10de 088e Tesla X2090 10de 0891 Tesla X2090 10de 0974 Tesla X2090 10de 098d Tesla X2090 1094 GF110GL [Tesla M2075] 10de 0888 Tesla M2075 1096 GF110GL [Tesla C2050 / C2075] 10de 0910 Tesla C2075 10de 0911 Tesla C2050 109a GF100GLM [Quadro 5010M] 109b GF100GL [Quadro 7000] 10de 0918 Quadro 7000 10c0 GT218 [GeForce 9300 GS Rev. 2] 10c3 GT218 [GeForce 8400 GS Rev. 3] 10c5 GT218 [GeForce 405] 10d8 GT218 [NVS 300] 10e5 Parker PCIe x4 Root Complex 10e6 Parker PCIe x1 Root Complex 10ef GP102 HDMI Audio Controller 10f0 GP104 High Definition Audio Controller 10f1 GP106 High Definition Audio Controller 1043 85b6 DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual] 10f7 TU102 High Definition Audio Controller 10f8 TU104 HD Audio Controller 10f9 TU106 High Definition Audio Controller 1043 8673 TURBO-RTX2070-8G 1140 GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] 1019 0799 GeForce 820M 1019 999f GeForce GT 720M 1025 0600 GeForce GT 620M 1025 0606 GeForce GT 620M 1025 064a GeForce GT 620M 1025 064c GeForce GT 620M 1025 067a GeForce GT 620M 1025 0680 GeForce GT 620M 1025 0686 GeForce 710M 1025 0689 GeForce 710M 1025 068b GeForce 710M 1025 068d GeForce 710M 1025 068e GeForce 710M 1025 0691 GeForce 710M 1025 0692 GeForce GT 620M 1025 0694 GeForce GT 620M 1025 0702 GeForce GT 620M 1025 0719 GeForce GT 620M 1025 0725 GeForce GT 620M 1025 0728 GeForce GT 620M 1025 072b GeForce GT 620M 1025 072e GeForce GT 620M 1025 0732 GeForce GT 620M 1025 0763 GeForce GT 720M 1025 0773 GeForce 710M 1025 0774 GeForce 710M 1025 0776 GeForce GT 720M 1025 077a GeForce 710M 1025 077b GeForce 710M 1025 077c GeForce 710M 1025 077d GeForce 710M 1025 077e GeForce 710M 1025 077f GeForce 710M 1025 0781 GeForce GT 720M 1025 0798 GeForce GT 720M 1025 0799 GeForce GT 720M 1025 079b GeForce GT 720M 1025 079c GeForce GT 720M 1025 0807 GeForce GT 720M 1025 0821 GeForce GT 720M 1025 0823 GeForce GT 720M 1025 0830 GeForce GT 720M 1025 0833 GeForce GT 720M 1025 0837 GeForce GT 720M 1025 083e GeForce 820M 1025 0841 GeForce 710M 1025 0854 GeForce 820M 1025 0855 GeForce 820M 1025 0856 GeForce 820M 1025 0857 GeForce 820M 1025 0858 GeForce 820M 1025 0863 GeForce 820M 1025 0868 GeForce 820M 1025 0869 GeForce 810M 1025 0873 GeForce 820M 1025 0878 GeForce 820M 1025 087b GeForce 820M 1025 087c GeForce 810M 1025 0881 GeForce 820M 1025 088a GeForce 820M 1025 089b GeForce 820M 1025 090f GeForce 820M 1025 0921 GeForce 820M 1025 092e GeForce 810M 1025 092f GeForce 820M 1025 0932 GeForce 820M 1025 093a GeForce 820M 1025 093c GeForce 820M 1025 093f GeForce 820M 1025 0941 GeForce 820M 1025 0945 GeForce 820M 1025 0954 GeForce 820M 1025 0965 GeForce 820M 1028 054d GeForce GT 630M 1028 054e GeForce GT 630M 1028 0554 GeForce GT 620M 1028 0557 GeForce GT 620M 1028 0562 GeForce GT 625M 1028 0565 GeForce GT 630M 1028 0568 GeForce GT 630M 1028 0590 GeForce GT 630M 1028 0592 GeForce GT 625M 1028 0594 GeForce GT 625M 1028 0595 GeForce GT 625M 1028 05a2 GeForce GT 625M 1028 05b1 GeForce GT 625M 1028 05b3 GeForce GT 625M 1028 05da GeForce GT 630M 1028 05de GeForce GT 720M 1028 05e0 GeForce GT 720M 1028 05e8 GeForce GT 630M 1028 05f4 GeForce GT 720M 1028 060f GeForce GT 720M 1028 064e GeForce 820M 1028 0652 GeForce 820M 1028 0653 GeForce 820M 1028 0655 GeForce 820M 1028 065e GeForce 820M 1028 0662 GeForce 820M 1028 068d GeForce 820M 1028 06ad GeForce 820M 1028 06ae GeForce 820M 1028 06af GeForce 820M 1028 06b0 GeForce 820M 1028 06c0 GeForce 820M 1028 06c1 GeForce 820M 103c 18ef GeForce GT 630M 103c 18f9 GeForce GT 630M 103c 18fb GeForce GT 630M 103c 18fd GeForce GT 630M 103c 18ff GeForce GT 630M 103c 218a GeForce 820M 103c 21bb GeForce 820M 103c 21bc GeForce 820M 103c 220e GeForce 820M 103c 2210 GeForce 820M 103c 2212 GeForce 820M 103c 2214 GeForce 820M 103c 2218 GeForce 820M 103c 225b GeForce 820M 103c 225d GeForce 820M 103c 226d GeForce 820M 103c 226f GeForce 820M 103c 22d2 GeForce 820M 103c 22d9 GeForce 820M 103c 2335 GeForce 820M 103c 2337 GeForce 820M 103c 2aef GeForce GT 720A 103c 2af9 GeForce 710A 1043 10dd NVS 5200M 1043 10ed NVS 5200M 1043 11fd GeForce GT 720M 1043 124d GeForce GT 720M 1043 126d GeForce GT 720M 1043 131d GeForce GT 720M 1043 13fd GeForce GT 720M 1043 14c7 GeForce GT 720M 1043 1507 GeForce GT 620M 1043 15ad GeForce 820M 1043 15ed GeForce 820M 1043 160d GeForce 820M 1043 163d GeForce 820M 1043 166d GeForce 820M 1043 16cd GeForce 820M 1043 16dd GeForce 820M 1043 170d GeForce 820M 1043 176d GeForce 820M 1043 178d GeForce 820M 1043 179d GeForce 820M 1043 17dd GeForce 820M 1043 2132 GeForce GT 620M 1043 2136 NVS 5200M 1043 21ba GeForce GT 720M 1043 21fa GeForce GT 720M 1043 220a GeForce GT 720M 1043 221a GeForce GT 720M 1043 223a GeForce GT 710M 1043 224a GeForce GT 710M 1043 227a GeForce 820M 1043 228a GeForce 820M 1043 232a GeForce 820M 1043 233a GeForce 820M 1043 235a GeForce 820M 1043 236a GeForce 820M 1043 238a GeForce 820M 1043 8595 GeForce GT 720M 1043 85ea GeForce GT 720M 1043 85eb GeForce 820M 1043 85ec GeForce 820M 1043 85ee GeForce GT 720M 1043 85f3 GeForce 820M 1043 860e GeForce 820M 1043 861a GeForce 820M 1043 861b GeForce 820M 1043 8628 GeForce 820M 1043 8643 GeForce 820M 1043 864c GeForce 820M 1043 8652 GeForce 820M 1043 8660 GeForce 820M 1043 8661 GeForce 820M 105b 0dac GeForce GT 720M 105b 0dad GeForce GT 720M 105b 0ef3 GeForce GT 720M 1072 152d GeForce GT 720M 10cf 17f5 GeForce GT 720M 1179 fa01 GeForce 710M 1179 fa02 GeForce 710M 1179 fa03 GeForce 710M 1179 fa05 GeForce 710M 1179 fa11 GeForce 710M 1179 fa13 GeForce 710M 1179 fa18 GeForce 710M 1179 fa19 GeForce 710M 1179 fa21 GeForce 710M 1179 fa23 GeForce 710M 1179 fa2a GeForce 710M 1179 fa32 GeForce 710M 1179 fa33 GeForce 710M 1179 fa36 GeForce 710M 1179 fa38 GeForce 710M 1179 fa42 GeForce 710M 1179 fa43 GeForce 710M 1179 fa45 GeForce 710M 1179 fa47 GeForce 710M 1179 fa49 GeForce 710M 1179 fa58 GeForce 710M 1179 fa59 GeForce 710M 1179 fa88 GeForce 710M 1179 fa89 GeForce 710M 144d b092 GeForce GT 620M 144d c0d5 GeForce GT 630M 144d c0d7 GeForce GT 620M 144d c0e2 NVS 5200M 144d c0e3 NVS 5200M 144d c0e4 NVS 5200M 144d c10d GeForce 820M 144d c652 GeForce GT 620M on NP300E5C series laptop 144d c709 GeForce 710M 144d c711 GeForce 710M 144d c736 GeForce 710M 144d c737 GeForce 710M 144d c745 GeForce 820M 144d c750 GeForce 820M 1462 10b8 GeForce GT 710M 1462 10e9 GeForce GT 720M 1462 1116 GeForce 820M 1462 aa33 GeForce 720M 1462 aaa2 GeForce GT 720M 1462 aaa3 GeForce 820M 1462 acb2 GeForce GT 720M 1462 acc1 GeForce GT 720M 1462 ae61 GeForce 720M 1462 ae65 GeForce GT 720M 1462 ae6a GeForce 820M 1462 ae71 GeForce GT 720M 14c0 0083 GeForce 820M 152d 0926 GeForce 620M 152d 0982 GeForce GT 630M 152d 0983 GeForce GT 630M 152d 1005 GeForce GT 820M 152d 1012 GeForce 710M 152d 1019 GeForce 820M 152d 1030 GeForce GT 630M 152d 1055 GeForce 710M 152d 1067 GeForce GT 720M 152d 1072 GeForce GT 720M 152d 1086 GeForce 820M 152d 1092 GeForce 820M 17aa 2200 NVS 5200M 17aa 2213 GeForce GT 720M 17aa 2220 GeForce GT 720M 17aa 309c GeForce GT 720A 17aa 30b4 GeForce 820A 17aa 30b7 GeForce 720A 17aa 30e4 GeForce 820A 17aa 361b GeForce 820A 17aa 361c GeForce 820A 17aa 361d GeForce 820A 17aa 3656 GeForce GT 620M 17aa 365a GeForce 705M 17aa 365e GeForce 800M 17aa 3661 GeForce 820A 17aa 366c GeForce 800M 17aa 3685 GeForce 800M 17aa 3686 GeForce 800M 17aa 3687 GeForce 705A 17aa 3696 GeForce 820A 17aa 369b GeForce 820A 17aa 369c GeForce 820A 17aa 369d GeForce 820A 17aa 369e GeForce 820A 17aa 36a9 GeForce 820A 17aa 36af GeForce 820A 17aa 36b0 GeForce 820A 17aa 36b6 GeForce 820A 17aa 3800 GeForce GT 720M 17aa 3801 GeForce GT 720M 17aa 3802 GeForce GT 720M 17aa 3803 GeForce GT 720M 17aa 3804 GeForce GT 720M 17aa 3806 GeForce GT 720M 17aa 3808 GeForce GT 720M 17aa 380d GeForce 820M 17aa 380e GeForce 820M 17aa 380f GeForce 820M 17aa 3811 GeForce 820M 17aa 3812 GeForce 820M 17aa 3813 GeForce 820M 17aa 3816 GeForce 820M 17aa 3818 GeForce 820M 17aa 381a GeForce 820M 17aa 381c GeForce 820M 17aa 3901 GeForce 610M / GT 620M 17aa 3902 GeForce 710M 17aa 3903 GeForce 610M/710M 17aa 3904 GeForce GT 620M/625M 17aa 3905 GeForce GT 720M 17aa 3907 GeForce 820M 17aa 3910 GeForce 720M 17aa 3912 GeForce 720M 17aa 3913 GeForce 820M 17aa 3915 GeForce 820M 17aa 3977 GeForce GT 720M 17aa 3983 GeForce 610M 17aa 5001 GeForce 610M 17aa 5003 GeForce GT 720M 17aa 5005 GeForce 705M 17aa 500d GeForce GT 620M 17aa 5014 GeForce 710M 17aa 5017 GeForce 710M 17aa 5019 GeForce 710M 17aa 501a GeForce 710M 17aa 501f GeForce GT 720M 17aa 5025 GeForce 710M 17aa 5027 GeForce 710M 17aa 502a GeForce 710M 17aa 502b GeForce GT 720M 17aa 502d GeForce 710M 17aa 502e GeForce GT 720M 17aa 502f GeForce GT 720M 17aa 5030 GeForce 705M 17aa 5031 GeForce 705M 17aa 5032 GeForce 820M 17aa 5033 GeForce 820M 17aa 503e GeForce 710M 17aa 503f GeForce 820M 17aa 5040 GeForce 820M 1854 0177 GeForce 710M 1854 0180 GeForce 710M 1854 0190 GeForce GT 720M 1854 0192 GeForce GT 720M 1854 0224 GeForce 820M 1b0a 01c0 GeForce 820M 1b0a 20dd GeForce GT 620M 1b0a 20df GeForce GT 620M 1b0a 210e GeForce 820M 1b0a 2202 GeForce GT 720M 1b0a 90d7 GeForce 820M 1b0a 90dd GeForce 820M 1b50 5530 GeForce 820M 1b6c 5531 GeForce GT 720M 1bab 0106 GeForce 820M 1d05 1013 GeForce 810M 1180 GK104 [GeForce GTX 680] 1043 83f1 GTX680-DC2-2GD5 3842 3682 GeForce GTX 680 Mac Edition 1182 GK104 [GeForce GTX 760 Ti] 1183 GK104 [GeForce GTX 660 Ti] 1184 GK104 [GeForce GTX 770] 1185 GK104 [GeForce GTX 660 OEM] 10de 106f GK104 [GeForce GTX 760 OEM] 1186 GK104 [GeForce GTX 660 Ti] 1187 GK104 [GeForce GTX 760] 1188 GK104 [GeForce GTX 690] 1189 GK104 [GeForce GTX 670] 10de 1074 GK104 [GeForce GTX 760 Ti OEM] 118a GK104GL [GRID K520] 118b GK104GL [GRID K2 GeForce USM] 118c GK104 [GRID K2 NVS USM] # GRID K2 USM 118d GK104GL [GRID K200 vGPU] 10de 101d GRID K200 118e GK104 [GeForce GTX 760 OEM] 118f GK104GL [Tesla K10] 1191 GK104 [GeForce GTX 760 Rev. 2] 1193 GK104 [GeForce GTX 760 Ti OEM] 1194 GK104GL [Tesla K8] 1195 GK104 [GeForce GTX 660 Rev. 2] 1198 GK104M [GeForce GTX 880M] 1199 GK104M [GeForce GTX 870M] 119a GK104M [GeForce GTX 860M] 119d GK104M [GeForce GTX 775M Mac Edition] 119e GK104M [GeForce GTX 780M Mac Edition] 119f GK104M [GeForce GTX 780M] 11a0 GK104M [GeForce GTX 680M] 11a1 GK104M [GeForce GTX 670MX] 11a2 GK104M [GeForce GTX 675MX Mac Edition] 11a3 GK104M [GeForce GTX 680MX] 106b 010d iMac 13,2 11a4 GK104 [GK104-ESA] 11a5 GK104 [GK104-ESA] 11a7 GK104M [GeForce GTX 675MX] 11a8 GK104GLM [Quadro K5100M] 11a9 GK104M [GeForce GTX 870M] 11aa GK104 [GK104-INT] 11ac GK104 [GK104-CS] 11af GK104GLM [GRID IceCube] 11b0 GK104GL [GRID K240Q / K260Q vGPU] 10de 101a GRID K240Q 10de 101b GRID K260Q 11b1 GK104GL [GRID K2 Tesla USM] 11b4 GK104GL [Quadro K4200] 11b6 GK104GLM [Quadro K3100M] 11b7 GK104GLM [Quadro K4100M] 11b8 GK104GLM [Quadro K5100M] 11b9 GK104GLM 11ba GK104GL [Quadro K5000] 11bb GK104GL [Quadro 4100] 11bc GK104GLM [Quadro K5000M] 11bd GK104GLM [Quadro K4000M] 11be GK104GLM [Quadro K3000M] 11bf GK104GL [GRID K2] 11c0 GK106 [GeForce GTX 660] 11c1 GK106 [D14P2-30] 11c2 GK106 [GeForce GTX 650 Ti Boost] 1043 845b GeForce GTX 650 Ti Boost DirectCU II OC 1462 2874 GeForce GTX 650 Ti Boost TwinFrozr II OC 1569 11c2 GeForce GTX 650 Ti Boost OC 19da 1281 GeForce GTX 650 Ti Boost OC 3842 3657 GeForce GTX 650 Ti Boost 3842 3658 GeForce GTX 650 Ti Boost Superclocked 11c3 GK106 [GeForce GTX 650 Ti OEM] 10de 1030 GeForce GTX 650 Ti OEM 11c4 GK106 [GeForce GTX 645 OEM] 11c5 GK106 [GeForce GT 740] 11c6 GK106 [GeForce GTX 650 Ti] 11c7 GK106 [GeForce GTX 750 Ti] 11c8 GK106 [GeForce GTX 650 OEM] 11cb GK106 [GeForce GT 740] 11d0 GK106 [GK106-INT353] 11d1 GK106 [GK106-INT343] 11d2 GK106 [GK106-INT232] 11d3 GK106 [GK106-ES] 11e0 GK106M [GeForce GTX 770M] 11e1 GK106M [GeForce GTX 765M] 11e2 GK106M [GeForce GTX 765M] 11e3 GK106M [GeForce GTX 760M] 17aa 3683 GeForce GTX 760A 11e7 GK106M 11fa GK106GL [Quadro K4000] 11fc GK106GLM [Quadro K2100M] 11ff GK106 [NB1Q] 1200 GF114 [GeForce GTX 560 Ti] 1201 GF114 [GeForce GTX 560] 1202 GF114 [GeForce GTX 560 Ti OEM] 1203 GF114 [GeForce GTX 460 SE v2] 1205 GF114 [GeForce GTX 460 v2] 1206 GF114 [GeForce GTX 555] 1207 GF114 [GeForce GT 645 OEM] 1208 GF114 [GeForce GTX 560 SE] 1210 GF114M [GeForce GTX 570M] 1211 GF114M [GeForce GTX 580M] 1212 GF114M [GeForce GTX 675M] 1213 GF114M [GeForce GTX 670M] 1241 GF116 [GeForce GT 545 OEM] 1243 GF116 [GeForce GT 545] 1244 GF116 [GeForce GTX 550 Ti] 1245 GF116 [GeForce GTS 450 Rev. 2] 1246 GF116M [GeForce GT 550M] 1247 GF116M [GeForce GT 555M/635M] 1043 1752 GeForce GT 555M 1043 2050 GeForce GT 555M 1043 2051 GeForce GT 555M 1043 212a GeForce GT 635M 1043 212b GeForce GT 635M 1043 212c GeForce GT 635M 152d 0930 GeForce GT 635M 1248 GF116M [GeForce GT 555M/635M] 152d 0930 GeForce GT 635M 17c0 10e7 GeForce GT 555M 17c0 10e8 GeForce GT 555M 17c0 10ea GeForce GT 555M 1854 0890 GeForce GT 555M 1854 0891 GeForce GT 555M 1854 1795 GeForce GT 555M 1854 1796 GeForce GT 555M 1854 3005 GeForce GT 555M 1249 GF116 [GeForce GTS 450 Rev. 3] 124b GF116 [GeForce GT 640 OEM] 124d GF116M [GeForce GT 555M/635M] 1028 0491 GeForce GT 555M 1028 0570 GeForce GT 555M 1028 0571 GeForce GT 555M 1462 108d GeForce GT 555M 1462 10cc GeForce GT 635M 1251 GF116M [GeForce GT 560M] 1280 GK208 [GeForce GT 635] 1281 GK208 [GeForce GT 710] 1282 GK208 [GeForce GT 640 Rev. 2] 1283 GK208 [D15M2-10] 1284 GK208 [GeForce GT 630 Rev. 2] 1285 GK208 [GK208-100] 1286 GK208 [GeForce GT 720] 1287 GK208B [GeForce GT 730] 1288 GK208B [GeForce GT 720] 1289 GK208 [GeForce GT 710] 128a GK208B 128b GK208B [GeForce GT 710] 1043 85f7 GT710-SL-1GD5 1043 8770 GT710-4H-SL-2GD5 128c GK208B 1290 GK208M [GeForce GT 730M] 103c 2afa GeForce GT 730A 103c 2b04 GeForce GT 730A 1043 13ad GeForce GT 730M 1043 13cd GeForce GT 730M 1291 GK208M [GeForce GT 735M] 1292 GK208M [GeForce GT 740M] 17aa 3675 GeForce GT 740A 17aa 367c GeForce GT 740A 17aa 3684 GeForce GT 740A 1293 GK208M [GeForce GT 730M] 1294 GK208M [GeForce GT 740M] 1295 GK208M [GeForce 710M] 103c 2b0d GeForce 710A 103c 2b0f GeForce 710A 103c 2b11 GeForce 710A 103c 2b20 GeForce 810A 103c 2b21 GeForce 810A 103c 2b22 GeForce 810A 17aa 367a GeForce 805A 17aa 367c GeForce 710A 1296 GK208M [GeForce 825M] 1298 GK208M [GeForce GT 720M] 1299 GK208BM [GeForce 920M] 17aa 30bb GeForce 920A 17aa 30df GeForce 920A 17aa 36a7 GeForce 920A 17aa 36af GeForce 920M 129a GK208BM [GeForce 910M] 12a0 GK208 12ad GK208 [GK208-ES] 12ae GK208 [GK208-CS1-C] 12af GK208 [GK208-INT] 12b0 GK208 [GK208-CS-Q] 12b1 GK208 [GK208 INT] 12b9 GK208GLM [Quadro K610M] 12ba GK208GLM [Quadro K510M] 130b GK110 [Q12U-1] 1340 GM108M [GeForce 830M] 103c 2b2b GeForce 830A 1341 GM108M [GeForce 840M] 17aa 3697 GeForce 840A 17aa 3699 GeForce 840A 17aa 369c GeForce 840A 1344 GM108M [GeForce 845M] 1346 GM108M [GeForce 930M] 1347 GM108M [GeForce 940M] 1348 GM108M [GeForce 945M / 945A] 1349 GM108M [GeForce 930M] 134b GM108M [GeForce 940MX] 134d GM108M [GeForce 940MX] 17aa 2248 ThinkPad T570 134e GM108M [GeForce 930MX] 134f GM108M [GeForce 920MX] 137a GM108GLM [Quadro K620M / Quadro M500M] 17aa 505a Quadro M500M 137b GM108GLM [Quadro M520 Mobile] 137d GM108M [GeForce 940A] 1380 GM107 [GeForce GTX 750 Ti] 1381 GM107 [GeForce GTX 750] 1382 GM107 [GeForce GTX 745] 1389 GM107GL [GRID M30] 1390 GM107M [GeForce 845M] 1391 GM107M [GeForce GTX 850M] 17aa 3697 GeForce GTX 850A 17aa a125 GeForce GTX 850A 1392 GM107M [GeForce GTX 860M] 1393 GM107M [GeForce 840M] 1398 GM107M [GeForce 845M] 1399 GM107M [GeForce 945M] 139a GM107M [GeForce GTX 950M] 17aa 362c GeForce GTX 950A 17aa 362f GeForce GTX 950A 17aa 363f GeForce GTX 950A 17aa 3640 GeForce GTX 950A 17aa 3647 GeForce GTX 950A 17aa 36b9 GeForce GTX 950A 139b GM107M [GeForce GTX 960M] 1028 06e4 XPS 15 9550 103c 2b4c GeForce GTX 960A 139c GM107M [GeForce 940M] 139d GM107M [GeForce GTX 750 Ti] 13ad GM204 [GM107 INT52] 13ae GM204 [GM107 CS1] 13b0 GM107GLM [Quadro M2000M] 13b1 GM107GLM [Quadro M1000M] 13b2 GM107GLM [Quadro M600M] 13b3 GM107GLM [Quadro K2200M] 13b4 GM107GLM [Quadro M620 Mobile] 13b6 GM107GLM [Quadro M1200 Mobile] 13b9 GM107GL [NVS 810] 13ba GM107GL [Quadro K2200] 13bb GM107GL [Quadro K620] 13bc GM107GL [Quadro K1200] 13bd GM107GL [Tesla M10] 10de 110a GRID M40 10de 1160 Tesla M10 10de 11d2 GRID M10-8Q 13be GM204 [GM107 CS1] 13bf GM204 [GM107 INT52] 13c0 GM204 [GeForce GTX 980] 1043 8504 GTX980-4GD5 13c1 GM204 13c2 GM204 [GeForce GTX 970] 13c3 GM204 13c4 GM204 [D17U-20] 13d7 GM204M [GeForce GTX 980M] 13d8 GM204M [GeForce GTX 960 OEM / 970M] 13d9 GM204M [GeForce GTX 965M] 13da GM204M [GeForce GTX 980 Mobile] 13e4 GM204 [Graphics Device ES-A] 13e7 GM204GL [GeForce GTX 980 Engineering Sample] 13f0 GM204GL [Quadro M5000] 13f1 GM204GL [Quadro M4000] 13f2 GM204GL [Tesla M60] 10de 114d GRID M60-1Q 10de 114e GRID M60-2Q 10de 1150 GRID M60-8Q 10de 11b0 GRID M60-4A 13f3 GM204GL [Tesla M6] 10de 1184 GRID M6-8Q 13f8 GM204GLM [Quadro M5000M / M5000 SE] 13f9 GM204GLM [Quadro M4000M] 13fa GM204GLM [Quadro M3000M] 10de 11c9 Quadro M3000 SE 13fb GM204GLM [Quadro M5500] 1401 GM206 [GeForce GTX 960] 1402 GM206 [GeForce GTX 950] 1404 GM206 [GeForce GTX 960 FAKE] 1406 GM206 [GeForce GTX 960 OEM] 1407 GM206 [GeForce GTX 750 v2] 1427 GM206M [GeForce GTX 965M] 103c 825b OMEN-17-w001nv 1430 GM206GL [Quadro M2000] 1431 GM206GL [Tesla M4] 1436 GM206GLM [Quadro M2200 Mobile] 15c2 GP100 [CMP 100-100] 15f0 GP100GL [Quadro GP100] 15f1 GP100GL 15f7 GP100GL [Tesla P100 PCIe 12GB] 15f8 GP100GL [Tesla P100 PCIe 16GB] 15f9 GP100GL [Tesla P100 SXM2 16GB] 15fa GP100GL [DGX Station / PH402 SKU 200] 15fb GP100GL [GP100 SKU 200] 15fc GP100GL [Tesla P100-DGXS-16GB] 15ff GP100GL [GP100 SKU 15ff] 1617 GM204M [GeForce GTX 980M] 1618 GM204M [GeForce GTX 970M] 1619 GM204M [GeForce GTX 965M] 161a GM204M [GeForce GTX 980 Mobile] 1667 GM204M [GeForce GTX 965M] 1725 GP100 172e GP100 172f GP100 174d GM108M [GeForce MX130] 174e GM108M [GeForce MX110] 1789 GM107GL [GRID M3-3020] 179c GM107 [GeForce 940MX] 1025 1094 Acer Aspire E5-575G 17c2 GM200 [GeForce GTX TITAN X] 17c8 GM200 [GeForce GTX 980 Ti] 17f0 GM200GL [Quadro M6000] 10de 1141 VCA 6000 17f1 GM200GL [Quadro M6000 24GB] 17fd GM200GL [Tesla M40] 1ad0 Tegra PCIe x8 Endpoint 1ad1 Tegra PCIe x4/x8 Endpoint/Root Complex 1ad2 Tegra PCIe x1 Root Complex 1ad3 Xavier SATA Controller 1ad6 TU102 USB 3.1 Host Controller 1ad7 TU102 USB Type-C UCSI Controller 1ad8 TU104 USB 3.1 Host Controller 1ad9 TU104 USB Type-C UCSI Controller 1ada TU106 USB 3.1 Host Controller 1043 8673 TURBO-RTX2070-8G 1adb TU106 USB Type-C UCSI Controller 1043 8673 TURBO-RTX2070-8G 1aeb TU116 High Definition Audio Controller 1aec TU116 USB 3.1 Host Controller 1aed TU116 USB Type-C UCSI Controller 1aef GA102 High Definition Audio Controller 1af1 GA100 [A100 NVSwitch] 1b00 GP102 [TITAN X Pascal] 1b01 GP102 [GeForce GTX 1080 Ti 10GB] 1b02 GP102 [TITAN Xp] 1b04 GP102 1b06 GP102 [GeForce GTX 1080 Ti] 1b07 GP102 [P102-100] 1b30 GP102GL [Quadro P6000] 1b38 GP102GL [Tesla P40] 1b39 GP102GL [Tesla P10] 1b70 GP102GL 1b78 GP102GL 1b80 GP104 [GeForce GTX 1080] 1b81 GP104 [GeForce GTX 1070] 1b82 GP104 [GeForce GTX 1070 Ti] 1b83 GP104 [GeForce GTX 1060 6GB] 1b84 GP104 [GeForce GTX 1060 3GB] 1b87 GP104 [P104-100] 1ba0 GP104M [GeForce GTX 1080 Mobile] 1ba1 GP104M [GeForce GTX 1070 Mobile] 1458 1651 GeForce GTX 1070 Max-Q 1462 11e8 GeForce GTX 1070 Max-Q 1462 11e9 GeForce GTX 1070 Max-Q 1558 9501 GeForce GTX 1070 Max-Q 1ba2 GP104M [GeForce GTX 1070 Mobile] 1ba9 GP104M 1baa GP104M 1bad GP104 [GeForce GTX 1070 Engineering Sample] 1bb0 GP104GL [Quadro P5000] 1bb1 GP104GL [Quadro P4000] 1bb3 GP104GL [Tesla P4] 1bb4 GP104GL [Tesla P6] 1bb5 GP104GLM [Quadro P5200 Mobile] 103c 842f P5200 [Zbook 17 G5 mobile workstation] 1bb6 GP104GLM [Quadro P5000 Mobile] 1bb7 GP104GLM [Quadro P4000 Mobile] 1462 11e9 Quadro P4000 Max-Q 1bb8 GP104GLM [Quadro P3000 Mobile] 1bb9 GP104GLM [Quadro P4200 Mobile] 103c 842f P4200 [Zbook 17 G5 mobile workstation] 1bbb GP104GLM [Quadro P3200 Mobile] 103c 842f P3200 [Zbook 17 G5 moble workstation] 1bc7 GP104 [P104-101] 1be0 GP104BM [GeForce GTX 1080 Mobile] 1028 07c0 GeForce GTX 1080 Max-Q 1458 355b GeForce GTX 1080 Max-Q 1be1 GP104BM [GeForce GTX 1070 Mobile] 1c00 GP106 1c01 GP106 1c02 GP106 [GeForce GTX 1060 3GB] 1c03 GP106 [GeForce GTX 1060 6GB] 1043 85b6 DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual] 1c04 GP106 [GeForce GTX 1060 5GB] 1c06 GP106 [GeForce GTX 1060 6GB Rev. 2] 1c07 GP106 [P106-100] 1c09 GP106 [P106-090] 1c20 GP106M [GeForce GTX 1060 Mobile] 17aa 39b9 GeForce GTX 1060 Max-Q 3GB 1c21 GP106M [GeForce GTX 1050 Ti Mobile] 1c22 GP106M [GeForce GTX 1050 Mobile] 1c23 GP106M [GeForce GTX 1060 Mobile Rev. 2] 1414 0020 GTX 1060 Mobile 1c2d GP106M 1c30 GP106GL [Quadro P2000] 1c31 GP106GL [Quadro P2200] 1c35 GP106M [Quadro P2000 Mobile / DRIVE PX 2 AutoChauffeur] 1c36 GP106 [P106M] 1c60 GP106BM [GeForce GTX 1060 Mobile 6GB] 103c 8390 GeForce GTX 1060 Max-Q 6GB 1c61 GP106BM [GeForce GTX 1050 Ti Mobile] 1c62 GP106BM [GeForce GTX 1050 Mobile] 1c70 GP106GL 1c81 GP107 [GeForce GTX 1050] 1c82 GP107 [GeForce GTX 1050 Ti] 1043 8613 PH-GTX1050TI-4G 1458 3763 GV-N105TOC-4GD 1c83 GP107 [GeForce GTX 1050 3GB] 1c8c GP107M [GeForce GTX 1050 Ti Mobile] 1c8d GP107M [GeForce GTX 1050 Mobile] 1c8e GP107M 1c8f GP107M [GeForce GTX 1050 Ti Max-Q] 1c90 GP107M [GeForce MX150] 1c91 GP107M [GeForce GTX 1050 3 GB Max-Q] 1c92 GP107M [GeForce GTX 1050 Mobile] 1c94 GP107M [GeForce MX350] 1c96 GP107M [GeForce MX350] 1ca7 GP107GL 1ca8 GP107GL 1caa GP107GL 1cb1 GP107GL [Quadro P1000] 1cb2 GP107GL [Quadro P600] 1cb3 GP107GL [Quadro P400] 1cb6 GP107GL [Quadro P620] 1cba GP107GLM [Quadro P2000 Mobile] 103c 842c P2000 [Zbook 15 G5 mobile workstation] 103c 842f P2000 [Zbook 17 G5 mobile workstation] 1cbb GP107GLM [Quadro P1000 Mobile] 103c 8429 P1000 [Zbook Studio G5 mobile workstation] 103c 842c P1000 [Zbook 15 G5 mobile workstation] 103c 842f P1000 [Zbook 17 G5 mobile workstation] 103c 8451 P1000 [Zbook Studio x360 G5 mobile workstation] 1cbc GP107GLM [Quadro P600 Mobile] 1cbd GP107GLM [Quadro P620] 1ccc GP107BM [GeForce GTX 1050 Ti Mobile] 1ccd GP107BM [GeForce GTX 1050 Mobile] 1cfa GP107GL [Quadro P2000] 1cfb GP107GL [Quadro P1000] 1d01 GP108 [GeForce GT 1030] 1d02 GP108 [GeForce GT 1010] 1d10 GP108M [GeForce MX150] 17aa 225e ThinkPad T480 1d11 GP108M [GeForce MX230] 1d12 GP108M [GeForce MX150] 1d72 1701 Mi Notebook Pro [GeForce MX150] 1d13 GP108M [GeForce MX250] 1d16 GP108M [GeForce MX330] 1d33 GP108GLM [Quadro P500 Mobile] 1d34 GP108GLM [Quadro P520] 1d52 GP108BM [GeForce MX250] 1d56 GP108BM [GeForce MX330] 1d81 GV100 [TITAN V] 1d83 GV100 [CMP 100-200] 1d84 GV100 [CMP 100-210] 1db0 GV100GL [Tesla GV100 SXM2-16GB SKU 890] 1db1 GV100GL [Tesla V100 SXM2 16GB] 1db2 GV100GL [Tesla V100 DGXS 16GB] 1db3 GV100GL [Tesla V100 FHHL 16GB] 1db4 GV100GL [Tesla V100 PCIe 16GB] 1db5 GV100GL [Tesla V100 SXM2 32GB] 1db6 GV100GL [Tesla V100 PCIe 32GB] 1db7 GV100GL [Tesla V100 DGXS 32GB] 1db8 GV100GL [Tesla V100 SXM3 32GB] 10de 131d Tesla V100-SXM3-32GB-H 1dba GV100GL [Quadro GV100] 10de 12eb TITAN V CEO Edition 1dbd GV100GL [Tesla GV100 DGX1-V] 1dbe GV100 Engineering Sample 1dc1 GV100 [CMP 100-200] 1df0 GV100GL [Tesla PG500-216] 1df2 GV100GL [Tesla PG503-216] 1df4 GV100 [CMP 100-210] 1df5 GV100GL [Tesla V100 SXM2 16GB] 1df6 GV100GL [Tesla V100S PCIe 32GB] 1e02 TU102 [TITAN RTX] 1e03 TU102 [GeForce RTX 2080 Ti 12GB] 1e04 TU102 [GeForce RTX 2080 Ti] 1e07 TU102 [GeForce RTX 2080 Ti Rev. A] 1462 3715 RTX 2080 Ti GAMING X TRIO 1e09 TU102 [CMP 50HX] 1e2d TU102 [GeForce RTX 2080 Ti Engineering Sample] 1e2e TU102 [GeForce RTX 2080 Ti 12GB Engineering Sample] 1e30 TU102GL [Quadro RTX 6000/8000] 10de 129e Quadro RTX 8000 10de 12ba Quadro RTX 6000 1e35 TU102GL [Tesla T10] 1e36 TU102GL [Quadro RTX 6000] 1e37 TU102GL [Tesla T10 16GB / GRID RTX T10-2/T10-4/T10-8] 10de 1304 Tesla T10 16GB 10de 1347 GRID RTX T10-8 10de 1348 GRID RTX T10-4 10de 1349 GRID RTX T10-2 10de 1370 Tesla T10 16GB 10de 13a5 GRID RTX T10-8 1e38 TU102GL [Tesla T40 24GB] 1e3c TU102GL 1e3d TU102GL 1e3e TU102GL 1e78 TU102GL [Quadro RTX 6000/8000] 10de 13d8 Quadro RTX 8000 10de 13d9 Quadro RTX 6000 1e81 TU104 [GeForce RTX 2080 SUPER] 1e82 TU104 [GeForce RTX 2080] 1e84 TU104 [GeForce RTX 2070 SUPER] 1e87 TU104 [GeForce RTX 2080 Rev. A] 1e89 TU104 [GeForce RTX 2060] 1e90 TU104M [GeForce RTX 2080 Mobile] 1e91 TU104M [GeForce RTX 2070 SUPER Mobile / Max-Q] 1e93 TU104M [GeForce RTX 2080 SUPER Mobile / Max-Q] 1eab TU104M 1eae TU104M [GeForce GTX 2080 Engineering Sample] 1eb0 TU104GL [Quadro RTX 5000] 1eb1 TU104GL [Quadro RTX 4000] 1eb4 TU104GL [T4G] 1eb5 TU104GLM [Quadro RTX 5000 Mobile / Max-Q] 1eb6 TU104GLM [Quadro RTX 4000 Mobile / Max-Q] 1eb8 TU104GL [Tesla T4] 1eb9 TU104GL 1eba TU104GL [PG189 SKU600] 1ebe TU104GL 1ec2 TU104 [GeForce RTX 2070 SUPER] 1ec7 TU104 [GeForce RTX 2070 SUPER] 1ed0 TU104BM [GeForce RTX 2080 Mobile] 1ed1 TU104BM [GeForce RTX 2070 SUPER Mobile / Max-Q] 1ed3 TU104BM [GeForce RTX 2080 SUPER Mobile / Max-Q] 1ef5 TU104GLM [Quadro RTX 5000 Mobile Refresh] 1f02 TU106 [GeForce RTX 2070] 1043 8673 TURBO RTX 2070 1f03 TU106 [GeForce RTX 2060 12GB] 1f04 TU106 1f06 TU106 [GeForce RTX 2060 SUPER] 1f07 TU106 [GeForce RTX 2070 Rev. A] 1f08 TU106 [GeForce RTX 2060 Rev. A] 1f09 TU106 [GeForce GTX 1660 SUPER] 1f0a TU106 [GeForce GTX 1650] 1f0b TU106 [CMP 40HX] 1f10 TU106M [GeForce RTX 2070 Mobile] 1f11 TU106M [GeForce RTX 2060 Mobile] 1f12 TU106M [GeForce RTX 2060 Max-Q] 1f14 TU106M [GeForce RTX 2070 Mobile / Max-Q Refresh] 1f15 TU106M [GeForce RTX 2060 Mobile] 1f2e TU106M 1f36 TU106GLM [Quadro RTX 3000 Mobile / Max-Q] 1f42 TU106 [GeForce RTX 2060 SUPER] 1f47 TU106 [GeForce RTX 2060 SUPER] 1f50 TU106BM [GeForce RTX 2070 Mobile / Max-Q] 1f51 TU106BM [GeForce RTX 2060 Mobile] 1f54 TU106BM [GeForce RTX 2070 Mobile] 1f55 TU106BM [GeForce RTX 2060 Mobile] 1f76 TU106GLM [Quadro RTX 3000 Mobile Refresh] 1f81 TU117 1f82 TU117 [GeForce GTX 1650] 1f83 TU117 [GeForce GTX 1630] 1f91 TU117M [GeForce GTX 1650 Mobile / Max-Q] 1f92 TU117M [GeForce GTX 1650 Mobile] 1f94 TU117M [GeForce GTX 1650 Mobile] 1f95 TU117M [GeForce GTX 1650 Ti Mobile] 1f96 TU117M [GeForce GTX 1650 Mobile / Max-Q] 1f97 TU117M [GeForce MX450] 1f98 TU117M [GeForce MX450] 1f99 TU117M [GeForce GTX 1650 Mobile / Max-Q] 1f9c TU117M [GeForce MX450] 1f9d TU117M [GeForce GTX 1650 Mobile / Max-Q] # via Lenovo 496.90 1f9f TU117M [GeForce MX550] 1fa0 TU117M [GeForce MX550] 1fa1 TU117M 1fae TU117GL 1fb0 TU117GLM [Quadro T1000 Mobile] 1fb1 TU117GL [T600] 1fb2 TU117GLM [Quadro T400 Mobile] 1fb6 TU117GLM [T600 Laptop GPU] 1028 0b10 Precision 3571 1fb7 TU117GLM [T550 Laptop GPU] 1fb8 TU117GLM [Quadro T2000 Mobile / Max-Q] 1fb9 TU117GLM [Quadro T1000 Mobile] 1fba TU117GLM [T600 Mobile] 1fbb TU117GLM [Quadro T500 Mobile] 1fbc TU117GLM [T1200 Laptop GPU] 1fbf TU117GL 1fd9 TU117BM [GeForce GTX 1650 Mobile Refresh] 1fdd TU117BM [GeForce GTX 1650 Mobile Refresh] 1ff0 TU117GL [T1000 8GB] 1ff2 TU117GL [T400 4GB / T400E] 1ff9 TU117GLM [Quadro T1000 Mobile] 2080 GA100 2081 GA100 2082 GA100 [CMP 170HX] 20b0 GA100 [A100 SXM4 40GB] 20b1 GA100 [A100 PCIe 40GB] 20b2 GA100 [A100 SXM4 80GB] 20b3 GA100 [A100-SXM-64GB] 20b4 GA100 20b5 GA100 [A100 PCIe 80GB] 20b6 GA100GL [PG506-232] 20b7 GA100GL [A30 PCIe] 20b8 GA100 [A100X] 20b9 GA100 [A30X] 20bb GA100 [DRIVE A100 PROD] 20bd GA100 [A800 SXM4 40GB] 20be GA100 [GRID A100A] 20bf GA100 [GRID A100B] 20c0 GA100 [Initial DevID] 20c2 GA100 [CMP 170HX] 20f0 GA100 [A100-PG506-207] 20f1 GA100 [A100 PCIe 40GB] 20f2 GA100 [A100-PG506-217] 20f3 GA100 [A800-SXM4-80GB] 20f5 GA100 [A800 80GB PCIe] 20f6 GA100 [A800 40GB PCIe] 20fd GA100 [AX800 Converged Accelerator] 20fe GA100 [INT SKU] 20ff GA100 2182 TU116 [GeForce GTX 1660 Ti] 2183 TU116 2184 TU116 [GeForce GTX 1660] 2187 TU116 [GeForce GTX 1650 SUPER] 2188 TU116 [GeForce GTX 1650] 2189 TU116 [CMP 30HX] 2191 TU116M [GeForce GTX 1660 Ti Mobile] 2192 TU116M [GeForce GTX 1650 Ti Mobile] 21ae TU116GL 21bf TU116GL 21c2 TU116 21c3 TU116 21c4 TU116 [GeForce GTX 1660 SUPER] 21d1 TU116BM [GeForce GTX 1660 Ti Mobile] 2200 GA102 2203 GA102 [GeForce RTX 3090 Ti] 2204 GA102 [GeForce RTX 3090] 147d 10de NVIDIA Geforce RTX 3090 Founders Edition 2205 GA102 [GeForce RTX 3080 Ti 20GB] 2206 GA102 [GeForce RTX 3080] 10de 1467 GA102 [GeForce RTX 3080] 10de 146d GA102 [GeForce RTX 3080 20GB] 1462 3892 RTX 3080 10GB GAMING X TRIO 2207 GA102 [GeForce RTX 3070 Ti] 2208 GA102 [GeForce RTX 3080 Ti] 220a GA102 [GeForce RTX 3080 12GB] 220d GA102 [CMP 90HX] 2216 GA102 [GeForce RTX 3080 Lite Hash Rate] 222b GA102 [GeForce RTX 3090 Engineering Sample] 222f GA102 [GeForce RTX 3080 11GB / 12GB Engineering Sample] 2230 GA102GL [RTX A6000] 2231 GA102GL [RTX A5000] 2232 GA102GL [RTX A4500] 2233 GA102GL [RTX A5500] 2235 GA102GL [A40] 2236 GA102GL [A10] 2237 GA102GL [A10G] 2238 GA102GL [A10M] 223f GA102GL 228b GA104 High Definition Audio Controller 228e GA106 High Definition Audio Controller 2291 GA107 High Definition Audio Controller 2296 Tegra PCIe Endpoint Virtual Network 229a Orin PCIe x8 Root Complex 229c Orin PCIe x4/x8 Endpoint/Root Complex 229e Orin PCIe x1 Root Complex 22a3 GH100 [H100 NVSwitch] 22ba AD102 High Definition Audio Controller 22bc AD104 High Definition Audio Controller 22bd AD106M High Definition Audio Controller 22be AD107 High Definition Audio Controller 22d8 THOR Processor PCI Express Root Port 22e6 THOR Processor PCI Express x16 Controller 2302 GH100 230e GH100 [H20 NVL16] 2313 GH100 [H100 CNX] 2321 GH100 [H100L 94GB] 2322 GH100 [H800 PCIe] 2324 GH100 [H800] 2328 GH100 [H20B] 2329 GH100 [H20] 232c GH100 [H20 HBM3e] 2330 GH100 [H100 SXM5 80GB] 2331 GH100 [H100 PCIe] 2335 GH100 [H200 SXM 141GB] 2336 GH100 [H100] 2337 GH100 [H100 SXM5 64GB] 2338 GH100 [H100 SXM5 96GB] 2339 GH100 [H100 SXM5 94GB] 233a GH100 [H800L 94GB] 233b GH100 [H200 NVL] 233d GH100 [H100 96GB] 2342 GH100 [GH200 120GB / 480GB] 2343 GH100 2345 GH100 [GH100-88K-A1] 2348 GH100 [GH200 144G HBM3e] 237f GH100 [Skinny Joe] 23b0 GH100 23f0 GH100 2414 GA103 [GeForce RTX 3060 Ti] 2420 GA103M [GeForce RTX 3080 Ti Mobile] 2438 GA103GLM [RTX A5500 Laptop GPU] 2460 GA103M [GeForce RTX 3080 Ti Laptop GPU] 2480 GA104 [Reserved Dev ID A] 2482 GA104 [GeForce RTX 3070 Ti] 2483 GA104 2484 GA104 [GeForce RTX 3070] 10de 146b GA104 [GeForce RTX 3070] 10de 14ae GA104 [GeForce RTX 3070 16GB] 2486 GA104 [GeForce RTX 3060 Ti] 19da 6630 ZT-A30610H-10M [RTX 3060 Ti Twin Edge OC] 2487 GA104 [GeForce RTX 3060] 2488 GA104 [GeForce RTX 3070 Lite Hash Rate] 2489 GA104 [GeForce RTX 3060 Ti Lite Hash Rate] 248a GA104 [CMP 70HX] 248c GA104 [GeForce RTX 3070 Ti] 248d GA104 [GeForce RTX 3070] 248e GA104 [GeForce RTX 3060 Ti] 249c GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB] 249d GA104M [GeForce RTX 3070 Mobile / Max-Q] 249f GA104M 24a0 GA104 [Geforce RTX 3070 Ti Laptop GPU] 24a4 GA104M 24ac GA104 [GeForce RTX 30x0 Engineering Sample] 24ad GA104 [GeForce RTX 3060 Engineering Sample] 24af GA104 [GeForce RTX 3070 Engineering Sample] 24b0 GA104GL [RTX A4000] 24b1 GA104GL [RTX A4000H] 24b6 GA104GLM [RTX A5000 Mobile] 24b7 GA104GLM [RTX A4000 Mobile] 24b8 GA104GLM [RTX A3000 Mobile] 24b9 GA104GLM [RTX A3000 12GB Laptop GPU] 24ba GA104GLM [RTX A4500 Laptop GPU] 24bb GA104GLM [RTX A3000 Laptop GPU] 24bf GA104 [GeForce RTX 3070 Engineering Sample] 24c0 GA104 [Initial Dev ID B] 24c7 GA104 [GeForce RTX 3060 8GB] 24c8 GA104 [GeForce RTX 3070 GDDR6X] 24c9 GA104 [GeForce RTX 3060 Ti GDDR6X] 24dc GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB] 24dd GA104M [GeForce RTX 3070 Mobile / Max-Q] 24df GA104M 24e0 GA104M [Geforce RTX 3070 Ti Laptop GPU] 24fa GA104 [RTX A4500 Embedded GPU ] 2501 GA106 [GeForce RTX 3060] 2503 GA106 [GeForce RTX 3060] 2504 GA106 [GeForce RTX 3060 Lite Hash Rate] 2505 GA106 2507 GA106 [Geforce RTX 3050] 2508 GA106 [GeForce RTX 3050 OEM] 2509 GA106 [GeForce RTX 3060 12GB Rev. 2] 2520 GA106M [GeForce RTX 3060 Mobile / Max-Q] 2521 GA106M [GeForce RTX 3060 Laptop GPU] 2523 GA106M [GeForce RTX 3050 Ti Mobile / Max-Q] 252f GA106 [GeForce RTX 3060 Engineering Sample] 2531 GA106 [RTX A2000] 2544 GA106 [GeForce RTX 3060] 2560 GA106M [GeForce RTX 3060 Mobile / Max-Q] 2561 GA106M [GeForce RTX 3060 Laptop GPU] 2563 GA106M [GeForce RTX 3050 Ti Mobile / Max-Q] 2571 GA106 [RTX A2000 12GB] 2582 GA107 [GeForce RTX 3050 8GB] 2583 GA107 [GeForce RTX 3050 4GB] 2584 GA107 [GeForce RTX 3050 6GB] 25a0 GA107M [GeForce RTX 3050 Ti Mobile] 25a2 GA107M [GeForce RTX 3050 Mobile] 25a3 GA107 25a4 GA107 25a5 GA107M [GeForce RTX 3050 Mobile] 25a6 GA107M [GeForce MX570] 25a7 GA107M [GeForce MX570] 25a9 GA107M [GeForce RTX 2050] 25aa GA107M [GeForce MX570 A] 25ab GA107M [GeForce RTX 3050 4GB Laptop GPU] 25ac GA107BM / GN20-P0-R-K2 [GeForce RTX 3050 6GB Laptop GPU] 25ad GA107 [GeForce RTX 2050] 25af GA107 [GeForce RTX 3050 Engineering Sample] 25b0 GA107GL [RTX A1000] 25b2 GA107GL [RTX A400] 25b5 GA107GLM [RTX A4 Mobile] # A16 - 25B6 10DE 14A9 / A2 - 25B6 10DE 157E 25b6 GA107GL [A2 / A16] 25b8 GA107GLM [RTX A2000 Mobile] 25b9 GA107GLM [RTX A1000 Laptop GPU] 25ba GA107GLM [RTX A2000 8GB Laptop GPU] 25bb GA107GLM [RTX A500 Laptop GPU] 25bc GA107GLM [RTX A1000 6GB Laptop GPU] 25bd GA107GLM [RTX A500 Laptop GPU] 25e0 GA107BM [GeForce RTX 3050 Ti Mobile] 25e2 GA107BM [GeForce RTX 3050 Mobile] 25e5 GA107BM [GeForce RTX 3050 Mobile] 25ec GA107BM / GN20-P0-R-K2 [GeForce RTX 3050 6GB Laptop GPU] 25ed GA107 [GeForce RTX 2050] 25f9 GA107 [RTX A1000 Embedded GPU ] 25fa GA107 [RTX A2000 Embedded GPU] 25fb GA107 [RTX A500 Embedded GPU] 2681 AD102 [RTX TITAN Ada] 2684 AD102 [GeForce RTX 4090] 2685 AD102 [GeForce RTX 4090 D] 2689 AD102 [GeForce RTX 4070 Ti SUPER] 26af AD102 [PG137] 26b1 AD102GL [RTX 6000 Ada Generation] 26b2 AD102GL [RTX 5000 Ada Generation] 26b3 AD102GL [RTX 5880 Ada Generation] 26b5 AD102GL [L40] 26b7 AD102GL [L20] 26b8 AD102GL [L40G] 26b9 AD102GL [L40S] 26ba AD102GL [L20] 26bb AD102GL [L30] 26f5 AD102GL [L40 CNX] 2702 AD103 [GeForce RTX 4080 SUPER] 2703 AD103 [GeForce RTX 4080 SUPER] 2704 AD103 [GeForce RTX 4080] 2705 AD103 [GeForce RTX 4070 Ti SUPER] 2709 AD103 [GeForce RTX 4070] 2717 AD103M / GN21-X11 [GeForce RTX 4090 Laptop GPU] 2730 AD103GLM [RTX 5000 Ada Generation Laptop GPU] 2757 AD103M / GN21-X11 [GeForce RTX 4090 Laptop GPU] 2770 AD103GLM [RTX 5000 Ada Generation Embedded GPU] 2782 AD104 [GeForce RTX 4070 Ti] 2783 AD104 [GeForce RTX 4070 SUPER] 2785 AD104 [AC AD104 20GB] 2786 AD104 [GeForce RTX 4070] 2788 AD104 [GeForce RTX 4060 Ti] 27a0 AD104M [GeForce RTX 4080 Max-Q / Mobile] 27b0 AD104GL [RTX 4000 SFF Ada Generation] 27b1 AD104GL [RTX 4500 Ada Generation] 27b2 AD104GL [RTX 4000 Ada Generation] 27b6 AD104GL [L2] 27b7 AD104GL [L16] 27b8 AD104GL [L4] 27ba AD104GLM [RTX 4000 Ada Generation Laptop GPU] 27bb AD104GLM [RTX 3500 Ada Generation Laptop GPU] 27e0 AD104M [GeForce RTX 4080 Max-Q / Mobile] 27fa AD104GLM [RTX 4000 Ada Generation Embedded GPU] 27fb AD104GLM [RTX 3500 Ada Generation Embedded GPU] 2803 AD106 [GeForce RTX 4060 Ti] 2805 AD106 [GeForce RTX 4060 Ti 16GB] 2808 AD106 [GeForce RTX 4060] 2820 AD106M [GeForce RTX 4070 Max-Q / Mobile] 2822 AD106M [GeForce RTX 3050 A Laptop GPU] 2838 AD106GLM [RTX 3000 Ada Generation Laptop GPU] 2860 AD106M [GeForce RTX 4070 Max-Q / Mobile] 2878 AD106GLM [RTX 3000 Ada Generation Embedded GPU] 2882 AD107 [GeForce RTX 4060] 28a0 AD107M [GeForce RTX 4060 Max-Q / Mobile] 28a1 AD107M [GeForce RTX 4050 Max-Q / Mobile] 28a3 AD107M [GeForce RTX 3050 A Laptop GPU] 28b0 AD107GL [RTX 2000 / 2000E Ada Generation] 28b8 AD107GLM [RTX 2000 Ada Generation Laptop GPU] 28b9 AD107GLM [RTX 1000 Ada Generation Laptop GPU] 28ba AD107GLM [RTX 500 Ada Generation Laptop GPU] 28bb AD107GLM [RTX 500 Ada Generation Laptop GPU] 28e0 AD107M [GeForce RTX 4060 Max-Q / Mobile] 28e1 AD107M [GeForce RTX 4050 Max-Q / Mobile] 28e3 AD107M [GeForce RTX 3050 A Laptop GPU] 28f8 AD107GLM [RTX 2000 Ada Generation Embedded GPU] 2900 GB100 [Reserved Dev ID A] 2901 GB100 [B200] 2920 GB100 [TS4 / B100] 2924 GB100 2925 GB100 293d GB100 2940 GB100 [Reserved Dev ID B] 2941 GB100 [HGX GB200] 297e GB100 2980 GB102 [Reserved Dev ID A] 29bc GB102 [B100] 29c0 GB102 [Reserved Dev ID B] 29f1 GB102 2b00 TA1090SA [THOR] 2b85 GB202 [GeForce RTX 5090] 2b87 GB202 [GeForce RTX 5090 D] 2bb1 GB202GL [RTX PRO 6000 Blackwell Workstation Edition] 2bb3 GB202GL [RTX PRO 5000 Blackwell] 2bb4 GB202GL [RTX PRO 6000 Blackwell Max-Q Workstation Edition] 2bb5 GB202GL [RTX PRO 6000 Blackwell Server Edition] 2c02 GB203 [GeForce RTX 5080] 2c05 GB203 [GeForce RTX 5070 Ti] 2c18 GB203M / GN22 [GeForce RTX 5090 Max-Q / Mobile] 2c19 GB203M / GN22 [GeForce RTX 5080 Max-Q / Mobile] 2c2c GB6-256(N22W-ES-A1) 2c31 GB203GL [RTX PRO 4500 Blackwell] 2c34 GB203GL [RTX PRO 4000 Blackwell] 2c38 GB203GLM [RTX PRO 5000 Blackwell Generation Laptop GPU] 2c39 GB203GLM [RTX PRO 4000 Blackwell Generation Laptop GPU] 2c58 GB203M / GN22-X11 [GeForce RTX 5090 Max-Q / Mobile] 2c59 GB203M / GN22-X9 [GeForce RTX 5080 Max-Q / Mobile] 2d04 GB206 [GeForce RTX 5060 Ti] 2d05 GB206 [GeForce RTX 5060] 2d18 GB206M [GeForce RTX 5070 Max-Q / Mobile] 2d19 GB206M [GeForce RTX 5060 Max-Q / Mobile] 2d2c GB6-128 (N22Y-ES-A1) 2d39 GB206GLM [RTX PRO 2000 Blackwell Generation Laptop GPU] 2d58 GB206M [GeForce RTX 5070 Max-Q / Mobile] 2d59 GB206M [GeForce RTX 5060 Max-Q / Mobile] 2d83 GB207 [GeForce RTX 5050] 2d98 GB207M [GeForce RTX 5050 Max-Q / Mobile] 2db8 GB207GLM [RTX PRO 1000 Blackwell Generation Laptop GPU] 2db9 GB207GLM [RTX PRO 500 Blackwell Generation Laptop GPU] 2dd8 GB207M [GeForce RTX 5050 Max-Q / Mobile] 2e2a GB20B 2f04 GB205 [GeForce RTX 5070] 2f18 GB205M [GeForce RTX 5070 Ti Mobile] 2f38 GB205GLM [RTX PRO 3000 Blackwell Generation Laptop GPU] 2f58 GB205M [GeForce RTX 5070 Ti Mobile] 31c0 GB110 3340 GB120 10df Emulex Corporation 0720 OneConnect NIC (Skyhawk) 103c 1934 FlexFabric 20Gb 2-port 650M Adapter 103c 1935 FlexFabric 20Gb 2-port 650FLB Adapter 103c 21d4 StoreFabric CN1200E 10Gb Converged Network Adapter 103c 220a FlexFabric 10Gb 2-port 556FLR-SFP+ Adapter 103c 803f Ethernet 10Gb 2-port 557SFP+ Adapter 103c 8144 FlexFabric 10GB 2-port 556FLR-T Adapter 17aa 1056 ThinkServer OCm14102-UX-L AnyFabric 17aa 1057 ThinkServer OCm14104-UX-L AnyFabric 17aa 1059 ThinkServer OCm14104-UT-L AnyFabric 17aa 4014 ThinkServer OCm14102-NX-L AnyFabric 0722 OneConnect iSCSI Initiator (Skyhawk) 0723 OneConnect iSCSI Initiator + Target (Skyhawk) 0724 OneConnect FCoE Initiator (Skyhawk) 0728 OneConnect NIC (Skyhawk-VF) 072a OneConnect iSCSI Initiator (Skyhawk-VF) 072b OneConnect iSCSI Initiator + Target (Skyhawk-VF) 072c OneConnect FCoE Initiator (Skyhawk-VF) 1ae5 LP6000 Fibre Channel Host Adapter e100 Proteus-X: LightPulse IOV Fibre Channel Host Adapter e131 LightPulse 8Gb/s PCIe Shared I/O Fibre Channel Adapter e180 Proteus-X: LightPulse IOV Fibre Channel Host Adapter e200 LPe15000/LPe16000 Series 8Gb/16Gb Fibre Channel Adapter 1014 03f1 PCIe2 2-Port 16Gb Fibre Channel Adapter for POWER (FC EL5B; CCIN 577F) 1014 04e3 PCIe3 4-Port 10GbE SR Adapter for POWER (FC EN15/EN16; CCIN 2CE3) 1014 04e4 PCIe3 4-Port 10GbE SFP+ Adapter for POWER (FC EN18; CCIN 2CE4) 10df e280 LPe16002B-M6 2-Port 16Gb Fibre Channel Adapter 10df e281 LPe16000B-M6 1-Port 16Gb Fibre Channel Adapter 10df e282 Flex System FC5054 4-port 16Gb FC Adapter e208 LightPulse 16Gb Fibre Channel Host Adapter (Lancer-VF) e220 OneConnect NIC (Lancer) 17aa 1054 ThinkServer LPm16002B-M6-L AnyFabric 17aa 1055 ThinkServer LPm16004B-M8-L AnyFabric e240 OneConnect iSCSI Initiator (Lancer) e260 OneConnect FCoE Initiator (Lancer) e268 OneConnect 10Gb FCoE Converged Network Adapter (Lancer-VF) e300 LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter 1014 0614 PCIe3 4-Port 16Gb Fibre Channel Adapter for POWER (FC EN1C/EN1D; CCIN 578E) 1014 0615 PCIe3 2-Port 32Gb Fibre Channel Adapter for POWER (FC EN1A/EN1B; CCIN 578F) 1014 06a0 PCIe3 2-Port 16Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC) 10df e300 LPe32002-M2 2-Port 32Gb Fibre Channel Adapter 10df e301 LPe32000-M2 1-Port 32Gb Fibre Channel Adapter 10df e310 LPe31002-M6 2-Port 16Gb Fibre Channel Adapter 10df e311 LPe31000-M6 1-Port 16Gb Fibre Channel Adapter 10df e312 LPe31004-M6 4-Port 16Gb Fibre Channel Adapter 10df e320 LPe32002-M2-D 2-Port 32Gb Fibre Channel Adapter 10df e321 LPe32000-M2-D 1-Port 32Gb Fibre Channel Adapter 10df e322 LPe31002-M6-D 2-Port 16Gb Fibre Channel Adapter 10df e323 LPe31000-M6-D 1-Port 16Gb Fibre Channel Adapter 10df e324 LPm32002-D 2-Port 32Gb Fibre Channel Mezz Card 10df e325 LPm31002-D 2-Port 16Gb Fibre Channel Mezz Card 10df e330 LPe32002-M2-L 2-Port 32Gb PCIe Fibre Channel Adapter 10df e331 LPe32000-M2-L 1-Port 32Gb PCIe Fibre Channel Adapter 10df e332 LPe31002-M6-L 2-Port 16Gb PCIe Fibre Channel Adapter 10df e333 LPe31000-M6-L 1-Port 16Gb PCIe Fibre Channel Adapter 1590 0201 StoreFabric SN1600E 1-Port 32Gb Fibre Channel Adapter 1590 0202 StoreFabric SN1600E 2-Port 32Gb Fibre Channel Adapter 1590 0213 StoreFabric SN1200E 1-Port 16Gb Fibre Channel Adapter 1590 0214 StoreFabric SN1200E 2-Port 16Gb Fibre Channel Adapter 1590 022e Synergy 5330C 2-Port 32Gb Fibre Channel Mezz Card 193d 1060 NIC-FC730i-Mb-2P f011 Saturn: LightPulse Fibre Channel Host Adapter f015 Saturn: LightPulse Fibre Channel Host Adapter f085 LP850 Fibre Channel Host Adapter f095 LP952 Fibre Channel Host Adapter f098 LP982 Fibre Channel Host Adapter f0a1 Thor LightPulse Fibre Channel Host Adapter f0a5 Thor LightPulse Fibre Channel Host Adapter f0b5 Viper LightPulse Fibre Channel Host Adapter f0d1 Helios LightPulse Fibre Channel Host Adapter f0d5 Helios LightPulse Fibre Channel Host Adapter f0e1 Zephyr LightPulse Fibre Channel Host Adapter f0e5 Zephyr LightPulse Fibre Channel Host Adapter f0f5 Neptune LightPulse Fibre Channel Host Adapter f100 LPe12000 Series 8Gb Fibre Channel Adapter 1014 038a 8Gb PCI Express Dual Port FC Adapter for POWER 103c 3282 8Gb Dual-port PCI-e FC HBA 10df f140 LPe12000-M8-L 1-Port 8Gb PCIe Fibre Channel Adapter 10df f141 LPe12002-M8-L 2-Port 8Gb PCIe Fibre Channel Adapter f111 Saturn-X LightPulse Fibre Channel Host Adapter f112 Saturn-X LightPulse Fibre Channel Host Adapter f180 LPSe12002 EmulexSecure Fibre Channel Adapter f400 LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter 10df f401 LPe35000-M2 1-Port 32Gb Fibre Channel Adapter 10df f402 LPe35002-M2 2-Port 32Gb Fibre Channel Adapter 10df f403 LPe36000-M64 1-Port 64Gb Fibre Channel Adapter 10df f404 LPe36002-M64 2-Port 64Gb Fibre Channel Adapter 10df f405 LPe35004-M2 4-Port 32Gb Fibre Channel Adapter 10df f406 LPe35004-X6 4-Port Fibre Channel Adapter 10df f410 LPe35002-M2-D 2-Port 32Gb Fibre Channel Adapter 10df f411 LPe35000-M2-D 1-Port 32Gb Fibre Channel Adapter 10df f418 LPe35000-M2-L 1-Port 32Gb PCIe Fibre Channel Adapter 10df f419 LPe35002-M2-L 2-Port 32Gb PCIe Fibre Channel Adapter 10df f421 LPe36002-M2-L 2-Port 64Gb PCIe Fibre Channel Adapter 10df f422 LPe36002-M64-D 2-Port 64Gb Fibre Channel Adapter 1590 02d5 StoreFabric SN1610E 1-Port 32Gb Fibre Channel Adapter 1590 02d6 StoreFabric SN1610E 2-Port 32Gb Fibre Channel Adapter f500 LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter 1014 06c1 PCIe4 4-Port 32Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC) 1014 06c2 PCIe4 2-Port 64Gb Fibre Channel Adapter for POWER (FC EN1N/EN1P; CCIN 2CFD) 1590 0454 Synergy 5331C 32Gb Fibre Channel Host Bus Adapter f600 LPe37100S/LPe38100S Series 32Gb/64Gb Fibre Channel Adapter f700 LP7000 Fibre Channel Host Adapter f701 LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) f800 LP8000 Fibre Channel Host Adapter f801 LP8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) f900 LP9000 Fibre Channel Host Adapter f901 LP9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) f980 LP9802 Fibre Channel Host Adapter f981 LP9802 Fibre Channel Host Adapter Alternate ID f982 LP9802 Fibre Channel Host Adapter Alternate ID fa00 Thor-X LightPulse Fibre Channel Host Adapter fb00 Viper LightPulse Fibre Channel Host Adapter fc00 Thor-X LightPulse Fibre Channel Host Adapter 10df fc00 LP10000 LightPulse Fibre Channel Host Adapter fc10 Helios-X LightPulse Fibre Channel Host Adapter fc20 Zephyr-X LightPulse Fibre Channel Host Adapter fc40 Saturn-X: LightPulse Fibre Channel Host Adapter fc50 Proteus-X: LightPulse IOV Fibre Channel Host Adapter fd00 Helios-X LightPulse Fibre Channel Host Adapter # Also IBM FC 5759 / FC 1910 for POWER 10df fd02 LightPulse LP11002 Dual-port 4Gigabit PCI Fibre Channel Adapter fd11 Helios-X LightPulse Fibre Channel Host Adapter fd12 Helios-X LightPulse Fibre Channel Host Adapter fe00 Zephyr-X LightPulse Fibre Channel Host Adapter fe05 Zephyr-X: LightPulse FCoE Adapter fe11 Zephyr-X LightPulse Fibre Channel Host Adapter fe12 Zephyr-X LightPulse FCoE Adapter ff00 Neptune LightPulse Fibre Channel Host Adapter 10e0 Integrated Micro Solutions Inc. 5026 IMS5026/27/28 5027 IMS5027 5028 IMS5028 8849 IMS8849 8853 IMS8853 9128 IMS9128 [Twin turbo 128] 10e1 Tekram Technology Co.,Ltd. 0391 TRM-S1040 10e1 0391 DC-315U SCSI-3 Host Adapter 690c DC-690c dc29 DC-290 10e2 Aptix Corporation 10e3 Tundra Semiconductor Corp. 0000 CA91C042 [Universe] 0108 Tsi108 Host Bridge for Single PowerPC 0148 Tsi148 [Tempe] 1775 1100 VR11 Single Board Computer 0860 CA91C860 [QSpan] 0862 CA91C862A [QSpan-II] 8111 Tsi381 PCIe to PCI Bridge 8113 89HPEB383 PCIe-to-PCI Bridge 8260 CA91L8200B [Dual PCI PowerSpan II] 8261 CA91L8260B [Single PCI PowerSpan II] a108 Tsi109 Host Bridge for Dual PowerPC 10e4 Tandem Computers 8029 Realtek 8029 Network Card 10e5 Micro Industries Corporation 10e6 Gainbery Computer Products Inc. 10e7 Vadem 10e8 Applied Micro Circuits Corp. 1072 INES GPIB-PCI (AMCC5920 based) 2011 Q-Motion Video Capture/Edit board 4750 S5930 [Matchmaker] 5920 S5920 801d Roper Scientific PCI TAXI interface 8043 LANai4.x [Myrinet LANai interface chip] 8062 S5933_PARASTATION 807d S5933 [Matchmaker] 8081 GPIB interface card [IOtech Inc. PCI488] 8088 Kongsberg Spacetec Format Synchronizer 8089 Kongsberg Spacetec Serial Output Board 809c S5933_HEPC3 80b9 Harmonix Hi-Card P8 (4x active ISDN BRI) 80d7 PCI-9112 80d8 PCI-7200 80d9 PCI-9118 80da PCI-9812 80fc APCI1500 Signal processing controller (16 dig. inputs + 16 dig. outputs) 811a PCI-IEEE1355-DS-DE Interface 814c Fastcom ESCC-PCI (Commtech, Inc.) 8170 S5933 [Matchmaker] (Chipset Development Tool) 81e6 Multimedia video controller 828d APCI3001 Signal processing controller (up to 16 analog inputs) 8291 Fastcom 232/8-PCI (Commtech, Inc.) 82c4 Fastcom 422/4-PCI (Commtech, Inc.) 82c5 Fastcom 422/2-PCI (Commtech, Inc.) 82c6 Fastcom IG422/1-PCI (Commtech, Inc.) 82c7 Fastcom IG232/2-PCI (Commtech, Inc.) 82ca Fastcom 232/4-PCI (Commtech, Inc.) 82db AJA HDNTV HD SDI Framestore 82e2 Fastcom DIO24H-PCI (Commtech, Inc.) 8406 PCIcanx/PCIcan CAN interface [Kvaser AB] 8407 PCIcan II CAN interface (A1021, PCB-07, PCB-08) [Kvaser AB] 8851 S5933 on Innes Corp FM Radio Capture card e004 X-Gene PCIe bridge 10e9 Alps Electric Co., Ltd. 10ea Integraphics 1680 IGA-1680 1682 IGA-1682 1683 IGA-1683 2000 CyberPro 2000 2010 CyberPro 2000A 5000 CyberPro 5000 5050 CyberPro 5050 5202 CyberPro 5202 # CyberPro5202 Audio Function 5252 CyberPro5252 10eb Artists Graphics 0101 3GA 8111 Twist3 Frame Grabber 10ec Realtek Semiconductor Co., Ltd. 0139 RTL-8139/8139C/8139C+ Ethernet Controller 2600 Killer E2600 GbE Controller 3000 Killer E3000 2.5GbE Controller 4321 RTL8852BE 802.11ax PCIe Wireless Network Adapter 5208 RTS5208 PCI Express Card Reader 5209 RTS5209 PCI Express Card Reader 5227 RTS5227 PCI Express Card Reader 17aa 220e ThinkPad T440p 17aa 2214 ThinkPad X240 5228 RTS5288 PCIe SD UHS-I Card Reader controller 5229 RTS5229 PCI Express Card Reader 1025 0813 Aspire R7-571 103c 194e ProBook 455 G1 Notebook 103c 1985 Pavilion 17-e163sg Notebook PC 17aa 3832 Yoga 520 522a RTS522A PCI Express Card Reader 103c 8079 EliteBook 840 G3 103c 825b OMEN-17-w001nv 17aa 5124 ThinkPad E595 5249 RTS5249 PCI Express Card Reader 103c 1909 ZBook 15 524a RTS524A PCI Express Card Reader 5250 RTS5250 PCI Express Card Reader 525a RTS525A PCI Express Card Reader 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e4 XPS 15 9550 1028 06e6 Latitude 11 5175 2-in-1 1028 09be Latitude 7410 1028 0b10 Precision 3571 1028 0c06 Precision 3580 17aa 224f ThinkPad X1 Carbon 5th Gen 5260 RTS5260 PCI Express Card Reader 5261 RTS5261 PCIe SD Express Card Reader controller 5264 RTS5264 PCIe SD UHS-II & SD Express Card Reader controller 5286 RTS5286 PCI Express Card Reader 5287 RTL8411B PCI Express Card Reader 1025 1094 Acer Aspire E5-575G 5288 RTS5288 PCI Express Card Reader 5289 RTL8411 PCI Express Card Reader 1043 1457 K55A Laptop 5760 RTS5763DL x2 NVMe SSD Controller 5762 RTS5762 NVMe SSD Controller 5763 RTS5763DL NVMe SSD Controller (DRAM-less) 5765 RTS5765DL NVMe SSD Controller (DRAM-less) 5770 RTS5770DL NVMe SSD Controller (DRAM-less) 5771 RTS5771 NVMe SSD Controller (DRAM-less) 5772 RTS5772DL NVMe SSD Controller (DRAM-less) 8029 RTL-8029(AS) 10b8 2011 EZ-Card (SMC1208) 10ec 8029 RTL-8029(AS) 1113 1208 EN1208 1186 0300 DE-528 1259 2400 AT-2400 1af4 1100 QEMU Virtual Machine 8125 RTL8125 2.5GbE Controller 4c52 2022 LRES2022PT Single-port 2.5Gb Ethernet Network Adapter 8126 RTL8126 5GbE Controller 8129 RTL-8129 10ec 8129 RT8129 Fast Ethernet Adapter 11ec 8129 RTL8111/8168 PCIe Gigabit Ethernet (misconfigured) 8136 RTL810xE PCI Express Fast Ethernet controller 103c 1985 RTL8106E on Pavilion 17-e163sg Notebook PC 103c 2a8c Compaq 500B Microtower 103c 2ab1 Pavilion p6774 103c 30cc Pavilion dv6700 1179 ff64 RTL8102E PCI-E Fast Ethernet NIC 17c0 1053 RTL8101e Medion WIM 2210 Notebook PC [MD96850] 8137 RTL8104E PCIe Fast Ethernet Controller 8138 RT8139 (B/C) Cardbus Fast Ethernet Adapter 10ec 8138 RT8139 (B/C) Fast Ethernet Adapter 8139 RTL-8100/8101L/8139 PCI Fast Ethernet Adapter 0357 000a TTP-Monitoring Card V2.0 1025 005a TravelMate 290 1025 8920 ALN-325 1025 8921 ALN-325 103c 006a NX9500 103c 2a20 Pavilion t3030.de Desktop PC 103c 30d9 Presario C700 1043 1045 L8400B, L3C/S, X58LE notebook 1043 8109 P5P800-MX Mainboard 1071 8160 MIM2000 10bd 0320 EP-320X-R 10ec 8139 RTL-8100/8101L/8139 PCI Fast Ethernet Adapter 10f7 8338 Panasonic CF-Y5 laptop 1113 ec01 LevelOne FNC-0107TX/FNC-0109TX 1186 1104 DFE-520TX Fast Ethernet PCI Adapter (rev. D1) 1186 1300 DFE-538TX 1186 1320 SN5200 1186 8139 DRN-32TX 11f6 8139 FN22-3(A) LinxPRO Ethernet Adapter 1259 2500 AT-2500TX 1259 2503 AT-2500TX/ACPI 1385 f31d FA311 v2 1395 2100 AMB2100 1429 d010 ND010/ND012 1432 9130 EN-9130TX 1436 8139 RT8139 144d c00c P30/P35 notebook 1458 e000 GA-7VM400M/7VT600 Motherboard 1462 0131 MS-1013 Notebook 1462 217c Aspire L250 1462 788c 865PE Neo2-V Mainboard 146c 1439 FE-1439TX 1489 6001 GF100TXRII 1489 6002 GF100TXRA 149c 139a LFE-8139ATX 149c 8139 LFE-8139TX 14cb 0200 LNR-100 Family 10/100 Base-TX Ethernet 1565 2300 P4TSV Onboard LAN (RTL8100B) 1631 7003 Onboard RTL8111 on GA-8SIML Rev1.0 Mainboard 1695 9001 Onboard RTL8101L 10/100 MBit 16ec 00ff USR997900A 1799 5000 F5D5000 PCI Card/Desktop Network PCI Card 1799 5010 F5D5010 CardBus Notebook Network Card 187e 3303 FN312 1904 8139 RTL8139D Fast Ethernet Adapter 1af4 1100 QEMU Virtual Machine 2646 0001 KNE120TX 8e2e 7000 KF-230TX 8e2e 7100 KF-230TX/2 a0a0 0007 ALN-325C 8161 RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller 10ec 8168 TP-Link TG-3468 v4.0 Gigabit PCI Express Network Adapter 8167 RTL-8110SC/8169SC Gigabit Ethernet 105b 0e10 RTL-8110SC-GR on a N15235/A74MX mainboard 1458 e000 GA-MA69G-S3H Motherboard 1462 235c P965 Neo MS-7235 mainboard 1462 236c 945P Neo3-F motherboard 8168 RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller 1019 8168 RTL8111/8168 PCI Express Gigabit Ethernet controller 1025 1094 Acer Aspire E5-575G 1028 0283 Vostro 220 1028 04b2 Vostro 3350 1028 04da Vostro 3750 1028 05d7 Alienware X51 R2 1028 06f2 Latitude 3470 1028 06f3 Latitude 3570 1028 0869 Vostro 3470 103c 1611 Pavilion DM1Z-3000 103c 1950 ProBook 450/455 103c 2a6f Asus IPIBL-LB Motherboard 103c 825b OMEN-17-w001nv 103c 8615 Pavilion Laptop 15-cw1xxx 103c 86d4 Pavilion Laptop 15-ec0xxx # Rev 29, uses r8169 Driver on Linux 103c 8882 HP ProDesk 405 G8 Desktop Mini PC 103c 8b17 ProBook 445 G9/455 G9 [RTL8111HSH-CG GbE Controller] 1043 11f5 Notebook motherboard (one of many models) 1043 16d5 U6V/U31J laptop 1043 81aa P5B 1043 82c6 M3A78 Series Motherboard 1043 83a3 M4A785/P7P55/AT3IONT-I Motherboard 1043 8432 P8P67 and other motherboards 1043 8505 P8 series motherboard 1043 8554 H81M-C Motherboard 1043 859e AM1I-A Motherboard 1043 8677 Onboard RTL8111H Ethernet 105b 0d7c D270S/D250S Motherboard 10ec 8168 RTL8111/8168 PCI Express Gigabit Ethernet controller 144d c652 RTL8168 on a NP300E5C series laptop 1458 e000 Onboard Ethernet 1462 238c Onboard RTL8111b on MSI P965 Platinum Mainboard 1462 345c RTL8111B on MS-7345 Motherboard 1462 368c K9AG Neo2 1462 4180 Wind PC MS-7418 1462 7522 X58 Pro-E 1462 7c37 X570-A PRO motherboard 1734 11c0 RTL8211DN on Esprimo P510 D3171 motherboard 1775 11cc CC11/CL11 17aa 3098 ThinkCentre E73 17aa 3814 Z50-75 17aa 3823 Lenovo V130-15IGM Laptop - Type 81HL 17aa 5068 Thinkpad E480/E580 17aa 5124 ThinkPad E595 1849 8168 Motherboard (one of many) 7470 3468 TG-3468 Gigabit PCI Express Network Adapter 8086 2055 NUC Kit DN2820FYKH 8086 d615 Desktop Board D510MO/D525MW ea50 ce19 mCOM10-L1900 8169 RTL8169 PCI Gigabit Ethernet Controller 1025 0079 Aspire 5024WLMi 10bd 3202 EP-320G-TX1 32-bit PCI Gigabit Ethernet Adapter 10ec 8169 RTL8169/8110 Family PCI Gigabit Ethernet NIC 1259 c107 CG-LAPCIGT 1371 434e ProG-2000L 1385 311a GA311 1385 5200 GA511 Gigabit PC Card 1458 e000 GA-8I915ME-G Mainboard 1462 030c K8N Neo-FSR v2.0 mainboard 1462 065c Hetis 865GV-E (MS-7065) 1462 702c K8T NEO 2 motherboard 1462 7094 K8T Neo2-F V2.0 16ec 011f USR997903 1734 1091 D2030-A1 a0a0 0449 AK86-L motherboard 816a RTL8111xP UART #1 ea50 ce19 mCOM10-L1900 816b RTL8111xP UART #2 ea50 ce19 mCOM10-L1900 816c RTL8111xP IPMI interface ea50 ce19 mCOM10-L1900 816d RTL811x EHCI host controller ea50 ce19 mCOM10-L1900 816e Realtek RealManage BMC 8171 RTL8191SEvA Wireless LAN Controller 8172 RTL8191SEvB Wireless LAN Controller 8173 RTL8192SE Wireless LAN Controller 8174 RTL8192SE Wireless LAN Controller 8176 RTL8188CE 802.11b/g/n WiFi Adapter 1043 84b5 PCE-N10 1a3b 1139 AW-NE139H Half-size Mini PCIe Card 8177 RTL8191CE PCIe Wireless Network Adapter 8178 RTL8192CE PCIe Wireless Network Adapter 8179 RTL8188EE Wireless Network Adapter 103c 197d RTL8188EE mini-PCIe card 8180 RTL8180L 802.11b MAC 1385 4700 MA521 802.11b Wireless PC Card 1737 0019 WPC11v4 802.11b Wireless-B Notebook Adapter 8185 RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller 818b RTL8192EE PCIe Wireless Network Adapter 8190 RTL8190 802.11n PCI Wireless Network Adapter 8191 RTL8192CE PCIe Wireless Network Adapter 8192 RTL8192E/RTL8192SE Wireless LAN Controller 8193 RTL8192DE Wireless LAN Controller 8196 RTL8196 Integrated PCI-e Bridge 8197 SmartLAN56 56K Modem 8199 RTL8187SE Wireless LAN Controller 1462 6894 MN54G2 / MS-6894 Wireless Mini PCIe Card 8723 RTL8723AE PCIe Wireless Network Adapter 8812 RTL8812AE 802.11ac PCIe Wireless Network Adapter 8813 RTL8813AE 802.11ac PCIe Wireless Network Adapter 8821 RTL8821AE 802.11ac PCIe Wireless Network Adapter 8852 RTL8852AE 802.11ax PCIe Wireless Network Adapter 8922 RTL8922AE 802.11be PCIe Wireless Network Adapter a85a RTL8852AE WiFi 6 802.11ax PCIe Adapter b520 RTL8852BE-VT PCIe 802.11ax Wireless Network Controller b723 RTL8723BE PCIe Wireless Network Adapter 10ec 8739 Dell Wireless 1801 17aa b736 Z50-75 b821 RTL8821CE PCIe 802.11ac Wireless Network Controller b822 RTL8822BE 802.11a/b/g/n/ac WiFi adapter 103c 831b Realtek RTL8822BE 802.11ac 2x2 Wi-Fi + Bluetooth 4.2 Combo Adapter (MU-MIMO supported) 17aa 5124 ThinkPad E595 17aa b023 ThinkPad E595 b851 RTL8851BE PCIe 802.11ax Wireless Network Controller b852 RTL8852BE PCIe 802.11ax Wireless Network Controller b85b RTL8852BE PCIe 802.11ax Wireless Network Controller [1T1R] c821 RTL8821CE 802.11ac PCIe Wireless Network Adapter c822 RTL8822CE 802.11ac PCIe Wireless Network Adapter c82f RTL8822CE 802.11ac PCIe Wireless Network Adapter c852 RTL8852CE PCIe 802.11ax Wireless Network Controller d723 RTL8723DE 802.11b/g/n PCIe Adapter 10ed Ascii Corporation 7310 V7310 10ee Xilinx Corporation 0001 EUROCOM for PCI (ECOMP) 0002 Octal E1/T1 for PCI ETP Card 0007 Default PCIe endpoint ID 0205 Wildcard TE205P 0210 Wildcard TE210P 0300 Spartan 3 Designs (Xilinx IP) 0314 Wildcard TE405P/TE410P (1st Gen) 0405 Wildcard TE405P (2nd Gen) 0410 Wildcard TE410P (2nd Gen) 0600 Xilinx 6 Designs (Xilinx IP) 3fc0 RME Digi96 3fc1 RME Digi96/8 3fc2 RME Digi96/8 Pro 3fc3 RME Digi96/8 Pad 3fc4 RME Digi9652 (Hammerfall) 3fc5 RME Hammerfall DSP 3fc6 RME Hammerfall DSP MADI 5000 Alveo U200 XDMA Platform 10ee 000e Alveo card 5004 Alveo U250 XDMA Platform 10ee 000e Alveo card 5005 Alveo U250 500c Alveo U280 XDMA Platform 10ee 000e Alveo card 5020 Alveo U50 XMDA Platform 10ee 000e Alveo card 505c Alveo U55C 10ee 000e Alveo card 5074 Alveo X3522, Quad Port, 10/25GbE Adaptable Accelerator Card 5084 Alveo X3522, Quad Port, 10/25GbE Low Latency Network Adapter 6987 SmartSSD 6988 SmartSSD 7011 7-Series FPGA Hard PCIe block (AXI/debug) 7038 FPGA Card XC7VX690T 17aa 402f FPGA XC7VX690T-3FFG1157E 8019 Memory controller 1eec 0201 VSEC10232X Dual-port 100Gb/s Etherent PCIe 8380 Ellips ProfiXpress Profibus Master 8381 Ellips Santos Frame Grabber 9134 SmartSSD 9234 SmartSSD 9434 SmartSSD d000 Alveo U200 Golden Image 10ee 000e Alveo card d004 Alveo U250 Golden Image 10ee 000e Alveo card d00c Alveo U280 Golden Image 10ee 000e Alveo card d020 Alveo U50 Golden Image 10ee 000e Alveo card d154 Copley Controls CAN card (PCI-CAN-02) # SED is assigned Xilinx PCI device IDs ebf0 through ebff ebf0 SED Systems Modulator/Demodulator ebf1 SED Systems Audio Interface Card ebf2 SED Systems Common PCI Interface ebf3 SED Systems PCIe-AXI Bridge 10ef Racore Computer Products, Inc. 8154 M815x Token Ring Adapter 10f0 Peritek Corporation 10f1 Tyan Computer 2865 Tyan Thunder K8E S2865 5300 Tyan S5380 Mainboard 10f2 Achme Computer, Inc. 10f3 Alaris, Inc. 10f4 S-MOS Systems, Inc. 10f5 NKK Corporation a001 NDR4000 [NR4600 Bridge] 10f6 Creative Electronic Systems SA 10f7 Matsushita Electric Industrial Co., Ltd. 10f8 Altos India Ltd 10f9 PC Direct 10fa Truevision 000c TARGA 1000 10fb Thesys Gesellschaft fuer Mikroelektronik mbH 186f TH 6255 10fc I-O Data Device, Inc. # What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives 0003 Cardbus IDE Controller 0005 Cardbus SCSI CBSC II 10fd Soyo Computer, Inc 10fe Fast Multimedia AG 10ff NCube 1100 Jazz Multimedia 1101 Initio Corporation 0002 INI-920 Ultra SCSI Adapter 1060 INI-A100U2W 1622 INI-1623 PCI SATA-II Controller 9100 INI-9100/9100W 9400 INI-940 Fast Wide SCSI Adapter 9401 INI-935 Fast Wide SCSI Adapter 9500 INI-950 SCSI Adapter 9502 INI-950P Ultra Wide SCSI Adapter 1102 Creative Labs 0002 EMU10k1 [Sound Blaster Live! Series] 100a 1102 SB Live! 5.1 Digital OEM SB0220 EMU10K1-JFF 1102 0020 CT4670/4850 SBLive! Value 1102 0021 CT4620 SBLive! 1102 002f M002/M003 Integrated SBLive! 1102 100a SB0220/0229 SBLive! 5.1 Digital OEM 1102 4001 E-mu APS 1102 8022 CT4780 SBLive! Value 1102 8023 CT4790 SoundBlaster PCI512 1102 8024 CT4760 SBLive! 1102 8025 CT1140/SB0040 Integrated SBLive! 1102 8026 CT4830 SBLive! Value 1102 8027 CT4832 SBLive! Value 1102 8028 CT4870 SBLive! Value 1102 8029 CT4872 SBLive! Value 1102 802a CT4890 SoundBlaster PCI256 1102 802b CT4891 SoundBlaster PCI256 1102 8031 CT4831 SBLive! Value 1102 8032 CT4871 SBLive! Value 1102 8033 CT4893 SoundBlaster PCI256 1102 8035 CT0060 SBLive! 1102 8040 CT4760 SBLive! 1102 8050 CT4750 SoundBlaster PCI512 1102 8051 CT4850 SBLive! Value 1102 8061 SB060 SBLive! Player 5.1 1102 8062 SB0100 SBLive! 5.1 1102 8063 DXW Integrated SBLive! 5.1 1102 8064 SB0100/SB0102 SBLive! 5.1 1102 8065 SB0220/0222 SBLive! 5.1 Digital 1102 8066 SB0228 SBLive! 5.1 Digital 1102 8067 SB0220 SBLive! 5.1 1102 8068 CT0061 SBLive! 1102 8069 SB0101 SBLive! 5.1 Value 1102 806a SB0103 SBLive! 5.1 1102 806b SB0105 SBLive! 5.1 1102 806c SB0221 SBLive! 5.1 1102 8071 SB0150 SoundBlaster PCI512 # EMU8008 PCI version of emu8000 chip 0003 SB AWE64(D) 1102 0010 CT4600 AWE64D 1102 0030 CT4650 AWE64D 1102 0031 CT4655 AWE64D 0004 EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] 1102 0040 SB0090 Audigy Player # Probably an early engineering sample 1102 0041 CT4820 SBLive!2 1102 0042 CT0070 Audigy 1102 0043 CT0072 Audigy 1102 0051 SB0090 Audigy Player/Platinum (EX) 1102 0052 SB0162 Audigy ES 1102 0053 CT0090/SB0092 Audigy Player/OEM 1102 0054 SB0161 Audigy ES 1102 0055 SB0192 Audigy 1102 0056 SB0191 Audigy 1102 0057 SB0091 Audigy 1102 0058 SB0095 Audigy Player/OEM 1102 0059 SB0230 Audigy 1102 005a SB0231 Audigy 1102 005b SB0232 Audigy 1102 005c SB0238 Audigy 1102 1002 SB0240 Audigy 2 Platinum 6.1 1102 1003 SB0350 Audigy 2 / SB0243 Audigy 2 OEM 1102 1004 SB0242 Audigy 2 1102 1005 SB0280 Audigy 2 Platinum Ex 1102 1006 SB0245 Audigy 2 OEM 1102 1007 SB0240/SB0244 Audigy 2 Platinum 1102 1008 SB0320 Audigy 2 1102 1009 SB0249 Audigy 2 OEM 1102 100a SB0246 Audigy 2 1102 2001 SB0360 Audigy 2 ZS Platinum Pro 1102 2002 SB0350 Audigy 2 ZS 1102 2003 SB0352 Audigy 2 ZS 1102 2004 SB0355 Audigy 2 ZS 1102 2005 SB0359 Audigy 2 ZS 1102 2006 SB035x Audigy 2 OEM 1102 2007 SB0380 Audigy 4 Pro 1102 4001 E-MU 1010 [MAEM8810] 1102 4002 E-MU 0404 1102 4003 E-MU 1010 0005 EMU20k1 [Sound Blaster X-Fi Series] 1102 0021 X-Fi Platinum 1102 002c X-Fi XtremeGamer FATAL1TY PRO 1102 1003 X-Fi XtremeMusic # This chip is also known as CA0103 on Sound Blaster 5.1 SB0680 card. 0006 EMU10k1X / CA0103 [SB Live! OEM / SB 5.1 / Ectiva 5.1] 1102 1001 SB0680 Sound Blaster 5.1 1102 1003 SB0203 SB Live! 5.1 (Dell) 1102 1004 TP0033 Ectiva Audio 5.1 0007 CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] 1102 0007 SBLive! 24bit 1102 1001 SB0310 Audigy LS 1102 1002 SB0312 Audigy LS 1102 1006 SB0410 SBLive! 24-bit 1102 100a SB0570 [SB Audigy SE] 1102 1012 SB0790 X-Fi XA 1102 1013 Soundblaster X-Fi Xtreme Audio 1462 1009 K8N Diamond 0008 CA0108/CA10300 [Sound Blaster Audigy Series] 1102 0008 EMU0404 Digital Audio System 1102 1001 SB0400 Audigy 2 Value 1102 1021 SB0610 Audigy 4 Value 1102 1022 SBxxx Audigy 2/4 Value 1102 1023 SB0612 Audigy 2 LS 1102 1024 SB1550 Audigy 5/Rx 1102 1101 SBxxxx Audigy 2 SA 1102 2001 SB0530 Audigy 2 ZS Notebook 1102 2021 SBxxxx Audigy 4 Notebook 1102 4002 E-MU 0404 1102 4003 E-MU 1010 1102 4004 EMU1010 Digital Audio System [MAEM8960] 1102 4005 E-MU 0404 [MAEM8984] 1102 4007 E-MU 1010 [MAEM8982] 1102 4201 E-MU 0202 [MAEM8950] 0009 CA0110 [Sound Blaster X-Fi Xtreme Audio] 1102 0010 MB0820 Integrated 1102 0018 SB1040 PCI Express 000b EMU20k2 [Sound Blaster X-Fi Titanium Series] 1102 0041 SB0880 [SoundBlaster X-Fi Titanium PCI-e] 1102 0062 SB1270 [SoundBlaster X-Fi Titanium HD] 0010 CA0132 Sound Core3D [Sound Blaster AE-7] 1102 0081 Sound Blaster AE-7 0012 CA0132 Sound Core3D [Sound Blaster Recon3D / Z-Series / Sound BlasterX AE-5 Plus] 1102 0010 SB1570 SB Audigy Fx 1102 0191 CA0132 Sound Core3D - CA0113 [ Sound BlasterX AE-5 Plus] 4001 SB Audigy FireWire Port 1102 0010 SB Audigy FireWire Port 7002 SB Live! Game Port 1102 0020 Gameport Joystick 7003 SB Audigy Game Port 1102 0040 SB Audigy Game Port 1102 0060 SB Audigy2 MIDI/Game Port 7004 [SB Live! Value] Input device controller 7005 SB Audigy LS Game Port 1102 1001 SB0310 Audigy LS MIDI/Game port 1102 1002 SB0312 Audigy LS MIDI/Game port 7006 [SB X-Fi Xtreme Audio] CA0110-IBG PCIe to PCI Bridge 8938 Ectiva EV1938 1033 80e5 SlimTower-Jim (NEC) 1071 7150 Mitac 7150 110a 5938 Siemens Scenic Mobile 510PIII 13bd 100c Ceres-C (Sharp, Intel BX) 13bd 100d Sharp, Intel Banister 13bd 100e TwinHead P09S/P09S3 (Sharp) 13bd f6f1 Marlin (Sharp) 14ff 0e70 P88TE (TWINHEAD INTERNATIONAL Corp) 14ff c401 Notebook 9100/9200/2000 (TWINHEAD INTERNATIONAL Corp) 156d b400 G400 - Geo (AlphaTop (Taiwan)) 156d b550 G560 (AlphaTop (Taiwan)) 156d b560 G560 (AlphaTop (Taiwan)) 156d b700 G700/U700 (AlphaTop (Taiwan)) 156d b795 G795 (AlphaTop (Taiwan)) 156d b797 G797 (AlphaTop (Taiwan)) # nee Triones Technologies, Inc. 1103 HighPoint Technologies, Inc. 0003 HPT343/345/346/363 0004 HPT366/368/370/370A/372/372N 1103 0001 HPT370A 1103 0004 HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4) 1103 0005 HPT370 UDMA100 1103 0006 HPT302/302N 0005 HPT372A/372N 0006 HPT302/302N 0007 HPT371/371N 0008 HPT374 0009 HPT372N 0620 RocketRAID 620 2 Port SATA-III Controller 0622 RocketRAID 622 2 Port SATA-III Controller 0640 RocketRAID 640 4 Port SATA-III Controller 0641 RocketRAID 640L 4 Port SATA-III Controller 0642 RocketRAID 642L SATA-III Controller (2 eSATA ports + 2 internal SATA ports) 0644 RocketRAID 644 4 Port SATA-III Controller (eSATA) 0645 RocketRAID 644L 4 Port SATA-III Controller (eSATA) 0646 RocketRAID 644LS SATA-III Controller (4 eSATA devices connected by 1 SAS cable) 0750 Rocket 750 PCIe Gen2 SATA III Controller 0840 RocketRAID 840 PCIe Gen3 SATA III Controller 1720 RocketRAID 1720 (2x SATA II RAID Controller) 1740 RocketRAID 1740 1742 RocketRAID 1742 2210 RocketRAID 2210 SATA-II Controller 11ab 11ab 88SX6042 2300 RocketRAID 230x 4 Port SATA-II Controller 2310 RocketRAID 2310 4 Port SATA-II Controller 2320 RocketRAID 2320 SATA-II Controller 2322 RocketRAID 2322 SATA-II Controller 2340 RocketRAID 2340 16 Port SATA-II Controller 2640 RocketRAID 2640 SAS/SATA Controller 2720 RocketRAID 2720 PCIe Gen2 6Gb/s SAS/SATA Controller 2722 RocketRAID 2722 # SFF-8087 Mini-SAS 16 port internal 2740 RocketRAID 2740 # SFF-8088 Mini-SAS 16 port external 2744 RocketRaid 2744 # SFF-8088 8 port external / SFF-8087 24 port internal 2782 RocketRAID 2782 2840 RocketRAID 2840 PCIe Gen3 6Gb/s SAS/SATA Controller 3120 RocketRAID 3120 3220 RocketRAID 3220 3320 RocketRAID 3320 3520 RocketRAID 3520 PCIe Gen1 8-Port SATA II Controller 3530 RocketRAID 3530 PCIe Gen1 12-Port SATA II Controller 3740 RocketRAID 3740 PCIe Gen3 12Gb/s SAS/SATA Controller 4310 RocketRaid 4310 4320 RocketRAID 4320 SAS Controller 7103 SSD7103 PCIe Gen3 x16 4-Port M.2 NVMe RAID Controller 7105 SSD7105 PCIe Gen3 x16 4-Port M.2 NVMe RAID Controller 7110 SSD7110 PCIe Gen3 x16 NVMe RAID Controller 7505 SSD7505 PCIe Gen4 x16 4-Port M.2 NVMe RAID Controller 7540 SSD7540 PCIe Gen4 x16 8-Port M.2 NVMe RAID Controller 7580 SSD7580 PCIe Gen4 x16 8-Port M.2 NVMe RAID Controller 1104 RasterOps Corp. 1105 Sigma Designs, Inc. 1105 REALmagic Xcard MPEG 1/2/3/4 DVD Decoder 8300 REALmagic Hollywood Plus DVD Decoder 8400 EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder 8401 EM8401 REALmagic DVD/MPEG-2 A/V Decoder 8470 EM8470 REALmagic DVD/MPEG-4 A/V Decoder 8471 EM8471 REALmagic DVD/MPEG-4 A/V Decoder 8475 EM8475 REALmagic DVD/MPEG-4 A/V Decoder 1105 0001 REALmagic X-Card 8476 EM8476 REALmagic DVD/MPEG-4 A/V Decoder 127d 0000 CineView II 8485 EM8485 REALmagic DVD/MPEG-4 A/V Decoder 8486 EM8486 REALmagic DVD/MPEG-4 A/V Decoder # Found in Cisco DMP-4305G c621 EM8621L Digital Media Processor c622 EM8622L MPEG-4.10 (H.264) and SMPTE 421M (VC-1) A/V Decoder 1106 VIA Technologies, Inc. 0102 Embedded VIA Ethernet Controller 0130 VT6305 1394.A Controller 0198 P4X600 Host Bridge 0204 K8M800 Host Bridge 0208 PT890 Host Bridge 0238 K8T890 Host Bridge 0258 PT880 Host Bridge 0259 CN333/CN400/PM880 Host Bridge 0269 KT880 Host Bridge 0282 K8T800Pro Host Bridge 1043 80a3 A8V Deluxe 0290 K8M890 Host Bridge 0293 PM896 Host Bridge 0296 P4M800 Host Bridge 0305 VT8363/8365 [KT133/KM133] 1019 0987 K7VZA Mainboard 1043 8033 A7V Mainboard 1043 803e A7V-E Mainboard 1043 8042 A7V133/A7V133-C Mainboard 147b a401 KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard 0308 PT880 Ultra/PT894 Host Bridge 1043 8199 P4V800D-X Mainboard 1849 0308 Motherboard 0314 CN700/VN800/P4M800CE/Pro Host Bridge 0324 CX700/VX700 Host Bridge 0327 P4M890 Host Bridge 0336 K8M890CE Host Bridge 0340 PT900 Host Bridge 0351 K8T890CF Host Bridge 0353 VX800/820-Series Chipset Host-Bridge Controller 0364 CN896/VN896/P4M900 Host Bridge 1043 81ce P5VD2-VM mothervoard 0391 VT8371 [KX133] 0409 VX855/VX875 Host Bridge: Host Control 0410 VX900 Series Host Bridge: Host Control 0415 VT6415 PATA IDE Host Controller 1043 838f Motherboard 0419 VN1000 Host Bridge 0501 VT8501 [Apollo MVP4] 0505 VT82C505 # Shares chip with :0576. The VT82C576M has :1571 instead of :0561. 0561 VT82C576MV 0571 VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE 1019 0985 P6VXA Motherboard 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1043 8052 VT8233A Bus Master ATA100/66/33 IDE 1043 808c A7V8X / A7V333 motherboard 1043 80a1 A7V8X-X motherboard rev. 1.01 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard 1106 0571 VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE 1179 0001 Magnia Z310 1297 f641 FX41 motherboard 1458 5002 GA-7VAX Mainboard 1462 5901 KT6 Delta-FIS2R (MS-6590) 1462 7020 K8T NEO 2 motherboard 1462 7094 K8T Neo2-F V2.0 1462 7120 KT4AV motherboard 1462 7181 K8MM3-V mainboard 147b 1407 KV8-MAX3 motherboard # probably all K7VT2/4*/6 1849 0571 K7VT series Motherboards 0576 VT82C576 3V [Apollo Master] 0581 CX700/VX700/VX800/820-Series Serial ATA RAID-Controller # Upgrade bios to get correct ID: 5324 instead of 0581 1106 0581 Wrong IDE ID 0585 VT82C585VP [Apollo VP1/VPX] 0586 VT82C586/A/B PCI-to-ISA [Apollo VP] 1106 0000 MVP3 ISA Bridge 0591 VT8237A Integrated SATA RAID Controller 0595 VT82C595 [Apollo VP2] 0596 VT82C596 ISA [Mobile South] 1106 0000 VT82C596/A/B PCI to ISA Bridge 1458 0596 VT82C596/A/B PCI to ISA Bridge 0597 VT82C597 [Apollo VP3] 0598 VT82C598 [Apollo MVP3] 0601 VT8601 [Apollo ProMedia] 0605 VT8605 [ProSavage PM133] 103c 1254 D9840-60001 [Brio BA410 Motherboard] 1043 802c CUV4X mainboard 0680 VT82C680 [Apollo P6] 0686 VT82C686 [Apollo Super South] 1019 0985 P6VXA Motherboard 103c 1256 D9840-60001 [Brio BA410 Motherboard] 1043 802c CUV4X mainboard 1043 8033 A7V Mainboard 1043 803e A7V-E Mainboard 1043 8040 A7M266 Mainboard 1043 8042 A7V133/A7V133-C Mainboard 1106 0000 VT82C686/A PCI to ISA Bridge 1106 0686 VT82C686/A PCI to ISA Bridge 1179 0001 Magnia Z310 147b a702 KG7-Lite Mainboard 0691 VT82C693A/694x [Apollo PRO133x] 1019 0985 P6VXA Motherboard 1179 0001 Magnia Z310 1458 0691 VT82C691 Apollo Pro System Controller 0693 VT82C693 [Apollo Pro Plus] 0698 VT82C693A [Apollo Pro133 AGP] 0709 VX11 Standard Host Bridge 070a VX11 PCI Express Root Port 070b VX11 PCI Express Root Port 070c VX11 PCI Express Root Port 070d VX11 PCI Express Root Port 070e VX11 PCI Express Root Port 0926 VT82C926 [Amazon] 1000 VT82C570MV 1106 VT82C570MV 1122 VX800/VX820 Chrome 9 HC3 Integrated Graphics 1204 K8M800 Host Bridge 1208 PT890 Host Bridge 1238 K8T890 Host Bridge 1258 PT880 Host Bridge 1259 CN333/CN400/PM880 Host Bridge 1269 KT880 Host Bridge 1282 K8T800Pro Host Bridge 1290 K8M890 Host Bridge 1293 PM896 Host Bridge 1296 P4M800 Host Bridge 1308 PT894 Host Bridge 1314 CN700/VN800/P4M800CE/Pro Host Bridge 1324 CX700/VX700-Series Error Reporting 1327 P4M890 Host Bridge 1336 K8M890CE Host Bridge 1340 PT900 Host Bridge 1351 VT3351 Host Bridge 1353 VX800/VX820 Error Reporting 1364 CN896/VN896/P4M900 Host Bridge 1409 VX855/VX875 Error Reporting 1410 VX900 Series Error Reporting 1419 VN1000 Host Bridge 1571 VT82C576M/VT82C586 1595 VT82C595/97 [Apollo VP2/97] 1732 VT1732 [Envy24 II] PCI Multi-Channel Audio Controller 2106 VIA Rhine Family Fast Ethernet Adapter (VT6105) 2204 K8M800 Host Bridge 2208 PT890 Host Bridge 2238 K8T890 Host Bridge 2258 PT880 Host Bridge 2259 CN333/CN400/PM880 CPU Host Bridge 2269 KT880 Host Bridge 2282 K8T800Pro Host Bridge 2290 K8M890 Host Bridge 2293 PM896 Host Bridge 2296 P4M800 Host Bridge 2308 PT894 Host Bridge 2314 CN700/VN800/P4M800CE/Pro Host Bridge 2324 CX700/VX700-Series Host Interface Control 2327 P4M890 Host Bridge 2336 K8M890CE Host Bridge 2340 PT900 Host Bridge 2351 VT3351 Host Bridge 2353 VX800/VX820 Host Bus Control 2364 CN896/VN896/P4M900 Host Bridge 2409 VX855/VX875 Host Bus Control 2410 VX900 Series CPU Bus Controller 2419 VN1000 Host Bridge 287a VT8251 PCI to PCI Bridge 287b VT8251 Host Bridge 287c VT8251 PCIE Root Port 287d VT8251 PCIE Root Port 287e VT8237/8251/8261 Ultra VLINK Controller 3022 CLE266 3038 VT82xx/62xx/VX700/8x0/900 UHCI USB 1.1 Controller 0925 1234 onboard UHCI USB 1.1 Controller 1019 0985 P6VXA Motherboard 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1043 8080 A7V333 motherboard 1043 808c VT62xx USB1.1 4 port controller 1043 80a1 A7V8X-X motherboard 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard 1106 3038 USB 1.1 UHCI controller 1179 0001 Magnia Z310 1234 0925 MVP3 USB Controller 1458 5004 GA-7VAX Mainboard 1462 5901 KT6 Delta-FIS2R (MS-6590) 1462 7020 K8T NEO 2 motherboard 1462 7094 K8T Neo2-F V2.0 1462 7120 KT4AV motherboard 1462 7181 K8MM3-V mainboard 147b 1407 KV8-MAX3 motherboard 182d 201d CN-029 USB2.0 4 port PCI Card # probably all K7VT2/4*/6 1849 3038 K7VT series Motherboards 19da a179 ZBOX nano VD01 1af4 1100 QEMU Virtual Machine 3040 VT82C586B ACPI 3043 VT86C100A [Rhine] 10bd 0000 VT86C100A Fast Ethernet Adapter 1106 0100 VT86C100A Fast Ethernet Adapter 1186 1400 DFE-530TX PCI Fast Ethernet Adapter (rev. A) 3044 VT6306/7/8 [Fire II(M)] IEEE 1394 OHCI Controller 0010 0001 IEEE 1394 4port DCST 1394-3+1B 1025 005a TravelMate 290 103c 2a20 Pavilion t3030.de Desktop PC 103c 2a3b Media Center PC m7590n 1043 808a A8V/A8N/P4P800/P5SD2 series motherboard 1043 81fe Motherboard 1458 1000 GA-7VT600-1394 Motherboard 1462 207d K8NGM2 series motherboard 1462 217d Aspire L250 1462 590d KT6 Delta-FIS2R (MS-6590) 1462 702d K8T NEO 2 motherboard 1462 971d MS-6917 153b 1146 Cameo DV Firewire controller 3050 VT82C596 Power Management 3051 VT82C596 Power Management 3053 VT6105M [Rhine-III] 1186 1404 DFE-530TX PCI Fast Ethernet Adapter (rev. D) 3057 VT82C686 [Apollo Super ACPI] 1019 0985 P6VXA Motherboard 1019 0987 K7VZA Motherboard 1043 8033 A7V Mainboard 1043 803e A7V-E Mainboard 1043 8040 A7M266 Mainboard 1043 8042 A7V133/A7V133-C Mainboard 1179 0001 Magnia Z310 3058 VT82C686 AC97 Audio Controller 0e11 0097 SoundMax Digital Integrated Audio 0e11 b194 Soundmax integrated digital audio 1019 0985 P6VXA Motherboard 1019 0987 K7VZA Motherboard 103c 1251 D9840-60001 [Brio BA410 Motherboard] 1043 1106 A7V133/A7V133-C Mainboard 1106 4511 Onboard Audio on EP7KXA 1106 aa03 VT1612A AC'97 Audio Controller 11d4 5348 AD1881A audio 1458 7600 Onboard Audio 1462 3091 MS-6309 Onboard Audio 1462 3092 MS-6309 v2.x Mainboard (VIA VT1611A codec) 1462 3300 MS-6330 Onboard Audio 1462 3400 MS-6340 (VT8363) motherboard 15dd 7609 Onboard Audio 3059 VT8233/A/8235/8237 AC97 Audio Controller 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1019 1841 M811 (VT8367/VT8235/VT6103) [KT333] motherboard 1019 1877 K8M800-M2 (V2.0) onboard audio 1043 8095 A7V8X Motherboard (Realtek ALC650 codec) 1043 80a1 A7V8X-X Motherboard 1043 80b0 A7V600/K8V-X/K8V Deluxe motherboard (ADI AD1980 codec [SoundMAX]) 1043 80f3 SK8V motherboard 1043 810d P5VD1-X (AD1888 codec [SoundMax]) 1043 812a A8V Deluxe motherboard (Realtek ALC850 codec) 10ec 8168 High Definition Audio 1106 3059 L7VMM2 Motherboard 1106 4161 K7VT2 motherboard 1106 4170 PCPartner P4M800-8237R Motherboard 1106 4552 Soyo KT-600 Dragon Plus (Realtek ALC 650) 1297 c160 FX41 motherboard (Realtek ALC650 codec) 1413 147b KV8 Pro motherboard onboard audio 1458 a002 GA-7VAX Onboard Audio (Realtek ALC650) 1462 0080 K8T NEO 2 motherboard 1462 3800 KT266 onboard audio 1462 5901 KT6 Delta-FIS2R (MS-6590) 1462 7181 K8MM3-V mainboard 147b 1407 KV8-MAX3 motherboard 1695 300c Realtek ALC655 audio on EP-8KRA series mainboard 16f3 4170 J7F2 motherboard 1734 1078 Amilo L7300T notebook 1849 0850 ASRock 775Dual-880 Pro onboard audio (Realtek ALC850) 1849 9739 P4VT8 Mainboard (C-Media CMI9739A codec) # probably all K7VT2/4*/6 1849 9761 K7VT series Motherboards 4005 4710 MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P) a0a0 01b6 AK77-8XN onboard audio a0a0 0342 AK86-L motherboard 3065 VT6102/VT6103 [Rhine-II] 1043 80a1 A7V8X-X Motherboard 1043 80ed A7V600-X Motherboard 1106 0102 VT6102/6103 [Rhine II] Ethernet Controller 1186 1400 DFE-530TX PCI Fast Ethernet Adapter (rev. A) 1186 1401 DFE-530TX PCI Fast Ethernet Adapter (rev. B) 1186 1402 DFE-530TX PCI Fast Ethernet Adapter (rev. B) 13b9 1421 LD-10/100AL PCI Fast Ethernet Adapter (rev.B) 1462 7061 MS-7061 1462 7181 K8MM3-V mainboard 147b 1c09 NV7 Motherboard 1695 3005 VT6103 # probably all K7VT2/4*/6 1849 3065 K7VT series Motherboards # This hosts more than just the Intel 537 codec, it also hosts PCtel (SIL33) and SmartLink (SIL34) codecs 3068 AC'97 Modem Controller 1462 309e MS-6309 Saturn Motherboard 3074 VT8233 PCI to ISA Bridge 1043 8052 VT8233A 3091 VT8633 [Apollo Pro266] 3099 VT8366/A/7 [Apollo KT266/A/333] 1019 1841 M811 (VT8367/VT8235/VT6103) [KT333] motherboard 1043 8064 A7V266-E Mainboard 1043 807f A7V333 Mainboard 1849 3099 K7VT2 motherboard 3101 VT8653 Host Bridge 3102 VT8662 Host Bridge 3103 VT8615 Host Bridge 3104 USB 2.0 EHCI-Compliant Host-Controller 0925 1234 onboard EHCI USB 2.0 Controller 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1043 808c A7V8X motherboard 1043 80a1 A7V8X-X motherboard rev 1.01 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard 1106 3104 USB 2.0 EHCI controller 1297 f641 FX41 motherboard 1458 5004 GA-7VAX Mainboard 1462 5901 KT6 Delta-FIS2R (MS-6590) 1462 7020 K8T NEO 2 motherboard 1462 7094 K8T Neo2-F V2.0 1462 7120 KT4AV motherboard 1462 7181 K8MM3-V mainboard 147b 1407 KV8-MAX3 motherboard 182d 201d CN-029 USB 2.0 4 port PCI Card # probably all K7VT2/4*/6 1849 3104 K7VT series Motherboards 19da a179 ZBOX nano VD01 3106 VT6105/VT6106S [Rhine-III] 1106 0105 VT6106S [Rhine-III] 1186 1403 DFE-530TX PCI Fast Ethernet Adapter (rev. C) 1186 1405 DFE-520TX Fast Ethernet PCI Adapter 1186 1406 DFE-530TX+ rev F2 1186 1407 DFE-538TX 3108 K8M800/K8N800/K8N800A [S3 UniChrome Pro] 3109 VT8233C PCI to ISA Bridge 3112 VT8361 [KLE133] Host Bridge 3113 VPX/VPX2 PCI to PCI Bridge Controller 3116 VT8375 [KM266/KL266] Host Bridge 1297 f641 FX41 motherboard 3118 CN400/PM800/PM880/PN800/PN880 [S3 UniChrome Pro] 3119 VT6120/VT6121/VT6122/VT6130 Gigabit Ethernet Adapter 3122 VT8623 [Apollo CLE266] integrated CastleRock graphics 3123 VT8623 [Apollo CLE266] 3128 VT8753 [P4X266 AGP] 3133 VT3133 Host Bridge 3142 VT6651 WiFi Adapter, 802.11b 3147 VT8233A ISA Bridge 1043 808c A7V333 motherboard 3148 P4M266 Host Bridge 3149 VIA VT6420 SATA RAID Controller 1043 80ed A7V600/K8V Deluxe/K8V-X/A8V Deluxe motherboard 1458 b003 GA-7VM400AM(F) Motherboard 1462 5901 KT6 Delta-FIS2R (MS-6590) 1462 7020 K8T Neo 2 Motherboard 1462 7094 K8T Neo2-F V2.0 1462 7181 K8MM3-V mainboard 147b 1407 KV8-MAX3 motherboard 147b 1408 KV7 1849 3149 K7VT6 motherboard a0a0 04ad AK86-L motherboard 3156 P/KN266 Host Bridge 3157 CX700/VX700 [S3 UniChrome Pro] 3164 VT6410 ATA133 RAID controller 1043 80f4 P4P800 Mainboard Deluxe ATX 1462 7028 915P/G Neo2 3168 P4X333/P4X400/PT800 AGP Bridge 1849 3168 P4VT8 Mainboard 3177 VT8235 ISA Bridge 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) 1019 1841 M811 (VT8367/VT8235/VT6103) [KT333] motherboard 1043 808c A7V8X motherboard 1043 80a1 A7V8X-X motherboard 1106 0000 KT4AV motherboard 1297 f641 FX41 motherboard 1458 5001 GA-7VAX Mainboard # probably all K7VT2/4*/6 1849 3177 K7VT series Motherboards 3178 ProSavageDDR P4N333 Host Bridge 3188 VT8385 [K8T800 AGP] Host Bridge 1043 80a3 K8V Deluxe/K8V-X motherboard 147b 1407 KV8-MAX3 motherboard 3189 VT8377 [KT400/KT600 AGP] Host Bridge 1043 807f A7V8X motherboard 1106 0000 KT4AV motherboard (KT400A) 1458 5000 GA-7VAX Mainboard # probably all K7VT2/4*/6 1849 3189 K7VT series Motherboards 31b0 VX11 Standard Host Bridge 31b1 VX11 Standard Host Bridge 31b2 VX11 DRAM Controller 31b3 VX11 Power Management Controller 31b4 VX11 I/O APIC 31b5 VX11 Scratch Device 31b7 VX11 Standard Host Bridge 31b8 VX11 PCI to PCI Bridge 3204 K8M800 Host Bridge 3205 VT8378 [KM400/A] Chipset Host Bridge 1458 5000 GA-7VM400M Motherboard 3208 PT890 Host Bridge 3213 VPX/VPX2 PCI to PCI Bridge Controller 3218 K8T800M Host Bridge 3227 VT8237 ISA bridge [KT600/K8T800/K8T890/CN700 South] 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard 1106 3227 VT8237 ISA bridge 1458 5001 GA-7VT600 Motherboard 147b 1407 KV8-MAX3 motherboard 1849 3227 K7VT4 motherboard 3230 K8M890CE/K8N890CE [Chrome 9] 3238 K8T890 Host Bridge 3249 VT6421 IDE/SATA Controller 1106 3249 VT6421 IDE/SATA Controller 324a CX700/VX700 PCI to PCI Bridge 324b CX700/VX700 Host Bridge 324e CX700/VX700 Internal Module Bus 3253 VT6655 WiFi Adapter, 802.11a/b/g 3258 PT880 Host Bridge 3259 CN333/CN400/PM880 Host Bridge 3260 VIA Chrome9 HC IGP 3269 KT880 Host Bridge 3282 K8T800Pro Host Bridge 3287 VT8251 PCI to ISA Bridge 3288 VX900/VT8xxx High Definition Audio Controller 19da a179 ZBOX VD01 3290 K8M890 Host Bridge 3296 P4M800 Host Bridge 3324 CX700/VX700-Series DRAM Bus Control 3327 P4M890 Host Bridge 3336 K8M890CE Host Bridge 3337 VT8237A PCI to ISA Bridge 3340 PT900 Host Bridge 3343 P4M890 [S3 UniChrome Pro] 3344 CN700/P4M800 Pro/P4M800 CE/VN800 Graphics [S3 UniChrome Pro] 3349 VT8251 AHCI/SATA 4-Port Controller 3351 VT3351 Host Bridge 3353 VX800/820 PCI to PCI Bridge 3364 CN896/VN896/P4M900 Host Bridge 3365 VT630x IEEE 1394 Host Controller [Fire II/M] 3371 CN896/VN896/P4M900 [Chrome 9 HC] 3372 VT8237S PCI to ISA Bridge 337a VT8237A PCI to PCI Bridge 337b VT8237A Host Bridge 3401 VT6325 Firewire Controller 3402 VT8261 PCI to ISA Bridge 3403 VT6315 Series Firewire Controller 1043 8374 M5A88-V EVO 1043 8384 P8P67 Deluxe Motherboard 3409 VX855/VX875 DRAM Bus Control 3410 VX900 Series DRAM Bus Control 19da a179 ZBOX nano VD01 3419 VN1000 Host Bridge 3432 VL800/801 xHCI USB 3.0 Controller 3456 VX11 Standard Host Bridge 345b VX11 Miscellaneous Bus 3483 VL805/806 xHCI USB 3.0 Controller 365a VT3365 Card Reader Host Controller 365b VT3365 SDIO Host Controller 3a01 VX11 Graphics [Chrome 645/640] 401a VT6325 Card Reader Host Controller 401b VT6325 SDIO PCI-E Host Controller 4149 VIA VT6420 (ATA133) Controller 4204 K8M800 Host Bridge 4208 PT890 Host Bridge 4238 K8T890 Host Bridge 4258 PT880 Host Bridge 4259 CN333/CN400/PM880 Host Bridge 4269 KT880 Host Bridge 4282 K8T800Pro Host Bridge 4290 K8M890 Host Bridge 4293 PM896 Host Bridge 4296 P4M800 Host Bridge 4308 PT894 Host Bridge 4314 CN700/VN800/P4M800CE/Pro Host Bridge 4324 CX700/VX700-Series Power Management and Testing Control 4327 P4M890 Host Bridge 4336 K8M890CE Host Bridge 4340 PT900 Host Bridge 4351 VT3351 Host Bridge 4353 VX800/VX820 Power Management Control 4364 CN896/VN896/P4M900 Host Bridge 4409 VX855/VX875 Power Management Control 4410 VX900 Series Power Management and Chip Testing Control 19da a179 ZBOX nano VD01 4419 VN1000 Host Bridge 5030 VT82C596 ACPI [Apollo PRO] 5122 VX855/VX875 Chrome 9 HCM Integrated Graphics 5208 PT890 I/O APIC Interrupt Controller 5238 K8T890 I/O APIC Interrupt Controller 5287 VT8251 Serial ATA Controller 5290 K8M890 I/O APIC Interrupt Controller 5308 PT894 I/O APIC Interrupt Controller 5324 CX700M2/VX700/VX800/820-Series Serial ATA & EIDE-Controller 5327 P4M890 I/O APIC Interrupt Controller 5336 K8M890CE I/O APIC Interrupt Controller 5337 VT8237A Integrated SATA Controller 5340 PT900 I/O APIC Interrupt Controller 5351 VT3351 I/O APIC Interrupt Controller 5353 VX800/VX820 APIC and Central Traffic Control 5364 CN896/VN896/P4M900 I/O APIC Interrupt Controller 5372 VT8237S SATA Controller 5409 VX855/VX875 APIC and Central Traffic Control 5410 VX900 Series APIC and Central Traffic Control 5419 VN1000 I/O APIC Interrupt Controller 6100 VT85C100A [Rhine II] 6122 VN1000 Graphics [Chrome 520 IGP] 6287 VT8251 AHCI SATA Controller 6290 K8M890CE Host Bridge 6327 P4M890 Security Device 6353 VX800/VX820 Scratch Registers 6364 CN896/VN896/P4M900 Security Device 6409 VX855/VX875 Scratch Registers 6410 VX900 Series Scratch Registers 19da a179 ZBOX nano VD01 6419 VN1000 Host Bridge 7122 VX900 Graphics [Chrome9 HD] 7204 K8M800 Host Bridge 7205 KM400/KN400/P4M800 [S3 UniChrome] 1458 d000 Gigabyte GA-7VM400(A)M(F) Motherboard 1462 7061 MS-7061 7208 PT890 Host Bridge 7238 K8T890 Host Bridge 7258 PT880 Host Bridge 7259 CN333/CN400/PM880 Host Bridge 7269 KT880 Host Bridge 7282 K8T800Pro Host Bridge 7290 K8M890 Host Bridge 7293 PM896 Host Bridge 7296 P4M800 Host Bridge 7308 PT894 Host Bridge 7314 CN700/VN800/P4M800CE/Pro Host Bridge 7324 CX700/VX700-Series North-South Module Interface Control 7327 P4M890 Host Bridge 7336 K8M890CE Host Bridge 7340 PT900 Host Bridge 7351 VT3351 Host Bridge 7353 VX800/VX820 North-South Module Interface Control 7364 CN896/VN896/P4M900 Host Bridge 7372 VT8237S SATA RAID Controller 7409 VX855/VX875 North-South Module Interface Control 7410 VX900 Series North-South Module Interface Control 19da a179 ZBOX nano VD01 7419 VN1000 Host Bridge 8231 VT8231 [PCI-to-ISA Bridge] 8235 VT8235 ACPI 8305 VT8363/8365 [KT133/KM133 AGP] 8324 CX700/VX700-Series Bus Control and Power Management 8353 VX800/VX820 Bus Control and Power Management 8391 VT8371 [KX133 AGP] 8400 MVP4 8409 VX855/VX875 Bus Control and Power Management 8410 VX900 Series Bus Control and Power Management 19da a179 ZBOX VD01 8500 KLE133/PLE133/PLE133T 8501 VT8501 [Apollo MVP4 AGP] 8596 VT82C596 [Apollo PRO AGP] 8597 VT82C597 [Apollo VP3 AGP] 8598 VT82C598/694x [Apollo MVP3/Pro133x AGP] 1019 0985 P6VXA Motherboard 8601 VT8601 [Apollo ProMedia AGP] 8605 VT8605 [PM133 AGP] 8691 VT82C691 [Apollo Pro] 8693 VT82C693 [Apollo Pro Plus] PCI Bridge 8a25 PL133/PL133T [S3 ProSavage] 8a26 KL133/KL133A/KM133/KM133A [S3 ProSavage] 8d01 PN133/PN133T [S3 Twister] 8d04 KM266/P4M266/P4M266A/P4N266 [S3 ProSavageDDR] 9000 VT8261 IDE Controller [StorX IDE Controller - 9000] 9001 VX900 Series Serial-ATA Controller 9040 VT8261 SATA Controller [StorX RAID Controller - 9040] 9041 VX900/VX11 SATA Controller [StorX RAID Controller - 9041] 9082 Standard AHCI 1.0 SATA Controller 9140 VX11 Graphics [Chrome 645/640] HDMI Audio Device 9170 VX900 Graphics [Chrome9 HD] HDMI Audio Device 9201 USB3.0 Controller 9380 Ncore Coprocessor for Centaur CNS 9530 VX800/820/900/VT8261 Series Secure Digital Memory Card Controller 95d0 VX800/820/900 Series SDIO Host Controller a208 PT890 PCI to PCI Bridge Controller a238 K8T890 PCI to PCI Bridge Controller a327 P4M890 PCI to PCI Bridge Controller a353 VX8xx/900 Series South-North Module Interface Control a364 CN896/VN896/P4M900 PCI to PCI Bridge Controller a409 VX855/VX875/VX900 Series USB Device Controller a410 VX900 Series PCI Express Root Port 0 a419 VN1000 PCI to PCI Bridge b091 VT8633 [Apollo Pro266 AGP] b099 VT8366/A/7 [Apollo KT266/A/333 AGP] b101 VT8653 AGP Bridge b102 VT8362 AGP Bridge b103 VT8615 AGP Bridge b112 VT8361 [KLE133] AGP Bridge b113 VPX/VPX2 I/O APIC Interrupt Controller b115 VT8363/8365 [KT133/KM133] PCI Bridge b168 VT8235 PCI Bridge b188 VT8237/8251 PCI bridge [K8M890/K8T800/K8T890 South] 147b 1407 KV8-MAX3 motherboard b198 VT8237/CX700/VX700-Series PCI to PCI Bridge b213 VPX/VPX2 I/O APIC Interrupt Controller b353 VX855/VX875/VX900 PCI to PCI Bridge b410 VX900 Series PCI Express Root Port 1 b419 VN1000 Host Bridge b999 [K8T890 North / VT8237 South] PCI Bridge c208 PT890 PCI to PCI Bridge Controller c238 K8T890 PCI to PCI Bridge Controller c327 P4M890 PCI to PCI Bridge Controller c340 PT900 PCI to PCI Bridge Controller c353 VX800/820-Series PCI-Express Root (PCI-to-PCI Virtual Bridge) c364 CN896/VN896/P4M900 PCI to PCI Bridge Controller c409 VX855/VX875 EIDE Controller c410 VX900 Series PCI Express Root Port 2 c419 VN1000 PCI to PCI Bridge d104 VT8237R USB UDCI Controller d208 PT890 PCI to PCI Bridge Controller d213 VPX/VPX2 PCI to PCI Bridge Controller d238 K8T890 PCI to PCI Bridge Controller d340 PT900 PCI to PCI Bridge Controller d410 VX900 Series PCI Express Root Port 3 d419 VN1000 PCI to PCI Bridge e208 PT890 PCI to PCI Bridge Controller e238 K8T890 PCI to PCI Bridge Controller e340 PT900 PCI to PCI Bridge Controller e353 VX800/820-Series PCI-Express Root Port 0 e410 VX900 Series PCI Express Physical Layer Electrical Sub-block e419 VN1000 PCI to PCI Bridge f208 PT890 PCI to PCI Bridge Controller f238 K8T890 PCI to PCI Bridge Controller f340 PT900 PCI to PCI Bridge Controller f353 VX800/820-Series PCI-Express Root Port 1 f410 VX900 Series PCI UART Port 0-3 f419 VN1000 PCI to PCI Bridge 1107 Stratus Computers 0576 VIA VT82C570MV [Apollo] (Wrong vendor ID!) 1108 Proteon, Inc. 0100 p1690plus_AA 0101 p1690plus_AB 0105 P1690Plus 0108 P1690Plus 0138 P1690Plus 0139 P1690Plus 013c P1690Plus 013d P1690Plus 1109 Cogent Data Technologies, Inc. 1400 EM110TX [EX110TX] 110a Siemens AG 0002 Pirahna 2-port 0005 Tulip controller, power management, switch extender 0006 FSC PINC (I/O-APIC) 0015 FSC Multiprocessor Interrupt Controller 001d FSC Copernicus Management Controller 007b FSC Remote Service Controller, mailbox device 007c FSC Remote Service Controller, shared memory device 007d FSC Remote Service Controller, SMIC device 2101 HST SAPHIR V Primary PCI (ISDN/PMx) # Superfastcom-PCI (Commtech, Inc.) or DSCC4 WAN Adapter 2102 DSCC4 PEB/PEF 20534 DMA Supported Serial Communication Controller with 4 Channels 2104 Eicon Diva 2.02 compatible passive ISDN card # S30807-Q5474 3101 HiPath 4000 PCI card 3141 SIMATIC NET CP 5611 / 5621 3142 SIMATIC NET CP 5613 / 5614 3143 SIMATIC NET CP 1613 4021 SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter) 4029 SIMATIC NET CP 5613 A2 110a 4029 SIMATIC NET CP 5613 A2 110a c029 SIMATIC NET CP 5614 A2 4035 SIMATIC NET CP 1613 A2 4036 SIMATIC NET CP 1616 4038 SIMATIC NET CP 1604 4069 SIMATIC NET CP 5623 110a 4069 SIMATIC NET CP 5623 110a c069 SIMATIC NET CP 5624 407c SIMATIC NET CP 5612 407d SIMATIC NET CP 5613 A3 407e SIMATIC NET CP 5622 4083 SIMATIC NET CP 5614 A3 4084 SIMATIC NET CP 1626 4942 FPGA I-Bus Tracer for MBD 6120 SZB6120 110b Chromatic Research Inc. 0001 Mpact Media Processor 0004 Mpact 2 110c Mini-Max Technology, Inc. 110d Znyx Advanced Systems 110e CPU Technology 110f Ross Technology 1110 Powerhouse Systems 6037 Firepower Powerized SMP I/O ASIC 6073 Firepower Powerized SMP I/O ASIC 1111 Santa Cruz Operation # Also claimed to be RNS or Rockwell International, current PCISIG records list Osicom 1112 Osicom Technologies Inc 2200 FDDI Adapter 2300 Fast Ethernet Adapter 2340 4 Port Fast Ethernet Adapter 2400 ATM Adapter 1113 Accton Technology Corporation 1211 SMC2-1211TX 103c 1207 EN-1207D Fast Ethernet Adapter 1113 1211 EN-1207D Fast Ethernet Adapter 1216 EN-1216 Ethernet Adapter 1113 1216 EN1207F series PCI Fast Ethernet Adapter 1113 2220 EN2220A Cardbus Fast Ethernet Adapter 1113 2242 EN2242 10/100 Ethernet Mini-PCI Card 111a 1020 SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?] 1217 EN-1217 Ethernet Adapter 5105 10Mbps Network card 9211 EN-1207D Fast Ethernet Adapter 1113 9211 EN-1207D Fast Ethernet Adapter 9511 21x4x DEC-Tulip compatible Fast Ethernet d301 CPWNA100 (Philips wireless PCMCIA) ec02 SMC 1244TX v3 ee23 SMCWPCIT-G 108Mbps Wireless PCI adapter 1114 Atmel Corporation 0506 at76c506 802.11b Wireless Network Adaptor 1115 3D Labs 1116 Data Translation 0022 DT3001 0023 DT3002 0024 DT3003 0025 DT3004 0026 DT3005 0027 DT3001-PGL 0028 DT3003-PGL 0051 DT322 0060 DT340 0069 DT332 80c2 DT3162 1117 Datacube, Inc 9500 Max-1C SVGA card 9501 Max-1C image processing 1118 Berg Electronics 1119 ICP Vortex Computersysteme GmbH 0000 GDT 6000/6020/6050 0001 GDT 6000B/6010 0002 GDT 6110/6510 0003 GDT 6120/6520 0004 GDT 6530 0005 GDT 6550 0006 GDT 6117/6517 0007 GDT 6127/6527 0008 GDT 6537 0009 GDT 6557/6557-ECC 000a GDT 6115/6515 000b GDT 6125/6525 000c GDT 6535 000d GDT 6555/6555-ECC 0100 GDT 6117RP/6517RP 0101 GDT 6127RP/6527RP 0102 GDT 6537RP 0103 GDT 6557RP 0104 GDT 6111RP/6511RP 0105 GDT 6121RP/6521RP 0110 GDT 6117RD/6517RD 0111 GDT 6127RD/6527RD 0112 GDT 6537RD 0113 GDT 6557RD 0114 GDT 6111RD/6511RD 0115 GDT 6121RD/6521RD 0118 GDT 6118RD/6518RD/6618RD 0119 GDT 6128RD/6528RD/6628RD 011a GDT 6538RD/6638RD 011b GDT 6558RD/6658RD 0120 GDT 6117RP2/6517RP2 0121 GDT 6127RP2/6527RP2 0122 GDT 6537RP2 0123 GDT 6557RP2 0124 GDT 6111RP2/6511RP2 0125 GDT 6121RP2/6521RP2 0136 GDT 6113RS/6513RS 0137 GDT 6123RS/6523RS 0138 GDT 6118RS/6518RS/6618RS 0139 GDT 6128RS/6528RS/6628RS 013a GDT 6538RS/6638RS 013b GDT 6558RS/6658RS 013c GDT 6533RS/6633RS 013d GDT 6543RS/6643RS 013e GDT 6553RS/6653RS 013f GDT 6563RS/6663RS 0166 GDT 7113RN/7513RN/7613RN 0167 GDT 7123RN/7523RN/7623RN 0168 GDT 7118RN/7518RN/7518RN 0169 GDT 7128RN/7528RN/7628RN 016a GDT 7538RN/7638RN 016b GDT 7558RN/7658RN 016c GDT 7533RN/7633RN 016d GDT 7543RN/7643RN 016e GDT 7553RN/7653RN 016f GDT 7563RN/7663RN 01d6 GDT 4x13RZ 01d7 GDT 4x23RZ 01f6 GDT 8x13RZ 01f7 GDT 8x23RZ 01fc GDT 8x33RZ 01fd GDT 8x43RZ 01fe GDT 8x53RZ 01ff GDT 8x63RZ 0210 GDT 6519RD/6619RD 0211 GDT 6529RD/6629RD 0260 GDT 7519RN/7619RN 0261 GDT 7529RN/7629RN 02ff GDT MAXRP 0300 GDT NEWRX 0301 GDT NEWRX2 111a Efficient Networks, Inc 0000 155P-MF1 (FPGA) 0002 155P-MF1 (ASIC) 0003 ENI-25P ATM 111a 0000 ENI-25p Miniport ATM Adapter 0005 SpeedStream (LANAI) 111a 0001 ENI-3010 ATM 111a 0009 ENI-3060 ADSL (VPI=0) 111a 0101 ENI-3010 ATM 111a 0109 ENI-3060CO ADSL (VPI=0) 111a 0809 ENI-3060 ADSL (VPI=0 or 8) 111a 0909 ENI-3060CO ADSL (VPI=0 or 8) 111a 0a09 ENI-3060 ADSL (VPI=<0..15>) 0007 SpeedStream ADSL 111a 1001 ENI-3061 ADSL [ASIC] 1020 SpeedStream PCI 10/100 Network Card 1203 SpeedStream 1023 Wireless PCI Adapter 111b Teledyne Electronic Systems 111c Tricord Systems Inc. 0001 Powerbis Bridge # now owned by Microchip Technology 111d Microsemi / PMC / IDT 0001 IDT77201/77211 155Mbps ATM SAR Controller [NICStAR] 0003 IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller 0004 IDT77V252 155Mbps ATM MICRO ABR SAR Controller 0005 IDT77V222 155Mbps ATM MICRO ABR SAR Controller 8018 PES12N3A 12-lane 3-Port PCI Express Switch 801c PES24N3A PCI Express Switch 8028 PES4T4 PCI Express Switch 802b PES8T5A PCI Express Switch 802c PES16T4 PCI Express Switch 802d PES16T7 PCI Express Switch 802e PES24T6 PCI Express Switch 802f PES32T8 PCI Express Switch 8032 PES48T12 PCI Express Switch 8034 PES16/22/34H16 PCI Express Switch 8035 PES32H8 PCI Express Switch 8036 PES48H12 PCI Express Switch 8037 PES64H16 PCI Express Switch 8039 PES3T3 PCI Express Switch 803a PES4T4 PCI Express Switch 803c PES5T5 PCI Express Switch 803d PES6T5 PCI Express Switch 8048 PES8NT2 PCI Express Switch 8049 PES8NT2 PCI Express Switch 804a PES8NT2 PCI Express Internal NTB 804b PES8NT2 PCI Express External NTB 804c PES16NT2 PCI Express Switch 804d PES16NT2 PCI Express Switch 804e PES16NT2 PCI Express Internal NTB 804f PES16NT2 PCI Express External NTB 8058 PES12NT3 PCI Express Switch 8059 PES12NT3 PCI Express Switch 805a PES12NT3 PCI Express Internal NTB 805b PES12NT3 PCI Express External NTB 805c PES24NT3 PCI Express Switch 805d PES24NT3 PCI Express Switch 805e PES24NT3 PCI Express Internal NTB 805f PES24NT3 PCI Express External NTB 8060 PES16T4G2 PCI Express Gen2 Switch 8061 PES12T3G2 PCI Express Gen2 Switch 8068 PES6T6G2 PCI Express Gen2 Switch 806a PES24T3G2 PCI Express Gen2 Switch 14c1 000c 10G-PCIE2-8B2 806c PES16T4A/4T4G2 PCI Express Gen2 Switch 806e PES24T6G2 PCI Express Gen2 Switch 806f HIO524G2 PCI Express Gen2 Switch 8077 89HPES64H16G2 64-Lane 16-Port PCIe Gen2 System Interconnect Switch 8088 PES32NT8BG2 PCI Express Switch 1093 752f PXIe-8383mc Device 1093 7543 PXIe-8383mc System Host 1093 755c PXIe-8364 1093 755d PXIe-8374 1093 75ff PXIe-8383mc DMA 1093 7600 PXIe-8383mc DMA 1093 7602 PXIe-8384 # 32-lanes 24-ports Gen.2 808a 89HPES32NT24BG2 PCI Express Switch # 32-lanes 24-ports Gen.2 808c 89HPES32NT24AG2 PCI Express Switch 808e PES24NT24G2 PCI Express Switch 808f 89HPES32NT8AG2 32-Lane 8-Port PCIe Gen2 System Interconnect Switch with Non-Transparent Bridging 8090 89HPES16NT16G2 16-Lane 16-Port PCIe Gen2 System Interconnect Switch 8092 89HPES12NT12G2 12-Lane 12-Port PCIe Gen2 System Interconnect Switch 80cf F32P08xG3 [PCIe boot mode] 80d2 F32P08xG3 NVMe controller 111e Eldec 111f Precision Digital Images 4a47 Precision MX Video engine interface 5243 Frame capture bus interface # formerly EMC Corporation 1120 Dell EMC 2306 Unity Fibre Channel Controller 2501 Unity Ethernet Controller 2505 Unity Fibre Channel Controller 1121 Zilog 1122 Multi-tech Systems, Inc. 1123 Excellent Design, Inc. 1124 Leutron Vision AG 2581 Picport Monochrome 1125 Eurocore 1126 Vigra 1127 FORE Systems Inc 0200 ForeRunner PCA-200 ATM 0210 PCA-200PC 0250 ATM 0300 ForeRunner PCA-200EPC ATM 0310 ATM 0400 ForeRunnerHE ATM Adapter 1127 0400 ForeRunnerHE ATM 1129 Firmworks 112a Hermes Electronics Company, Ltd. # nee Linotype - Hell AG 112b Heidelberger Druckmaschinen AG 0001 SCU5 112c Zenith Data Systems 112d Ravicad 112e Infomedia Microelectronics Inc. 112f Dalsa Inc. 0000 MVC IC-PCI 0001 MVC IM-PCI Video frame grabber/processor 0004 PCDig Digital Image Capture 0008 PC-CamLink PCI framegrabber 1130 Computervision 1131 Philips Semiconductors 1561 USB 1.1 Host Controller 1775 c200 C2K onboard USB 1.1 host controller 1562 USB 2.0 Host Controller 1775 c200 C2K onboard USB 2.0 host controller 3400 SmartPCI56(UCB1500) 56K Modem 5400 TriMedia TM1000/1100 12ca 0000 BlueICE 5402 TriMedia TM1300 1244 0f00 Fritz!Card DSL 15eb 1300 DT1300 15eb 1302 DT1302 15eb 1304 DT1304 15eb 1305 DT1305 15eb 1306 PMCDT1306 15eb 1308 DT1308 15eb 1331 DT1301 with SAA7121 15eb 1337 DT1301 with SAA7127 15eb 2d3d X3D 15eb 7022 PTM1300 5405 TriMedia TM1500 1136 0005 LCP-1500 5406 TriMedia TM1700 540b PNX1005 Media Processor 1131 0020 PNXLite PCI Demo Board 7130 SAA7130 Video Broadcast Decoder 0000 4016 Behold TV 401 0000 4051 Behold TV 405 FM 0000 5051 Behold TV 505 RDS 0000 505b Behold TV 505 RDS 102b 48d0 Matrox CronosPlus 1048 226b ELSA EX-VISION 300TV 107d 6655 WinFast DTV1000S 1131 0000 SAA7130-based TV tuner card 1131 2001 10MOONS PCI TV CAPTURE CARD 1131 2005 Techcom (India) TV Tuner Card (SSD-TV-670) 1458 9006 GT-PS700 DVB-S tuner 1461 050c Nagase Sangyo TransGear 3000TV 1461 10ff AVerMedia DVD EZMaker 1461 2108 AverMedia AverTV/305 1461 2115 AverMedia AverTV Studio 305 153b 1152 Terratec Cinergy 200 TV 185b c100 Compro VideoMate TV PVR/FM 185b c901 Videomate DVB-T200 5168 0138 LifeView FlyVIDEO2000 5ace 5010 Behold TV 501 5ace 5050 Behold TV 505 FM 7133 SAA7131/SAA7133/SAA7135 Video Broadcast Decoder 0000 4091 Beholder BeholdTV 409 FM 0000 5071 Behold TV 507 RDS 0000 507b Behold TV 507 RDS 0000 5201 Behold TV Columbus 0070 6701 WinTV HVR-1110 1019 4cb5 Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) 1043 0210 FlyTV mini Asus Digimatrix 1043 4843 TV-FM 7133 1043 4845 TV-FM 7135 1043 4862 P7131 Dual 1043 4876 My Cinema-P7131 Hybrid 1131 0000 SAA713x-based TV tuner card 1131 2001 Proteus Pro [philips reference design] 1131 2018 Tiger reference design 1131 4ee9 MonsterTV Mobile 1131 7133 Pinnacle PCTV 301i 11bd 002b PCTV Stereo 11bd 002e PCTV 110i (saa7133) 12ab 0800 PURPLE TV 13c2 2804 Technotrend Budget T-3000 Hybrid 1421 0335 Instant TV DVB-T Cardbus 1421 1370 Instant TV (saa7135) 1435 7330 VFG7330 1435 7350 VFG7350 1458 9001 GC-PTV-TAF Hybrid TV card 1458 9002 GT-PTV-TAF-RH DVB-T/Analog TV/FM tuner 1458 9003 GT-PTV-AF-RH Analog TV/FM tuner 1458 9004 GT-P8000 DVB-T/Analog TV/FM tuner 1458 9005 GT-P6000 Analog TV/FM tuner 1458 9008 GT-P5100 Analog TV tuner 1461 1044 AVerTVHD MCE A180 1461 4836 M10D Hybrid DVBT 1461 861e M105 PAL/SECAM/NTSC/FM Tuner 1461 a14b AVerTV Studio 509 1461 a836 M115 DVB-T, PAL/SECAM/NTSC Tuner 1461 f01d DVB-T Super 007 1461 f31f Avermedia AVerTV GO 007 FM 1461 f936 Hybrid+FM PCI (rev A16D) 1462 6231 TV@nywhere Plus 1489 0214 LifeView FlyTV Platinum FM 14c0 1212 LifeView FlyTV Platinum Mini2 153b 1160 Cinergy 250 PCI TV 153b 1162 Terratec Cinergy 400 mobile 17de 7256 PlusTV All In One PI610 card 17de 7350 ATSC 110 Digital / Analog HDTV Tuner 17de 7352 ATSC 115 Digital / Analog HDTV Tuner 185b c100 VideoMate TV 185b c900 VideoMate T750 5168 0306 LifeView FlyDVB-T DUO 5168 0319 LifeView FlyDVB Trio 5168 0502 LifeView FlyDVB-T Duo CardBus 5168 0520 LifeView FlyDVB Trio CardBus 5168 1502 LifeView FlyTV CardBus 5168 2502 LifeView FlyDVB-T CardBus 5168 2520 LifeView FlyDVB-S Duo CardBus 5168 3502 LifeView FlyDVB-T Hybrid CardBus 5168 3520 LifeView FlyDVB Trio N CardBus 5ace 5030 Behold TV 503 FM 5ace 5090 Behold TV 509 FM 5ace 6090 Behold TV 609 FM 5ace 6091 Behold TV 609 FM 5ace 6092 Behold TV 609 RDS 5ace 6093 Behold TV 609 RDS 5ace 6190 Behold TV M6 5ace 6191 Behold TV M63 5ace 6193 Behold TV M6 Extra 5ace 6290 Behold TV H6 5ace 7090 Behold TV A7 5ace 7150 Behold TV H75 5ace 7151 Behold TV H75 5ace 7190 Behold TV H7 5ace 7191 Behold TV H7 5ace 7290 Behold TV T7 5ace 7591 Behold TV X7 5ace 7595 Behold TV X7 7134 SAA7134/SAA7135HL Video Broadcast Decoder 0000 4036 Behold TV 403 0000 4037 Behold TV 403 FM 0000 4071 Behold TV 407 FM 1019 4cb4 Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) 1043 0210 Digimatrix TV 1043 4840 TV-FM 7134 1043 4842 TV-FM 7134 1131 0000 SAA713x-based TV tuner card 1131 2004 EUROPA V3 reference design 1131 4e85 SKNet Monster TV 1131 6752 EMPRESS 11bd 002b PCTV Stereo 11bd 002d PCTV 300i DVB-T + PAL 1461 2c00 AverTV Hybrid+FM PCI 1461 9715 AVerTV Studio 307 1461 a70a Avermedia AVerTV 307 1461 a70b AverMedia M156 / Medion 2819 1461 d6ee Cardbus TV/Radio (E500) 1471 b7e9 AVerTV Cardbus plus 153b 1142 Terratec Cinergy 400 TV 153b 1143 Terratec Cinergy 600 TV 153b 1158 Terratec Cinergy 600 TV MK3 1540 9524 ProVideo PV952 16be 0003 Medion 7134 185b c200 Compro VideoMate Gold+ Pal 185b c900 Videomate DVB-T300 1894 a006 KNC One TV-Station DVR 1894 fe01 KNC One TV-Station RDS / Typhoon TV Tuner RDS 5168 0138 FLY TV PRIME 34FM 5168 0300 FlyDVB-S 5ace 5070 Behold TV 507 FM 5ace 6070 Behold TV 607 FM 5ace 6071 Behold TV 607 FM 5ace 6072 Behold TV 607 RDS 5ace 6073 Behold TV 607 RDS 7145 SAA7145 7146 SAA7146 110a 0000 Fujitsu/Siemens DVB-C card rev1.5 110a ffff Fujitsu/Siemens DVB-C card rev1.5 1124 2581 Leutron Vision PicPort 1131 4f56 KNC1 DVB-S Budget 1131 4f60 Fujitsu-Siemens Activy DVB-S Budget Rev AL 1131 4f61 Activy DVB-S Budget Rev GR 1131 5f61 Activy DVB-T Budget 114b 2003 DVRaptor Video Edit/Capture Card 1159 0040 MuTech M-Vision 500 (MV-500 rev. E) 1159 0050 MuTech M-Vision 500 (MV-500 rev. F) 11bd 0006 DV500 Overlay 11bd 000a DV500 Overlay 11bd 000f DV500 Overlay 13c2 0000 Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5 13c2 0001 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 13c2 0002 Technotrend/Hauppauge DVB card rev2.1 13c2 0003 Technotrend/Hauppauge DVB card rev2.1 13c2 0004 Technotrend/Hauppauge DVB card rev2.1 13c2 0006 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 13c2 0008 Technotrend/Hauppauge DVB-T 13c2 000a Octal/Technotrend DVB-C for iTV 13c2 000e Technotrend/Hauppauge DVB card rev2.3 13c2 1003 Technotrend-Budget/Hauppauge WinTV-NOVA-S DVB card 13c2 1004 Technotrend-Budget/Hauppauge WinTV-NOVA-C DVB card 13c2 1005 Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card 13c2 100c Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card 13c2 100f Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card 13c2 1010 DVB C-1500 13c2 1011 Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card 13c2 1012 DVB T-1500 13c2 1013 SATELCO Multimedia DVB 13c2 1016 WinTV-NOVA-SE DVB card 13c2 1018 DVB S-1401 13c2 1019 S2-3200 13c2 1102 Technotrend/Hauppauge DVB card rev2.1 153b 1155 Cinergy 1200 DVB-S 153b 1156 Cinergy 1200 DVB-C 153b 1157 Cinergy 1200 DVB-T 153b 1176 Cinergy 1200 DVB-C (MK3) 1894 0020 KNC One DVB-C V1.0 1894 0023 TV-Station DVB-C plus 1894 0054 TV-Station DVB-S 7160 SAA7160 1458 9009 E8000 DVB-T/Analog TV/FM tuner 1461 1455 AVerTV Hybrid Speedy PCI-E (H788) 7162 SAA7162 11bd 0101 Pinnacle PCTV 7010iX TV Card 7164 SAA7164 0070 8800 WinTV HVR-2250 0070 8810 WinTV HVR-2250 0070 8851 WinTV HVR-2250 0070 8853 WinTV HVR-2250 0070 8880 WinTV HVR-2250 0070 8891 WinTV HVR-2250 0070 88a0 WinTV HVR-2250 0070 88a1 WinTV HVR-2250 0070 8900 WinTV HVR-2200 0070 8901 WinTV HVR-2200 0070 8940 WinTV HVR-2200 (submodel 89619) 0070 8951 WinTV HVR-2200 0070 8953 WinTV HVR-2200 0070 8980 WinTV HVR-2200 0070 8991 WinTV HVR-2200 0070 8993 WinTV HVR-2200 0070 89a0 WinTV HVR-2200 0070 89a1 WinTV HVR-2200 0070 f120 WinTV HVR-2205 0070 f123 WinTV HVR-2215 7231 SAA7231 5ace 8000 Behold TV H8 5ace 8001 Behold TV H8 5ace 8050 Behold TV H85 5ace 8051 Behold TV H85 5ace 8100 Behold TV A8 5ace 8101 Behold TV A8 5ace 8150 Behold TV A85 5ace 8151 Behold TV A85 5ace 8201 Behold TV T8 9730 SAA9730 Integrated Multimedia and Peripheral Controller 1131 0000 Integrated Multimedia and Peripheral Controller 1132 Mitel Corp. 1133 Dialogic Corporation 7701 Eiconcard C90 7711 Eiconcard C91 7901 EiconCard S90 7902 EiconCard S90 7911 EiconCard S91 7912 EiconCard S91 7921 Eiconcard S92 7941 EiconCard S94 7942 EiconCard S94 7943 EiconCard S94 7944 EiconCard S94 7945 Eiconcard S94 7948 Eiconcard S94 64bit/66MHz 9711 Eiconcard S91 V2 9911 Eiconcard S91 V2 9941 Eiconcard S94 V2 9a41 Eiconcard S94 PCIe b921 EiconCard P92 b922 EiconCard P92 b923 EiconCard P92 e001 Diva Pro 2.0 S/T e002 Diva 2.0 S/T PCI e003 Diva Pro 2.0 U e004 Diva 2.0 U PCI e005 Diva 2.01 S/T PCI e006 Diva CT S/T PCI e007 Diva CT U PCI e008 Diva CT Lite S/T PCI e009 Diva CT Lite U PCI e00a Diva ISDN+V.90 PCI e00b Diva ISDN PCI 2.02 e00c Diva 2.02 PCI U e00d Diva Pro 3.0 PCI e00e Diva ISDN+CT S/T PCI Rev 2 e010 Diva Server BRI-2M PCI 110a 0021 Fujitsu Siemens ISDN S0 e011 Diva Server BRI S/T Rev 2 e012 Diva Server 4BRI-8M PCI e013 4BRI 1133 1300 Diva V-4BRI-8 PCI v2 1133 e013 Diva 4BRI-8 PCI v2 e014 Diva Server PRI-30M PCI e015 Diva PRI PCI v2 e016 Diva Server Voice 4BRI PCI e017 Diva Server Voice 4BRI Rev 2 1133 e017 Diva Server Voice 4BRI-8M 2.0 PCI e018 BRI 1133 1800 Diva V-BRI-2 PCI v2 1133 e018 Diva BRI-2 PCI v2 e019 Diva Server Voice PRI Rev 2 1133 e019 Diva Server Voice PRI 2.0 PCI e01a Diva BRI-2FX PCI v2 e01b Diva Server Voice BRI-2M 2.0 PCI 1133 e01b Diva Server Voice BRI-2M 2.0 PCI e01c PRI 1133 1c01 Diva PRI/E1/T1-8 PCI v3 1133 1c02 Diva PRI/T1-24 PCI(e) v3 1133 1c03 Diva PRI/E1-30 PCI(e) v3 1133 1c04 Diva PRI/E1/T1-CTI PCI(e) v3 1133 1c05 Diva V-PRI/T1-24 PCI(e) v3 1133 1c06 Diva V-PRI/E1-30 PCI(e) v3 1133 1c07 Diva Server PRI/E1/T1-8 Cornet NQ 1133 1c08 Diva Server PRI/T1-24 Cornet NQ 1133 1c09 Diva Server PRI/E1-30 Cornet NQ 1133 1c0a Diva Server PRI/E1/T1 Cornet NQ 1133 1c0b Diva Server V-PRI/T1-24 Cornet NQ 1133 1c0c Diva Server V-PRI/E1-30 Cornet NQ e01e 2PRI 1133 1e01 Diva 2PRI/E1/T1-60 PCI v1 1133 e01e Diva V-2PRI/E1/T1-60 PCI v1 e020 4PRI 1133 2001 Diva 4PRI/E1/T1-120 PCI v1 1133 e020 Diva V-4PRI/E1/T1-120 PCI v1 e022 Analog-2 1133 2200 Diva V-Analog-2 PCI v1 1133 e022 Diva Analog-2 PCI v1 e024 Analog-4 1133 2400 Diva V-Analog-4 PCI v1 1133 e024 Diva Analog-4 PCI v1 e028 Analog-8 1133 2800 Diva V-Analog-8 PCI v1 1133 e028 Diva Analog-8 PCI v1 e02a Diva IPM-300 PCI v1 e02c Diva IPM-600 PCI v1 e02e 4BRI 1133 2e01 Diva V-4BRI-8 PCIe v2 1133 e02e Diva 4BRI-8 PCIe v2 e032 BRI 1133 3201 Diva V-BRI-2 PCIe v2 1133 e032 Diva BRI-2 PCIe v2 e034 Diva BRI-CTI PCI v2 1134 Mercury Computer Systems 0001 Raceway Bridge 0002 Dual PCI to RapidIO Bridge 000b POET Serial RapidIO Bridge 000d POET PSDMS Device 1135 FUJIFILM Business Innovation Corp. 0001 Printer controller 1136 Momentum Data Systems 0002 PCI-JTAG 1137 Cisco Systems Inc 0023 VIC 81 PCIe Upstream Port 0040 VIC PCIe Upstream Port 1137 004f VIC 1280 Dual 40Gb Mezzanine 1137 0084 VIC 1240 Dual 40Gb MLOM 1137 0085 VIC 1225 Dual 10Gb SFP+ PCIe 1137 00cd VIC 1285 Dual 40Gb QSFP+ PCIe 1137 00ce VIC 1225T Dual 10GBaseT PCIe 1137 012a VIC M4308 Dual 40Gb 1137 012c VIC 1340 Dual 40Gb MLOM 1137 012e VIC 1227 Dual 10Gb SFP+ PCIe 1137 0137 VIC 1380 Dual 40Gb Mezzanine 1137 014d VIC 1385 Dual 40Gb PCIe 0041 VIC PCIe Downstream Port 0042 VIC Management Controller 1137 0047 VIC P81E PCIe Management Controller 1137 0085 VIC 1225 PCIe Management Controller 1137 00cd VIC 1285 PCIe Management Controller 1137 00ce VIC 1225T PCIe Management Controller 1137 012e VIC 1227 PCIe Management Controller 1137 014d VIC 1385 PCIe Management Controller 1137 0217 VIC 1455 PCIe Management Controller 1137 0218 VIC 1457 PCIe Management Controller 0043 VIC Ethernet NIC 1137 0047 VIC P81E PCIe Ethernet NIC 1137 0048 VIC M81KR Mezzanine Ethernet NIC 1137 004f VIC 1280 Mezzanine Ethernet NIC 1137 0084 VIC 1240 MLOM Ethernet NIC 1137 0085 VIC 1225 PCIe Ethernet NIC 1137 00cd VIC 1285 PCIe Ethernet NIC 1137 00ce VIC 1225T PCIe Ethernet NIC 1137 012a VIC M4308 Ethernet NIC 1137 012c VIC 1340 MLOM Ethernet NIC 1137 012e VIC 1227 PCIe Ethernet NIC 1137 0137 VIC 1380 Mezzanine Ethernet NIC 1137 014d VIC 1385 PCIe Ethernet NIC 1137 015d VIC 1387 MLOM Ethernet NIC 1137 0215 VIC 1440 Mezzanine Ethernet NIC 1137 0216 VIC 1480 MLOM Ethernet NIC 1137 0217 VIC 1455 PCIe Ethernet NIC 1137 0218 VIC 1457 MLOM Ethernet NIC 1137 0219 VIC 1485 PCIe Ethernet NIC 1137 021a VIC 1487 MLOM Ethernet NIC 1137 024a VIC 1495 PCIe Ethernet NIC 1137 024b VIC 1497 MLOM Ethernet NIC 1137 02af VIC 1467 MLOM Ethernet NIC 1137 02b0 VIC 1477 MLOM Ethernet NIC 1137 02cf VIC 14425 MLOM Ethernet NIC 1137 02d0 VIC 14825 Mezzanine Ethernet NIC 1137 02db VIC 15231 MLOM Ethernet NIC 1137 02dc VIC 15411 MLOM Ethernet NIC 1137 02dd VIC 15428 MLOM Ethernet NIC 1137 02de VIC 15420 MLOM Ethernet NIC 1137 02df VIC 15230 MLOM Ethernet NIC 1137 02e0 VIC 15427 MLOM Ethernet NIC 1137 02e1 VIC 15422 Mezzanine Ethernet NIC 1137 02e4 VIC 15235 PCIe Ethernet NIC 1137 02e8 VIC 15238 MLOM Ethernet NIC 1137 02f2 VIC 15425 PCIe Ethernet NIC 1137 02f3 VIC 15237 MLOM Ethernet NIC 0044 VIC Ethernet NIC Dynamic 1137 0047 VIC P81E PCIe Ethernet NIC Dynamic 1137 0048 VIC M81KR Mezzanine Ethernet NIC Dynamic 1137 004f VIC 1280 Mezzanine Ethernet NIC Dynamic 1137 0084 VIC 1240 MLOM Ethernet NIC Dynamic 1137 0085 VIC 1225 PCIe Ethernet NIC Dynamic 1137 00cd VIC 1285 PCIe Ethernet NIC Dynamic 1137 00ce VIC 1225T PCIe Ethernet NIC Dynamic 1137 012a VIC M4308 Ethernet NIC Dynamic 1137 012c VIC 1340 MLOM Ethernet NIC Dynamic 1137 012e VIC 1227 PCIe Ethernet NIC Dynamic 1137 0137 VIC 1380 Mezzanine Ethernet NIC Dynamic 1137 014d VIC 1385 PCIe Ethernet NIC Dynamic 0045 VIC FCoE HBA 1137 0047 VIC P81E PCIe FCoE HBA 1137 0048 VIC M81KR Mezzanine FCoE HBA 1137 004f VIC 1280 Mezzanine FCoE HBA 1137 0084 VIC 1240 MLOM FCoE HBA 1137 0085 VIC 1225 PCIe FCoE HBA 1137 00cd VIC 1285 PCIe FCoE HBA 1137 00ce VIC 1225T PCIe FCoE HBA 1137 012a VIC M4308 FCoE HBA 1137 012c VIC 1340 MLOM FCoE HBA 1137 012e VIC 1227 PCIe FCoE HBA 1137 0137 VIC 1380 Mezzanine FCoE HBA 1137 014d VIC 1385 PCIe FCoE HBA 0046 VIC SCSI Controller 1137 012a VIC M4308 SCSI Controller 004e VIC 82 PCIe Upstream Port 0071 VIC SR-IOV VF 007a VIC 1300 PCIe Upstream Port 1137 012a VIC M4308 Dual 40Gb 1137 012c VIC 1340 Dual 40Gb MLOM 1137 0137 VIC 1380 Dual 40Gb Mezzanine 1137 014d VIC 1385 Dual 40Gb PCIe 00cf VIC Userspace NIC 1137 004f VIC 1280 Mezzanine Userspace NIC 1137 0084 VIC 1240 MLOM Userspace NIC 1137 0085 VIC 1225 PCIe Userspace NIC 1137 00cd VIC 1285 PCIe Userspace NIC 1137 00ce VIC 1225T PCIe Userspace NIC 1137 012a VIC M4308 Userspace NIC 1137 012c VIC 1340 MLOM Userspace NIC 1137 012e VIC 1227 PCIe Userspace NIC 1137 0137 VIC 1380 Mezzanine Userspace NIC 023e 1GigE I350 LOM 02b7 VIC SR-IOV Ethernet VF 1138 Ziatech Corporation 8905 8905 [STD 32 Bridge] 1139 Dynamic Pictures, Inc 0001 VGA Compatible 3D Graphics 113a FWB Inc 113b Network Computing Devices 113c Cyclone Microsystems, Inc. 0000 PCI-9060 i960 Bridge 0001 PCI-SDK [PCI i960 Evaluation Platform] 0911 PCI-911 [i960Jx-based Intelligent I/O Controller] 0912 PCI-912 [i960CF-based Intelligent I/O Controller] 0913 PCI-913 0914 PCI-914 [I/O Controller w/ secondary PCI bus] 113d Leading Edge Products Inc 113e Sanyo Electric Co - Computer Engineering Dept 113f Equinox Systems, Inc. 0808 SST-64P Adapter 1010 SST-128P Adapter 80c0 SST-16P DB Adapter 80c4 SST-16P RJ Adapter 80c8 SST-16P Adapter 8888 SST-4P Adapter 9090 SST-8P Adapter 1140 Intervoice Inc 1141 Crest Microsystem Inc 1142 Alliance Semiconductor Corporation 3210 AP6410 6422 ProVideo 6422 6424 ProVideo 6424 6425 ProMotion AT25 643d ProMotion AT3D 1143 NetPower, Inc 1144 Cincinnati Milacron 0001 Noservo controller 1145 Workbit Corporation 8007 NinjaSCSI-32 Workbit f007 NinjaSCSI-32 KME f010 NinjaSCSI-32 Workbit f012 NinjaSCSI-32 Logitec f013 NinjaSCSI-32 Logitec f015 NinjaSCSI-32 Melco f020 NinjaSCSI-32 Sony PCGA-DVD51 f021 NinjaPATA-32 Delkin Cardbus UDMA f024 NinjaPATA-32 Delkin Cardbus UDMA f103 NinjaPATA-32 Delkin Cardbus UDMA 1146 Force Computers 1147 Interface Corp # Nee Schneider & Koch 1148 SysKonnect 4000 FDDI Adapter 0e11 b03b Netelligent 100 FDDI DAS Fibre SC 0e11 b03c Netelligent 100 FDDI SAS Fibre SC 0e11 b03d Netelligent 100 FDDI DAS UTP 0e11 b03e Netelligent 100 FDDI SAS UTP 0e11 b03f Netelligent 100 FDDI SAS Fibre MIC 1148 5521 FDDI SK-5521 (SK-NET FDDI-UP) 1148 5522 FDDI SK-5522 (SK-NET FDDI-UP DAS) 1148 5541 FDDI SK-5541 (SK-NET FDDI-FP) 1148 5543 FDDI SK-5543 (SK-NET FDDI-LP) 1148 5544 FDDI SK-5544 (SK-NET FDDI-LP DAS) 1148 5821 FDDI SK-5821 (SK-NET FDDI-UP64) 1148 5822 FDDI SK-5822 (SK-NET FDDI-UP64 DAS) 1148 5841 FDDI SK-5841 (SK-NET FDDI-FP64) 1148 5843 FDDI SK-5843 (SK-NET FDDI-LP64) 1148 5844 FDDI SK-5844 (SK-NET FDDI-LP64 DAS) 4200 Token Ring adapter 4300 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) 1148 9821 SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T) 1148 9822 SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link) 1148 9841 SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX) 1148 9842 SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link) 1148 9843 SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX) 1148 9844 SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link) 1148 9861 SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition) 1148 9862 SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link) 1148 9871 SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX) 1148 9872 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) 1259 2970 AT-2970SX Gigabit Ethernet Adapter 1259 2971 AT-2970LX Gigabit Ethernet Adapter 1259 2972 AT-2970TX Gigabit Ethernet Adapter 1259 2973 AT-2971SX Gigabit Ethernet Adapter 1259 2974 AT-2971T Gigabit Ethernet Adapter 1259 2975 AT-2970SX/2SC Gigabit Ethernet Adapter 1259 2976 AT-2970LX/2SC Gigabit Ethernet Adapter 1259 2977 AT-2970TX/2TX Gigabit Ethernet Adapter 4320 SK-98xx V2.0 Gigabit Ethernet Adapter [Marvell 88E8001] 1148 0121 Marvell RDK-8001 Adapter 1148 0221 Marvell RDK-8002 Adapter 1148 0321 Marvell RDK-8003 Adapter 1148 0421 Marvell RDK-8004 Adapter 1148 0621 Marvell RDK-8006 Adapter 1148 0721 Marvell RDK-8007 Adapter 1148 0821 Marvell RDK-8008 Adapter 1148 0921 Marvell RDK-8009 Adapter 1148 1121 Marvell RDK-8011 Adapter 1148 1221 Marvell RDK-8012 Adapter 1148 3221 SK-9521 V2.0 10/100/1000Base-T Adapter 1148 5021 SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter 1148 5041 SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter 1148 5043 SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter 1148 5051 SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter 1148 5061 SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter 1148 5071 SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter 1148 9521 SK-9521 10/100/1000Base-T Adapter 1259 2916 AT-2916T 4400 SK-9Dxx Gigabit Ethernet Adapter 4500 SK-9Mxx Gigabit Ethernet Adapter 9000 SK-9Sxx Gigabit Ethernet Server Adapter PCI-X [Marvell 88E8022] 1148 2100 SK-9S21 10/100/1000Base-T Server Adapter, PCI-X, Copper RJ-45 1148 2200 SK-9S22 10/100/1000Base-T Dual Port Server Adapter, PCI-X, 2 Copper RJ-45 1148 2210 SK-9P22 10/100/1000 Base-T Dual Port PMC card 1148 2220 TPMC-GBE-CO 1148 8100 SK-9S81 1000Base-SX Server Adapter,PCI-X, Fiber SX/LC 1148 8200 SK-9S82 1000Base-SX Dual Port Server Adapter, PCI-X, 2 Fiber SX/LC 1148 8210 SK-9P82 1000 Base-SX Dual Port PMC card 1148 8220 TPMC-GBE-FI 1148 9100 SK-9S91 1000Base-LX Server Adapter,PCI-X, Fiber LX/LC 1148 9200 SK-9S92 1000Base-LX Dual Port Server Adapter, PCI-X, 2 Fiber LX/LC 1259 2973 AT-2971SX v2 Gigabit Adapter 1259 2974 AT-2971T v2 Gigabit Adapter 1259 2978 AT-2971LX Gigabit Adapter 9843 [Fujitsu] Gigabit Ethernet 9e00 SK-9E21D 10/100/1000Base-T Adapter, Copper RJ-45 1148 2100 SK-9E21 Server Adapter 1148 21d0 SK-9E21D 10/100/1000Base-T Adapter 1148 2200 SK-9E22 Server Adapter 1148 8100 SK-9E81 Server Adapter 1148 8200 SK-9E82 Server Adapter 1148 9100 SK-9E91 Server Adapter 1148 9200 SK-9E92 Server Adapter 9e01 SK-9E21M 10/100/1000Base-T Adapter 1149 Win System Corporation 114a VMIC 5565 GE-IP PCI5565,PMC5565 Reflective Memory Node 5579 VMIPCI-5579 (Reflective Memory Card) 5587 VMIPCI-5587 (Reflective Memory Card) 6504 VMIC PCI 7755 FPGA 7587 VMIVME-7587 114b Canopus Co., Ltd 114c Annabooks 114d IC Corporation 114e Nikon Systems Inc 114f Digi International 0002 AccelePort EPC 0003 RightSwitch SE-6 0004 AccelePort Xem 0005 AccelePort Xr 0006 AccelePort Xr,C/X 0009 AccelePort Xr/J 000a AccelePort EPC/J 000c DataFirePRIme T1 (1-port) 000d SyncPort 2-Port (x.25/FR) 0011 AccelePort 8r EIA-232 (IBM) 0012 AccelePort 8r EIA-422 0013 AccelePort Xr 0014 AccelePort 8r EIA-422 0015 AccelePort Xem 0016 AccelePort EPC/X 0017 AccelePort C/X 001a DataFirePRIme E1 (1-port) 001b AccelePort C/X (IBM) 001c AccelePort Xr (SAIP) 001d DataFire RAS T1/E1/PRI 114f 0050 DataFire RAS E1 Adapter 114f 0051 DataFire RAS Dual E1 Adapter 114f 0052 DataFire RAS T1 Adapter 114f 0053 DataFire RAS Dual T1 Adapter 0023 AccelePort RAS 0024 DataFire RAS B4 ST/U 114f 0030 DataFire RAS BRI U Adapter 114f 0031 DataFire RAS BRI S/T Adapter 0026 AccelePort 4r 920 0027 AccelePort Xr 920 0028 ClassicBoard 4 0029 ClassicBoard 8 0034 AccelePort 2r 920 0035 DataFire DSP T1/E1/PRI cPCI 0040 AccelePort Xp 114f 0042 AccelePort 2p PCI 114f 0043 AccelePort 4p PCI 114f 0044 AccelePort 8p PCI 114f 0045 AccelePort 16p PCI 114f 004e AccelePort 32p PCI 0042 AccelePort 2p 0043 AccelePort 4p 0044 AccelePort 8p 0045 AccelePort 16p 004e AccelePort 32p 0070 Datafire Micro V IOM2 (Europe) 0071 Datafire Micro V (Europe) 0072 Datafire Micro V IOM2 (North America) 0073 Datafire Micro V (North America) 00b0 Digi Neo 4 00b1 Digi Neo 8 00c8 Digi Neo 2 DB9 00c9 Digi Neo 2 DB9 PRI 00ca Digi Neo 2 RJ45 00cb Digi Neo 2 RJ45 PRI 00cc Digi Neo 1 422 00cd Digi Neo 1 422 485 00ce Digi Neo 2 422 485 00d0 ClassicBoard 4 422 00d1 ClassicBoard 8 422 00f1 Digi Neo PCI-E 4 port 00f4 Digi Neo 4 (IBM version) 6001 Avanstar 1150 Thinking Machines Corp 1151 JAE Electronics Inc. 1152 Megatek 1153 Land Win Electronic Corp 1154 Melco Inc 1155 Pine Technology Ltd 1156 Periscope Engineering 1157 Avsys Corporation 1158 Voarx R & D Inc 3011 Tokenet/vg 1001/10m anylan 9050 Lanfleet/Truevalue 9051 Lanfleet/Truevalue 1159 MuTech Corporation 0001 MV-1000 0002 MV-1500 115a Harlequin Ltd 115b Parallax Graphics 115c Photron Ltd. 115d Xircom 0003 Cardbus Ethernet 10/100 1014 0181 10/100 EtherJet Cardbus Adapter 1014 1181 10/100 EtherJet Cardbus Adapter 1014 8181 10/100 EtherJet Cardbus Adapter 1014 9181 10/100 EtherJet Cardbus Adapter 115d 0181 Cardbus Ethernet 10/100 115d 0182 RealPort2 CardBus Ethernet 10/100 (R2BE-100) 115d 1181 Cardbus Ethernet 10/100 1179 0181 Cardbus Ethernet 10/100 8086 8181 EtherExpress PRO/100 Mobile CardBus 32 Adapter 8086 9181 EtherExpress PRO/100 Mobile CardBus 32 Adapter 0005 Cardbus Ethernet 10/100 1014 0182 10/100 EtherJet Cardbus Adapter 1014 1182 10/100 EtherJet Cardbus Adapter 115d 0182 Cardbus Ethernet 10/100 115d 1182 Cardbus Ethernet 10/100 0007 Cardbus Ethernet 10/100 1014 0182 10/100 EtherJet Cardbus Adapter 1014 1182 10/100 EtherJet Cardbus Adapter 115d 0182 Cardbus Ethernet 10/100 115d 1182 Cardbus Ethernet 10/100 000b Cardbus Ethernet 10/100 1014 0183 10/100 EtherJet Cardbus Adapter 115d 0183 Cardbus Ethernet 10/100 000c Mini-PCI V.90 56k Modem 000f Cardbus Ethernet 10/100 1014 0183 10/100 EtherJet Cardbus Adapter 115d 0183 Cardbus Ethernet 10/100 00d4 Mini-PCI K56Flex Modem 0101 Cardbus 56k modem 115d 1081 Cardbus 56k Modem 0103 Cardbus Ethernet + 56k Modem 1014 9181 Cardbus 56k Modem 1115 1181 Cardbus Ethernet 100 + 56k Modem 115d 1181 CBEM56G-100 Ethernet + 56k Modem 8086 9181 PRO/100 LAN + Modem56 CardBus 115e Peer Protocols Inc 115f Maxtor Corporation 1160 Megasoft Inc 1161 PFU Limited 1162 OA Laboratory Co Ltd 1163 Rendition 0001 Verite 1000 2000 Verite V2000/V2100/V2200 1092 2000 Stealth II S220 1164 Advanced Peripherals Technologies 1165 Imagraph Corporation 0001 Motion TPEG Recorder/Player with audio # nee ServerWorks 1166 Broadcom 0000 CMIC-LE 0005 CNB20-LE Host Bridge 0006 CNB20HE Host Bridge 0007 CNB20-LE Host Bridge 0008 CNB20HE Host Bridge 0009 CNB20LE Host Bridge 0010 CIOB30 0011 CMIC-HE 0012 CMIC-WS Host Bridge (GC-LE chipset) 0013 CNB20-HE Host Bridge 0014 CMIC-LE Host Bridge (GC-LE chipset) 0015 CMIC-GC Host Bridge 0016 CMIC-GC Host Bridge 0017 GCNB-LE Host Bridge 0031 HT1100 HPX0 HT Host Bridge 0036 BCM5785 [HT1000] PCI/PCI-X Bridge 0101 CIOB-X2 PCI-X I/O Bridge 0103 EPB PCI-Express to PCI-X Bridge 0104 BCM5785 [HT1000] PCI/PCI-X Bridge 0110 CIOB-E I/O Bridge with Gigabit Ethernet 0130 BCM5780 [HT2000] PCI-X bridge 0132 BCM5780 [HT2000] PCI-Express Bridge 1166 0132 HT2000 PCI-Express bridge 0140 HT2100 PCI-Express Bridge 0141 HT2100 PCI-Express Bridge 0142 HT2100 PCI-Express Bridge 0144 HT2100 PCI-Express Bridge 0200 OSB4 South Bridge 0201 CSB5 South Bridge 4c53 1080 CT8 mainboard 0203 CSB6 South Bridge 1734 1012 PRIMERGY RX/TX series 0205 BCM5785 [HT1000] Legacy South Bridge 0211 OSB4 IDE Controller 0212 CSB5 IDE Controller 1028 014a PowerEdge 1750 1028 810b PowerEdge 1650/2550 4c53 1080 CT8 mainboard 0213 CSB6 RAID/IDE Controller 1028 4134 PowerEdge 600SC 1028 c134 Poweredge SC600 1734 1012 PRIMERGY RX/TX series onboard IDE 0214 BCM5785 [HT1000] IDE 1028 0205 PowerEdge 2970 HT1000 IDE 0217 CSB6 IDE Controller 1028 4134 Poweredge SC600 021b HT1100 HD Audio 0220 OSB4/CSB5 OHCI USB Controller 4c53 1080 CT8 mainboard 0221 CSB6 OHCI USB Controller 1734 1012 PRIMERGY RX/TX series onboard OHCI 0223 BCM5785 [HT1000] USB 1028 0205 PowerEdge 2970 HT1000 USB Controller 1028 020b PowerEdge T605 HT1000 USB Controller 0225 CSB5 LPC bridge 0227 GCLE-2 Host Bridge 1734 1012 PRIMERGY RX/TX series 0230 CSB5 LPC bridge 4c53 1080 CT8 mainboard 0234 BCM5785 [HT1000] LPC 1028 0205 PowerEdge 2970 HT1000 LPC 1028 020b PowerEdge T605 HT1000 LPC 0235 BCM5785 [HT1000] XIOAPIC0-2 0238 BCM5785 [HT1000] WDTimer 0240 K2 SATA 0241 RAIDCore RC4000 0242 RAIDCore BC4000 024a BCM5785 [HT1000] SATA (Native SATA Mode) 1028 020b PowerEdge T605 onboard SATA Controller # The device starts as 024A, and changes to 024B if set to PATA mode in BIOS 024b BCM5785 [HT1000] SATA (PATA/IDE Mode) 1028 0205 PowerEdge 2970 HT1000 SATA controller 0406 HT1100 PCI-X Bridge 0408 HT1100 Legacy Device 040a HT1100 ISA-LPC Bridge 1028 0223 PowerEdge R905 HT1100 ISA-LPC Bridge 0410 HT1100 SATA Controller (Native SATA Mode) 0411 HT1100 SATA Controller (PATA / IDE Mode) 0412 HT1100 USB OHCI Controller 0414 HT1100 USB EHCI Controller 0416 HT1100 USB EHCI Controller (with Debug Port) 0420 HT1100 PCI-Express Bridge 0421 HT1100 SAS/SATA Controller 0422 HT1100 PCI-Express Bridge 1167 Mutoh Industries Inc 1168 Thine Electronics Inc 1169 Centre for Development of Advanced Computing # nee Polaris Communications 116a Luminex Software, Inc. 6100 Bus/Tag Channel 6800 Escon Channel 7100 Bus/Tag Channel 7800 Escon Channel 116b Connectware Inc 116c Intelligent Resources Integrated Systems 116d Martin-Marietta 116e Electronics for Imaging 116f Workstation Technology 1170 Inventec Corporation 1171 Loughborough Sound Images Plc 1172 Altera Corporation # Unknown card with Altera ACE EP1K50TC144-2 as the PCI interface and has 4 BNC inputs connected to 4 TL3016 Comparators and one TRS output connected to two LTC1650 DACs 0004 PF5102 board 00a7 Stratix V 0530 Stratix IV 646c KT-500/KT-521 board 1173 Adobe Systems, Inc 1174 Bridgeport Machines 1175 Mitron Computer Inc. 1176 SBE Incorporated 1177 Silicon Engineering 1178 Alfa, Inc. afa1 Fast Ethernet Adapter 1179 Toshiba Corporation 0102 Extended IDE Controller 0103 EX-IDE Type-B 010e PXP04 NVMe SSD 010f XG3 NVMe SSD Controller 0110 Cx5 NVMe SSD Controller 1028 1ffb Express Flash NVMe 960G (RI) U.2 (CD5) 1028 1ffc Express Flash NVMe 1.92T (RI) U.2 (CD5) 1028 1ffd Express Flash NVMe 3.84T (RI) U.2 (CD5) 1028 1ffe Express Flash NVMe 7.68T (RI) U.2 (CD5) 1179 0001 KIOXIA CM5-R series SSD 1179 0021 KIOXIA CD5 series SSD 1d49 4039 Thinksystem U.2 CM5 NVMe SSD 1d49 403a Thinksystem AIC CM5 NVMe SSD 0113 BG3 x2 NVMe SSD Controller (DRAM-less) 1179 0001 Toshiba KBG30ZMS128G 128GB NVMe SSD 0115 XG4 NVMe SSD Controller 0116 XG5 NVMe SSD Controller 1179 0001 XG5 NVMe SSD Controller 0119 XD5 NVMe SSD Controller 011a XG6 NVMe SSD Controller 0404 DVD Decoder card 0406 Tecra Video Capture device 0407 DVD Decoder card (Version 2) 0601 CPU to PCI bridge 1179 0001 Satellite Pro 0602 PCI to ISA bridge 0603 ToPIC95 PCI to CardBus Bridge for Notebooks 0604 PCI-Docking Host bridge 060a ToPIC95 1179 0001 Satellite Pro 060f ToPIC97 1179 0001 Satellite 4010 0617 ToPIC100 PCI to Cardbus Bridge with ZV Support 0618 CPU to PCI and PCI to ISA bridge 0701 FIR Port Type-O 0803 TC6371AF SD Host Controller 0804 TC6371AF SmartMedia Controller 0805 SD TypA Controller 0d01 FIR Port Type-DO 1179 0001 FIR Port Type-DO 9602 RS780/RS880 PCI to PCI bridge (int gfx) 117a A-Trend Technology 117b L G Electronics, Inc. 117c ATTO Technology, Inc. 002c ExpressSAS R380 002d ExpressSAS R348 0030 Ultra320 SCSI Host Adapter 117c 8013 ExpressPCI UL4D 117c 8014 ExpressPCI UL4S 117c 8027 ExpressPCI UL5D 117c 802f ExpressPCI UL5D Low Profile 0033 SAS Adapter 0041 ExpressSAS R30F 0042 ExpressSAS 6Gb/s SAS/SATA HBA 117c 0042 ExpressSAS H680 117c 0043 ExpressSAS H608 117c 0044 ExpressSAS H60F 117c 0045 ExpressSAS H6F0 117c 0046 ExpressSAS H644 117c 004f ExpressSAS M608 117c 0057 ExpressSAS M680 117c 0058 ExpressSAS M644 117c 0059 ExpressSAS W608 117c 005a ExpressSAS W680 117c 005b ExpressSAS W644 0049 ExpressSAS 6Gb SAS/SATA RAID Adapter 117c 0049 ExpressSAS R680 117c 004a ExpressSAS R608 117c 004b ExpressSAS R60F 117c 004c ExpressSAS R6F0 117c 004d ExpressSAS R644 117c 004e ExpressSAS R648 0064 Celerity FC 16Gb/s Gen 5 Fibre Channel HBA 117c 0063 Celerity FC-161E 117c 0064 Celerity FC-162E 117c 0065 Celerity FC-164E 0094 Celerity FC 16/32Gb/s Gen 6 Fibre Channel HBA 117c 0094 Celerity FC-162P 117c 00a0 Celerity FC-161P 117c 00a1 Celerity FC-164P 117c 00a2 Celerity FC-321E 117c 00a3 Celerity FC-322E 117c 00ac Celerity FC-324E 117c 40a6 ThunderLink TLFC-3162 117c 40a7 ThunderLink TLFC-3322 00a5 ExpressSAS 24Gb/s SAS/SATA HBA 117c 00d0 ExpressSAS H24F0 117c 00d1 ExpressSAS H240F 117c 00d2 ExpressSAS H240N 00bb Celerity FC 32/64Gb/s Gen 7 Fibre Channel HBA 117c 00bc Celerity FC-321P 117c 00bd Celerity FC-322P 117c 00be Celerity FC-324P 117c 00c9 Celerity FC-641E 117c 00ca Celerity FC-642E 117c 00d4 Celerity FC-644E 00c5 ExpressNVM PCIe Gen4 Switch 117c 00c6 ExpressNVM S48F PCIe Gen4 117c 00cb ExpressNVM S4FF PCIe Gen4 00e6 ExpressSAS GT 12Gb/s SAS/SATA HBA 117c 00c0 ExpressSAS H1280 GT 117c 00c1 ExpressSAS H1208 GT 117c 00c2 ExpressSAS H1244 GT 117c 00c3 ExpressSAS H12F0 GT 117c 00c4 ExpressSAS H120F GT 8013 ExpressPCI UL4D 8014 ExpressPCI UL4S 8027 ExpressPCI UL5D 8070 ExpressSAS 12Gb/s SAS/SATA HBA 117c 0070 ExpressSAS H1280 117c 0071 ExpressSAS H1208 117c 0080 ExpressSAS H1244 117c 40ae ThunderLink TLSH-3128 8072 ExpressSAS 12Gb/s SAS/SATA HBA 117c 0072 ExpressSAS H12F0 117c 0073 ExpressSAS H120F 117c 0081 ExpressSAS H1248 117c 0082 ExpressSAS H1288 117d Becton & Dickinson 117e T/R Systems 117f Integrated Circuit Systems 1180 Ricoh Co Ltd 0465 RL5c465 0466 RL5c466 0475 RL5c475 144d c006 vpr Matrix 170B4 CardBus bridge 0476 RL5c476 II 1014 0185 ThinkPad A/T/X Series 1014 0555 ThinkPad X41 1014 056c ThinkPad Z60t 1028 014f Latitude X300 laptop 1028 0188 Inspiron 6000 laptop 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 1043 1017 X58LE 1043 1237 A6J-Q008 1043 1967 V6800V 1043 1987 A4K and Z81K notebooks, possibly others ( mid-2005 machines ) 104d 80df Vaio PCG-FX403 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 104d 814e VAIO GRZ390Z 10f7 8338 Panasonic CF-Y5 laptop 144d c005 X10 Laptop 144d c00c P30/P35 notebook 14ef 0220 PCD-RP-220S 17aa 201c ThinkPad X60/X60s 17aa 20c4 ThinkPad T61/R61 17aa 20c6 ThinkPad R61/T400 0477 RL5c477 0478 RL5c478 1014 0184 ThinkPad A30p 0511 R5C511 0522 R5C522 IEEE 1394 Controller 1014 01cf ThinkPad A30p 1043 1967 V6800V 0551 R5C551 IEEE 1394 Controller 144d c006 vpr Matrix 170B4 0552 R5C552 IEEE 1394 Controller 1014 0511 ThinkPad A/T/X Series 1028 014f Latitude X300 laptop 1028 0188 Inspiron 6000 laptop 1043 1237 A6J-Q008 1043 1757 M2400N laptop 144d c005 X10 Laptop 144d c00c P30/P35 notebook 17aa 201e ThinkPad X60/X60s 0554 R5C554 0575 R5C575 SD Bus Host Adapter 0576 R5C576 SD Bus Host Adapter 0592 R5C592 Memory Stick Bus Host Adapter 1025 0121 Aspire 5920G 1028 01d7 XPS M1210 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 1521 HP EliteBook 8540w 103c 30b5 Presario V3242AU 103c 30b7 Presario V6133CL 103c 30cc Pavilion dv6700 103c 30cf Pavilion dv95xx/96xx/97xx/98xx series 1043 1017 X58LE 1043 1237 A6J-Q008 1043 1967 V6800V 104d 9035 VAIO VGN-FW11ZRU 144d c018 X20 IV 17aa 20ca ThinkPad T61/T400 0811 R5C811 0822 R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter 1014 0556 ThinkPad X40 / X41 / X60s / Z60t 1014 0598 ThinkPad Z60m 1025 0121 Aspire 5920G 1028 0188 Inspiron 6000 laptop 1028 01a2 Inspiron 9200 1028 01d7 XPS M1210 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 03b5 Presario V3242AU 103c 30b7 Presario V6133CL 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30cf Pavilion dv9668eg Laptop 1043 1017 X58LE 1043 1237 A6J-Q008 1043 1967 V6800V 10f7 8338 Panasonic CF-Y5 laptop 144d c018 X20 IV 17aa 201d ThinkPad X60/X60s 17aa 20c7 ThinkPad T61 17aa 20c8 ThinkPad T400/W500 0832 R5C832 IEEE 1394 Controller 1025 0121 Aspire 5920G 1028 01d7 XPS M1210 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 1028 024d Latitude E4300 103c 30b5 Presario V3242AU 103c 30b7 Presario V6133CL 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30cf Pavilion dv9668eg Laptop 17aa 20c5 ThinkPad R61 17aa 20c7 ThinkPad R61/T400 0841 R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394 0843 R5C843 MMC Host Controller 1025 0121 Aspire 5920G 1028 01d7 XPS M1210 1028 01f3 Inspiron 1420 1028 01f5 Inspiron 1501 1028 024f Latitude e6500 103c 03b5 Presario V3242AU 103c 1521 HP EliteBook 8540w 103c 30b7 Presario V6133CL 103c 30cf Pavilion dv9500/9600/9700 series 1043 1017 X58LE 1183 0843 Alienware Aurora m9700 0852 xD-Picture Card Controller 1025 0121 Aspire 5920G 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30b5 Presario V3242AU 103c 30b7 Presario V6133CL 103c 30cc Pavilion dv6700 103c 30cf Pavilion dv9668eg Laptop 1043 1967 V6800V 1180 0852 Pavilion 2410us 1324 10cf P7120 17aa 20cb ThinkPad T400 e230 R5U2xx (R5U230 / R5U231 / R5U241) [Memory Stick Host Controller] e476 CardBus bridge 1028 040a Latitude E6410 1028 040b Latitude E6510 e822 MMC/SD Host Controller 1028 040a Latitude E6410 1028 040b Latitude E6510 17aa 21cf ThinkPad T520 e823 PCIe SDXC/MMC Host Controller 17aa 21cf ThinkPad T520 e832 R5C832 PCIe IEEE 1394 Controller 1028 040a Latitude E6410 1028 040b Latitude E6510 17aa 21cf ThinkPad T520 e852 PCIe xD-Picture Card Controller 1181 Telmatics International 1183 Fujikura Ltd 1184 Forks Inc 1185 Dataworld International Ltd 1186 D-Link System Inc 1002 DL10050 Sundance Ethernet 1186 1002 DFE-550TX/FX 1186 1012 DFE-580TX 1025 AirPlus Xtreme G DWL-G650 Adapter 1026 AirXpert DWL-AG650 Wireless Cardbus Adapter 1043 AirXpert DWL-AG650 Wireless Cardbus Adapter 1300 RTL8139 Ethernet 1186 1300 DFE-538TX 10/100 Ethernet Adapter 1186 1301 DFE-530TX+ 10/100 Ethernet Adapter 1186 1303 DFE-528TX 10/100 Fast Ethernet PCI Adapter 1340 DFE-690TXD CardBus PC Card 1540 DFE-680TX 1541 DFE-680TXD CardBus PC Card 1561 DRP-32TXD Cardbus PC Card 3300 DWL-510 / DWL-610 802.11b [Realtek RTL8180L] 1186 3300 DWL-610 Wireless Cardbus Adapter 1186 3301 DWL-510 Wireless PCI Adapter 3a10 AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B) 3a11 AirXpert DWL-AG520 Wireless PCI Adapter(rev.B) 4000 DL2000-based Gigabit Ethernet 4001 DGE-550SX PCI-X Gigabit Ethernet Adapter 4200 DFE-520TX Fast Ethernet PCI Adapter 1186 1103 DFE-520TX Fast Ethernet PCI Adapter (rev. C1) 4300 DGE-528T Gigabit Ethernet Adapter 1186 4300 DGE-528T PCI Gigabit Ethernet Adapter # rev. B1; RealTek RTL8168E. 1186 4b10 DGE-560T PCI Express (x1) Gigabit Ethernet Adapter 4302 DGE-530T Gigabit Ethernet Adapter (rev.C1) [Realtek RTL8169] 4b00 DGE-560T PCI Express Gigabit Ethernet Adapter 4b01 DGE-530T Gigabit Ethernet Adapter (rev 11) 4b02 DGE-560SX PCI Express Gigabit Ethernet Adapter 4b03 DGE-550T Gigabit Ethernet Adapter V.B1 4c00 Gigabit Ethernet Adapter 1186 4c00 DGE-530T Gigabit Ethernet Adapter 8400 D-Link DWL-650+ CardBus PC Card 1187 Advanced Technology Laboratories, Inc. 1188 Shima Seiki Manufacturing Ltd. 1189 Matsushita Electronics Co Ltd 118a Hilevel Technology 118b Hypertec Pty Limited 118c Corollary, Inc 0014 PCIB [C-bus II to PCI bus host bridge chip] 1117 Intel 8-way XEON Profusion Chipset [Cache Coherency Filter] 118d BitFlow Inc 0001 Raptor-PCI framegrabber 0012 Model 12 Road Runner Frame Grabber 0014 Model 14 Road Runner Frame Grabber 0024 Model 24 Road Runner Frame Grabber 0044 Model 44 Road Runner Frame Grabber 0112 Model 12 Road Runner Frame Grabber 0114 Model 14 Road Runner Frame Grabber 0124 Model 24 Road Runner Frame Grabber 0144 Model 44 Road Runner Frame Grabber 0212 Model 12 Road Runner Frame Grabber 0214 Model 14 Road Runner Frame Grabber 0224 Model 24 Road Runner Frame Grabber 0244 Model 44 Road Runner Frame Grabber 0312 Model 12 Road Runner Frame Grabber 0314 Model 14 Road Runner Frame Grabber 0324 Model 24 Road Runner Frame Grabber 0344 Model 44 Road Runner Frame Grabber b04e Claxon CXP4 CoaXPress frame grabber 118e Hermstedt GmbH 118f Green Logic 1190 Tripace c731 TP-910/920/940 PCI Ultra(Wide) SCSI Adapter 1191 Artop Electronic Corp 0003 SCSI Cache Host Adapter 0004 ATP8400 0005 ATP850UF 0006 ATP860 NO-BIOS 0007 ATP860 0008 ATP865 NO-ROM 0009 ATP865 000a ATP867-A 000b ATP867-B 000d ATP8620 000e ATP8620 0011 ATP865-B 1191 0011 ACARD AEC-6280 8002 AEC6710 SCSI-2 Host Adapter 8010 AEC6712UW SCSI 8020 AEC6712U SCSI 8030 AEC6712S SCSI 8040 AEC6712D SCSI 8050 AEC6712SUW SCSI 8060 AEC6712 SCSI 8080 AEC67160 SCSI 8081 AEC67160S SCSI 808a AEC67162 2-ch. LVD SCSI 1192 Densan Company Ltd 1193 Zeitnet Inc. 0001 1221 0002 1225 1194 Toucan Technology 1195 Ratoc System Inc 1196 Hytec Electronics Ltd 1197 Gage Applied Sciences, Inc. 010c CompuScope 82G 8bit 2GS/s Analog Input Card 1198 Lambda Systems Inc 1199 Attachmate Corporation 0101 Advanced ISCA/PCI Adapter 119a Mind Share, Inc. 119b Omega Micro Inc. 1221 82C092G 119c Information Technology Inst. 119d Bug, Inc. Sapporo Japan 119e Fujitsu Microelectronics Ltd. 0001 FireStream 155 0003 FireStream 50 119f Bull HN Information Systems 1081 BXI Host Channel Adapter # BXI stands for Bull eXascale Interconnect 1101 BXI Host Channel Adapter v1.2 # BXI stands for Bull eXascale Interconnect 1121 BXI Host Channel Adapter v1.3 11a0 Convex Computer Corporation 11a1 Hamamatsu Photonics K.K. 11a2 Sierra Research and Technology 11a3 Deuretzbacher GmbH & Co. Eng. KG 11a4 Barco Graphics NV 11a5 Microunity Systems Eng. Inc 11a6 Pure Data Ltd. 11a7 Power Computing Corp. 11a8 Systech Corp. 11a9 InnoSys Inc. 4240 AMCC S933Q Intelligent Serial Card 11aa Actel # Nee Galileo Technology, Inc. 11ab Marvell Technology Group Ltd. 0100 88F3700 [Armada 3700 Family] ARM SoC 0110 88F60x0/88F70x0/88F80x0/CN913x ARM SoC 0146 GT-64010/64010A System Controller 0f53 88E6318 Link Street network controller 11ab MV88SE614x SATA II PCI-E controller 138f W8300 802.11 Adapter (rev 07) 1fa6 Marvell W8300 802.11 Adapter 1186 3b08 AirPlus G DWL-G630 Wireless Cardbus Adapter (rev.A1) 1fa7 88W8310 and 88W8000G [Libertas] 802.11g client chipset 1faa 88w8335 [Libertas] 802.11b/g Wireless 1385 4e00 WG511v2 54 Mbps Wireless PC Card 1385 6b00 WG311v3 802.11g Wireless PCI Adapter 1737 0040 WPC54G v5 802.11g Wireless-G Notebook Adapter 2211 88SB2211 PCI Express to PCI Bridge 2a01 88W8335 [Libertas] 802.11b/g Wireless 2a02 88W8361 [TopDog] 802.11n Wireless 07d1 3b02 DIR-615 rev. A1 Mini PCI Wireless Module 1385 7c00 WN511T RangeMax Next 300 Mbps Wireless PC Card 1385 7c01 WN511T RangeMax Next 300 Mbps Wireless Notebook Adapter 1385 7e00 WN311T RangeMax Next 300 Mbps Wireless PCI Adapter 1799 801b F5D8011 v2 802.11n N1 Wireless Notebook Card 2a08 88W8362e [TopDog] 802.11a/b/g/n Wireless 2a0a 88W8363 [TopDog] 802.11n Wireless 2a0c 88W8363 [TopDog] 802.11n Wireless 2a24 88W8363 [TopDog] 802.11n Wireless 2a2b 88W8687 [TopDog] 802.11b/g Wireless 2a30 88W8687 [TopDog] 802.11b/g Wireless 2a40 88W8366 [TopDog] 802.11n Wireless 2a41 88W8366 [TopDog] 802.11n Wireless 2a42 88W8366 [TopDog] 802.11n Wireless 2a43 88W8366 [TopDog] 802.11n Wireless 2a55 88W8864 [Avastar] 802.11ac Wireless 2b36 88W8764 [Avastar] 802.11n Wireless 2b38 88W8897 [AVASTAR] 802.11ac Wireless 2b40 88W8964 [Avastar] 802.11ac Wireless 4101 OLPC Cafe Controller Secure Digital Controller 4146 GT-64111 System Controller 4320 88E8001 Gigabit Ethernet Controller 1019 0f38 Marvell 88E8001 Gigabit Ethernet Controller (ECS) 1019 8001 Marvell 88E8001 Gigabit Ethernet Controller (ECS) 1043 173c Marvell 88E8001 Gigabit Ethernet Controller (Asus) 1043 811a Marvell 88E8001 Gigabit Ethernet Controller (Asus) 105b 0c19 Marvell 88E8001 Gigabit Ethernet Controller (Foxconn) 10b8 b452 EZ Card 1000 (SMC9452TXV.2) 11ab 0121 Marvell RDK-8001 11ab 0321 Marvell RDK-8003 11ab 1021 Marvell RDK-8010 11ab 4320 Marvell Yukon Gigabit Ethernet 10/100/1000Baset-T Constroller (Asus) 11ab 5021 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (64 bit) 11ab 9521 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (32 bit) 1458 e000 Marvell 88E8001 Gigabit Ethernet Controller (Gigabyte) 147b 1406 Marvell 88E8001 Gigabit Ethernet Controller (Abit) 15d4 0047 Marvell 88E8001 Gigabit Ethernet Controller (Iwill) 1695 9025 Marvell 88E8001 Gigabit Ethernet Controller (Epox) 17f2 1c03 Marvell 88E8001 Gigabit Ethernet Controller (Albatron) 270f 2803 Marvell 88E8001 Gigabit Ethernet Controller (Chaintech) 4340 88E8021 PCI-X IPMI Gigabit Ethernet Controller 4341 88E8022 PCI-X IPMI Gigabit Ethernet Controller 4342 88E8061 PCI-E IPMI Gigabit Ethernet Controller 4343 88E8062 PCI-E IPMI Gigabit Ethernet Controller 4344 88E8021 PCI-X IPMI Gigabit Ethernet Controller 4345 88E8022 PCI-X IPMI Gigabit Ethernet Controller 4346 88E8061 PCI-E IPMI Gigabit Ethernet Controller 4347 88E8062 PCI-E IPMI Gigabit Ethernet Controller 4c53 10d0 Telum ASLP10 PrAMC Gigabit Ethernet 4350 88E8035 PCI-E Fast Ethernet Controller 1179 0001 Marvell 88E8035 Fast Ethernet Controller (Toshiba) 11ab 3521 Marvell RDK-8035 1854 000d Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 000e Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 000f Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 0011 Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 0012 Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 0016 Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 0017 Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 0018 Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 0019 Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 001c Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 001e Marvell 88E8035 Fast Ethernet Controller (LGE) 1854 0020 Marvell 88E8035 Fast Ethernet Controller (LGE) 4351 88E8036 PCI-E Fast Ethernet Controller 107b 4009 Marvell 88E8036 Fast Ethernet Controller (Wistron) 10f7 8338 Marvell 88E8036 Fast Ethernet Controller (Panasonic) 1179 0001 Marvell 88E8036 Fast Ethernet Controller (Toshiba) 1179 ff00 Marvell 88E8036 Fast Ethernet Controller (Compal) 1179 ff10 Marvell 88E8036 Fast Ethernet Controller (Inventec) 11ab 3621 Marvell RDK-8036 13d1 ac12 Abocom EFE3K - 10/100 Ethernet Expresscard 161f 203d Marvell 88E8036 Fast Ethernet Controller (Arima) 1854 000d Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 000e Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 000f Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 0011 Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 0012 Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 0016 Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 0017 Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 0018 Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 0019 Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 001c Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 001e Marvell 88E8036 Fast Ethernet Controller (LGE) 1854 0020 Marvell 88E8036 Fast Ethernet Controller (LGE) 4352 88E8038 PCI-E Fast Ethernet Controller 4353 88E8039 PCI-E Fast Ethernet Controller 104d 902d VAIO VGN-NR120E 4354 88E8040 PCI-E Fast Ethernet Controller 1028 022f Inspiron 1525 144d c06a R730 Laptop 144d c072 Notebook N150P 4355 88E8040T PCI-E Fast Ethernet Controller 1179 ff50 Satellite P305D-S8995E 4356 88EC033 PCI-E Fast Ethernet Controller 4357 88E8042 PCI-E Fast Ethernet Controller 435a 88E8048 PCI-E Fast Ethernet Controller 4360 88E8052 PCI-E ASF Gigabit Ethernet Controller 1043 8134 Marvell 88E8052 Gigabit Ethernet Controller (Asus) 107b 4009 Marvell 88E8052 Gigabit Ethernet Controller (Wistron) 11ab 5221 Marvell RDK-8052 1458 e000 Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte) 1462 052c Marvell 88E8052 Gigabit Ethernet Controller (MSI) 1849 8052 Marvell 88E8052 Gigabit Ethernet Controller (ASRock) a0a0 0509 Marvell 88E8052 Gigabit Ethernet Controller (Aopen) 4361 88E8050 PCI-E ASF Gigabit Ethernet Controller 107b 3015 Marvell 88E8050 Gigabit Ethernet Controller (Gateway) 11ab 5021 Marvell 88E8050 Gigabit Ethernet Controller (Intel) 8086 3063 D925XCVLK mainboard 8086 3439 Marvell 88E8050 Gigabit Ethernet Controller (Intel) 4362 88E8053 PCI-E Gigabit Ethernet Controller 103c 2a0d Marvell 88E8053 Gigabit Ethernet Controller (Asus) 1043 8142 Marvell 88E8053 Gigabit Ethernet controller PCIe (Asus) 109f 3197 Marvell 88E8053 Gigabit Ethernet Controller (Trigem) 10f7 8338 Marvell 88E8053 Gigabit Ethernet Controller (Panasonic) 10fd a430 Marvell 88E8053 Gigabit Ethernet Controller (SOYO) 1179 0001 Marvell 88E8053 Gigabit Ethernet Controller (Toshiba) 1179 ff00 Marvell 88E8053 Gigabit Ethernet Controller (Compal) 1179 ff10 Marvell 88E8053 Gigabit Ethernet Controller (Inventec) 11ab 5321 Marvell RDK-8053 1297 c240 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) 1297 c241 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) 1297 c242 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) 1297 c243 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) 1297 c244 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) 13d1 ac11 EGE5K - Giga Ethernet Expresscard 1458 e000 Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte) 1462 058c Marvell 88E8053 Gigabit Ethernet Controller (MSI) 14c0 0012 Marvell 88E8053 Gigabit Ethernet Controller (Compal) 1558 04a0 Marvell 88E8053 Gigabit Ethernet Controller (Clevo) 15bd 1003 Marvell 88E8053 Gigabit Ethernet Controller (DFI) 161f 203c Marvell 88E8053 Gigabit Ethernet Controller (Arima) 161f 203d Marvell 88E8053 Gigabit Ethernet Controller (Arima) 1695 9029 Marvell 88E8053 Gigabit Ethernet Controller (Epox) 17f2 2c08 Marvell 88E8053 Gigabit Ethernet Controller (Albatron) 17ff 0585 Marvell 88E8053 Gigabit Ethernet Controller (Quanta) 1849 8053 Marvell 88E8053 Gigabit Ethernet Controller (ASRock) 1854 000b Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 000c Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 0010 Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 0013 Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 0014 Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 0015 Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 001a Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 001b Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 001d Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 001f Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 0021 Marvell 88E8053 Gigabit Ethernet Controller (LGE) 1854 0022 Marvell 88E8053 Gigabit Ethernet Controller (LGE) 270f 2801 Marvell 88E8053 Gigabit Ethernet Controller (Chaintech) a0a0 0506 Marvell 88E8053 Gigabit Ethernet Controller (Aopen) 4363 88E8055 PCI-E Gigabit Ethernet Controller 4364 88E8056 PCI-E Gigabit Ethernet Controller 1043 81f8 Motherboard 11ba 00ba 8056 Gigabit Ethernet Controller 4365 88E8070 based Ethernet Controller 4366 88EC036 PCI-E Gigabit Ethernet Controller 4367 88EC032 Ethernet Controller 4368 88EC034 Ethernet Controller 4369 88EC042 Ethernet Controller 436a 88E8058 PCI-E Gigabit Ethernet Controller 11ab 00ba Imac 8,1 Wired Ethernet Adapter 436b 88E8071 PCI-E Gigabit Ethernet Controller 436c 88E8072 PCI-E Gigabit Ethernet Controller 436d 88E8055 PCI-E Gigabit Ethernet Controller 4370 88E8075 PCI-E Gigabit Ethernet Controller 4380 88E8057 PCI-E Gigabit Ethernet Controller # AVB = "Audio Video Bridging" 4381 Yukon Optima 88E8059 [PCIe Gigabit Ethernet Controller with AVB] 1259 2803 AT-2814FX 1259 2804 AT-2874xx 4611 GT-64115 System Controller 4620 GT-64120/64120A/64121A System Controller 4801 GT-48001 5005 Belkin F5D5005 Gigabit Desktop Network PCI Card 5040 MV88SX5040 4-port SATA I PCI-X Controller 5041 MV88SX5041 4-port SATA I PCI-X Controller 5080 MV88SX5080 8-port SATA I PCI-X Controller 5081 MV88SX5081 8-port SATA I PCI-X Controller 5181 88f5181 [Orion-1] ARM SoC 5182 88f5182 [Orion-NAS] ARM SoC 5281 88f5281 [Orion-2] ARM SoC 6041 MV88SX6041 4-port SATA II PCI-X Controller 6042 88SX6042 PCI-X 4-Port SATA-II 6081 MV88SX6081 8-port SATA II PCI-X Controller 6101 88SE6101/6102 single-port PATA133 interface 1043 82e0 P5K PRO Motherboard 6121 88SE6111/6121 SATA II / PATA Controller # 6111: 1 SATA port; 6121: 2 SATA ports 11ab 6121 88SE6111/6121 1/2 port SATA II + 1 port PATA Controller 6141 88SE614x SATA II PCI-E controller 6145 88SE6145 SATA II PCI-E controller 6180 88F6180 [Kirkwood] ARM SoC 6192 88F6190/6192 [Kirkwood] ARM SoC 6281 88F6281 [Kirkwood] ARM SoC # This device ID was used for earlier chips. 6381 MV78xx0 [Discovery Innovation] ARM SoC 6440 88SE63x0 x1, 88SE6440 x4 PCIe SAS/SATA 3Gb/s RAID controller 6450 64560 System Controller 6460 MV64360/64361/64362 System Controller 6480 MV64460/64461/64462 System Controller 1775 c200 C2K CompactPCI single board computer 6485 MV64460/64461/64462 System Controller, Revision B 6560 88F6560 [Avanta] ARM SoC 6710 88F6710 [Armada 370] ARM SoC 6820 88F6820 [Armada 385] ARM SoC 6828 88F6828 [Armada 388] ARM SoC 6920 88F6920 [Armada 390] ARM SoC 7042 88SX7042 PCIe 4-port SATA-II controller 16b8 434b Tempo SATA E4P 7810 MV78100 [Discovery Innovation] ARM SoC 7820 MV78200 [Discovery Innovation] ARM SoC 7823 MV78230 [Armada XP] ARM SoC 7846 MV78460 [Armada XP] ARM SoC d40f Bobcat3 Ethernet Switch f003 GT-64010 Primary Image Piranha Image Generator 11ac Canon Information Systems Research Aust. 11ad Lite-On Communications Inc 0002 LNE100TX 11ad 0002 LNE100TX 11ad 0003 LNE100TX 11ad f003 LNE100TX 11ad ffff LNE100TX 1385 f004 FA310/TX LAN 10/100 PCI Ethernet Adapter 2646 f002 KNE110TX EtheRx Fast Ethernet c115 LNE100TX [Linksys EtherFast 10/100] 11ad c001 LNE100TX [ver 2.0] 2646 000b KNE111TX 11ae Aztech System Ltd 11af Avid Technology Inc. 0001 Cinema ee21 Digidesign DSP Farm ee40 Digidesign Audiomedia III ee60 Digidesign SampleCell II / II Plus 11b0 V3 Semiconductor Inc. 0002 V300PSC 0292 V292PBC [Am29030/40 Bridge] 0960 V96xPBC 880a Deltacast Delta-HD-22 c960 V96DPC 11b1 Apricot Computers 11b2 Eastman Kodak 11b3 Barr Systems Inc. 11b4 Leitch Technology International 11b5 Radstone Technology Plc 11b6 United Video Corp 11b7 Motorola 11b8 XPoint Technologies, Inc 0001 Quad PeerMaster 11b9 Pathlight Technology Inc. c0ed SSA Controller 11ba Videotron Corp 11bb Pyramid Technology 11bc Network Peripherals Inc 0001 NP-PCI 11bd Pinnacle Systems Inc. 0015 FireWire Controller 0023 Studio 700 002e PCTV 40i 0040 Royal TS Function 1 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 1 11bd 0045 PCTV Dual Sat Pro PCI 4000i Tuner 1 0041 RoyalTS Function 2 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 2 11bd 0045 PCTV Dual Sat Pro PCI 4000i Tuner 2 0042 Royal TS Function 3 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Common 11bd 0045 PCTV Dual Sat Pro PCI 4000i Common 0051 PCTV HD 800i bede AV/DV Studio Capture Card 11be International Microcircuits Inc 11bf Astrodesign, Inc. 11c0 Hewlett Packard # nee Agere Systems nee Lucent Microelectronics 11c1 LSI Corporation 0440 56k WinModem 1033 8015 LT WinModem 56k Data+Fax+Voice+Dsvd 1033 8047 LT WinModem 56k Data+Fax+Voice+Dsvd 1033 804f LT WinModem 56k Data+Fax+Voice+Dsvd 10cf 102c LB LT Modem V.90 56k 10cf 104a BIBLO LT Modem 56k 10cf 105f LB2 LT Modem V.90 56k 1179 0001 Internal V.90 Modem 11c1 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 122d 4101 MDP7800-U Modem 122d 4102 MDP7800SP-U Modem 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 0441 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 0450 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 f100 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 f101 LT WinModem 56k Data+Fax+Voice+Dsvd 144d 2101 LT56PV Modem 149f 0440 LT WinModem 56k Data+Fax+Voice+Dsvd 0441 56k WinModem 1033 804d LT WinModem 56k Data+Fax 1033 8065 LT WinModem 56k Data+Fax 1092 0440 Supra 56i 1179 0001 Internal V.90 Modem 11c1 0440 LT WinModem 56k Data+Fax 11c1 0441 LT WinModem 56k Data+Fax 122d 4100 MDP7800-U Modem 13e0 0040 LT WinModem 56k Data+Fax 13e0 0100 LT WinModem 56k Data+Fax 13e0 0410 LT WinModem 56k Data+Fax 13e0 0420 TelePath Internet 56k WinModem 13e0 0440 LT WinModem 56k Data+Fax 13e0 0443 LT WinModem 56k Data+Fax 13e0 f102 LT WinModem 56k Data+Fax 1416 9804 CommWave 56k Modem 141d 0440 LT WinModem 56k Data+Fax 144f 0441 Lucent 56k V.90 DF Modem 144f 0449 Lucent 56k V.90 DF Modem 144f 110d Lucent Win Modem 1468 0441 Presario 56k V.90 DF Modem 1668 0440 Lucent Win Modem 0442 56k WinModem 11c1 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 11c1 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 13e0 0412 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 13e0 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 13fc 2471 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 144d 2104 LT56PT Modem 144f 1104 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 149f 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 1668 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 0443 LT WinModem 0444 LT WinModem 0445 LT WinModem 8086 2203 PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card) 8086 2204 PRO/100+ MiniPCI on Armada E500 0446 LT WinModem 0447 LT WinModem 0448 WinModem 56k 1014 0131 Lucent Win Modem 1033 8066 LT WinModem 56k Data+Fax+Voice+Dsvd 13e0 0030 56k Voice Modem 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd # Actiontech eth+modem card as used by Dell &c. 1668 2400 LT WinModem 56k (MiniPCI Ethernet+Modem) 0449 L56xM+S [Mars-2] WinModem 56k 0e11 b14d 56k V.90 Modem 1014 018c ThinkPad 600X 13e0 0020 LT WinModem 56k Data+Fax 13e0 0041 TelePath Internet 56k WinModem 1436 0440 Lucent Win Modem 144f 0449 Lucent 56k V.90 DFi Modem 1468 0410 IBM ThinkPad T23 1468 0440 Lucent Win Modem 1468 0449 Presario 56k V.90 DFi Modem 044a F-1156IV WinModem (V90, 56KFlex) 10cf 1072 LB Global LT Modem 13e0 0012 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 13e0 0042 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 144f 1005 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd 044b LT WinModem 044c LT WinModem 044d LT WinModem 044e LT WinModem 044f V90 WildWire Modem 0450 LT WinModem 1033 80a8 Versa Note Vxi 144f 4005 Magnia SG20 1468 0450 Evo N600c 0451 LT WinModem 0452 LT WinModem 0453 LT WinModem 0454 LT WinModem 0455 LT WinModem 0456 LT WinModem 0457 LT WinModem 0458 LT WinModem 0459 LT WinModem 045a LT WinModem 045c LT WinModem 0461 V90 WildWire Modem 0462 V90 WildWire Modem 0480 Venus Modem (V90, 56KFlex) 048c V.92 56K WinModem # InPorte Home Internal 56k Modem/fax/answering machine/SMS Features 048f V.92 56k WinModem 0620 Lucent V.92 Data/Fax Modem 2600 StarPro26XX family (SP2601, SP2603, SP2612) DSP 5400 OR3TP12 FPSC 5656 Venus Modem 5801 USB 5802 USS-312 USB Controller 5803 USS-344S USB Controller 5811 FW322/323 [TrueFire] 1394a Controller 103c 2a34 Pavilion a1677c 103c 2a6f Asus IPIBL-LB Motherboard 103c 2a9e Pavilion p6310f 1043 8294 LSI FW322/323 IEEE 1394a FireWire Controller 11bd 000e LSI FW323 8086 524c D865PERL mainboard 9005 0033 Adaptec AFW-2100 (HP) 2102900-R dead 0800 FireWire Host Bus Adapter 5901 FW643 [TrueFire] PCIe 1394b Controller 11c1 5900 FW643 [TrueFire] PCIe 1394b Controller 1443 0643 FireBoard800-e V.2 1546 0643 FWB-PCIE1X2x 5903 FW533 [TrueFire] PCIe 1394a Controller 8110 T8110 H.100/H.110 TDM switch 12d9 000c E1/T1 PMXc cPCI carrier card ab10 WL60010 Wireless LAN MAC ab11 WL60040 Multimode Wireles LAN MAC 11c1 ab12 WaveLAN 11abg Cardbus card (Model 1102) 11c1 ab13 WaveLAN 11abg MiniPCI card (Model 0512) 11c1 ab15 WaveLAN 11abg Cardbus card (Model 1106) 11c1 ab16 WaveLAN 11abg MiniPCI card (Model 0516) ab20 ORiNOCO PCI Adapter ab21 Agere Wireless PCI Adapter ab30 Hermes2 Mini-PCI WaveLAN a/b/g 14cd 2012 Hermes2 Mini-PCI WaveLAN a/b/g ed00 ET-131x PCI-E Ethernet Controller ed01 ET-131x PCI-E Ethernet Controller 11c2 Sand Microelectronics 11c3 NEC Corporation 11c4 Document Technologies, Inc 11c5 Shiva Corporation 11c6 Dainippon Screen Mfg. Co. Ltd 11c7 D.C.M. Data Systems 11c8 Dolphin Interconnect Solutions AS 0658 PSB32 SCI-Adapter D31x d665 PSB64 SCI-Adapter D32x d667 PSB66 SCI-Adapter D33x 11c9 Magma 0010 16-line serial port w/- DMA 0011 4-line serial port w/- DMA 11ca LSI Systems, Inc 11cb Specialix Research Ltd. 2000 PCI_9050 11cb 0200 SX 11cb b008 I/O8+ 4000 SUPI_1 8000 T225 11cc Michels & Kleberhoff Computer GmbH 11cd HAL Computer Systems, Inc. 11ce Netaccess 11cf Pioneer Electronic Corporation 11d0 Lockheed Martin Federal Systems-Manassas 11d1 Auravision 01f7 VxP524 01f9 VxP951 11d2 Intercom Inc. 11d3 Trancell Systems Inc 11d4 Analog Devices 1535 Blackfin BF535 processor 1805 SM56 PCI modem 11d5 Ikon Corporation 0115 10115 0117 10117 11d6 Tekelec Telecom 11d7 Trenton Technology, Inc. 11d8 Image Technologies Development 11d9 TEC Corporation 11da Novell 11db Sega Enterprises Ltd 11dc Questra Corporation 11dd Crosfield Electronics Limited 11de Zoran Corporation 6017 miroVIDEO DC30 6057 ZR36057PQC Video cutting chipset 1031 7efe DC10 Plus 1031 fc00 MiroVIDEO DC50, Motion JPEG Capture/CODEC Board 12f8 8a02 Tekram Video Kit 13ca 4231 JPEG/TV Card 6120 ZR36120 1328 f001 Cinemaster C DVD Decoder 13c2 0000 MediaFocus Satellite TV Card 1de1 9fff Video Kit C210 11df New Wave PDG 11e0 Cray Communications A/S 11e1 GEC Plessey Semi Inc. 11e2 Samsung Information Systems America 11e3 Quicklogic Corporation 0001 COM-ON-AIR Dosch&Amand DECT 0010 QL5032 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0011 QL5032 (PBGA256) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0012 QL5232 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 11e3 1204 Becker & Hickl SPC-130 11e3 1207 Becker & Hickl DDG-200 11e3 1209 Becker & Hickl SHM-180 11e3 120c Becker & Hickl PMM-428 0013 QL5232 (PBGA456) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0014 QL5030 (TQFP144) [QuickPCI] 33 MHz/32-bit PCI Target with Embedded Programmable Logic and Dual Port SRAM 0015 QL5130 (TQFP144) [QuickPCI] 33 MHz/32-bit PCI Target with Embedded Programmable Logic and Dual Port SRAM 0016 QL5130 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Target with Embedded Programmable Logic and Dual Port SRAM 11e3 120b Becker & Hickl DEL-350 0017 QL5130 (PBGA256) [QuickPCI] 33 MHz/32-bit PCI Target with Embedded Programmable Logic and Dual Port SRAM 0019 QL5332 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 001a QL5332 (PBGA256) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 001b QL5432 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 11e3 120d Becker & Hickl SPC-140 11e3 1211 Becker & Hickl GVD-120 11e3 1212 Becker & Hickl DDG-210 001c QL5432 (PBGA456) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 001d QL5632 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 001e QL5632 (PBGA280) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 001f QL5632 (PBGA484) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0020 QL5632 (PBGA516) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0021 QL5732 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0022 QL5732 (PBGA280) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0023 QL5732 (PBGA484) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 0024 QL5732 (PBGA516) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 002d QL5022 (TQFP144) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 002e QL5022 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Master/Target with Embedded Programmable Logic and Dual Port SRAM 002f QL5020 (TQFP144) [QuickPCI] 33 MHz/32-bit PCI Target with Embedded Programmable Logic and Dual Port SRAM 0030 QL5020 (PQFP208) [QuickPCI] 33 MHz/32-bit PCI Target with Embedded Programmable Logic and Dual Port SRAM 0560 QL5064 Companion Design Demo Board 5030 PC Watchdog 8417 QL5064 [QuickPCI] PCI v2.2 bridge for SMT417 Dual TMS320C6416T PMC Module 11e4 Second Wave Inc 11e5 IIX Consulting 11e6 Mitsui-Zosen System Research 11e7 Toshiba America, Elec. Company 11e8 Digital Processing Systems Inc. 11e9 Highwater Designs Ltd. 11ea Elsag Bailey 11eb Formation Inc. 11ec Coreco Inc 000d Oculus-F/64P 1800 Cobra/C6 11ed Mediamatics 11ee Dome Imaging Systems Inc 11ef Nicolet Technologies B.V. 11f0 Compu-Shack 4231 FDDI 4232 FASTline UTP Quattro 4233 FASTline FO 4234 FASTline UTP 4235 FASTline-II UTP 4236 FASTline-II FO 4731 GIGAline 11f1 Symbios Logic Inc 11f2 Picture Tel Japan K.K. 11f3 Keithley Metrabyte 0011 KPCI-PIO24 4200 42x0-SMU 4205 4205-VPU 4215 4200-VPU 4216 422x-PxU 4220 4200-CVU 4221 4210-CVU 11f4 Kinetic Systems Corporation 2915 CAMAC controller 11f5 Computing Devices International 11f6 Compex 0112 ENet100VG4 0113 FreedomLine 100 1401 ReadyLink 2000 2011 RL100-ATX 10/100 11f6 2011 RL100-ATX 2201 ReadyLink 100TX (Winbond W89C840) 11f6 2011 ReadyLink 100TX 9881 RL100TX Fast Ethernet 11f7 Scientific Atlanta # née PMC-Sierra Inc. 11f8 Microchip Technology 4036 PM40036 Switchtec PFX 36xG4 Fanout PCIe Switch 4052 PM40052 Switchtec PFX 52xG4 Fanout PCIe Switch 4084 PM40084 Switchtec PFX 84xG4 Fanout PCIe Switch 4128 PM41028 Switchtec PSX 28xG4 Programmable PCIe Switch 5000 PM50100 Switchtec PFX 100xG5 Fanout PCIe Switch 5028 PM50028 Switchtec PFX 28xG5 Fanout PCIe Switch 5036 PM50036 Switchtec PFX 36xG5 Fanout PCIe Switch 5052 PM50052 Switchtec PFX 52xG5 Fanout PCIe Switch 5068 PM50068 Switchtec PFX 68xG5 Fanout PCIe Switch 5084 PM50084 Switchtec PFX 84xG5 Fanout PCIe Switch 5100 PM51100 Switchtec PSX 100xG5 Programmable PCIe Switch 5128 PM51028 Switchtec PSX 28xG5 Programmable PCIe Switch 5136 PM51036 Switchtec PSX 36xG5 Programmable PCIe Switch 5152 PM51052 Switchtec PSX 52xG5 Programmable PCIe Switch 5168 PM51068 Switchtec PSX 68xG5 Programmable PCIe Switch 5184 PM51084 Switchtec PSX 84xG5 Programmable PCIe Switch 5220 BR522x [PMC-Sierra maxRAID SAS Controller] 7364 PM7364 [FREEDM - 32 Frame Engine & Datalink Mgr] 7375 PM7375 [LASAR-155 ATM SAR] 7384 PM7384 [FREEDM - 84P672 Frm Engine & Datalink Mgr] 8000 PM8000 [SPC - SAS Protocol Controller] 8009 PM8009 SPCve 8x6G 8018 PM8018 Adaptec SAS Adaptor ASA-70165H PCIe Gen3 x8 6 Gbps 16-lane 4x SFF-8644 8032 PM8032 Tachyon QE8 117c 003a Celerity FC-81EN Fibre Channel Adapter 117c 003b Celerity FC-82EN Fibre Channel Adapter 117c 003c Celerity FC-84EN Fibre Channel Adapter 117c 403b ThunderLink FC 1082 Fibre Channel Adapter 8053 PM8053 SXP 12G 24-port SAS/SATA expander 8054 PM8054 SXP 12G 36-port SAS/SATA expander 8055 PM8055 SXP 12G 48-port SAS/SATA expander 8056 PM8056 SXP 12G 68-port SAS/SATA expander 8060 PM8060 SRCv 12G eight-port SAS/SATA RoC 8063 PM8063 SRCv 12G 16-port SAS/SATA RoC 8070 PM8070 Tachyon SPCv 12G eight-port SAS/SATA controller 8071 PM8071 Tachyon SPCve 12G eight-port SAS/SATA controller 8072 PM8072 Tachyon SPCv 12G 16-port SAS/SATA controller 8073 PM8073 Tachyon SPCve 12G 16-port SAS/SATA controller 8531 PM8531 PFX 24xG3 PCIe Fanout Switch 8532 PM8532 PFX 32xG3 PCIe Fanout Switch 8533 PM8533 PFX 48xG3 PCIe Fanout Switch 8534 PM8534 PFX 64xG3 PCIe Fanout Switch 8535 PM8535 PFX 80xG3 PCIe Fanout Switch 8536 PM8536 PFX 96xG3 PCIe Fanout Switch 1bd4 0081 PM8536 PFX 96xG3 PCIe Fanout Switch 8546 PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch 8562 PM8562 Switchtec PFX-L 32xG3 Fanout-Lite PCIe Gen3 Switch 11f9 I-Cube Inc 11fa Kasan Electronics Company, Ltd. 11fb Datel Inc 11fc Silicon Magic 11fd High Street Consultants # nee Comtrol, Inc. 11fe Pepperl+Fuchs 0001 RocketPort PCI 32-port w/external I/F 0002 RocketPort PCI 8-port w/external I/F 0003 RocketPort PCI 16-port w/external I/F 0004 RocketPort PCI 4-port w/Quad Cable 0005 RocketPort PCI 8-port w/Octa Cable 0006 RocketPort PCI 8-port w/RJ11 connectors 0007 RocketPort PCI 4-port w/RJ45 connectors 0008 RocketPort PCI 8-port w/DB78 SNI connector (Siemens) 0009 RocketPort PCI 16-port w/DB78 SNI connector (Siemens) 000a RocketPort PCI Plus 4-port w/Quad Cable 000b RocketPort PCI Plus 8-port w/Octa Cable 000c RocketModem II 6-port 000d RocketModem 4-port 000e RocketPort PCI Plus 2-port RS-232 w/DB9 connectors 000f RocketPort PCI Plus 2-port SMPTE w/DB9 connectors 0040 RocketPort INFINITY 8-port w/Octa Cable RJ45 0041 RocketPort INFINITY 32-port w/external I/F 0042 RocketPort INFINITY 8-port w/external I/F 0043 RocketPort INFINITY 16-port w/external I/F 0044 RocketPort INFINITY 4-port w/Quad Cable DB 0045 RocketPort INFINITY 8-port w/Octa Cable DB 0046 RocketPort INFINITY 4-port w/external I/F 0047 RocketPort INFINITY 4J (4-port) w/RJ45 connectors 0048 RocketPort INFINITY 4J (4-port) w/RJ45 connectors 004a RocketPort INFINITY Plus 4-port 004b RocketPort INFINITY Plus 8-port 004c RocketModem INFINITY III 8-port 004d RocketModem INFINITY III 4-port 004e RocketPort INFINITY Plus 2-port 004f RocketPort INFINITY 2-port SMPTE w/DB9 connectors 0050 RocketPort INFINITY Plus 4-port RJ45 0051 RocketPort INFINITY Plus 8-port RJ11 0052 RocketPort INFINITY 8-port SMPTE w/DB9 Connectors 0060 RocketPort EXPRESS 8-port w/Octa Cable 0061 RocketPort EXPRESS 32-port w/external I/F 0062 RocketPort EXPRESS 8-Port w/external I/F 0063 RocketPort EXPRESS 16-port w/external I/F 0064 RocketPort EXPRESS 4-port w/Quad Cable 0065 RocketPort EXPRESS 8-port w/Octa Cable 0066 RocketPort EXPRESS 4-port w/external I/F 0067 RocketPort EXPRESS 4J (4-port) w/RJ45 connectors 0068 RocketPort EXPRESS 8J (8-port) w/RJ11 connectors 006f RocketPort EXPRESS SMPTE 2-port 0072 RocketPort EXPRESS SMPTE 8-port w/external I/F 0801 RocketPort uPCI 32-port w/external I/F 0802 RocketPort uPCI 8-port w/external I/F 0803 RocketPort uPCI 16-port w/external I/F 0805 RocketPort uPCI 8-port w/Octa Cable 080b RocketPort Plus uPCI 8-port w/Octa Cable 080c RocketModem III 8-port 080d RocketModem III 4-port 080e RocketPort uPCI 2-port RS232 w/DB9 connectors 080f RocketPort uPCI SMPTE 2-port 0810 RocketPort Plus uPCI 4J (4-port) w/RJ45 connectors 0811 RocketPort Plus uPCI 8J (8-port) w/RJ11 connectors 0812 RocketPort Plus uPCI 422 8-port 0813 RocketModem IV uPCI 8-port 0814 RocketModem IV uPCI 4-port 0903 RocketPort Compact PCI 16 port w/external I/F # 16954 UART 8015 RocketPort 550 4-port 8805 RocketPort uPCI 4-port w/Quad Cable 880b RocketPort Plus uPCI 4-port w/Quad Cable 8812 RocketPort Plus uPCI 4-port RS422 w/Quad Cable 11ff Scion Corporation 0003 AG-5 1200 CSS Corporation 1201 Vista Controls Corp 1202 Network General Corp. 4300 Gigabit Ethernet Adapter 1202 9841 SK-9841 LX 1202 9842 SK-9841 LX dual link 1202 9843 SK-9843 SX 1202 9844 SK-9843 SX dual link 1203 Bayer Corporation, Agfa Division 1204 Lattice Semiconductor Corporation 1965 SB6501 802.11ad Wireless Network Adapter 1205 Array Corporation 1206 Amdahl Corporation 1208 Parsytec GmbH 4853 HS-Link Device 1209 SCI Systems Inc 120a Synaptel 120b Adaptive Solutions 120c Technical Corp. 120d Compression Labs, Inc. 120e Cyclades Corporation 0100 Cyclom-Y below first megabyte 0101 Cyclom-Y above first megabyte 0102 Cyclom-4Y below first megabyte 0103 Cyclom-4Y above first megabyte 0104 Cyclom-8Y below first megabyte 0105 Cyclom-8Y above first megabyte 0200 Cyclades-Z below first megabyte 0201 Cyclades-Z above first megabyte 0300 PC300/RSV or /X21 (2 ports) 0301 PC300/RSV or /X21 (1 port) 0310 PC300/TE (2 ports) 0311 PC300/TE (1 port) 0320 PC300/TE-M (2 ports) 0321 PC300/TE-M (1 port) 0400 PC400 120f Essential Communications 0001 Roadrunner serial HIPPI 1210 Hyperparallel Technologies 1211 Braintech Inc 1213 Applied Intelligent Systems, Inc. 1214 Performance Technologies, Inc. 1215 Interware Co., Ltd 1216 Purup Prepress A/S 1217 O2 Micro, Inc. 00f7 Firewire (IEEE 1394) 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 1179 ff50 Satellite P305D-S8995E 10f7 1394 OHCI Compliant Host Controller 11f7 OZ600 1394a-2000 Controller 1028 04a3 Precision M4600 13f7 1394 OHCI Compliant Host Controller 6729 OZ6729 673a OZ6730 6832 OZ6832/6833 CardBus Controller [Saturn] 6836 OZ6836/6860 CardBus Controller [Mercury] 6872 OZ6812 CardBus Controller [Challenger] 6925 OZ6922 CardBus Controller 6933 OZ6933/711E1 CardBus/SmartCardBus Controller 1025 1016 Travelmate 612 TX 6972 OZ601/6912/711E0 CardBus/SmartCardBus Controller 1014 020c ThinkPad R30 1028 0152 Latitude D500 1179 0001 Magnia Z310 7110 OZ711Mx 4-in-1 MemoryCardBus Accelerator 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 1734 106c Amilo A1645 7112 OZ711EC1/M1 SmartCardBus/MemoryCardBus Controller 7113 OZ711EC1 SmartCardBus Controller 1025 0035 TravelMate 660 7114 OZ711M1/MC1 4-in-1 MemoryCardBus Controller 7120 Integrated MMC/SD Controller 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 1179 ff50 Satellite P305D-S8995E 7130 Integrated MS/xD Controller 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 1179 ff50 Satellite P305D-S8995E 7134 OZ711MP1/MS1 MemoryCardBus Controller 7135 Cardbus bridge 7136 OZ711SP1 Memory CardBus Controller 71e2 OZ711E2 SmartCardBus Controller 7212 OZ711M2 4-in-1 MemoryCardBus Controller 7213 OZ6933E CardBus Controller 7223 OZ711M3/MC3 4-in-1 MemoryCardBus Controller 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 10cf 11c4 Lifebook P5020D Laptop 7233 OZ711MP3/MS3 4-in-1 MemoryCardBus Controller 8120 Integrated MMC/SD Controller 8130 Integrated MS/MSPRO/xD Controller 8220 OZ600FJ1/OZ900FJ1 SD/MMC Card Reader Controller 8221 OZ600FJ0/OZ900FJ0/OZ600FJS SD/MMC Card Reader Controller 8320 OZ600RJ1/OZ900RJ1 SD/MMC Card Reader Controller 1028 04a3 Precision M4600 8321 OZ600RJ0/OZ900RJ0/OZ600RJS SD/MMC Card Reader Controller 8330 OZ600 MS/xD Controller 1028 04a3 Precision M4600 8331 O2 Flash Memory Card 8520 SD/MMC Card Reader Controller 8621 SD/MMC Card Reader Controller 17aa 5068 Thinkpad E480/E580 8760 FORESEE E2M2 NVMe SSD 1218 Hybricon Corp. 1219 First Virtual Corporation 121a 3Dfx Interactive, Inc. 0001 Voodoo 0002 Voodoo 2 0003 Voodoo Banshee 1092 0003 Monster Fusion 1092 4000 Monster Fusion 1092 4002 Monster Fusion 1092 4801 Monster Fusion AGP 1092 4803 Monster Fusion AGP 1092 8030 Monster Fusion 1092 8035 Monster Fusion AGP 10b0 0001 Dragon 4000 1102 1017 3D Blaster Banshee PCI (CT6760) 1102 1018 3D Blaster Banshee VE 121a 0001 Voodoo Banshee AGP 121a 0003 Voodoo Banshee AGP SGRAM 121a 0004 Voodoo Banshee 139c 0016 Raven 139c 0017 Raven 14af 0002 Maxi Gamer Phoenix 0004 Voodoo Banshee [Velocity 100] 0005 Voodoo 3 121a 0004 Voodoo3 AGP 121a 0030 Voodoo3 AGP 121a 0031 Voodoo3 AGP 121a 0034 Voodoo3 AGP 121a 0036 Voodoo3 2000 PCI 121a 0037 Voodoo3 AGP 121a 0038 Voodoo3 AGP 121a 003a Voodoo3 AGP 121a 0044 Voodoo3 121a 004b Velocity 100 121a 004c Velocity 200 121a 004d Voodoo3 AGP 121a 004e Voodoo3 AGP 121a 0051 Voodoo3 AGP 121a 0052 Voodoo3 AGP 121a 0057 Voodoo3 3000 PCI 121a 0060 Voodoo3 3500 TV (NTSC) 121a 0061 Voodoo3 3500 TV (PAL) 121a 0062 Voodoo3 3500 TV (SECAM) 0009 Voodoo 4 / Voodoo 5 121a 0003 Voodoo5 PCI 5500 121a 0009 Voodoo5 AGP 5500/6000 0057 Voodoo 3/3000 [Avenger] 121b Advanced Telecommunications Modules 121c Nippon Texaco., Ltd 121d LiPPERT ADLINK Technology GmbH 121e CSPI 0201 Myrinet 2000 Scalable Cluster Interconnect 121f Arcus Technology, Inc. 1220 Ariel Corporation 1220 AMCC 5933 TMS320C80 DSP/Imaging board 1221 Contec Co., Ltd 9172 PO-64L(PCI)H [Isolated Digital Output Board for PCI] 91a2 PO-32L(PCI)H [Isolated Digital Output Board for PCI] 91c3 DA16-16(LPCI)L [Un-insulated highly precise analog output board for Low Profile PCI] b152 DIO-96D2-LPCI c103 ADA16-32/2(PCI)F [High-Speed Analog I/O Board for PCI] 1222 Ancor Communications, Inc. 1223 Artesyn Communication Products 0003 PM/Link 0004 PM/T1 0005 PM/E1 0008 PM/SLS 0009 BajaSpan Resource Target 000a BajaSpan Section 0 000b BajaSpan Section 1 000c BajaSpan Section 2 000d BajaSpan Section 3 000e PM/PPC 1224 Interactive Images 1225 Power I/O, Inc. 1227 EIZO Rugged Solutions 0006 Raptor GFX 8P 0023 Raptor GFX [1100T] 0045 Raptor 4000-L [Linux version] 004a Raptor 4000-LR-L [Linux version] 1228 Norsk Elektro Optikk A/S 1229 Data Kinesis Inc. 122a Integrated Telecom 122b LG Industrial Systems Co., Ltd 122c Sican GmbH 122d Aztech System Ltd 1206 368DSP 1400 Trident PCI288-Q3DII (NX) 50dc 3328 Audio 122d 0001 3328 Audio 80da 3328 Audio 122d 0001 3328 Audio 122e Xyratex 7722 Napatech XL1 7724 Napatech XL2/XA 7729 Napatech XD 122f Andrew Corporation 1230 Fishcamp Engineering 1231 Woodward McCoach, Inc. 04e1 Desktop PCI Telephony 4 05e1 Desktop PCI Telephony 5/6 0d00 LightParser 0d02 LightParser 2 0d13 Desktop PCI L1/L3 Telephony 1232 GPT Limited 1233 Bus-Tech, Inc. # nee Risq Modular Systems, Inc. 1235 SMART Modular Technologies c241 CXA-4F1W 1028 2382 4-DIMM Add In Card 1236 Sigma Designs Corporation 0000 RealMagic64/GX 6401 REALmagic 64/GX (SD 6425) 1237 Alta Technology Corporation 1238 Adtran 1239 3DO Company 123a Visicom Laboratories, Inc. 123b Seeq Technology, Inc. 123c Century Systems, Inc. 123d Engineering Design Team, Inc. 0000 PCI 11W 0047 PCIe4 CDa 004b PCIe4 CDa 16 009d VisionLink F1 00a0 PCIe8g3 S5 (10G/40G) 00a3 VisionLink F4 00a9 VisionLink CLS 00ab PCIe8g3 A5 10G 00b5 PCIe8 RFx SDR 123e Simutech, Inc. # nee C-Cube Microsystems / acquired by Magnum Semiconductor 123f LSI Logic 00e4 MPEG 8120 DVxplore Codec 10de 01e1 NVTV PAL 10de 01e2 NVTV NTSC 10de 01e3 NVTV PAL 10de 0248 NVTV NTSC 10de 0249 NVTV PAL 11bd 0006 DV500 E4 11bd 000a DV500 E4 11bd 000f DV500 E4 1809 0016 Emuzed MAUI-III PCI PVR FM TV 8888 Cinemaster C 3.0 DVD Decoder 1002 0001 Cinemaster C 3.0 DVD Decoder 1002 0002 Cinemaster C 3.0 DVD Decoder 1328 0001 Cinemaster C 3.0 DVD Decoder 1240 Marathon Technologies Corp. 1241 DSC Communications # Formerly Jaycor Networks, Inc. 1242 JNI Corporation 1560 JNIC-1560 PCI-X Fibre Channel Controller 1242 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter 1242 656a FCX-6562 PCI-X Fibre Channel Adapter 4643 FCI-1063 Fibre Channel Adapter 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter 656a FCX-6562 PCI-X Fibre Channel Adapter 1243 Delphax # Audio-Visuelles Marketing und Computersysteme 1244 AVM GmbH 0700 B1 ISDN 0800 C4 ISDN 0a00 A1 ISDN [Fritz] 1244 0a00 FRITZ!Card ISDN Controller 0e00 Fritz!Card PCI v2.0 ISDN 0e80 Fritz!Card PCI v2.1 ISDN 1244 0e00 PSB 3100F (AVM KAFKA) [Fritz!Card PCI v2.1] 1100 C2 ISDN 1200 T1 ISDN 2700 Fritz!Card DSL SL 2900 Fritz!Card DSL v2.0 1245 A.P.D., S.A. 1246 Dipix Technologies, Inc. 1247 Xylon Research, Inc. 1248 Central Data Corporation 1249 Samsung Electronics Co., Ltd. 124a AEG Electrocom GmbH 124b SBS/Greenspring Modular I/O 0040 PCI-40A or cPCI-200 Quad IndustryPack carrier 124b 9080 PCI9080 Bridge 124c Solitron Technologies, Inc. 124d Stallion Technologies, Inc. 0000 EasyConnection 8/32 0002 EasyConnection 8/64 0003 EasyIO 0004 EasyConnection/RA 124e Cylink 124f Infortrend Technology, Inc. 0041 IFT-2000 Series RAID Controller 1250 Hitachi Microcomputer System Ltd 1251 VLSI Solutions Oy 1253 Guzik Technical Enterprises 1254 Linear Systems Ltd. 0065 DVB Master FD 007c DVB Master Quad/o 1255 Optibase Ltd 1110 MPEG Forge 1210 MPEG Fusion 2110 VideoPlex 2120 VideoPlex CC 2130 VideoQuest 1256 Perceptive Solutions, Inc. 4201 PCI-2220I 4401 PCI-2240I 5201 PCI-2000 1257 Vertex Networks, Inc. 1258 Gilbarco, Inc. # nee Allied Telesyn International 1259 Allied Telesis 2560 AT-2560 Fast Ethernet Adapter (i82557B) 2801 AT-2801FX (RTL-8139) a117 RTL81xx Fast Ethernet a11e RTL81xx Fast Ethernet a120 21x4x DEC-Tulip compatible 10/100 Ethernet 125a ABB Power Systems 125b Asix Electronics Corporation 1400 AX88141 Fast Ethernet Controller 1186 1100 AX8814X Based PCI Fast Ethernet Adapter 9100 AX99100 PCIe to Multi I/O Controller a000 1000 Serial Port a000 2000 Parallel Port a000 6000 SPI a000 7000 Local Bus ea50 1c10 RXi2-BP 125c Aurora Technologies, Inc. 0101 Saturn 4520P 0640 Aries 16000P 125d ESS Technology 0000 ES336H Fax Modem (Early Model) 1948 ES1948 Maestro-1 1968 ES1968 Maestro 2 1028 0085 ES1968 Maestro-2 PCI 1033 8051 ES1968 Maestro-2 Audiodrive 1969 ES1938/ES1946/ES1969 Solo-1 Audiodrive 1014 0162 16 Bit PCI Audio Adapter (37L4457) 1014 0166 ES1969 SOLO-1 AudioDrive on IBM Aptiva Mainboard 121f 8800 eDio Hi-Live SC1938 125d 8888 Solo-1 Audio Adapter 125d 8898 ES1938S TTSOLO1-SL [TerraTec 128i PCI] 153b 111b Terratec 128i PCI 1978 ES1978 Maestro 2E 0e11 b112 Armada M700/E500 1033 803c ES1978 Maestro-2E Audiodrive 1033 8058 ES1978 Maestro-2E Audiodrive 1092 4000 Monster Sound MX400 1179 0001 ES1978 Maestro-2E Audiodrive 1988 ES1988 Allegro-1 0e11 0098 Evo N600c 1092 4100 Sonic Impact S100 125d 0431 Allegro AudioDrive 125d 1988 ESS Allegro-1 Audiodrive 125d 1998 Allegro AudioDrive 125d 1999 Allegro-1 AudioDrive 1989 ESS Modem 125d 1989 ESS Modem 1990 ES1990S Canyon3D 2LE 1992 ES1992S Canyon3D 2 1998 ES1983S Maestro-3i PCI Audio Accelerator 1028 00b1 Latitude C600 1028 00e5 Latitude C810 1028 00e6 ES1983S Maestro-3i (Dell Inspiron 8100) 1999 ES1983S Maestro-3i PCI Modem Accelerator 199a ES1983S Maestro-3i PCI Audio Accelerator 199b ES1983S Maestro-3i PCI Modem Accelerator 2808 ES336H Fax Modem (Later Model) 2838 ES2838/2839 SuperLink Modem 2898 ES2898 Modem 125d 0424 ES56-PI Data Fax Modem 125d 0425 ES56T-PI Data Fax Modem 125d 0426 ES56V-PI Data Fax Modem 125d 0427 VW-PI Data Fax Modem 125d 0428 ES56ST-PI Data Fax Modem 125d 0429 ES56SV-PI Data Fax Modem 147a c001 ES56-PI Data Fax Modem 148d 1030 HCF WV-PI56 [ESS ES56-PI Data Fax Modem] 14fe 0428 ES56-PI Data Fax Modem 14fe 0429 ES56-PI Data Fax Modem 125e Specialvideo Engineering SRL 125f Concurrent Technologies, Inc. # 4x serial ports, 2x printer ports 2071 CC PMC/232 # 4x serial ports, 2x printer ports 2084 CC PMC/23P # 4x serial ports, RS422 2091 CC PMC/422 1260 Intersil Corporation 3872 ISL3872 [Prism 3] 1468 0202 LAN-Express IEEE 802.11b Wireless LAN 3873 ISL3874 [Prism 2.5]/ISL3872 [Prism 3] 10cf 1169 MBH7WM01-8734 802.11b Wireless Mini PCI Card [ISL3874] 1186 3501 DWL-520 Wireless PCI Adapter (rev A or B) [ISL3874] 1186 3700 DWL-520 Wireless PCI Adapter (rev E1) [ISL3872] 1385 4105 MA311 802.11b wireless adapter [ISL3874] 1668 0414 HWP01170-01 802.11b PCI Wireless Adapter 16a5 1601 AIR.mate PC-400 PCI Wireless LAN Adapter 1737 3874 WMP11 v1 802.11b Wireless-B PCI Adapter [ISL3874] 4033 7033 PCW200 802.11b Wireless PCI Adapter [ISL3874] 8086 2510 M3AWEB Wireless 802.11b MiniPCI Adapter 8086 2513 Wireless 802.11b MiniPCI Adapter 3877 ISL3877 [Prism Indigo] 3886 ISL3886 [Prism Javelin/Prism Xbow] 17cf 0037 XG-901 and clones Wireless Adapter 3890 ISL3890 [Prism GT/Prism Duette]/ISL3886 [Prism Javelin/Prism Xbow] 10b8 2802 SMC2802W V1 Wireless PCI Adapter [ISL3890] 10b8 2835 SMC2835W Wireless Cardbus Adapter 10b8 a835 SMC2835W V2 Wireless Cardbus Adapter 1113 4203 WN4201B 1113 8201 T-Com T-Sinus 154pcicard Wireless PCI Adapter 1113 b301 T-Sinus 154card Cardbus 1113 ee03 SMC2802W V2 Wireless PCI Adapter [ISL3886] 1113 ee08 SMC2835W V3 EU Wireless Cardbus Adapter 1186 3202 DWL-G650 A1 Wireless Adapter 1259 c104 CG-WLCB54GT Wireless Adapter 1260 0000 WG511 v1 54 Mbps Wireless PC Card 1385 4800 WG511 v2/v3 54 Mbps Wireless PC Card 16a5 1605 ALLNET ALL0271 Wireless PCI Adapter 17cf 0014 XG-600 and clones Wireless Adapter 17cf 0020 XG-900 and clones Wireless Adapter 187e 3403 G-110 802.11g Wireless Cardbus Adapter 8130 HMP8130 NTSC/PAL Video Decoder 8131 HMP8131 NTSC/PAL Video Decoder # This is probably more likely a HW fault, but I am keeping it for now --mj ffff ISL3886IK 1260 0000 Senao 3054MP+ (J) mini-PCI WLAN 802.11g adapter 1261 Matsushita-Kotobuki Electronics Industries, Ltd. 1262 ES Computer Company, Ltd. 1263 Sonic Solutions 1264 Aval Nagasaki Corporation 1265 Casio Computer Co., Ltd. 1266 Microdyne Corporation 0001 NE10/100 Adapter (i82557B) 1910 NE2000Plus (RT8029) Ethernet Adapter 1266 1910 NE2000Plus Ethernet Adapter 1267 S. A. Telecommunications 5352 PCR2101 5a4b Telsat Turbo 1268 Tektronix # nee Thomson-CSF/TTM 1269 Thales # MBIM on top of MHI 00b3 5G Data Card [Cinterion MV31-W] 126a Lexmark International, Inc. 126b Adax, Inc. 126c Northern Telecom 1211 10/100BaseTX [RTL81xx] 126c 802.11b Wireless Ethernet Adapter 126d Splash Technology, Inc. 126e Sumitomo Metal Industries, Ltd. 126f Silicon Motion, Inc. 0501 SM501 VoyagerGX Rev. AA 0510 SM501 VoyagerGX Rev. B 0710 SM710 LynxEM 0712 SM712 LynxEM+ 0718 SM718 LynxSE+ 0720 SM720 Lynx3DM 0730 SM731 Cougar3DR 0750 SM750 0768 SM768 0810 SM810 LynxE 0811 SM811 LynxE 0820 SM820 Lynx3D 0910 SM910 2260 SM2260 NVMe SSD Controller 2261 SM2261XT x2 NVMe SSD Controller (DRAM-less) 2262 SM2262/SM2262EN SSD Controller 2263 SM2263EN/SM2263XT (DRAM-less) NVMe SSD Controllers 2268 SM2268XT (DRAM-less) NVMe SSD Controller 2269 SM2269XT (DRAM-less) NVMe SSD Controller 8366 SM8366 NVMe SSD Controller [MonTitan] 1270 Olympus Optical Co., Ltd. 1271 GW Instruments 1272 Telematics International 1273 Hughes Network Systems 0002 DirecPC 1274 Ensoniq 1171 ES1373 / Creative Labs CT5803 [AudioPCI] 1371 ES1371/ES1373 / Creative Labs CT2518 0e11 0024 AudioPCI on Motherboard Compaq Deskpro 0e11 b1a7 ES1371, ES1373 AudioPCI 1033 80ac ES1371, ES1373 AudioPCI 1042 1854 Tazer 107b 8054 Tabor2 1274 1371 Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI] 1274 8001 CT4751 board 1462 6470 ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A 1462 6560 ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10 1462 6630 ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A 1462 6631 ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A 1462 6632 ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A 1462 6633 ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A 1462 6820 ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00 1462 6822 ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A 1462 6830 ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00 1462 6880 ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00 1462 6900 ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00 1462 6910 ES1371, ES1373 AudioPCI On Motherboard MS-6191 1462 6930 ES1371, ES1373 AudioPCI On Motherboard MS-6193 1462 6990 ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A 1462 6991 ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A 14a4 2077 ES1371, ES1373 AudioPCI On Motherboard KR639 14a4 2105 ES1371, ES1373 AudioPCI On Motherboard MR800 14a4 2107 ES1371, ES1373 AudioPCI On Motherboard MR801 14a4 2172 ES1371, ES1373 AudioPCI On Motherboard DR739 1509 9902 ES1371, ES1373 AudioPCI On Motherboard KW11 1509 9903 ES1371, ES1373 AudioPCI On Motherboard KW31 1509 9904 ES1371, ES1373 AudioPCI On Motherboard KA11 1509 9905 ES1371, ES1373 AudioPCI On Motherboard KC13 152d 8801 ES1371, ES1373 AudioPCI On Motherboard CP810E 152d 8802 ES1371, ES1373 AudioPCI On Motherboard CP810 152d 8803 ES1371, ES1373 AudioPCI On Motherboard P3810E 152d 8804 ES1371, ES1373 AudioPCI On Motherboard P3810-S 152d 8805 ES1371, ES1373 AudioPCI On Motherboard P3820-S 270f 2001 ES1371, ES1373 AudioPCI On Motherboard 6CTR 270f 2200 ES1371, ES1373 AudioPCI On Motherboard 6WTX 270f 3000 ES1371, ES1373 AudioPCI On Motherboard 6WSV 270f 3100 ES1371, ES1373 AudioPCI On Motherboard 6WIV2 270f 3102 ES1371, ES1373 AudioPCI On Motherboard 6WIV 270f 7060 ES1371, ES1373 AudioPCI On Motherboard 6ASA2 8086 4249 ES1371, ES1373 AudioPCI On Motherboard BI440ZX 8086 424c ES1371, ES1373 AudioPCI On Motherboard BL440ZX 8086 425a ES1371, ES1373 AudioPCI On Motherboard BZ440ZX 8086 4341 ES1371, ES1373 AudioPCI On Motherboard Cayman 8086 4343 ES1371, ES1373 AudioPCI On Motherboard Cape Cod 8086 4541 D815EEA Motherboard 8086 4649 ES1371, ES1373 AudioPCI On Motherboard Fire Island 8086 464a ES1371, ES1373 AudioPCI On Motherboard FJ440ZX 8086 4d4f ES1371, ES1373 AudioPCI On Motherboard Montreal 8086 4f43 ES1371, ES1373 AudioPCI On Motherboard OC440LX 8086 5243 ES1371, ES1373 AudioPCI On Motherboard RC440BX 8086 5352 ES1371, ES1373 AudioPCI On Motherboard SunRiver 8086 5643 ES1371, ES1373 AudioPCI On Motherboard Vancouver 8086 5753 ES1371, ES1373 AudioPCI On Motherboard WS440BX 5000 ES1370 [AudioPCI] 5880 5880B / Creative Labs CT5880 1274 2000 Creative CT4810 [Sound Blaster AudioPCI 128] 1274 2003 Creative SoundBlaster AudioPCI 128 1274 5880 Creative CT4750 [Sound Blaster PCI 128] 1274 8001 Creative CT4750 [Sound Blaster 16 PCI/PCI 128/4.1 Digital] 1458 a000 5880 AudioPCI On Motherboard 6OXET 1462 6880 5880 AudioPCI On Motherboard MS-6188 1.00 270f 2001 5880 AudioPCI On Motherboard 6CTR 270f 2200 5880 AudioPCI On Motherboard 6WTX 270f 7040 5880 AudioPCI On Motherboard 6ATA4 8001 CT5880 [AudioPCI] 8002 5880A [AudioPCI] 1275 Network Appliance Corporation 1276 Switched Network Technologies, Inc. 1277 Comstream 1278 Transtech Parallel Systems Ltd. 0701 TPE3/TM3 PowerPC Node 0710 TPE5 PowerPC PCI board 1100 PMC-FPGA02 1101 TS-C43 card with 4 ADSP-TS101 processors 1279 Transmeta Corporation 0060 TM8000 Northbridge 0061 TM8000 AGP bridge 0295 Northbridge 0395 LongRun Northbridge 0396 SDRAM controller 0397 BIOS scratchpad 127a Rockwell International 1002 HCF 56k Data/Fax Modem 1092 094c SupraExpress 56i PRO [Diamond SUP2380] 122d 4002 HPG / MDP3858-U 122d 4005 MDP3858-E 122d 4007 MDP3858-A/-NZ 122d 4012 MDP3858-SA 122d 4017 MDP3858-W 122d 4018 MDP3858-W 127a 1002 Rockwell 56K D/F HCF Modem 1003 HCF 56k Data/Fax Modem 0e11 b0bc 229-DF Zephyr 0e11 b114 229-DF Cheetah 1033 802b 229-DF 13df 1003 PCI56RX Modem 13e0 0117 IBM 13e0 0147 IBM F-1156IV+/R3 Spain V.90 Modem 13e0 0197 IBM 13e0 01c7 IBM F-1156IV+/R3 WW V.90 Modem 13e0 01f7 IBM 1436 1003 IBM 1436 1103 IBM 5614PM3G V.90 Modem 1436 1602 Compaq 229-DF Ducati 1004 HCF 56k Data/Fax/Voice Modem 1048 1500 MicroLink 56k Modem 10cf 1059 Fujitsu 229-DFRT 1005 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 1005 127a AOpen FM56-P 1033 8029 229-DFSV 1033 8054 Modem 10cf 103c Fujitsu 10cf 1055 Fujitsu 229-DFSV 10cf 1056 Fujitsu 229-DFSV 122d 4003 MDP3858SP-U 122d 4006 Packard Bell MDP3858V-E 122d 4008 MDP3858SP-A/SP-NZ 122d 4009 MDP3858SP-E 122d 4010 MDP3858V-U 122d 4011 MDP3858SP-SA 122d 4013 MDP3858V-A/V-NZ 122d 4015 MDP3858SP-W 122d 4016 MDP3858V-W 122d 4019 MDP3858V-SA 13df 1005 PCI56RVP Modem 13e0 0187 IBM 13e0 01a7 IBM 13e0 01b7 IBM DF-1156IV+/R3 Spain V.90 Modem 13e0 01d7 IBM DF-1156IV+/R3 WW V.90 Modem 1436 1005 IBM 1436 1105 IBM 1437 1105 IBM 5614PS3G V.90 Modem 1022 HCF 56k Modem 1436 1303 M3-5614PM3G V.90 Modem 1023 HCF 56k Data/Fax Modem 122d 4020 Packard Bell MDP3858-WE 122d 4023 MDP3858-UE 13e0 0247 IBM F-1156IV+/R6 Spain V.90 Modem 13e0 0297 IBM 13e0 02c7 IBM F-1156IV+/R6 WW V.90 Modem 1436 1203 IBM 1436 1303 IBM 1024 HCF 56k Data/Fax/Voice Modem 1025 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 10cf 106a Fujitsu 235-DFSV 122d 4021 Packard Bell MDP3858V-WE 122d 4022 MDP3858SP-WE 122d 4024 MDP3858V-UE 122d 4025 MDP3858SP-UE 1026 HCF 56k PCI Speakerphone Modem 1032 HCF 56k Modem 1033 HCF 56k Modem 1034 HCF 56k Modem 1035 HCF 56k PCI Speakerphone Modem 1036 HCF 56k Modem 1085 HCF 56k Volcano PCI Modem 2004 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 2005 HCF 56k Data/Fax Modem 104d 8044 229-DFSV 104d 8045 229-DFSV 104d 8055 PBE/Aztech 235W-DFSV 104d 8056 235-DFSV 104d 805a Modem 104d 805f Modem 104d 8074 Modem 2013 HSF 56k Data/Fax Modem 1179 0001 Modem 1179 ff00 Modem 2014 HSF 56k Data/Fax/Voice Modem 10cf 1057 Fujitsu Citicorp III 122d 4050 MSP3880-U 122d 4055 MSP3880-W 2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 10cf 1063 Fujitsu 10cf 1064 Fujitsu 1468 2015 Fujitsu 2016 HSF 56k Data/Fax/Voice/Spkp Modem 122d 4051 MSP3880V-W 122d 4052 MSP3880SP-W 122d 4054 MSP3880V-U 122d 4056 MSP3880SP-U 122d 4057 MSP3880SP-A 4311 Riptide HSF 56k PCI Modem 127a 4311 Ring Modular? Riptide HSF RT HP Dom 13e0 0210 HP-GVC 4320 Riptide PCI Audio Controller 1235 4320 Riptide PCI Audio Controller 4321 Riptide HCF 56k PCI Modem 1235 4321 Hewlett Packard DF 1235 4324 Hewlett Packard DF 13e0 0210 Hewlett Packard DF 144d 2321 Riptide 4322 Riptide PCI Game Controller 1235 4322 Riptide PCI Game Controller 8234 RapidFire 616X ATM155 Adapter 108d 0022 RapidFire 616X ATM155 Adapter 108d 0027 RapidFire 616X ATM155 Adapter 127b Pixera Corporation 127c Crosspoint Solutions, Inc. 127d Vela Research 127e Winnov, L.P. 0010 Videum 1000 Plus 127f Fujifilm 1280 Photoscript Group Ltd. 1281 Yokogawa Electric Corporation 1282 Davicom Semiconductor, Inc. 6585 DM562P V90 Modem 9009 DM9009 Ethernet Controller 9100 21x4x DEC-Tulip compatible 10/100 Ethernet 9102 DM9102 Fast Ethernet Controller # Subsystem ID is main ID reveresed. 0291 8212 DM9102A (DM9102AE, SM9102AF) Ethernet 100/10 MBit 9132 Ethernet 100/10 MBit 1283 Integrated Technology Express, Inc. 673a IT8330G 8152 IT8152F/G Advanced RISC-to-PCI Companion Chip 8211 ITE 8211F Single Channel UDMA 133 1043 8138 P5GD1-VW Mainboard 8212 IT8212 Dual channel ATA RAID controller 1283 0001 IT/ITE8212 Dual channel ATA RAID controller 8213 IT8213 IDE Controller 1458 b000 GA-EG45M-DS2H Mainboard 8330 IT8330G 8872 IT887xF PCI to ISA I/O chip with SMB, GPIO, Serial or Parallel Port 8888 IT8888F/G PCI to ISA Bridge with SMB [Golden Gate] 8889 IT8889F PCI to ISA Bridge 8892 IT8892E PCIe to PCI Bridge 8086 200d DH61CR motherboard 8893 IT8893E PCIe to PCI Bridge e886 IT8330G 1284 Sahara Networks, Inc. 1285 Platform Technologies, Inc. 0100 AGOGO sound chip (aka ESS Maestro 1) 1286 Mazet GmbH 1287 M-Pact, Inc. 001e LS220D DVD Decoder 001f LS220C DVD Decoder 1288 Timestep Corporation 1289 AVC Technology, Inc. 128a Asante Technologies, Inc. 128b Transwitch Corporation 128c Retix Corporation 128d G2 Networks, Inc. 0021 ATM155 Adapter 128e Hoontech Corporation/Samho Multi Tech Ltd. 0008 ST128 WSS/SB 0009 ST128 SAM9407 000a ST128 Game Port 000b ST128 MPU Port 000c ST128 Ctrl Port 128f Tateno Dennou, Inc. 1290 Sord Computer Corporation 1291 NCS Computer Italia 1292 Tritech Microelectronics Inc fc02 Pyramid3D TR25202 1293 Media Reality Technology 1294 Rhetorex, Inc. 1295 Imagenation Corporation 0800 PXR800 1000 PXD1000 1296 Kofax Image Products 1297 Holco Enterprise Co, Ltd/Shuttle Computer 9602 RS780/RS880 PCI to PCI bridge (int gfx) 1298 Spellcaster Telecommunications Inc. 1299 Knowledge Technology Lab. 129a VMetro, inc. 0615 PBT-615 PCI-X Bus Analyzer 0715 cPCI Bus Analyzer 1100 PMC-FPGA05 1106 XMC-FPGA05F, PCI interface 1107 XMC-FPGA05F, PCIe interface 1108 XMC-FPGA05D, PCI interface 1109 XMC-FPGA05D, PCIe interface 129b Image Access 129c Jaycor 129d Compcore Multimedia, Inc. 129e Victor Company of Japan, Ltd. 129f OEC Medical Systems, Inc. 12a0 Allen-Bradley Company 12a1 Simpact Associates, Inc. 12a2 Newgen Systems Corporation 12a3 Lucent Technologies 8105 T8105 H100 Digital Switch 12a4 NTT Innovative Devices Corporation 12a5 Vision Dynamics Ltd. 12a6 Scalable Networks, Inc. 12a7 AMO GmbH 12a8 News Datacom 12a9 Xiotech Corporation 12aa SDL Communications, Inc. 12ab YUAN High-Tech Development Co., Ltd. 0000 MPG160/Kuroutoshikou ITVC15-STVLP 0002 AU8830 [Vortex2] Based Sound Card With A3D Support 0003 T507 (DVB-T) TV tuner/capture device 2300 Club-3D Zap TV2100 3000 MPG-200C PCI DVD Decoder Card 4789 MPC788 MiniPCI Hybrid TV Tuner fff3 MPG600/Kuroutoshikou ITVC16-STVLP ffff MPG600/Kuroutoshikou ITVC16-STVLP 12ac Measurex Corporation 12ad Multidata GmbH 12ae Alteon Networks Inc. 0001 AceNIC Gigabit Ethernet 1014 0104 Gigabit Ethernet-SX PCI Adapter 12ae 0001 Gigabit Ethernet-SX (Universal) 0002 AceNIC Gigabit Ethernet (Copper) 10a9 8002 Acenic Gigabit Ethernet 12ae 0002 Gigabit Ethernet-T (3C986-T) 00fa Farallon PN9100-T Gigabit Ethernet 12af TDK Corporation 5831 GBDriver GX1 x2 NVMe SSD Controller (DRAM-less) 12b0 Jorge Scientific Corp 12b1 GammaLink 12b2 General Signal Networks 12b3 Inter-Face Co Ltd 12b4 FutureTel Inc 12b5 Granite Systems Inc. 12b6 Natural Microsystems 12b7 Cognex Corporation 12b8 Korg # Nee US Robotics 12b9 3Com Corp, Modem Division 1006 WinModem 12b9 005c USR 56k Internal Voice WinModem (Model 3472) 12b9 005e USR 56k Internal WinModem (Models 662975) 12b9 0062 USR 56k Internal Voice WinModem (Model 662978) 12b9 0068 USR 56k Internal Voice WinModem (Model 5690) 12b9 007a USR 56k Internal Voice WinModem (Model 662974) 12b9 007f USR 56k Internal WinModem (Models 5698, 5699) 12b9 0080 USR 56k Internal WinModem (Models 2975, 3528) 12b9 0081 USR 56k Internal Voice WinModem (Models 2974, 3529) 12b9 0091 USR 56k Internal Voice WinModem (Model 2978) 1007 USR 56k Internal WinModem 12b9 00a3 USR 56k Internal WinModem (Model 3595) 12b9 00c4 U.S. Robotics V.92 Voice Faxmodem (2884A/B/C) 1008 56K FaxModem Model 5610 12b9 00a2 USR 56k Internal FAX Modem (Model 2977) 12b9 00aa USR 56k Internal Voice Modem (Model 2976) 12b9 00ab USR 56k Internal Voice Modem (Model 5609) 12b9 00ac USR 56k Internal Voice Modem (Model 3298) 12b9 00ad USR 56k Internal FAX Modem (Model 5610) 12b9 00d3 USR 56K Internal V92 FAX Modem (Model 5610) 12b9 baba USR 56K Internal Voice Modem 3CP3298-DEL (Model 5601) [Hawk] 12ba BittWare, Inc. 12bb Nippon Unisoft Corporation 12bc Array Microsystems 12bd Computerm Corp. 12be Anchor Chips Inc. 3041 AN3041Q CO-MEM 3042 AN3042Q CO-MEM Lite 12be 3042 Anchor Chips Lite Evaluation Board 12bf Fujifilm Microdevices 12c0 Infimed 12c1 GMM Research Corp 12c2 Mentec Limited 12c3 Holtek Microelectronics Inc 0058 PCI NE2K Ethernet 5598 PCI NE2K Ethernet 12c4 Connect Tech Inc 0001 Blue HEAT/PCI 8 (RS232/CL/RJ11) 0002 Blue HEAT/PCI 4 (RS232) 0003 Blue HEAT/PCI 2 (RS232) 0004 Blue HEAT/PCI 8 (UNIV, RS485) 0005 Blue HEAT/PCI 4+4/6+2 (UNIV, RS232/485) 0006 Blue HEAT/PCI 4 (OPTO, RS485) 0007 Blue HEAT/PCI 2+2 (RS232/485) 0008 Blue HEAT/PCI 2 (OPTO, Tx, RS485) 0009 Blue HEAT/PCI 2+6 (RS232/485) 000a Blue HEAT/PCI 8 (Tx, RS485) 000b Blue HEAT/PCI 4 (Tx, RS485) 000c Blue HEAT/PCI 2 (20 MHz, RS485) 000d Blue HEAT/PCI 2 PTM 0100 NT960/PCI 0201 cPCI Titan - 2 Port 0202 cPCI Titan - 4 Port 0300 CTI PCI UART 2 (RS232) 0301 CTI PCI UART 4 (RS232) 0302 CTI PCI UART 8 (RS232) 0310 CTI PCI UART 1+1 (RS232/485) 0311 CTI PCI UART 2+2 (RS232/485) 0312 CTI PCI UART 4+4 (RS232/485) 0320 CTI PCI UART 2 0321 CTI PCI UART 4 0322 CTI PCI UART 8 0330 CTI PCI UART 2 (RS485) 0331 CTI PCI UART 4 (RS485) 0332 CTI PCI UART 8 (RS485) 12c5 Picture Elements Incorporated 007e Imaging/Scanning Subsystem Engine 007f Imaging/Scanning Subsystem Engine 0081 PCIVST [Grayscale Thresholding Engine] 0085 Video Simulator/Sender 0086 THR2 Multi-scale Thresholder 12c6 Mitani Corporation 12c7 Dialogic Corp # 12 Line, 6 port, CT-BUS/SC-BUS, loopstart FXO adaptor. 0546 Springware D/120JCT-LS # 24 Channel, 1 Port, CT-BUS/SC-BUS, T1/PRI adaptor. 0647 Springware D/240JCT-T1 # 4 Line, 4 port, CT-BUS/SC-BUS, loopstart FXO adaptor. Revision 01 0676 Springware D/41JCT-LS # 48 Channel, 2 Port, CT-BUS/SC-BUS, T1/PRI adaptor. 0685 Springware D/480JCT-2T1 12c8 G Force Co, Ltd 12c9 Gigi Operations 12ca Integrated Computing Engines 12cb Antex Electronics Corporation 0027 SC4 (StudioCard) 002e StudioCard 2000 12cc Pluto Technologies International 12cd Aims Lab 12ce Netspeed Inc. 12cf Prophet Systems, Inc. 12d0 GDE Systems, Inc. 12d1 PSITech 12d2 NVidia / SGS Thomson (Joint Venture) 0008 NV1 0009 DAC64 0018 Riva128 1048 0c10 VICTORY Erazor 1048 0c15 VICTORY Erazor LT-8 107b 8030 STB Velocity 128 1092 0350 Viper V330 1092 1092 Viper V330 10b4 1b1b STB Velocity 128 10b4 1b1d STB Velocity 128 10b4 1b1e STB Velocity 128, PAL TV-Out 10b4 1b20 STB Velocity 128 Sapphire 10b4 1b21 STB Velocity 128 10b4 1b22 STB Velocity 128 AGP, NTSC TV-Out 10b4 1b23 STB Velocity 128 AGP, PAL TV-Out 10b4 1b27 STB Velocity 128 DVD 10b4 1b88 MVP Pro 128 10b4 222a STB Velocity 128 AGP 10b4 2230 STB Velocity 128 10b4 2232 STB Velocity 128 10b4 2235 STB Velocity 128 AGP 2a15 54a3 3DVision-SAGP / 3DexPlorer 3000 0019 Riva128ZX 0020 TNT 0028 TNT2 0029 UTNT2 002c VTNT2 00a0 ITNT2 12d3 Vingmed Sound A/S 12d4 Ulticom (Formerly DGM&S) 0200 T1 Card 12d5 Equator Technologies Inc 0003 BSP16 1000 BSP15 12d6 Analogic Corp 12d7 Biotronic SRL # acquired by Diodes Inc. 12d8 Pericom Semiconductor 01a7 7C21P100 2-port PCI-X to PCI-X Bridge # 3Port-3Lane PCI Express Switch GreenPacket Family 0303 PCI Express Switch 3-3 # PI7C9X20508GP 5Port-8Lane PCI Express Switch GreenPacket Family 0508 PI7C9X20508GP PCI Express Switch 5Port-8Lane 2304 PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch 2308 PI7C9X2G308GP 3-Ports/8-lane PCIe 2.0 Switch 2404 PI7C9X2G404 EL/SL PCIe2 4-Port/4-Lane Packet Switch 2608 PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch ea50 cc10 RXi2-BP 400a PI7C9X442SL PCIe Bridge Port 400c PI7C9X440SL PCIe Bridge Port 400e PI7C9X440SL/PI7C9X442SL USB OHCI Controller 400f PI7C9X440SL/PI7C9X442SL USB EHCI Controller 71e2 PI7C7300A/PI7C7300D PCI-to-PCI Bridge 71e3 PI7C7300A/PI7C7300D PCI-to-PCI Bridge (Secondary Bus 2) 8140 PI7C8140A PCI-to-PCI Bridge 8148 PI7C8148A/PI7C8148B PCI-to-PCI Bridge 8150 PCI to PCI Bridge 8152 PI7C8152A/PI7C8152B/PI7C8152BI PCI-to-PCI Bridge 8154 PI7C8154A/PI7C8154B/PI7C8154BI PCI-to-PCI Bridge 8619 PI7C9X2G1616PR PCIe2 16-Port/16-Lane Packet Switch b404 PI7C9X2G404 EV/SV PCIe2 4-Port/4-Lane Packet Switch e110 PI7C9X110 PCIe- to-PCI bridge 1775 11cc CC11/CL11 CompactPCI Bridge e111 PI7C9X111SL PCIe-to-PCI Reversible Bridge e112 PI7C9X112SL PCIe-to-PCI Bridge e113 PI7C9X113SL/PI7C9X118SL PCIe-to-PCI Bridge e130 PCI Express to PCI-XPI7C9X130 PCI-X Bridge 12d9 Aculab PLC 0002 PCI Prosody 0004 cPCI Prosody 0005 Aculab E1/T1 PCI card 1078 Prosody X class e1000 device 12d9 000d Prosody X PCI 12d9 000e Prosody X cPCI 12da True Time Inc. 12db Annapolis Micro Systems, Inc 12dc Symicron Computer Communication Ltd. 12dd Management Graphics 12de Rainbow Technologies 0200 CryptoSwift CS200 12df SBS Technologies Inc 12e0 Chase Research 0010 ST16C654 Quad UART 0020 ST16C654 Quad UART 0030 ST16C654 Quad UART 12e1 Nintendo Co, Ltd 12e2 Datum Inc. Bancomm-Timing Division 12e3 Imation Corp - Medical Imaging Systems 12e4 Brooktrout Technology Inc 12e5 Apex Semiconductor Inc 12e6 Cirel Systems 12e7 Sunsgroup Corporation 12e8 Crisc Corp 12e9 GE Spacenet 12ea Zuken 12eb Aureal Semiconductor 0001 Vortex 1 0000 0300 Terasound A3D PCI 104d 8036 AU8820 Vortex Digital Audio Processor 1092 2000 Sonic Impact A3D 1092 2100 Sonic Impact A3D 1092 2110 Sonic Impact A3D 1092 2200 Sonic Impact A3D 122d 1002 SC 338-A3D 12eb 0001 AU8820 Vortex Digital Audio Processor 5053 3355 Montego 50b2 1111 XLerate 0002 Vortex 2 104d 8049 AU8830 Vortex 3D Digital Audio Processor 104d 807b AU8830 Vortex 3D Digital Audio Processor 1092 3000 Monster Sound II 1092 3001 Monster Sound II 1092 3002 Monster Sound II 1092 3003 Monster Sound II 1092 3004 Monster Sound II 12eb 0002 AU8830 Vortex 3D Digital Audio Processor 12eb 0088 AU8830 Vortex 3D Digital Audio Processor 144d 3510 AU8830 Vortex 3D Digital Audio Processor 5053 3356 Montego II 0003 AU8810 Vortex Digital Audio Processor 104d 8049 AU8810 Vortex Digital Audio Processor 104d 8077 AU8810 Vortex Digital Audio Processor 109f 1000 AU8810 Vortex Digital Audio Processor 12eb 0003 AU8810 Vortex Digital Audio Processor 1462 6780 AU8810 Vortex Digital Audio Processor 14a4 2073 AU8810 Vortex Digital Audio Processor 14a4 2091 AU8810 Vortex Digital Audio Processor 14a4 2104 AU8810 Vortex Digital Audio Processor 14a4 2106 AU8810 Vortex Digital Audio Processor 8803 Vortex 56k Software Modem 12eb 8803 Vortex 56k Software Modem 12ec 3A International, Inc. 12ed Optivision Inc. 12ee Orange Micro 12ef Vienna Systems 12f0 Pentek 12f1 Sorenson Vision Inc 12f2 Gammagraphx, Inc. 12f3 Radstone Technology 12f4 Megatel 12f5 Forks 12f6 Dawson France 12f7 Cognex 12f8 Electronic Design GmbH 0002 VideoMaker 12f9 Four Fold Ltd 12fb Spectrum Signal Processing 0001 PMC-MAI 00f5 F5 Dakar 02ad PMC-2MAI 2adc ePMC-2ADC 3100 PRO-3100 3500 PRO-3500 4d4f Modena 8120 ePMC-8120 da62 Daytona C6201 PCI (Hurricane) db62 Ingliston XBIF dc62 Ingliston PLX9054 dd62 Ingliston JTAG/ISP eddc ePMC-MSDDC fa01 ePMC-FPGA 12fc Capital Equipment Corp 12fd I2S 12fe ESD Electronic System Design GmbH 12ff Lexicon 1300 Harman International Industries Inc 1302 Computer Sciences Corp 1303 Innovative Integration 0030 X3-SDF 4-channel XMC acquisition board 1304 Juniper Networks 1305 Netphone, Inc 1306 Duet Technologies # Nee ComputerBoards 1307 Measurement Computing 0001 PCI-DAS1602/16 000b PCI-DIO48H 000c PCI-PDISO8 000d PCI-PDISO16 000f PCI-DAS1200 0010 PCI-DAS1602/12 0014 PCI-DIO24H 0015 PCI-DIO24H/CTR3 0016 PCI-DIO48H/CTR15 0017 PCI-DIO96H 0018 PCI-CTR05 0019 PCI-DAS1200/JR 001a PCI-DAS1001 001b PCI-DAS1002 001c PCI-DAS1602JR/16 001d PCI-DAS6402/16 001e PCI-DAS6402/12 001f PCI-DAS16/M1 0020 PCI-DDA02/12 0021 PCI-DDA04/12 0022 PCI-DDA08/12 0023 PCI-DDA02/16 0024 PCI-DDA04/16 0025 PCI-DDA08/16 0026 PCI-DAC04/12-HS 0027 PCI-DAC04/16-HS 0028 PCI-DIO24 0029 PCI-DAS08 002c PCI-INT32 0033 PCI-DUAL-AC5 0034 PCI-DAS-TC 0035 PCI-DAS64/M1/16 0036 PCI-DAS64/M2/16 0037 PCI-DAS64/M3/16 004b PCI-MDB64 004c PCI-DAS1000 004d PCI-QUAD04 0052 PCI-DAS4020/12 0053 PCIM-DDA06/16 0054 PCI-DIO96 0055 CPCI-DIO24H 0056 PCIM-DAS1602/16 0057 PCI-DAS3202/16 0059 PCI-QUAD-AC5 005a CPCI-DIO96H 005b CPCI-DIO48H 005d PCI-DAS6023 005e PCI-DAS6025 005f PCI-DAS6030 0060 PCI-DAS6031 0061 PCI-DAS6032 0062 PCI-DAS6033 0063 PCI-DAS6034 0064 PCI-DAS6035 0065 PCI-DAS6040 0066 PCI-DAS6052 0067 PCI-DAS6070 0068 PCI-DAS6071 006e PCI-CTR10 006f PCI-DAS6036 0070 PCI-DAC6702 0071 PCI-DAC6703 0074 PCI-CTR20HD 0077 PCI-DIO24/LP 0078 PCI-DAS6013 0079 PCI-DAS6014 007b PCIM-DAS16JR/16 007e PCI-DIO24/S 00a5 PCI-2511 00a6 PCI-2513 00a7 PCI-2515 00a8 PCI-2517 00be PCI-QUAD05 00da PCIe-DIO96H 00db PCIe-DIO24 0115 PCIe-DAS1602/16 1308 Jato Technologies Inc. 0001 NetCelerator Adapter 1308 0001 NetCelerator Adapter 1309 AB Semiconductor Ltd 130a Mitsubishi Electric Microcomputer 130b Colorgraphic Communications Corp 130c Ambex Technologies, Inc 130d Accelerix Inc 130e Yamatake-Honeywell Co. Ltd 130f Advanet Inc 1310 Gespac 1311 Videoserver, Inc 1312 Acuity Imaging, Inc 1313 Yaskawa Electric Co. 1315 Wavesat 1316 Teradyne Inc 1317 ADMtek 0981 21x4x DEC-Tulip compatible 10/100 Ethernet 0985 NC100 Network Everywhere Fast Ethernet 10/100 1734 100c Scenic N300 ADMtek AN983 10/100 Mbps PCI Adapter 1985 21x4x DEC-Tulip compatible 10/100 Ethernet 1385 511a FA511 1395 2103 CB100-EZ (4-LED version) 2850 HSP MicroModem 56 5120 ADM5120 OpenGate System-on-Chip 8201 ADM8211 802.11b Wireless Interface 10b8 2635 SMC2635W v1 802.11b Wireless Cardbus Adapter 1317 8201 SMC2635W v2 802.11b Wireless Cardbus Adapter 8211 ADM8211 802.11b Wireless Interface 9511 21x4x DEC-Tulip compatible 10/100 Ethernet 1318 Packet Engines Inc. 0911 GNIC-II PCI Gigabit Ethernet [Hamachi] 1319 Fortemedia, Inc 0801 Xwave QS3000A [FM801] 1319 1319 FM801 PCI Audio 0802 Xwave QS3000A [FM801 game port] 1319 1319 FM801 PCI Joystick 1000 FM801 PCI Audio 1001 FM801 PCI Joystick 131a Finisar Corp. 131c Nippon Electro-Sensory Devices Corp 131d Sysmic, Inc. 131e Xinex Networks Inc 131f Siig Inc 1000 CyberSerial (1-port) 16550 1001 CyberSerial (1-port) 16650 1002 CyberSerial (1-port) 16850 1010 Duet 1S(16550)+1P 1011 Duet 1S(16650)+1P 1012 Duet 1S(16850)+1P 1020 CyberParallel (1-port) 1021 CyberParallel (2-port) 1030 CyberSerial (2-port) 16550 1031 CyberSerial (2-port) 16650 1032 CyberSerial (2-port) 16850 1034 Trio 2S(16550)+1P 1035 Trio 2S(16650)+1P 1036 Trio 2S(16850)+1P 1050 CyberSerial (4-port) 16550 1051 CyberSerial (4-port) 16650 1052 CyberSerial (4-port) 16850 2000 CyberSerial (1-port) 16550 2001 CyberSerial (1-port) 16650 2002 CyberSerial (1-port) 16850 2010 Duet 1S(16550)+1P 2011 Duet 1S(16650)+1P 2012 Duet 1S(16850)+1P 2020 CyberParallel (1-port) 2021 CyberParallel (2-port) 2030 CyberSerial (2-port) 16550 131f 2030 PCI Serial Card 2031 CyberSerial (2-port) 16650 2032 CyberSerial (2-port) 16850 2040 Trio 1S(16550)+2P 2041 Trio 1S(16650)+2P 2042 Trio 1S(16850)+2P 2050 CyberSerial (4-port) 16550 2051 CyberSerial (4-port) 16650 2052 CyberSerial (4-port) 16850 2060 Trio 2S(16550)+1P 2061 Trio 2S(16650)+1P 2062 Trio 2S(16850)+1P 2081 CyberSerial (8-port) ST16654 1320 Crypto AG 1321 Arcobel Graphics BV 1322 MTT Co., Ltd 1323 Dome Inc 1324 Sphere Communications 1325 Salix Technologies, Inc 1326 Seachange international 1327 Voss scientific 1328 quadrant international 1329 Productivity Enhancement 132a Microcom Inc. 132b Broadband Technologies 132c Micrel Inc 132d Integrated Silicon Solution, Inc. 1330 MMC Networks 1331 RadiSys Corporation 0030 ENP-2611 8200 82600 Host Bridge 8201 82600 IDE 8202 82600 USB 8210 82600 PCI Bridge 1332 Micro Memory 5415 MM-5415CN PCI Memory Module with Battery Backup 5425 MM-5425CN PCI 64/66 Memory Module with Battery Backup 6140 MM-6140D 1334 Redcreek Communications, Inc 1335 Videomail, Inc 1337 Third Planet Publishing 1338 BT Electronics 133a Vtel Corp 133b Softcom Microsystems 133c Holontech Corp 133d SS Technologies 133e Virtual Computer Corp 133f SCM Microsystems 1340 Atalla Corp 1341 Kyoto Microcomputer Co 1342 Promax Systems Inc 1343 Phylon Communications Inc # nee Crucial Technology 1344 Micron Technology Inc 5150 RealSSD P320h 5151 RealSSD P320m 5152 RealSSD P320s 5153 RealSSD P325m 5160 RealSSD P420h 5161 RealSSD P420m 5163 RealSSD P425m 5180 9100 PRO NVMe SSD 5181 9100 MAX NVMe SSD 5188 7100 ECO NVMe SSD 5189 7100 MAX NVMe SSD 5190 9200 ECO NVMe SSD 5191 9200 PRO NVMe SSD 5192 9200 MAX NVMe SSD 5196 9400 PRO NVMe SSD 5197 9400 MAX NVMe SSD 51a2 7300 PRO NVMe SSD 1344 2000 960GB U.2 1344 3000 1920GB U.2 1344 4000 3480GB U.2 1344 5000 7680GB U.2 51a3 7300 MAX NVMe SSD 1344 1100 400GB M.2 1344 2000 800GB U.2 1344 2100 800GB M.2 1344 3000 1600GB U.2 1344 4000 3200GB U.2 1344 5000 6400GB U.2 51b1 9300 PRO NVMe SSD 1344 4000 3.84TB U.2 1344 5000 7.68TB U.2 1344 6000 15.36TB U.2 51b2 9300 MAX NVMe SSD 1344 4000 3.2TB U.2 1344 5000 6.4 TB U.2 1344 6000 12.8TB U.2 51b7 7500 PRO NVMe SSD 1028 22e7 DC NVMe 7500 U.2 SED RI 15.36TB 1028 22e8 DC NVMe 7500 U.2 SED RI 7.68TB 1028 22e9 DC NVMe 7500 U.2 SED RI 3.84TB 1028 22ea DC NVMe 7500 U.2 SED RI 1.92TB 1028 22eb DC NVMe 7500 U.2 SED RI 960GB 1028 22ec DC NVMe 7500 U.2 ISE RI 15.36TB 1028 22ed DC NVMe 7500 U.2 ISE RI 7.68TB 1028 22ee DC NVMe 7500 U.2 ISE RI 3.84TB 1028 22ef DC NVMe 7500 U.2 ISE RI 1.92TB 1028 22f0 DC NVMe 7500 U.2 ISE RI 960GB 51b8 7500 MAX NVMe SSD 1028 22f1 DC NVMe 7500 U.2 ISE MU 12.8TB 1028 22f2 DC NVMe 7500 U.2 ISE MU 6.4TB 1028 22f3 DC NVMe 7500 U.2 ISE MU 3.2TB 1028 22f4 DC NVMe 7500 U.2 ISE MU 1.6TB 1028 22f5 DC NVMe 7500 U.2 ISE MU 800GB 51b9 6500 ION NVMe SSD 1028 22e6 Ent NVMe 6500 RI 30.72TB 1028 22f6 Ent NVMe 6500 RI FIPS 30.72TB 51bb 9550 PRO NVMe SSD 1028 2318 MTFDLBQ30T7THA-1BK1JABDA 1028 2319 MTFDLBQ15T3THA-1BK1JABDA 1028 231a MTFDLBQ7T6THA-1BK1JABDA 1028 231b MTFDLBQ3T8THA-1BK1JABDA 1028 2320 MTFDLAL30T7THA-1BK1JABDA 1028 2321 MTFDLAL15T3THA-1BK1JABDA 1028 2322 MTFDLAL7T6THA-1BK1JABDA 1028 2323 MTFDLAL3T8THA-1BK1JABDA 1028 2328 MTFDLAL30T7THA-1BK1DFCDA 1028 2329 MTFDLAL15T3THA-1BK1DFCDA 1028 232a MTFDLAL7T6THA-1BK1DFCDA 1028 232b MTFDLAL3T8THA-1BK1DFCDA 1028 235c MTFDLBQ30T7THA-1BK1DFCDA 1028 235d MTFDLBQ15T3THA-1BK1DFCDA 1028 235e MTFDLBQ7T6THA-1BK1DFCDA 1028 235f MTFDLBQ3T8THA-1BK1DFCDA 51bd 9550 MAX NVMe SSD 1028 231c MTFDLBQ25T6THB-1BK1JABDA 1028 231d MTFDLBQ12T8THB-1BK1JABDA 1028 231e MTFDLBQ6T4THB-1BK1JABDA 1028 231f MTFDLBQ3T2THB-1BK1JABDA 1028 2324 MTFDLAL25T6THB-1BK1JABDA 1028 2325 MTFDLAL12T8THB-1BK1JABDA 1028 2326 MTFDLAL6T4THB-1BK1JABDA 1028 2327 MTFDLAL3T2THB-1BK1JABDA 1028 232c MTFDLAL25T6THB-1BK1DFCDA 1028 232d MTFDLAL12T8THB-1BK1DFCDA 1028 232e MTFDLAL6T4THB-1BK1DFCDA 1028 232f MTFDLAL3T2THB-1BK1DFCDA 1028 2360 MTFDLBQ25T6THB-1BK1DFCDA 1028 2361 MTFDLBQ12T8THB-1BK1DFCDA 1028 2362 MTFDLBQ6T4THB-1BK1DFCDA 1028 2363 MTFDLBQ3T2THB-1BK1DFCDA 51c0 7400 PRO NVMe SSD 1028 2162 EC NVMe OPAL 7400 RI M.2 480GB 1028 2163 EC NVMe OPAL 7400 RI M.2 960GB 1028 2164 EC NVMe ISE 7400 RI M.2 480GB 1028 2165 EC NVMe ISE 7400 RI M.2 960GB 1028 216c EC NVMe ISE 7400 RI M.2 110 1.92TB 1028 216d EC NVMe ISE 7400 RI M.2 110 3.84TB 1028 216e EC NVMe OPAL 7400 RI M.2 110 1.92TB 1028 216f EC NVMe OPAL 7400 RI M.2 110 3.84TB 1028 2197 EC NVMe OPAL 7400 RI M.2 110 960GB 1028 224d EC NVMe ISE 7400 RI M.2 110 960GB 1344 1100 M.2 480GB 1344 2000 U.3 960GB 1344 2100 M.2 960GB 1344 2600 E1.S 960GB 1344 2b00 M.2 1920GB 1344 2d00 E1.2 1920GB 1344 3000 U.3 1920GB 1344 3e00 M.2 3840GB 1344 3f00 E1.S 3840GB 1344 4000 U.3 3840GB 1344 5000 U.3 7680GB 51c1 7400 MAX NVMe SSD 1028 216a EC NVMe ISE 7400 MU M.2 80 800GB 1028 216b EC NVMe OPAL 7400 MU M.2 80 800GB 1344 1100 M.2 400GB 1344 2000 U.3 800GB 1344 2100 M.2 800GB 1344 2600 E1.S 800GB 1344 2b00 M.2 1600GB 1344 2d00 E1.S 1600GB 1344 3000 U.3 1600GB 1344 3e00 M.2 3200GB 1344 3f00 E1.S 3200GB 1344 4000 U.3 3200GB 1344 5000 U.3 6400GB 51c3 7450 PRO NVMe SSD 1028 226b EC NVMe FIPS 7450 RI M.2 110 960GB 1028 226c EC NVMe ISE 7450 RI M.2 80 480GB 1028 226d EC NVMe ISE 7450 RI M.2 80 960GB 1028 226e EC NVMe SED 7450 RI M.2 80 480GB 1028 226f EC NVMe SED 7450 RI M.2 80 960GB 1028 2270 EC NVMe FIPS 7450 RI M.2 80 480GB 1028 2271 EC NVMe FIPS 7450 RI M.2 80 960GB 1028 2273 EC NVMe ISE 7450 RI M.2 110 960GB 1028 2274 EC NVMe ISE 7450 RI M.2 110 1920GB 1028 2275 EC NVMe ISE 7450 RI M.2 110 3840GB 1028 2278 DC NVMe ISE 7450 RI U.2 960GB 1028 2279 DC NVMe ISE 7450 RI U.2 1.92TB 1028 227a DC NVMe ISE 7450 RI U.2 3.84TB 1028 227b DC NVMe ISE 7450 RI U.2 7.68TB 1028 227c DC NVMe ISE 7450 RI U.2 15.36TB 1028 227d DC NVMe SED 7450 RI U.2 960GB 1028 227e DC NVMe SED 7450 RI U.2 1.92TB 1028 227f DC NVMe SED 7450 RI U.2 3.84TB 1028 2280 DC NVMe SED 7450 RI U.2 7.68TB 1028 2281 DC NVMe SED 7450 RI U.2 15.36TB 51c4 7450 MAX NVMe SSD 1028 2272 EC NVMe ISE 7450 MU M.2 80 800GB 1028 228b DC NVMe SED 7450 MU U.2 800GB 1028 228c DC NVMe ISE 7450 MU U.2 800GB 1028 228d DC NVMe SED 7450 MU U.2 1.6TB 1028 228e DC NVMe ISE 7450 MU U.2 1.6TB 1028 228f DC NVMe SED 7450 MU U.2 3.2TB 1028 2290 DC NVMe ISE 7450 MU U.2 3.2TB 1028 2291 DC NVMe SED 7450 MU U.2 6.4TB 1028 2292 DC NVMe ISE 7450 MU U.2 6.4TB 1028 2293 DC NVMe SED 7450 MU U.2 12.8TB 1028 2294 DC NVMe ISE 7450 MU U.2 12.8TB 1344 3000 U.3 1600GB [MTFDKCB1T6TFS/MTFDKCC1T6TFS] 51cb 6550 ION NVMe SSD 1028 2379 MTFDLBQ61T4THL-1BK1JABDA 1028 23a6 MTFDLBQ30T7THL-1BK1JABDA 1028 23a7 MTFDLAL61T4THL-1BK1JABDA 1028 23a8 MTFDLAL30T7THL-1BK1JABDA 5404 2210 NVMe SSD [Cobain] 5405 2300 NVMe SSD [Santana] 5407 3400 NVMe SSD [Hendrix] 5410 2200S NVMe SSD [Cassandra] 5411 2450 NVMe SSD [HendrixV] (DRAM-less) 5413 2400 NVMe SSD (DRAM-less) 5414 3460 NVMe SSD 5415 3500 NVMe SSD 5416 2550 NVMe SSD (DRAM-less) 5425 2500 NVMe SSD (DRAM-less) 5427 2650 NVMe SSD (DRAM-less) 5428 4600 NVMe SSD 5429 2600 NVMe SSD (DRAM-less) 6001 2100AI NVMe SSD [Nitro] 1345 Arescom Inc 1347 Odetics 1349 Sumitomo Electric Industries, Ltd. 134a DTC Technology Corp. 0001 Domex 536 0002 Domex DMX3194UP SCSI Adapter 134b ARK Research Corp. 134c Chori Joho System Co. Ltd 134d PCTel Inc 2189 HSP56 MicroModem 2486 2304WT V.92 MDC Modem 7890 HSP MicroModem 56 134d 0001 PCT789 adapter 7891 HSP MicroModem 56 134d 0001 HSP MicroModem 56 7892 HSP MicroModem 56 7893 HSP MicroModem 56 7894 HSP MicroModem 56 7895 HSP MicroModem 56 7896 HSP MicroModem 56 7897 HSP MicroModem 56 134e CSTI 134f Algo System Co Ltd 1350 Systec Co. Ltd 1351 Sonix Inc # nee Vierling Communication SAS, nee Thales Idatys 1353 dbeeSet Technology 0002 Proserver 0003 PCI-FUT 0004 PCI-S0 0005 PCI-FUT-S0 0006 OTDU-1U (FPGA Zynq-7000) 0007 OTDU-EX 1354 Dwave System Inc 1355 Kratos Analytical Ltd 1356 The Logical Co 1359 Prisa Networks 135a Brainboxes Ltd 0841 UC-268 4 port RS-232 card 0861 UC-257 2 port RS-232 + LPT card 0862 UC-257 2 port RS-232 + LPT card 0863 UC-257 2 port RS-232 + LPT card 0881 UC-279 8 port RS-232 card 08a1 UC-313 2 port RS-422/485 card 08a2 UC-313 2 port RS-422/485 card 08a3 UC-313 2 port RS-422/485 card 08c1 UC-310 2 port RS-422/485 Opto Isolated card 08e1 UC-302 2 port RS-232 card 08e2 UC-302 2 port RS-232 card 08e3 UC-302 2 port RS-232 card 0901 UC-431 3 port RS-232 card 0921 UC-420 3 + 1 port RS-232 card 0981 UC-475 1 + 1 port RS-232 + LPT card 0982 UC-475 1 + 1 port RS-232 + LPT card 09a1 UC-607 2 port RS-232 card 09a2 UC-607 2 port RS-232 card 09a3 UC-607 2 port RS-232 card 0a61 UC-324 1 port RS-422/485 card 0a81 UC-357 1 port RS-232 + 1 port RS-422/485 card 0a82 UC-357 1 port RS-232 + 1 port RS-422/485 card 0a83 UC-357 1 port RS-232 + 1 port RS-422/485 card 0aa1 UC-246 1 port RS-232 card 0aa2 UC-246 1 port RS-232 card 0ac1 UP-189 Powered 2 port RS-232 card 0ac2 UP-189 Powered 2 port RS-232 card 0ac3 UP-189 Powered 2 port RS-232 card 0b01 UC-346 4 port RS-422/485 card 0b02 UC-346 4 port RS-422/485 card 0b21 UP-200 Powered 2 port RS-232 card 0b22 UP-200 Powered 2 port RS-232 card 0b23 UP-200 Powered 2 port RS-232 card 0ba1 UC-101 1 + 1 port RS-232 card 0ba2 UC-101 1 + 1 port RS-232 card 0ba3 UC-101 1 + 1 port RS-232 card 0bc1 UC-203 1 + 1 port RS-232 + LPT card 0bc2 UC-203 1 + 1 port RS-232 + LPT card 0be1 UC-146 LPT card 0be2 UC-146 LPT card 0c01 UP-869 Powered 2 port RS-232 card 0c02 UP-869 Powered 2 port RS-232 card 0c03 UP-869 Powered 2 port RS-232 card 0c21 UP-880 Powered 2 port RS-232 card 0c22 UP-880 Powered 2 port RS-232 card 0c23 UP-880 Powered 2 port RS-232 card 0c41 UC-368 4 port RS-422/485 Opto Isolated card 0c42 UC-368 4 port RS-422/485 Opto Isolated card 0c43 UC-368 4 port RS-422/485 Opto Isolated card 0ca1 UC-253 2 port RS-232 card 0d21 UC-260 4 port RS-232 card 0d41 UC-836 4 port RS-232 card 0d60 IS-100 1 port RS-232 card 0d80 IS-200 2 port RS-232 card 0da0 IS-300 1 port RS-232 + LPT card 0dc0 IS-400 4 port RS-232 card 0de0 IS-500 LPT card 0e41 PX-279 8 port RS-232 card 0e61 UC-414 3 + 1 port RS-232 + LPT card 4000 PX-420 3 + 1 port RS-232 card 4001 PX-431 3 port RS-232 card 4002 PX-820 Powered 3 + 1 port RS-232 card 4003 PX-831 Powered 3 port RS-232 card 4004 PX-235 1 port RS-232 card 4005 PX-101 1 + 1 port RS-232 card 4006 PX-257 1 + 1 port RS-232 + LPT card (Serial port) 4007 PX-257 1 + 1 port RS-232 + LPT card (LPT port) 4008 PX-835 Powered 1 port RS-232 card 4009 PX-857 Powered 2 port RS-232 card 400a PX-260 4 port RS-232 card 400b PX-320 1 port RS-422/485 card 400c PX-313 2 port RS-422/485 card 400e PX-310 2 port RS-422/485 Opto Isolated card 400f PX-346 4 port RS-422/485 card 4010 PX-368 4 port RS-422/485 Opto Isolated card 4011 PX-420 3 + 1 port RS-232 card 4012 PX-431 3 port RS-232 card 4013 PX-820 Powered 3 + 1 port RS-232 card 4014 PX-831 Powered 3 port RS-232 card 4015 PX-257 2 port RS-232 card 4016 PX-235 1 port RS-232 card 4017 PX-835 Powered 1 port RS-232 card 4018 PX-857 Powered 2 port RS-232 card 4019 PX-101 1 + 1 port RS-232 card 401c PX-146 LPT card 401d PX-475 1 port RS-232 + LPT card (Serial port) 401e PX-803 Powered 1 + 1 port RS-232 card 401f PX-475 1 port RS-232 + LPT card (LPT port) 4020 XC-157 LPT ExpressCard 4021 XC-475 1 port RS-232 + LPT ExpressCard (Serial port) 4022 XC-475 1 port RS-232 + LPT ExpressCard (LPT port) 4026 XC-235 1 port RS-232 ExpressCard 4027 IX-100 1 port RS-232 card 4028 IX-200 2 port RS-232 card 4029 IX-400 4 port RS-232 card 402a IX-500 LPT card 402c PX-263 4 port RS-232 + LPT card 4100 PX-272 4 + 1 port RS-232 + LPT card 135b Giganet Inc 135c Quatech Inc 0010 QSC-100 0020 DSC-100 0030 DSC-200/300 0040 QSC-200/300 0050 ESC-100D 0060 ESC-100M 00f0 MPAC-100 Synchronous Serial Card (Zilog 85230) 0120 QSCP-100 0130 DSCP-100 0140 QSCP-200/300 0150 DSCP-200/300 0170 QSCLP-100 0180 DSCLP-100 0181 DSC-100 0190 SSCLP-100 01a0 QSCLP-200/300 01b0 DSCLP-200/300 01b1 DSC-200/300 01c0 SSCLP-200/300 01e0 ESC(LP)-100 0258 DSPSX-200/300 135d ABB Network Partner AB 135e Sealevel Systems Inc 5101 Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32) 7101 Single Port RS-232/422/485/530 7201 Dual Port RS-232/422/485 Interface 7202 Dual Port RS-232 Interface 7401 Four Port RS-232 Interface 7402 Four Port RS-422/485 Interface 7801 Eight Port RS-232 Interface 7804 Eight Port RS-232/422/485 Interface 8001 8001 Digital I/O Adapter 135f I-Data International A-S 1360 Meinberg Funkuhren 0101 PCI32 DCF77 Radio Clock 0102 PCI509 DCF77 Radio Clock 0103 PCI510 DCF77 Radio Clock 0104 PCI511 DCF77 Radio Clock 0105 PEX511 DCF77 Radio Clock (PCI Express) 0106 PZF180PEX High Precision DCF77 Radio Clock (PCI Express) 0201 GPS167PCI GPS Receiver 0202 GPS168PCI GPS Receiver 0203 GPS169PCI GPS Receiver 0204 GPS170PCI GPS Receiver 0205 GPS170PEX GPS Receiver (PCI Express) 0206 GPS180PEX GPS Receiver (PCI Express) 0207 GLN180PEX GPS/GLONASS receiver (PCI Express) 0208 GPS180AMC GPS Receiver (PCI Express / MicroTCA / AdvancedMC) 0209 GNS181PEX GNSS receiver (PCI Express) 020a GPS183PEX GPS Receiver (PCI Express) 020b GNS183PEX GNSS receiver (PCI Express) 0301 TCR510PCI IRIG Timecode Reader 0302 TCR167PCI IRIG Timecode Reader 0303 TCR511PCI IRIG Timecode Reader 0304 TCR511PEX IRIG Timecode Reader (PCI Express) 0305 TCR170PEX IRIG Timecode Reader (PCI Express) 0306 TCR180PEX IRIG Timecode Reader (PCI Express) 0501 PTP270PEX PTP/IEEE1588 slave card (PCI Express) 0601 FRC511PEX Free Running Clock (PCI Express) 1361 Soliton Systems K.K. 1362 Fujifacom Corporation 1363 Phoenix Technology Ltd 1364 ATM Communications Inc 1365 Hypercope GmbH 1366 Teijin Seiki Co. Ltd 1367 Hitachi Zosen Corporation 1368 Skyware Corporation 1369 Digigram 136a High Soft Tech 0004 HST Saphir VII mini PCI 0007 HST Saphir III E MultiLink 4 0008 HST Saphir III E MultiLink 8 000a HST Saphir III E MultiLink 2 136b Kawasaki Steel Corporation ff01 KL5A72002 Motion JPEG 136c Adtek System Science Co Ltd 136d Gigalabs Inc 136f Applied Magic Inc 1370 ATL Products 1371 CNet Technology Inc 434e GigaCard Network Adapter 1371 434e N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L) 1373 Silicon Vision Inc 1374 Silicom Ltd. 0024 Silicom Dual port Giga Ethernet BGE Bypass Server Adapter 0025 Silicom Quad port Giga Ethernet BGE Bypass Server Adapter 0026 Silicom Dual port Fiber Giga Ethernet 546 Bypass Server Adapter 0027 Silicom Dual port Fiber LX Giga Ethernet 546 Bypass Server Adapter 0029 Silicom Dual port Copper Giga Ethernet 546GB Bypass Server Adapter 002a Silicom Dual port Fiber Giga Ethernet 546 TAP/Bypass Server Adapter 002b Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter (PXE2TBI) 002c Silicom Quad port Copper Giga Ethernet 546GB Bypass Server Adapter (PXG4BPI) 002d Silicom Quad port Fiber-SX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI) 002e Silicom Quad port Fiber-LX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI-LX) 002f Silicom Dual port Fiber-SX Giga Ethernet 546GB Low profile Bypass Server Adapter (PXG2BPFIL) 0030 Silicom Dual port Fiber-LX Giga Ethernet 546GB Low profile Bypass Server Adapter 0031 Silicom Quad port Copper Giga Ethernet PCI-E Bypass Server Adapter 0032 Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter 0034 Silicom Dual port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter 0035 Silicom Quad port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter 0036 Silicom Dual port Fiber Giga Ethernet PCI-E BGE Bypass Server Adapter 0037 Silicom Dual port Copper Ethernet PCI-E Intel based Bypass Server Adapter 0038 Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter 0039 Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter 003a Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter 003b Silicom Dual port Fiber Ethernet PMC Intel based Bypass Server Adapter (PMCX2BPFI) 003c Silicom Dual port Copper Ethernet PCI-X BGE based Bypass Server Adapter (PXG2BPRB) 003d 2-port Copper GBE Bypass with Caviume 1010 PCI-X 003e Silicom Dual port Fiber Giga Ethernet PCI-E 571 TAP/Bypass Server Adapter (PEG2TBFI) 003f Silicom Dual port Copper Giga Ethernet PCI-X 546 TAP/Bypass Server Adapter (PXG2TBI) 0040 Silicom Quad port Fiber-SX Giga Ethernet 571 Bypass Server Adapter (PEG4BPFI) 0042 4-port Copper GBE PMC-X Bypass 0043 Silicom Quad port Fiber-SX Giga Ethernet 546 Bypass Server Adapter (PXG4BPFID) 0045 Silicom 6 port Copper Giga Ethernet 546 Bypass Server Adapter (PXG6BPI) 0046 4-port bypass PCI-E w disconnect low profile 0047 Silicom Dual port Fiber-SX Giga Ethernet 571 Bypass Disconnect Server Adapter (PEG2BPFID) 004a Silicom Quad port Fiber-LX Giga Ethernet 571 Bypass Server Adapter (PEG4BPFI-LX) 004d Dual port Copper Giga Ethernet PCI-E Bypass Server Adapter 0401 Gigabit Ethernet ExpressModule Bypass Server Adapter 0420 Gigabit Ethernet ExpressModule Bypass Server Adapter 0460 Gigabit Ethernet Express Module Bypass Server Adapter 0461 Gigabit Ethernet ExpressModule Bypass Server Adapter 0462 Gigabit Ethernet ExpressModule Bypass Server Adapter 0470 Octal-port Copper Gigabit Ethernet Express Module Bypass Server Adapter 0482 Dual-port Fiber (SR) 10 Gigabit Ethernet ExpressModule Bypass Server Adapter 0483 Dual-port Fiber (LR) 10 Gigabit Ethernet ExpressModule Bypass Server Adapter 1375 Argosystems Inc 1376 LMC 1377 Electronic Equipment Production & Distribution GmbH 1378 Telemann Co. Ltd 1379 Asahi Kasei Microsystems Co Ltd 137a Mark of the Unicorn Inc 0001 PCI-324 Audiowire Interface 137b PPT Vision 137c Iwatsu Electric Co Ltd 137d Dynachip Corporation 137e Patriot Scientific Corporation 137f Japan Satellite Systems Inc 1380 Sanritz Automation Co Ltd 1381 Brains Co. Ltd 1382 Marian - Electronic & Software 0001 ARC88 audio recording card 2008 Prodif 96 Pro sound system 2048 Prodif Plus sound system 2088 Marc 8 Midi sound system 20c8 Marc A sound system 4008 Marc 2 sound system 4010 Marc 2 Pro sound system 4048 Marc 4 MIDI sound system 4088 Marc 4 Digi sound system 4248 Marc X sound system 4424 TRACE D4 Sound System 1383 Controlnet Inc 1384 Reality Simulation Systems Inc 1385 Netgear 006b WA301 802.11b Wireless PCI Adapter 4100 MA301 802.11b Wireless PCI Adapter 4601 WAG511 802.11a/b/g Dual Band Wireless PC Card 620a GA620 Gigabit Ethernet 630a GA630 Gigabit Ethernet 1386 Video Domain Technologies 1387 Systran Corp 1388 Hitachi Information Technology Co Ltd 1389 Applicom International 0001 PCI1500PFB [Intelligent fieldbus adaptor] 138a Fusion Micromedia Corp 003d VFS491 Validity Sensor 138b Tokimec Inc 138c Silicon Reality 138d Future Techno Designs pte Ltd 138e Basler GmbH 138f Patapsco Designs Inc 1390 Concept Development Inc 1391 Development Concepts Inc 1392 Medialight Inc 1393 Moxa Technologies Co Ltd 0001 UC7000 Serial 1020 CP-102 (2-port RS-232 PCI) 1021 CP-102UL (2-port RS-232 Universal PCI) 1022 CP-102U (2-port RS-232 Universal PCI) 1023 CP-102UF 1024 CP-102E (2-port RS-232 Smart PCI Express Serial Board) 1025 CP-102EL (2-port RS-232 Smart PCI Express Serial Board) 1040 Smartio C104H/PCI 1041 CP104U (4-port RS-232 Universal PCI) 1042 CP104JU (4-port RS-232 Universal PCI) 1043 CP104EL (4-port RS-232 Smart PCI Express) 1044 POS104UL (4-port RS-232 Universal PCI) 1045 CP-104EL-A (4-port RS-232 PCI Express Serial Board) 1080 CB108 (8-port RS-232 PC/104-plus Module) 1140 CT-114 series 1141 Industrio CP-114 1142 CB114 (4-port RS-232/422/485 PC/104-plus Module) 1143 CP-114UL (4-port RS-232/422/485 Smart Universal PCI Serial Board) 1144 CP-114EL (4-port RS-232/422/485 Smart PCI Express Serial Board) 1180 CP118U (8-port RS-232/422/485 Smart Universal PCI) 1181 CP118EL (8-port RS-232/422/485 Smart PCI Express) 1182 CP-118EL-A (8-port RS-232/422/485 PCI Express Serial Board) 1320 CP132 (2-port RS-422/485 PCI) 1321 CP132U (2-Port RS-422/485 Universal PCI) 1322 CP-132EL (2-port RS-422/485 Smart PCI Express Serial Board) 1340 CP134U (4-Port RS-422/485 Universal PCI) 1341 CB134I (4-port RS-422/485 PC/104-plus Module) 1380 CP138U (8-port RS-232/422/485 Smart Universal PCI) 1680 Smartio C168H/PCI 1681 CP-168U V2 Smart Serial Board (8-port RS-232) 1682 CP-168EL (8-port RS-232 Smart PCI Express) 1683 CP-168EL-A (8-port RS-232 PCI Express Serial Board) 2040 Intellio CP-204J 2180 Intellio C218 Turbo PCI 3200 Intellio C320 Turbo PCI 1394 Level One Communications 0001 LXT1001 Gigabit Ethernet 1186 4800 DGE-500SX 1394 0001 NetCelerator Adapter 1395 Ambicom Inc 1396 Cipher Systems Inc 1397 Cologne Chip Designs GmbH 08b4 ISDN network Controller [HFC-4S] 1397 08b4 HFC-4S [Cologne Chip HFC-4S Eval. Board] 1397 b51a HFC-4S [Allo.com BRI card] 1397 b520 HFC-4S [IOB4ST] 1397 b540 HFC-4S [Swyx SX2 QuadBri] 1397 b550 HFC-4S [Junghanns.NET quadBRI] 1397 b556 HFC-4S [Junghanns.NET duoBRI] 1397 b559 HFC-4S [Junghanns.NET duoBRI miniPCI] 1397 b560 HFC-4S [BeroNet BN4S0] 1397 b566 HFC-4S [BeroNet BN2S0] 1397 b567 HFC-4S [BeroNet BN1S0 miniPCI] 1397 b568 HFC-4S [BeroNet BN4S0 miniPCI] 1397 b569 HFC-4S [BeroNet BN2S0 miniPCI] 1397 b620 HFC-4S 1397 b752 HFC-4S [Junghanns.NET quadBRI PCIe] 1397 b761 HFC-4S [BeroNet BN2S0 PCIe] 1397 b762 HFC-4S [BeroNet BN4S0 PCIe] 1397 e884 HFC-4S [OpenVox B200P] 1397 e888 HFC-4S [OpenVox B200P / B400P] 16b8 ISDN network Controller [HFC-8S] 1397 16b8 HFC-8S [Cologne Chip HFC-8S Eval. Board] 1397 b521 HFC-8S [IOB4ST Recording] 1397 b522 HFC-8S [IOB8ST] 1397 b552 HFC-8S [Junghanns.NET octoBRI] 1397 b55b HFC-8S [Junghanns.NET octoBRI] 1397 b562 HFC-8S [BeroNet BN8S0] 1397 b56b HFC-8S [BeroNet BN8S0+] 1397 b622 HFC-8S 1397 e998 HFC-8S [OpenVox B800P] 2bd0 ISDN network controller [HFC-PCI] 0675 1704 ISDN Adapter (PCI Bus, D, C) 0675 1708 ISDN Adapter (PCI Bus, D, C, ACPI) 1397 2bd0 ISDN Board e4bf 1000 CI1-1-Harp 30b1 ISDN network Controller [HFC-E1] 1397 30b1 HFC-E1 [Cologne Chip HFC-E1 Eval. Board] 1397 b523 HFC-E1 [IOB1E1] 1397 b543 HFC-E1 [Swyx SX2 SinglePRI V2] 1397 b544 HFC-E1 [Swyx SX2 DualPRI V2] 1397 b553 HFC-E1 [Junghanns.NET singleE1] 1397 b554 HFC-E1 [Junghanns.NET doubleE1] 1397 b555 HFC-E1 [Junghanns.NET doubleE1 2.0] 1397 b55a HFC-E1 [Junghanns.NET singleE1 miniPCI] 1397 b563 HFC-E1 [beroNet BN1E1] 1397 b564 HFC-E1 [beroNet BN2E1] 1397 b565 HFC-E1 [beroNet BN2E1+] 1397 b56a HFC-E1 [beroNet BN1E1 miniPCI] b700 ISDN network controller PrimuX S0 [HFC-PCI] f001 GSM Network Controller [HFC-4GSM] 1398 Clarion co. Ltd 1399 Rios systems Co Ltd 139a Alacritech Inc 0001 Quad Port 10/100 Server Accelerator 0003 Single Port 10/100 Server Accelerator 0005 Single Port Gigabit Server Accelerator 139b Mediasonic Multimedia Systems Ltd 139c Quantum 3d Inc 139d EPL limited 139e Media4 139f Aethra s.r.l. 13a0 Crystal Group Inc 13a1 Kawasaki Heavy Industries Ltd 13a2 Ositech Communications Inc 13a3 Hifn Inc. 0005 7751 Security Processor 0006 6500 Public Key Processor 0007 7811 Security Processor 0012 7951 Security Processor 0014 78XX Security Processor 0016 8065 Security Processor 0017 8165 Security Processor 0018 8154 Security Processor 001d 7956 Security Processor 001f 7855 Security Processor 0020 7955 Security Processor 0026 8155 Security Processor 002e 9630 Compression Processor 002f 9725 Compression and Security Processor 13a3 1600 DR1600 Acceleration Card 13a3 1605 DR1605 Acceleration Card 13a3 1610 DR1610 Acceleration Card 13a3 1615 DR1615 Acceleration Card 13a3 1620 DR1620 Acceleration Card 13a3 1625 DR1625 Acceleration Card 0033 8201 Acceleration Processor 13a3 0036 DX1710 Acceleration Card 0034 8202 Acceleration Processor 13a3 0036 DX1720 Acceleration Card 0035 8203 Acceleration Processor 13a3 0036 DX1730 Acceleration Card 0037 8204 Acceleration Processor 13a3 0036 DX1740 Acceleration Card 9240 XR9240 Compression and Security Coprocessor [Panther II] 13a3 9200 DX2040 Compression and Security Acceleration Card [Panther II] 13a4 Rascom Inc 13a5 Audio Digital Imaging Inc 13a6 Videonics Inc 13a7 Teles AG 13a8 Exar Corp. 0152 XR17C/D152 Dual PCI UART 0154 XR17C154 Quad UART 0158 XR17C158 Octal UART 0252 XR17V252 Dual UART PCI controller 0254 XR17V254 Quad UART PCI controller 0258 XR17V258 Octal UART PCI controller 0352 XR17V3521 Dual PCIe UART 4c52 9252 LRUS9252H 2-Port RS232 Serial Adapter 13a9 Siemens Medical Systems, Ultrasound Group 13aa Broadband Networks Inc 13ab Arcom Control Systems Ltd 13ac Motion Media Technology Ltd 13ad Nexus Inc 13ae ALD Technology Ltd 13af T.Sqware 13b0 Maxspeed Corp 13b1 Tamura corporation 13b2 Techno Chips Co. Ltd 13b3 Lanart Corporation 13b4 Wellbean Co Inc 13b5 ARM 13b6 Dlog GmbH 13b7 Logic Devices Inc 13b8 Nokia Telecommunications oy 13b9 Elecom Co Ltd 13ba Oxford Instruments 13bb Sanyo Technosound Co Ltd 13bc Bitran Corporation 13bd Sharp corporation 13be Miroku Jyoho Service Co. Ltd 13bf Sharewave Inc 13c0 Microgate Corporation 0010 SyncLink Adapter v1 0020 SyncLink SCC Adapter 0030 SyncLink Multiport Adapter 0070 SyncLink GT Adapter 0080 SyncLink GT4 Adapter 00a0 SyncLink GT2 Adapter 0210 SyncLink Adapter v2 13c1 3ware Inc 1000 5xxx/6xxx-series PATA-RAID 1001 7xxx/8xxx-series PATA/SATA-RAID 13c1 1001 7xxx/8xxx-series PATA/SATA-RAID 1002 9xxx-series SATA-RAID 1003 9550SX SATA-II RAID PCI-X 1004 9650SE SATA-II RAID PCIe 1005 9690SA SAS/SATA-II RAID PCIe 1010 9750 SAS2/SATA-II RAID PCIe 13c2 Technotrend Systemtechnik GmbH 000e Technotrend/Hauppauge DVB card rev2.3 1019 TTechnoTrend-budget DVB S2-3200 13c3 Janz Computer AG 13c4 Phase Metrics 13c5 Alphi Technology Corp 13c6 Condor Engineering Inc 0520 CEI-520 A429 Card 0620 CEI-620 A429 Card 0820 CEI-820 A429 Card 0830 CEI-830 A429 Card 1004 P-SER Multi-channel PMC to RS-485/422/232 adapter 13c7 Blue Chip Technology Ltd 0adc PCI-ADC 0b10 PCI-PIO 0d10 PCI-DIO 524c PCI-RLY 5744 PCI-WDT 13c8 Apptech Inc 13c9 Eaton Corporation 13ca Iomega Corporation 13cb Yano Electric Co Ltd 13cc BARCO 13cd Compatible Systems Corporation 13ce Cocom A/S 13cf Studio Audio & Video Ltd 13d0 Techsan Electronics Co Ltd 2103 B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card 2104 B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card (rev 01) 2200 B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card 13d1 Abocom Systems Inc ab02 ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter ab03 21x4x DEC-Tulip compatible 10/100 Ethernet ab06 RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter ab08 21x4x DEC-Tulip compatible 10/100 Ethernet 13d2 Shark Multimedia Inc 13d4 Graphics Microsystems Inc 13d5 Media 100 Inc 13d6 K.I. Technology Co Ltd 13d7 Toshiba Engineering Corporation 13d8 Phobos corporation 13d9 Apex PC Solutions Inc 13da Intresource Systems pte Ltd 13db Janich & Klass Computertechnik GmbH 13dc Netboost Corporation 13dd Multimedia Bundle Inc 13de ABB Robotics Products AB 13df E-Tech Inc 0001 PCI56RVP Modem 13df 0001 PCI56RVP Modem 13e0 GVC Corporation 13e1 Silicom Multimedia Systems Inc 13e2 Dynamics Research Corporation 13e3 Nest Inc 13e4 Calculex Inc 13e5 Telesoft Design Ltd 13e6 Argosy research Inc 13e7 NAC Incorporated 13e8 Chip Express Corporation 13e9 Intraserver Technology Inc 13ea Dallas Semiconductor 13eb Hauppauge Computer Works Inc 13ec Zydacron Inc 000a NPC-RC01 Remote control receiver 13ed Raytheion E-Systems 13ee Hayes Microcomputer Products Inc 13ef Coppercom Inc 13f0 Sundance Technology Inc / IC Plus Corp 0200 IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY 1043 8213 NX1001 0201 ST201 Sundance Ethernet 1021 TC902x Gigabit Ethernet 1023 IP1000 Family Gigabit Ethernet 1043 8180 NX1101 13f1 Oce' - Technologies B.V. 13f2 Ford Microelectronics Inc 13f3 Brocade Communications Systems, Inc. 13f4 Troika Networks, Inc. 1401 Zentai Fibre Channel Adapter 13f5 Kansai Electric Co. Ltd 13f6 C-Media Electronics Inc 0011 CMI8738 0100 CM8338A 13f6 ffff CMI8338/C3DX PCI Audio Device 0101 CM8338B 13f6 0101 CMI8338-031 PCI Audio Device 0111 CMI8738/CMI8768 PCI Audio 1019 0970 P6STP-FL motherboard 1043 8035 CUSI-FX motherboard 1043 8077 CMI8738 6-channel audio controller 1043 80e2 CMI8738 6ch-MX 13f6 0111 CMI8738/C3DX PCI Audio Device 13f6 9761 Theatron Agrippa 153b 1144 Aureon 5.1 153b 1170 Aureon 7.1 1681 a000 Gamesurround MUSE XL 17ab 0604 PSC604 Dynamic Edge 17ab 0605 PSC605 Sonic Edge 17ab 7777 PSC605 Sonic Edge 270f 1103 CT-7NJS Ultra motherboard 270f f462 7NJL1 motherboard 584d 3731 Digital X-Mystique 584d 3741 X-Plosion 7.1 584d 3751 X-Raider 7.1 584d 3761 X-Mystique 7.1 LP 584d 3771 X-Mystique 7.1 LP Value 7284 8384 Striker 7.1 0211 CM8738 5011 CM8888 [Oxygen Express] 13f6 5011 HDA Controller 8788 CMI8788 [Oxygen HD Audio] 1043 8269 Virtuoso 200 (Xonar D2) 1043 8275 Virtuoso 100 (Xonar DX) 1043 82b7 Virtuoso 200 (Xonar D2X) 1043 8314 Virtuoso 200 (Xonar HDAV1.3) 1043 8327 Virtuoso 100 (Xonar DX) 1043 834f Virtuoso 100 (Xonar D1) 1043 835c Virtuoso 100 (Xonar Essence STX) 1043 835d Virtuoso 100 (Xonar ST) 1043 835e Virtuoso 200 (Xonar HDAV1.3 Slim) 1043 838e Virtuoso 66 (Xonar DS) 1043 8428 Virtuoso 100 (Xonar Xense) 1043 8467 CMI8786 (Xonar DG) 1043 8521 CMI8786 (Xonar DGX) 1043 8522 Xonar DSX 1043 85f4 Virtuoso 100 (Xonar Essence STX II) 13f6 8782 PCI 2.0 HD Audio 13f6 ffff CMI8787-HG2PCI 14c3 1710 HiFier Fantasia 14c3 1711 HiFier Serenade 14c3 1713 HiFier Serenade III 1a58 0910 Barracuda AC-1 415a 5431 X-Meridian 7.1 5431 017a X-Meridian 7.1 2G 584d 3781 HDA X-Purity 7.1 Platinum 7284 9761 CLARO 7284 9781 CLARO halo 7284 9783 eCLARO 7284 9787 CLARO II 13f7 Wildfire Communications 13f8 Ad Lib Multimedia Inc 13f9 NTT Advanced Technology Corp. 13fa Pentland Systems Ltd 13fb Aydin Corp 13fc Computer Peripherals International 13fd Micro Science Inc 13fe Advantech Co. Ltd 0071 PCIE-1761H, 8-ch Relay and 8-ch Isolated Digital Input Card 1240 PCI-1240 4-channel stepper motor controller card 1600 PCI-16xx series PCI multiport serial board (function 0) # This board has two PCI functions, appears as two PCI devices 1601 0002 PCI-1601 2-port unisolated RS-422/485 # This board has two PCI functions, appears as two PCI devices 1602 0002 PCI-1602 2-port isolated RS-422/485 1612 0004 PCI-1612 4-port RS-232/422/485 1603 PCI-1603 2-port isolated RS-232/current loop 1604 PCI-1604 2-port RS-232 1680 PCI-1680 Rev.A1 2-port CAN-bus with isolation protection 16ff PCI-16xx series PCI multiport serial board (function 1: RX/TX steering CPLD) 1601 0000 PCI-1601 2-port unisolated RS-422/485 PCI communications card 1602 0000 PCI-1602 2-port isolated RS-422/485 1612 0000 PCI-1612 4-port RS-232/422/485 1711 PCI-1711 16-channel data acquisition card 12-bit, 100kS/s 1713 PCI-1713 32-channel isolated analog input card 1733 PCI-1733 32-channel isolated digital input card 1734 PCI-1734 32-channel isolated digital output card 1752 PCI-1752 64-channel Isolated Digital Output Card 1754 PCI-1754 64-channel Isolated Digital Input Card 1756 PCI-1756 64-ch Isolated Digital I/O PCI Card a004 PCI-1612 4-port RS-232/422/485 # FPGA bridge to two SJA1000 c302 MIOe-3680 2-Port CAN-Bus MIOe Module with Isolation Protection 13ff Silicon Spice Inc 1400 Artx Inc 1401 9432 TX 1401 CR-Systems A/S 1402 Meilhaus Electronic GmbH 0630 ME-630 0940 ME-94 0950 ME-95 0960 ME-96 1000 ME-1000 100a ME-1000 100b ME-1000 1400 ME-1400 140a ME-1400A 140b ME-1400B 140c ME-1400C 140d ME-1400D 140e ME-1400E 14ea ME-1400EA 14eb ME-1400EB 1604 ME-1600/4U 1608 ME-1600/8U 160c ME-1600/12U 160f ME-1600/16U 168f ME-1600/16U8I 4610 ME-4610 4650 ME-4650 4660 ME-4660 4661 ME-4660I 4662 ME-4660 4663 ME-4660I 4670 ME-4670 4671 ME-4670I 4672 ME-4670S 4673 ME-4670IS 4680 ME-4680 4681 ME-4680I 4682 ME-4680S 4683 ME-4680IS 6004 ME-6000/4 6008 ME-6000/8 600f ME-6000/16 6014 ME-6000I/4 6018 ME-6000I/8 601f ME-6000I/16 6034 ME-6000ISLE/4 6038 ME-6000ISLE/8 603f ME-6000ISLE/16 6044 ME-6000/4/DIO 6048 ME-6000/8/DIO 604f ME-6000/16/DIO 6054 ME-6000I/4/DIO 6058 ME-6000I/8/DIO 605f ME-6000I/16/DIO 6074 ME-6000ISLE/4/DIO 6078 ME-6000ISLE/8/DIO 607f ME-6000ISLE/16/DIO 6104 ME-6100/4 6108 ME-6100/8 610f ME-6100/16 6114 ME-6100I/4 6118 ME-6100I/8 611f ME-6100I/16 6134 ME-6100ISLE/4 6138 ME-6100ISLE/8 613f ME-6100ISLE/16 6144 ME-6100/4/DIO 6148 ME-6100/8/DIO 614f ME-6100/16/DIO 6154 ME-6100I/4/DIO 6158 ME-6100I/8/DIO 615f ME-6100I/16/DIO 6174 ME-6100ISLE/4/DIO 6178 ME-6100ISLE/8/DIO 617f ME-6100ISLE/16/DIO 6259 ME-6200I/9/DIO 6359 ME-6300I/9/DIO 810a ME-8100A 810b ME-8100B 820a ME-8200A 820b ME-8200B 1403 Ascor Inc 1404 Fundamental Software Inc 1405 Excalibur Systems Inc 1406 Oce' Printing Systems GmbH 1407 Lava Computer mfg Inc 0100 Lava Dual Serial 0101 Lava Quatro A 0102 Lava Quatro B 0110 Lava DSerial-PCI Port A 0111 Lava DSerial-PCI Port B 0120 Quattro-PCI A 0121 Quattro-PCI B 0180 Lava Octo A 0181 Lava Octo B 0200 Lava Port Plus 0201 Lava Quad A 0202 Lava Quad B 0220 Lava Quattro PCI Ports A/B 0221 Lava Quattro PCI Ports C/D 0400 Lava 8255-PIO-PCI 0500 Lava Single Serial 0520 Lava RS422-SS-PCI 0600 Lava Port 650 8000 Lava Parallel 8001 Dual parallel port controller A 8002 Lava Dual Parallel port A 8003 Lava Dual Parallel port B 8800 BOCA Research IOPPAR 1408 Aloka Co. Ltd 1409 Timedia Technology Co Ltd 7168 PCI2S550 (Dual 16550 UART) 1409 0002 SER4036A3V (2x RS232 port) 1409 4027 SER4027A (1x RS232 port) 1409 4037 SER4037A(L) [SUNIX SUN1889] (2x RS232 port) # Single DC-37 connector 1409 4056 SER4056A (4x RS232) 1409 5027 SER4027D 1409 5037 SER4037D (2x RS232 port) # Single DC-62 connector 1409 5066 SER4066R (8x RS232) # 4x 8p8c connectors 1409 6056 SER4056D (4x RS232 port) 7268 SUN1888 (Dual IEEE1284 parallel port) 1409 0103 PAR4008A 1409 0104 PAR4018A 140a DSP Research Inc # Formerly RAMiX, GE Fanuc, GE Intelligent Platforms 140b Abaco Systems, Inc. 140c Elmic Systems Inc 140d Matsushita Electric Works Ltd 140e Goepel Electronic GmbH 140f Salient Systems Corp 1410 Midas lab Inc 1411 Ikos Systems Inc # Nee IC Ensemble Inc. 1412 VIA Technologies Inc. 1712 ICE1712 [Envy24] PCI Multi-Channel I/O Controller 1412 1712 Hoontech ST Audio DSP 24 1412 d630 M-Audio Delta 1010 1412 d631 M-Audio Delta DiO 1412 d632 M-Audio Delta 66 1412 d633 M-Audio Delta 44 1412 d634 M-Audio Delta Audiophile 2496 1412 d635 M-Audio Delta TDIF 1412 d637 M-Audio Delta RBUS 1412 d638 M-Audio Delta 410 1412 d63b M-Audio Delta 1010LT 1412 d63c Digigram VX442 1416 1712 Hoontech ST Audio DSP 24 Media 7.1 153b 1115 EWS88 MT 153b 1125 EWS88 MT (Master) 153b 112b EWS88 D 153b 112c EWS88 D (Master) 153b 1130 EWX 24/96 153b 1138 DMX 6fire 24/96 153b 1151 PHASE88 16ce 1040 Edirol DA-2496 1724 VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller 10b0 0200 Hollywood@Home 7.1 1412 1724 Albatron PX865PE 7.1 1412 3630 M-Audio Revolution 7.1 1412 3631 M-Audio Revolution 5.1 1412 3632 M-Audio Audiophile 192 153b 1145 Aureon 7.1 Space 153b 1147 Aureon 5.1 Sky 153b 1150 PHASE 22 153b 1153 Aureon 7.1 Universe 17ab 1906 PSC 724 [Ultimate Edge] 270f f641 ZNF3-150 270f f645 ZNF3-250 3130 4154 MAYA 44 MKII 1413 Addonics 1414 Microsoft Corporation 0001 MN-120 (ADMtek Centaur-C based) 0002 MN-130 (ADMtek Centaur-P based) # Virtual Video Card Device for Windows Remote Desktop (RDP) 008c Basic Render Driver 008e Basic Render Driver 5353 Hyper-V virtual VGA 5801 XMA Decoder (Xenon) 5802 SATA Controller - CdRom (Xenon) 5803 SATA Controller - Disk (Xenon) 5804 OHCI Controller 0 (Xenon) 5805 EHCI Controller 0 (Xenon) 5806 OHCI Controller 1 (Xenon) 5807 EHCI Controller 1 (Xenon) 580a Fast Ethernet Adapter (Xenon) 580b Secure Flash Controller (Xenon) 580d System Management Controller (Xenon) 5811 Xenos GPU (Xenon) 5821 Xenos GPU (Zephyr/Falcon) 5831 Xenos GPU (Jasper) 5841 Xenos GPU (Slim) 1415 Oxford Semiconductor Ltd 8401 OX9162 Mode 1 (8-bit bus) 8403 OX9162 Mode 0 (parallel port) 9500 OX16PCI954 (Quad 16950 UART) function 0 (Disabled) 9501 OX16PCI954 (Quad 16950 UART) function 0 (Uart) 12c4 0201 Titan/cPCI (2 port) 12c4 0202 Titan/cPCI (4 port) 12c4 0203 Titan/cPCI (8 port) 12c4 0210 Titan/104-Plus (8 port, p1-4) 131f 2050 CyberPro (4-port) # Model IO1085, Part No: JJ-P46012 131f 2051 CyberSerial 4S Plus 15ed 2000 MCCR Serial p0-3 of 8 15ed 2001 MCCR Serial p0-3 of 16 9505 OXuPCI952 (Dual 16C950 UART) 950a EXSYS EX-41092 Dual 16950 Serial adapter 950b OXCB950 Cardbus 16950 UART 9510 OX16PCI954 (Quad 16950 UART) function 1 (Disabled) 12c4 0200 Titan/cPCI (Unused) 9511 OX16PCI954 (Quad 16950 UART) function 1 (8bit bus) 12c4 0211 Titan/104-Plus (8 port, p5-8) 15ed 2000 MCCR Serial p4-7 of 8 15ed 2001 MCCR Serial p4-15 of 16 9512 OX16PCI954 (Quad 16950 UART) function 1 (32bit bus) 9513 OX16PCI954 (Quad 16950 UART) function 1 (parallel port) 9521 OX16PCI952 (Dual 16950 UART) 9523 OX16PCI952 Integrated Parallel Port # Multifunction device with 3 function bits in ID c000 OXPCIe840 Parallel Port c004 OXPCIe840 Parallel Port c006 OXPCIe840 GPIO # Multifunction device with reset straps and function bits in ID c100 OXPCIe952 Parallel Port c101 OXPCIe952 Legacy 950 UART c104 OXPCIe952 Parallel Port c105 OXPCIe952 Legacy 950 UART c106 OXPCIe952 GPIO c108 OXPCIe952 Parallel Port c109 OXPCIe952 Legacy 950 UART c10c OXPCIe952 Parallel Port c10d OXPCIe952 Legacy 950 UART c10e OXPCIe952 GPIO c110 OXPCIe952 Parallel Port c114 OXPCIe952 Parallel Port c118 OXPCIe952 Parallel Port c11b OXPCIe952 Native 950 UART c11c OXPCIe952 Parallel Port c11e OXPCIe952 GPIO c11f OXPCIe952 Native 950 UART c120 OXPCIe952 Legacy 950 UART c124 OXPCIe952 Legacy 950 UART c126 OXPCIe952 GPIO c128 OXPCIe952 Legacy 950 UART c12c OXPCIe952 Legacy 950 UART c12e OXPCIe952 GPIO c134 OXPCIe952 GPIO c138 OXPCIe952 Native 950 UART c13c OXPCIe952 GPIO c13d OXPCIe952 Native 950 UART c140 OXPCIe952 Legacy 950 UART #1 c141 OXPCIe952 Legacy 950 UART #2 c144 OXPCIe952 Legacy 950 UART #1 c145 OXPCIe952 Legacy 950 UART #2 c146 OXPCIe952 GPIO c148 OXPCIe952 Legacy 950 UART #1 c149 OXPCIe952 Legacy 950 UART #2 c14c OXPCIe952 Legacy 950 UART #1 c14d OXPCIe952 Legacy 950 UART #2 c14e OXPCIe952 GPIO c154 OXPCIe952 GPIO c158 OXPCIe952 Dual Native 950 UART e4bf c504 CP4-SCAT Wireless Technologies Carrier Board e4bf d551 DU1-MUSTANG Dual-Port RS-485 Interface c15c OXPCIe952 GPIO c15d OXPCIe952 Dual Native 950 UART # Multifunction device with 4 function bits in ID c204 OXPCIe954 GPIO c208 OXPCIe954 Quad Native 950 UART c20c OXPCIe954 GPIO c20d OXPCIe954 Quad Native 950 UART # Multifunction device with 4 function bits in ID c304 OXPCIe958 GPIO c308 OXPCIe958 Quad Native 950 UART c30c OXPCIe958 GPIO c30d OXPCIe958 Quad Native 950 UART # Multifunction device with 8 function bits in ID c530 OXPCIe200 Dual OHCI USB Controller (ULPI/R-ULPI) c531 OXPCIe200 Dual EHCI USB Controller (ULPI/R-ULPI) c534 OXPCIe200 Dual OHCI USB Controller (ULPI/R-ULPI) c535 OXPCIe200 Dual EHCI USB Controller (ULPI/R-ULPI) c536 OXPCIe200 GPIO c538 OXPCIe200 Dual OHCI USB Controller (ULPI/R-ULPI) c539 OXPCIe200 Dual EHCI USB Controller (ULPI/R-ULPI) c53b OXPCIe200 Native 950 UART c53c OXPCIe200 Dual OHCI USB Controller (ULPI/R-ULPI) c53d OXPCIe200 Dual EHCI USB Controller (ULPI/R-ULPI) c53e OXPCIe200 GPIO c53f OXPCIe200 Native 950 UART c540 OXPCIe200 Dual OHCI USB Controller (R-ULPI) c541 OXPCIe200 Dual EHCI USB Controller (R-ULPI) c544 OXPCIe200 Dual OHCI USB Controller (R-ULPI) c545 OXPCIe200 Dual EHCI USB Controller (R-ULPI) c546 OXPCIe200 GPIO c548 OXPCIe200 Dual OHCI USB Controller (R-ULPI) c549 OXPCIe200 Dual EHCI USB Controller (R-ULPI) c54b OXPCIe200 Native 950 UART c54c OXPCIe200 Dual OHCI USB Controller (R-ULPI) c54d OXPCIe200 Dual EHCI USB Controller (R-ULPI) c54e OXPCIe200 Dual GPIO c54f OXPCIe200 Native 950 UART c560 OXPCIe200 Dual OHCI USB Controller (ULPI/analog) c561 OXPCIe200 EHCI USB Controller (ULPI) c564 OXPCIe200 Dual OHCI USB Controller (ULPI/analog) c565 OXPCIe200 EHCI USB Controller (ULPI) c566 OXPCIe200 GPIO c568 OXPCIe200 Dual OHCI USB Controller (ULPI/analog) c569 OXPCIe200 EHCI USB Controller (ULPI) c56b OXPCIe200 Native 950 UART c56c OXPCIe200 Dual OHCI USB Controller (ULPI/analog) c56d OXPCIe200 EHCI USB Controller (ULPI) c56e OXPCIe200 GPIO c56f OXPCIe200 Native 950 UART c570 OXPCIe200 Dual OHCI USB Controller (R-ULPI/analog) c571 OXPCIe200 EHCI USB Controller (R-ULPI) c574 OXPCIe200 Dual OHCI USB Controller (R-ULPI/analog) c575 OXPCIe200 EHCI USB Controller (R-ULPI) c576 OXPCIe200 GPIO c578 OXPCIe200 Dual OHCI USB Controller (R-ULPI/analog) c579 OXPCIe200 EHCI USB Controller (R-ULPI) c57b OXPCIe200 Native 950 UART c57c OXPCIe200 Dual OHCI USB Controller (R-ULPI/analog) c57d OXPCIe200 EHCI USB Controller (R-ULPI) c57e OXPCIe200 GPIO c57f OXPCIe200 Native 950 UART c5a0 OXPCIe200 OHCI USB Controller (ULPI) c5a1 OXPCIe200 EHCI USB Controller (ULPI) c5a2 OXPCIe200 Programmable Memory Interface c5a4 OXPCIe200 OHCI USB Controller (ULPI) c5a5 OXPCIe200 EHCI USB Controller (ULPI) c5a6 OXPCIe200 Programmable Memory Interface & GPIO c5a8 OXPCIe200 OHCI USB Controller (ULPI) c5a9 OXPCIe200 EHCI USB Controller (ULPI) c5aa OXPCIe200 Programmable Memory Interface c5ab OXPCIe200 Native 950 UART c5ac OXPCIe200 OHCI USB Controller (ULPI) c5ad OXPCIe200 EHCI USB Controller (ULPI) c5ae OXPCIe200 Programmable Memory Interface & GPIO c5af OXPCIe200 Native 950 UART c5b0 OXPCIe200 OHCI USB Controller (R-ULPI) c5b1 OXPCIe200 EHCI USB Controller (R-ULPI) c5b2 OXPCIe200 Programmable Memory Interface c5b4 OXPCIe200 OHCI USB Controller (R-ULPI) c5b5 OXPCIe200 EHCI USB Controller (R-ULPI) c5b6 OXPCIe200 Programmable Memory Interface & GPIO c5b8 OXPCIe200 OHCI USB Controller (R-ULPI) c5b9 OXPCIe200 EHCI USB Controller (R-ULPI) c5ba OXPCIe200 Programmable Memory Interface c5bb OXPCIe200 Native 950 UART c5bc OXPCIe200 OHCI USB Controller (R-ULPI) c5bd OXPCIe200 EHCI USB Controller (R-ULPI) c5be OXPCIe200 Programmable Memory Interface & GPIO c5bf OXPCIe200 Native 950 UART c5c0 OXPCIe200 OHCI USB Controller (analog) c5c2 OXPCIe200 Programmable Memory Interface c5c4 OXPCIe200 OHCI USB Controller (analog) c5c6 OXPCIe200 Programmable Memory Interface & GPIO c5c8 OXPCIe200 OHCI USB Controller (analog) c5ca OXPCIe200 Programmable Memory Interface c5cb OXPCIe200 Native 950 UART c5cc OXPCIe200 OHCI USB Controller (analog) c5ce OXPCIe200 Programmable Memory Interface & GPIO c5cf OXPCIe200 Native 950 UART 1416 Multiwave Innovation pte Ltd 1417 Convergenet Technologies Inc 1418 Kyushu electronics systems Inc 1419 Excel Switching Corp 141a Apache Micro Peripherals Inc 141b Zoom Telephonics Inc 141d Digitan Systems Inc 141e Fanuc Ltd 141f Visiontech Ltd 1420 Psion Dacom plc 8002 Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part) 8003 Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part) 1421 Ads Technologies Inc 1422 Ygrec Systems Co Ltd 1423 Custom Technology Corp. 1424 Videoserver Connections 1425 Chelsio Communications Inc 000b T210 Protocol Engine 000c T204 Protocol Engine 0022 10GbE Ethernet Adapter 0030 T310 10GbE Single Port Adapter 103c 705e PCIe 10GBase-SR [AD386A] 0031 T320 10GbE Dual Port Adapter 0032 T302 1GbE Dual Port Adapter 0033 T304 1GbE Quad Port Adapter 0034 B320 10GbE Dual Port Adapter 0035 S310-CR 10GbE Single Port Adapter 0036 S320-LP-CR 10GbE Dual Port Adapter 0037 N320-G2-CR 10GbE Dual Port Adapter 4001 T420-CR Unified Wire Ethernet Controller 4002 T422-CR Unified Wire Ethernet Controller 4003 T440-CR Unified Wire Ethernet Controller 4004 T420-BCH Unified Wire Ethernet Controller 4005 T440-BCH Unified Wire Ethernet Controller 4006 T440-CH Unified Wire Ethernet Controller 4007 T420-SO Unified Wire Ethernet Controller 4008 T420-CX Unified Wire Ethernet Controller 4009 T420-BT Unified Wire Ethernet Controller 400a T404-BT Unified Wire Ethernet Controller 400b B420-SR Unified Wire Ethernet Controller 400c B404-BT Unified Wire Ethernet Controller 400d T480 Unified Wire Ethernet Controller 400e T440-LP-CR Unified Wire Ethernet Controller 400f T440 [Amsterdam] Unified Wire Ethernet Controller 4080 T480-4080 T480 Unified Wire Ethernet Controller 4081 T440F-4081 T440-FCoE Unified Wire Ethernet Controller 4082 T420-4082 Unified Wire Ethernet Controller 4083 T420X-4083 Unified Wire Ethernet Controller 4084 T440-4084 Unified Wire Ethernet Controller 4085 T420-4085 SFP+ Unified Wire Ethernet Controller 4086 T440-4086 10Gbase-T Unified Wire Ethernet Controller 4087 T440T-4087 Unified Wire Ethernet Controller 4088 T440-4088 Unified Wire Ethernet Controller 4401 T420-CR Unified Wire Ethernet Controller 4402 T422-CR Unified Wire Ethernet Controller 4403 T440-CR Unified Wire Ethernet Controller 4404 T420-BCH Unified Wire Ethernet Controller 4405 T440-BCH Unified Wire Ethernet Controller 4406 T440-CH Unified Wire Ethernet Controller 4407 T420-SO Unified Wire Ethernet Controller 4408 T420-CX Unified Wire Ethernet Controller 4409 T420-BT Unified Wire Ethernet Controller 440a T404-BT Unified Wire Ethernet Controller 440b B420-SR Unified Wire Ethernet Controller 440c B404-BT Unified Wire Ethernet Controller 440d T480 Unified Wire Ethernet Controller 440e T440-LP-CR Unified Wire Ethernet Controller 440f T440 [Amsterdam] Unified Wire Ethernet Controller 4480 T480-4080 T480 Unified Wire Ethernet Controller 4481 T440F-4081 T440-FCoE Unified Wire Ethernet Controller 4482 T420-4082 Unified Wire Ethernet Controller 4483 T420X-4083 Unified Wire Ethernet Controller 4484 T440-4084 Unified Wire Ethernet Controller 4485 T420-4085 SFP+ Unified Wire Ethernet Controller 4486 T440-4086 10Gbase-T Unified Wire Ethernet Controller 4487 T440T-4087 Unified Wire Ethernet Controller 4488 T440-4088 Unified Wire Ethernet Controller 4501 T420-CR Unified Wire Storage Controller 4502 T422-CR Unified Wire Storage Controller 4503 T440-CR Unified Wire Storage Controller 4504 T420-BCH Unified Wire Storage Controller 4505 T440-BCH Unified Wire Storage Controller 4506 T440-CH Unified Wire Storage Controller 4507 T420-SO Unified Wire Storage Controller 4508 T420-CX Unified Wire Storage Controller 4509 T420-BT Unified Wire Storage Controller 450a T404-BT Unified Wire Storage Controller 450b B420-SR Unified Wire Storage Controller 450c B404-BT Unified Wire Storage Controller 450d T480 Unified Wire Storage Controller 450e T440-LP-CR Unified Wire Storage Controller 450f T440 [Amsterdam] Unified Wire Storage Controller 4580 T480-4080 T480 Unified Wire Storage Controller 4581 T440F-4081 T440-FCoE Unified Wire Storage Controller 4582 T420-4082 Unified Wire Storage Controller 4583 T420X-4083 Unified Wire Storage Controller 4584 T440-4084 Unified Wire Storage Controller 4585 T420-4085 SFP+ Unified Wire Storage Controller 4586 T440-4086 10Gbase-T Unified Wire Storage Controller 4587 T440T-4087 Unified Wire Storage Controller 4588 T440-4088 Unified Wire Storage Controller 4601 T420-CR Unified Wire Storage Controller 4602 T422-CR Unified Wire Storage Controller 4603 T440-CR Unified Wire Storage Controller 4604 T420-BCH Unified Wire Storage Controller 4605 T440-BCH Unified Wire Storage Controller 4606 T440-CH Unified Wire Storage Controller 4607 T420-SO Unified Wire Storage Controller 4608 T420-CX Unified Wire Storage Controller 4609 T420-BT Unified Wire Storage Controller 460a T404-BT Unified Wire Storage Controller 460b B420-SR Unified Wire Storage Controller 460c B404-BT Unified Wire Storage Controller 460d T480 Unified Wire Storage Controller 460e T440-LP-CR Unified Wire Storage Controller 460f T440 [Amsterdam] Unified Wire Storage Controller 4680 T480-4080 T480 Unified Wire Storage Controller 4681 T440F-4081 T440-FCoE Unified Wire Storage Controller 4682 T420-4082 Unified Wire Storage Controller 4683 T420X-4083 Unified Wire Storage Controller 4684 T440-4084 Unified Wire Storage Controller 4685 T420-4085 SFP+ Unified Wire Storage Controller 4686 T440-4086 10Gbase-T Unified Wire Storage Controller 4687 T440T-4087 Unified Wire Storage Controller 4688 T440-4088 Unified Wire Storage Controller 4701 T420-CR Unified Wire Ethernet Controller 4702 T422-CR Unified Wire Ethernet Controller 4703 T440-CR Unified Wire Ethernet Controller 4704 T420-BCH Unified Wire Ethernet Controller 4705 T440-BCH Unified Wire Ethernet Controller 4706 T440-CH Unified Wire Ethernet Controller 4707 T420-SO Unified Wire Ethernet Controller 4708 T420-CX Unified Wire Ethernet Controller 4709 T420-BT Unified Wire Ethernet Controller 470a T404-BT Unified Wire Ethernet Controller 470b B420-SR Unified Wire Ethernet Controller 470c B404-BT Unified Wire Ethernet Controller 470d T480 Unified Wire Ethernet Controller 470e T440-LP-CR Unified Wire Ethernet Controller 470f T440 [Amsterdam] Unified Wire Ethernet Controller 4780 T480-4080 T480 Unified Wire Ethernet Controller 4781 T440F-4081 T440-FCoE Unified Wire Ethernet Controller 4782 T420-4082 Unified Wire Ethernet Controller 4783 T420X-4083 Unified Wire Ethernet Controller 4784 T440-4084 Unified Wire Ethernet Controller 4785 T420-4085 SFP+ Unified Wire Ethernet Controller 4786 T440-4086 10Gbase-T Unified Wire Ethernet Controller 4787 T440T-4087 Unified Wire Ethernet Controller 4788 T440-4088 Unified Wire Ethernet Controller 4801 T420-CR Unified Wire Ethernet Controller [VF] 4802 T422-CR Unified Wire Ethernet Controller [VF] 4803 T440-CR Unified Wire Ethernet Controller [VF] 4804 T420-BCH Unified Wire Ethernet Controller [VF] 4805 T440-BCH Unified Wire Ethernet Controller [VF] 4806 T440-CH Unified Wire Ethernet Controller [VF] 4807 T420-SO Unified Wire Ethernet Controller [VF] 4808 T420-CX Unified Wire Ethernet Controller [VF] 4809 T420-BT Unified Wire Ethernet Controller [VF] 480a T404-BT Unified Wire Ethernet Controller [VF] 480b B420-SR Unified Wire Ethernet Controller [VF] 480c B404-BT Unified Wire Ethernet Controller [VF] 480d T480 Unified Wire Ethernet Controller [VF] 480e T440-LP-CR Unified Wire Ethernet Controller [VF] 480f T440 [Amsterdam] Unified Wire Ethernet Controller [VF] 4880 T480-4080 T480 Unified Wire Ethernet Controller [VF] 4881 T440F-4081 T440-FCoE Unified Wire Ethernet Controller [VF] 4882 T420-4082 Unified Wire Ethernet Controller [VF] 4883 T420X-4083 Unified Wire Ethernet Controller [VF] 4884 T440-4084 Unified Wire Ethernet Controller [VF] 4885 T420-4085 SFP+ Unified Wire Ethernet Controller [VF] 4886 T440-4086 10Gbase-T Unified Wire Ethernet Controller [VF] 4887 T440T-4087 Unified Wire Ethernet Controller [VF] 4888 T440-4088 Unified Wire Ethernet Controller [VF] 5001 T520-CR Unified Wire Ethernet Controller 193d 1001 510F-B 5002 T522-CR Unified Wire Ethernet Controller 5003 T540-CR Unified Wire Ethernet Controller 5004 T520-BCH Unified Wire Ethernet Controller 5005 T540-BCH Unified Wire Ethernet Controller 5006 T540-CH Unified Wire Ethernet Controller 5007 T520-SO Unified Wire Ethernet Controller 5008 T520-CX Unified Wire Ethernet Controller 5009 T520-BT Unified Wire Ethernet Controller 500a T504-BT Unified Wire Ethernet Controller 500b B520-SR Unified Wire Ethernet Controller 500c B504-BT Unified Wire Ethernet Controller 500d T580-CR Unified Wire Ethernet Controller 500e T540-LP-CR Unified Wire Ethernet Controller 500f T540 [Amsterdam] Unified Wire Ethernet Controller 5010 T580-LP-CR Unified Wire Ethernet Controller 5011 T520-LL-CR Unified Wire Ethernet Controller 5012 T560-CR Unified Wire Ethernet Controller 5013 T580-CHR Unified Wire Ethernet Controller 5014 T580-SO-CR Unified Wire Ethernet Controller 5015 T502-BT Unified Wire Ethernet Controller 5016 T580-OCP-SO Unified Wire Ethernet Controller 5017 T520-OCP-SO Unified Wire Ethernet Controller 5018 T540-BT Unified Wire Ethernet Controller 5019 T540-LP-BT Unified Wire Ethernet Controller 501a T540-SO-BT Unified Wire Ethernet Controller 501b T540-SO-CR Unified Wire Ethernet Controller 5080 T540-5080 Unified Wire Ethernet Controller 5081 T540-5081 Unified Wire Ethernet Controller 5082 T504-5082 Unified Wire Ethernet Controller 5083 T540-5083 Unified Wire Ethernet Controller 5084 T540-5084 Unified Wire Ethernet Controller 5085 T580-5085 Unified Wire Ethernet Controller 5086 T580-5086 Unified Wire Ethernet Controller 5087 T580-5087 Unified Wire Ethernet Controller 5088 T570-5088 Unified Wire Ethernet Controller 5089 T520-5089 Unified Wire Ethernet Controller 5090 T540-5090 Unified Wire Ethernet Controller 5091 T522-5091 Unified Wire Ethernet Controller 5092 T520-5092 Unified Wire Ethernet Controller 5093 T580-5093 Unified Wire Ethernet Controller 5094 T540-5094 Unified Wire Ethernet Controller 5095 T540-5095 Unified Wire Ethernet Controller 5096 T580-5096 Unified Wire Ethernet Controller 5097 T520-5097 Unified Wire Ethernet Controller 5098 T580-5098 Unified Wire Ethernet Controller 5099 T580-5099 Unified Wire Ethernet Controller 509a T520-509A Unified Wire Ethernet Controller 509b T540-509B Unified Wire Ethernet Controller 509c T520-509C Unified Wire Ethernet Controller 509d T540-509D Unified Wire Ethernet Controller 509e T520-509E Unified Wire Ethernet Controller 509f T540-509F Unified Wire Ethernet Controller 50a0 T540-50A0 Unified Wire Ethernet Controller 50a1 T540-50A1 Unified Wire Ethernet Controller 50a2 T580-50A2 Unified Wire Ethernet Controller 50a3 T580-50A3 Unified Wire Ethernet Controller 50a4 T540-50A4 Unified Wire Ethernet Controller 50a5 T522-50A5 Unified Wire Ethernet Controller 50a6 T522-50A6 Unified Wire Ethernet Controller 50a7 T580-50A7 Unified Wire Ethernet Controller 50a8 T580-50A8 Unified Wire Ethernet Controller 50a9 T580-50A9 Unified Wire Ethernet Controller 50aa T580-50AA Unified Wire Ethernet Controller 50ab T520-50AB Unified Wire Ethernet Controller 50ac T540-50AC Unified Wire Ethernet Controller 50ad T520-50AD Unified Wire Ethernet Controller 50ae T540-50AE Unified Wire Ethernet Controller 50af T580-50AF Unified Wire Ethernet Controller 50b0 T520-50B0 Unified Wire Ethernet Controller 5401 T520-CR Unified Wire Ethernet Controller 5402 T522-CR Unified Wire Ethernet Controller 5403 T540-CR Unified Wire Ethernet Controller 5404 T520-BCH Unified Wire Ethernet Controller 5405 T540-BCH Unified Wire Ethernet Controller 5406 T540-CH Unified Wire Ethernet Controller 5407 T520-SO Unified Wire Ethernet Controller 5408 T520-CX Unified Wire Ethernet Controller 5409 T520-BT Unified Wire Ethernet Controller 540a T504-BT Unified Wire Ethernet Controller 540b B520-SR Unified Wire Ethernet Controller 540c B504-BT Unified Wire Ethernet Controller 540d T580-CR Unified Wire Ethernet Controller 540e T540-LP-CR Unified Wire Ethernet Controller 540f T540 [Amsterdam] Unified Wire Ethernet Controller 5410 T580-LP-CR Unified Wire Ethernet Controller 5411 T520-LL-CR Unified Wire Ethernet Controller 5412 T560-CR Unified Wire Ethernet Controller 5413 T580-CHR Unified Wire Ethernet Controller 5414 T580-SO-CR Unified Wire Ethernet Controller 5415 T502-BT Unified Wire Ethernet Controller 5416 T580-OCP-SO Unified Wire Ethernet Controller 5417 T520-OCP-SO Unified Wire Ethernet Controller 5418 T540-BT Unified Wire Ethernet Controller 5419 T540-LP-BT Unified Wire Ethernet Controller 541a T540-SO-BT Unified Wire Ethernet Controller 541b T540-SO-CR Unified Wire Ethernet Controller 5480 T540-5080 Unified Wire Ethernet Controller 5481 T540-5081 Unified Wire Ethernet Controller 5482 T504-5082 Unified Wire Ethernet Controller 5483 T540-5083 Unified Wire Ethernet Controller 5484 T540-5084 Unified Wire Ethernet Controller 5485 T580-5085 Unified Wire Ethernet Controller 5486 T580-5086 Unified Wire Ethernet Controller 5487 T580-5087 Unified Wire Ethernet Controller 5488 T570-5088 Unified Wire Ethernet Controller 5489 T520-5089 Unified Wire Ethernet Controller 5490 T540-5090 Unified Wire Ethernet Controller 5491 T522-5091 Unified Wire Ethernet Controller 5492 T520-5092 Unified Wire Ethernet Controller 5493 T580-5093 Unified Wire Ethernet Controller 5494 T540-5094 Unified Wire Ethernet Controller 5495 T540-5095 Unified Wire Ethernet Controller 5496 T580-5096 Unified Wire Ethernet Controller 5497 T520-5097 Unified Wire Ethernet Controller 5498 T580-5098 Unified Wire Ethernet Controller 5499 T580-5099 Unified Wire Ethernet Controller 549a T520-509A Unified Wire Ethernet Controller 549b T540-509B Unified Wire Ethernet Controller 549c T520-509C Unified Wire Ethernet Controller 549d T540-509D Unified Wire Ethernet Controller 549e T520-509E Unified Wire Ethernet Controller 549f T540-509F Unified Wire Ethernet Controller 54a0 T540-50A0 Unified Wire Ethernet Controller 54a1 T540-50A1 Unified Wire Ethernet Controller 54a2 T580-50A2 Unified Wire Ethernet Controller 54a3 T580-50A3 Unified Wire Ethernet Controller 54a4 T540-50A4 Unified Wire Ethernet Controller 54a5 T522-50A5 Unified Wire Ethernet Controller 54a6 T522-50A6 Unified Wire Ethernet Controller 54a7 T580-50A7 Unified Wire Ethernet Controller 54a8 T580-50A8 Unified Wire Ethernet Controller 54a9 T580-50A9 Unified Wire Ethernet Controller 54aa T580-50AA Unified Wire Ethernet Controller 54ab T520-50AB Unified Wire Ethernet Controller 54ac T540-50AC Unified Wire Ethernet Controller 54ad T520-50AD Unified Wire Ethernet Controller 54ae T540-50AE Unified Wire Ethernet Controller 54af T580-50AF Unified Wire Ethernet Controller 54b0 T520-50B0 Unified Wire Ethernet Controller 5501 T520-CR Unified Wire Storage Controller 5502 T522-CR Unified Wire Storage Controller 5503 T540-CR Unified Wire Storage Controller 5504 T520-BCH Unified Wire Storage Controller 5505 T540-BCH Unified Wire Storage Controller 5506 T540-CH Unified Wire Storage Controller 5507 T520-SO Unified Wire Storage Controller 5508 T520-CX Unified Wire Storage Controller 5509 T520-BT Unified Wire Storage Controller 550a T504-BT Unified Wire Storage Controller 550b B520-SR Unified Wire Storage Controller 550c B504-BT Unified Wire Storage Controller 550d T580-CR Unified Wire Storage Controller 550e T540-LP-CR Unified Wire Storage Controller 550f T540 [Amsterdam] Unified Wire Storage Controller 5510 T580-LP-CR Unified Wire Storage Controller 5511 T520-LL-CR Unified Wire Storage Controller 5512 T560-CR Unified Wire Storage Controller 5513 T580-CHR Unified Wire Storage Controller 5514 T580-SO-CR Unified Wire Storage Controller 5515 T502-BT Unified Wire Storage Controller 5516 T580-OCP-SO Unified Wire Storage Controller 5517 T520-OCP-SO Unified Wire Storage Controller 5518 T540-BT Unified Wire Storage Controller 5519 T540-LP-BT Unified Wire Storage Controller 551a T540-SO-BT Unified Wire Storage Controller 551b T540-SO-CR Unified Wire Storage Controller 5580 T540-5080 Unified Wire Storage Controller 5581 T540-5081 Unified Wire Storage Controller 5582 T504-5082 Unified Wire Storage Controller 5583 T540-5083 Unified Wire Storage Controller 5584 T540-5084 Unified Wire Storage Controller 5585 T580-5085 Unified Wire Storage Controller 5586 T580-5086 Unified Wire Storage Controller 5587 T580-5087 Unified Wire Storage Controller 5588 T570-5088 Unified Wire Storage Controller 5589 T520-5089 Unified Wire Storage Controller 5590 T540-5090 Unified Wire Storage Controller 5591 T522-5091 Unified Wire Storage Controller 5592 T520-5092 Unified Wire Storage Controller 5593 T580-5093 Unified Wire Storage Controller 5594 T540-5094 Unified Wire Storage Controller 5595 T540-5095 Unified Wire Storage Controller 5596 T580-5096 Unified Wire Storage Controller 5597 T520-5097 Unified Wire Storage Controller 5598 T580-5098 Unified Wire Storage Controller 5599 T580-5099 Unified Wire Storage Controller 559a T520-509A Unified Wire Storage Controller 559b T540-509B Unified Wire Storage Controller 559c T520-509C Unified Wire Storage Controller 559d T540-509D Unified Wire Storage Controller 559e T520-509E Unified Wire Storage Controller 559f T540-509F Unified Wire Storage Controller 55a0 T540-50A0 Unified Wire Storage Controller 55a1 T540-50A1 Unified Wire Storage Controller 55a2 T580-50A2 Unified Wire Storage Controller 55a3 T580-50A3 Unified Wire Storage Controller 55a4 T540-50A4 Unified Wire Storage Controller 55a5 T522-50A5 Unified Wire Storage Controller 55a6 T522-50A6 Unified Wire Storage Controller 55a7 T580-50A7 Unified Wire Storage Controller 55a8 T580-50A8 Unified Wire Storage Controller 55a9 T580-50A9 Unified Wire Storage Controller 55aa T580-50AA Unified Wire Storage Controller 55ab T520-50AB Unified Wire Storage Controller 55ac T540-50AC Unified Wire Storage Controller 55ad T520-50AD Unified Wire Storage Controller 55ae T540-50AE Unified Wire Storage Controller 55af T580-50AF Unified Wire Storage Controller 55b0 T520-50B0 Unified Wire Storage Controller 5601 T520-CR Unified Wire Storage Controller 5602 T522-CR Unified Wire Storage Controller 5603 T540-CR Unified Wire Storage Controller 5604 T520-BCH Unified Wire Storage Controller 5605 T540-BCH Unified Wire Storage Controller 5606 T540-CH Unified Wire Storage Controller 5607 T520-SO Unified Wire Storage Controller 5608 T520-CX Unified Wire Storage Controller 5609 T520-BT Unified Wire Storage Controller 560a T504-BT Unified Wire Storage Controller 560b B520-SR Unified Wire Storage Controller 560c B504-BT Unified Wire Storage Controller 560d T580-CR Unified Wire Storage Controller 560e T540-LP-CR Unified Wire Storage Controller 560f T540 [Amsterdam] Unified Wire Storage Controller 5610 T580-LP-CR Unified Wire Storage Controller 5611 T520-LL-CR Unified Wire Storage Controller 5612 T560-CR Unified Wire Storage Controller 5613 T580-CHR Unified Wire Storage Controller 5614 T580-SO-CR Unified Wire Storage Controller 5615 T502-BT Unified Wire Storage Controller 5616 T580-OCP-SO Unified Wire Storage Controller 5617 T520-OCP-SO Unified Wire Storage Controller 5618 T540-BT Unified Wire Storage Controller 5619 T540-LP-BT Unified Wire Storage Controller 561a T540-SO-BT Unified Wire Storage Controller 561b T540-SO-CR Unified Wire Storage Controller 5680 T540-5080 Unified Wire Storage Controller 5681 T540-5081 Unified Wire Storage Controller 5682 T504-5082 Unified Wire Storage Controller 5683 T540-5083 Unified Wire Storage Controller 5684 T540-5084 Unified Wire Storage Controller 5685 T580-5085 Unified Wire Storage Controller 5686 T580-5086 Unified Wire Storage Controller 5687 T580-5087 Unified Wire Storage Controller 5688 T570-5088 Unified Wire Storage Controller 5689 T520-5089 Unified Wire Storage Controller 5690 T540-5090 Unified Wire Storage Controller 5691 T522-5091 Unified Wire Storage Controller 5692 T520-5092 Unified Wire Storage Controller 5693 T580-5093 Unified Wire Storage Controller 5694 T540-5094 Unified Wire Storage Controller 5695 T540-5095 Unified Wire Storage Controller 5696 T580-5096 Unified Wire Storage Controller 5697 T520-5097 Unified Wire Storage Controller 5698 T580-5098 Unified Wire Storage Controller 5699 T580-5099 Unified Wire Storage Controller 569a T520-509A Unified Wire Storage Controller 569b T540-509B Unified Wire Storage Controller 569c T520-509C Unified Wire Storage Controller 569d T540-509D Unified Wire Storage Controller 569e T520-509E Unified Wire Storage Controller 569f T540-509F Unified Wire Storage Controller 56a0 T540-50A0 Unified Wire Storage Controller 56a1 T540-50A1 Unified Wire Storage Controller 56a2 T580-50A2 Unified Wire Storage Controller 56a3 T580-50A3 Unified Wire Storage Controller 56a4 T540-50A4 Unified Wire Storage Controller 56a5 T522-50A5 Unified Wire Storage Controller 56a6 T522-50A6 Unified Wire Storage Controller 56a7 T580-50A7 Unified Wire Storage Controller 56a8 T580-50A8 Unified Wire Storage Controller 56a9 T580-50A9 Unified Wire Storage Controller 56aa T580-50AA Unified Wire Storage Controller 56ab T520-50AB Unified Wire Storage Controller 56ac T540-50AC Unified Wire Storage Controller 56ad T520-50AD Unified Wire Storage Controller 56ae T540-50AE Unified Wire Storage Controller 56af T580-50AF Unified Wire Storage Controller 56b0 T520-50B0 Unified Wire Storage Controller 5701 T520-CR Unified Wire Ethernet Controller 5702 T522-CR Unified Wire Ethernet Controller 5703 T540-CR Unified Wire Ethernet Controller 5704 T520-BCH Unified Wire Ethernet Controller 5705 T540-BCH Unified Wire Ethernet Controller 5706 T540-CH Unified Wire Ethernet Controller 5707 T520-SO Unified Wire Ethernet Controller 5708 T520-CX Unified Wire Ethernet Controller 5709 T520-BT Unified Wire Ethernet Controller 570a T504-BT Unified Wire Ethernet Controller 570b B520-SR Unified Wire Ethernet Controller 570c B504-BT Unified Wire Ethernet Controller 570d T580-CR Unified Wire Ethernet Controller 570e T540-LP-CR Unified Wire Ethernet Controller 570f T540 [Amsterdam] Unified Wire Ethernet Controller 5710 T580-LP-CR Unified Wire Ethernet Controller 5711 T520-LL-CR Unified Wire Ethernet Controller 5712 T560-CR Unified Wire Ethernet Controller 5713 T580-CR Unified Wire Ethernet Controller 5714 T580-SO-CR Unified Wire Ethernet Controller 5715 T502-BT Unified Wire Ethernet Controller 5780 T540-5080 Unified Wire Ethernet Controller 5781 T540-5081 Unified Wire Ethernet Controller 5782 T504-5082 Unified Wire Ethernet Controller 5783 T540-5083 Unified Wire Ethernet Controller 5784 T580-5084 Unified Wire Ethernet Controller 5785 T580-5085 Unified Wire Ethernet Controller 5786 T580-5086 Unified Wire Ethernet Controller 5787 T580-5087 Unified Wire Ethernet Controller 5788 T570-5088 Unified Wire Ethernet Controller 5789 T520-5089 Unified Wire Ethernet Controller 5790 T540-5090 Unified Wire Ethernet Controller 5791 T522-5091 Unified Wire Ethernet Controller 5792 T520-5092 Unified Wire Ethernet Controller 5793 T580-5093 Unified Wire Ethernet Controller 5794 T540-5094 Unified Wire Ethernet Controller 5795 T540-5095 Unified Wire Ethernet Controller 5796 T580-5096 Unified Wire Ethernet Controller 5797 T520-5097 Unified Wire Ethernet Controller 5801 T520-CR Unified Wire Ethernet Controller [VF] 5802 T522-CR Unified Wire Ethernet Controller [VF] 5803 T540-CR Unified Wire Ethernet Controller [VF] 5804 T520-BCH Unified Wire Ethernet Controller [VF] 5805 T540-BCH Unified Wire Ethernet Controller [VF] 5806 T540-CH Unified Wire Ethernet Controller [VF] 5807 T520-SO Unified Wire Ethernet Controller [VF] 5808 T520-CX Unified Wire Ethernet Controller [VF] 5809 T520-BT Unified Wire Ethernet Controller [VF] 580a T504-BT Unified Wire Ethernet Controller [VF] 580b B520-SR Unified Wire Ethernet Controller [VF] 580c B504-BT Unified Wire Ethernet Controller [VF] 580d T580-CR Unified Wire Ethernet Controller [VF] 580e T540-LP-CR Unified Wire Ethernet Controller [VF] 580f T540 [Amsterdam] Unified Wire Ethernet Controller [VF] 5810 T580-LP-CR Unified Wire Ethernet Controller [VF] 5811 T520-LL-CR Unified Wire Ethernet Controller [VF] 5812 T560-CR Unified Wire Ethernet Controller [VF] 5813 T580-CHR Unified Wire Ethernet Controller [VF] 5814 T580-SO-CR Unified Wire Ethernet Controller [VF] 5815 T502-BT Unified Wire Ethernet Controller [VF] 5816 T580-OCP-SO Unified Wire Ethernet Controller [VF] 5817 T520-OCP-SO Unified Wire Ethernet Controller [VF] 5818 T540-BT Unified Wire Ethernet Controller [VF] 5819 T540-LP-BT Unified Wire Ethernet Controller [VF] 581a T540-SO-BT Unified Wire Ethernet Controller [VF] 581b T540-SO-CR Unified Wire Ethernet Controller [VF] 5880 T540-5080 Unified Wire Ethernet Controller [VF] 5881 T540-5081 Unified Wire Ethernet Controller [VF] 5882 T504-5082 Unified Wire Ethernet Controller [VF] 5883 T540-5083 Unified Wire Ethernet Controller [VF] 5884 T540-5084 Unified Wire Ethernet Controller [VF] 5885 T580-5085 Unified Wire Ethernet Controller [VF] 5886 T580-5086 Unified Wire Ethernet Controller [VF] 5887 T580-5087 Unified Wire Ethernet Controller [VF] 5888 T570-5088 Unified Wire Ethernet Controller [VF] 5889 T520-5089 Unified Wire Ethernet Controller [VF] 5890 T540-5090 Unified Wire Ethernet Controller [VF] 5891 T522-5091 Unified Wire Ethernet Controller [VF] 5892 T520-5092 Unified Wire Ethernet Controller [VF] 5893 T580-5093 Unified Wire Ethernet Controller [VF] 5894 T540-5094 Unified Wire Ethernet Controller [VF] 5895 T540-5095 Unified Wire Ethernet Controller [VF] 5896 T580-5096 Unified Wire Ethernet Controller [VF] 5897 T520-5097 Unified Wire Ethernet Controller [VF] 5898 T580-5098 Unified Wire Ethernet Controller [VF] 5899 T580-5099 Unified Wire Ethernet Controller [VF] 589a T520-509A Unified Wire Ethernet Controller [VF] 589b T540-509B Unified Wire Ethernet Controller [VF] 589c T520-509C Unified Wire Ethernet Controller [VF] 589d T540-509D Unified Wire Ethernet Controller [VF] 589e T520-509E Unified Wire Ethernet Controller [VF] 589f T540-509F Unified Wire Ethernet Controller [VF] 58a0 T540-50A0 Unified Wire Ethernet Controller [VF] 58a1 T540-50A1 Unified Wire Ethernet Controller [VF] 58a2 T580-50A2 Unified Wire Ethernet Controller [VF] 58a3 T580-50A3 Unified Wire Ethernet Controller [VF] 58a4 T540-50A4 Unified Wire Ethernet Controller [VF] 58a5 T522-50A5 Unified Wire Ethernet Controller [VF] 58a6 T522-50A6 Unified Wire Ethernet Controller [VF] 58a7 T580-50A7 Unified Wire Ethernet Controller [VF] 58a8 T580-50A8 Unified Wire Ethernet Controller [VF] 58a9 T580-50A9 Unified Wire Ethernet Controller [VF] 58aa T580-50AA Unified Wire Ethernet Controller [VF] 58ab T520-50AB Unified Wire Ethernet Controller [VF] 58ac T540-50AC Unified Wire Ethernet Controller [VF] 58ad T520-50AD Unified Wire Ethernet Controller [VF] 58ae T540-50AE Unified Wire Ethernet Controller [VF] 58af T580-50AF Unified Wire Ethernet Controller [VF] 58b0 T520-50B0 Unified Wire Ethernet Controller [VF] 6001 T6225-CR Unified Wire Ethernet Controller 6002 T6225-SO-CR Unified Wire Ethernet Controller 6003 T6425-CR Unified Wire Ethernet Controller 6004 T6425-SO-CR Unified Wire Ethernet Controller 6005 T6225-SO-OCP3 Unified Wire Ethernet Controller 6006 T6225-OCP3 Unified Wire Ethernet Controller 6007 T62100-LP-CR Unified Wire Ethernet Controller 6008 T62100-SO-CR Unified Wire Ethernet Controller 6009 T6210-BT Unified Wire Ethernet Controller 600d T62100-CR Unified Wire Ethernet Controller 6011 T6225-LL-CR Unified Wire Ethernet Controller 6014 T62100-SO-OCP3 Unified Wire Ethernet Controller 6015 T6201-BT Unified Wire Ethernet Controller 6080 T6225-6080 Unified Wire Ethernet Controller 6081 T62100-6081 Unified Wire Ethernet Controller 6082 T6225-6082 Unified Wire Ethernet Controller 6083 T62100-6083 Unified Wire Ethernet Controller 6084 T64100-6084 Unified Wire Ethernet Controller 6085 T6240-6085 Unified Wire Ethernet Controller 6086 T6225-6086 Unified Wire Ethernet Controller 6087 T6225-6087 Unified Wire Ethernet Controller 6088 T62100-6088 Unified Wire Ethernet Controller 6089 T62100-6089 Unified Wire Ethernet Controller 608a T62100-608a Unified Wire Ethernet Controller 6092 T62100-KR Unified Wire Ethernet Controller 01de fff8 Cosmo Baseboard 01de fff9 Gimlet Baseboard 6401 T6225-CR Unified Wire Ethernet Controller 6402 T6225-SO-CR Unified Wire Ethernet Controller 6403 T6425-CR Unified Wire Ethernet Controller 6404 T6425-SO-CR Unified Wire Ethernet Controller 6405 T6225-SO-OCP3 Unified Wire Ethernet Controller 6406 T6225-OCP3 Unified Wire Ethernet Controller 6407 T62100-LP-CR Unified Wire Ethernet Controller 6408 T62100-SO-CR Unified Wire Ethernet Controller 6409 T6210-BT Unified Wire Ethernet Controller 640d T62100-CR Unified Wire Ethernet Controller 6411 T6225-LL-CR Unified Wire Ethernet Controller 6414 T62100-SO-OCP3 Unified Wire Ethernet Controller 6415 T6201-BT Unified Wire Ethernet Controller 6480 T6225-6080 Unified Wire Ethernet Controller 6481 T62100-6081 Unified Wire Ethernet Controller 6482 T6225-6082 Unified Wire Ethernet Controller 6483 T62100-6083 Unified Wire Ethernet Controller 6484 T64100-6084 Unified Wire Ethernet Controller 6485 T6240-6085 Unified Wire Ethernet Controller 6486 T6225-6086 Unified Wire Ethernet Controller 6487 T6225-6087 Unified Wire Ethernet Controller 6488 T62100-6088 Unified Wire Ethernet Controller 6489 T62100-6089 Unified Wire Ethernet Controller 648a T62100-608a Unified Wire Ethernet Controller 6492 T62100-KR Unified Wire Ethernet Controller 01de fff8 Cosmo Baseboard 01de fff9 Gimlet Baseboard 6501 T6225-CR Unified Wire Storage Controller 6502 T6225-SO-CR Unified Wire Storage Controller 6503 T6425-CR Unified Wire Storage Controller 6504 T6425-SO-CR Unified Wire Storage Controller 6505 T6225-SO-OCP3 Unified Wire Storage Controller 6506 T6225-OCP3 Unified Wire Storage Controller 6507 T62100-LP-CR Unified Wire Storage Controller 6508 T62100-SO-CR Unified Wire Storage Controller 6509 T6210-BT Unified Wire Storage Controller 650d T62100-CR Unified Wire Storage Controller 6511 T6225-LL-CR Unified Wire Storage Controller 6514 T62100-SO-OCP3 Unified Wire Storage Controller 6515 T6201-BT Unified Wire Storage Controller 6580 T6225-6080 Unified Wire Storage Controller 6581 T62100-6081 Unified Wire Storage Controller 6582 T6225-6082 Unified Wire Storage Controller 6583 T62100-6083 Unified Wire Storage Controller 6584 T64100-6084 Unified Wire Storage Controller 6585 T6240-6085 Unified Wire Storage Controller 6586 T6225-6086 Unified Wire Storage Controller 6587 T6225-6087 Unified Wire Storage Controller 6588 T62100-6088 Unified Wire Storage Controller 6589 T62100-6089 Unified Wire Storage Controller 658a T62100-608a Unified Wire Storage Controller 6592 T62100-KR Unified Wire Storage Controller 6601 T6225-CR Unified Wire Storage Controller 6602 T6225-SO-CR Unified Wire Storage Controller 6603 T6425-CR Unified Wire Storage Controller 6604 T6425-SO-CR Unified Wire Storage Controller 6605 T6225-SO-OCP3 Unified Wire Storage Controller 6606 T6225-OCP3 Unified Wire Storage Controller 6607 T62100-LP-CR Unified Wire Storage Controller 6608 T62100-SO-CR Unified Wire Storage Controller 6609 T6210-BT Unified Wire Storage Controller 660d T62100-CR Unified Wire Storage Controller 6611 T6225-LL-CR Unified Wire Storage Controller 6614 T62100-SO-OCP3 Unified Wire Storage Controller 6615 T6201-BT Unified Wire Storage Controller 6680 T6225-6080 Unified Wire Storage Controller 6681 T62100-6081 Unified Wire Storage Controller 6682 T6225-6082 Unified Wire Storage Controller 6683 T62100-6083 Unified Wire Storage Controller 6684 T64100-6084 Unified Wire Storage Controller 6685 T6240-6085 Unified Wire Storage Controller 6686 T6225-6086 Unified Wire Storage Controller 6687 T6225-6087 Unified Wire Storage Controller 6688 T62100-6088 Unified Wire Storage Controller 6689 T62100-6089 Unified Wire Storage Controller 668a T62100-608a Unified Wire Storage Controller 6692 T62100-KR Unified Wire Storage Controller 6801 T6225-CR Unified Wire Ethernet Controller [VF] 6802 T6225-SO-CR Unified Wire Ethernet Controller [VF] 6803 T6425-CR Unified Wire Ethernet Controller [VF] 6804 T6425-SO-CR Unified Wire Ethernet Controller [VF] 6805 T6225-SO-OCP3 Unified Wire Ethernet Controller [VF] 6806 T6225-OCP3 Unified Wire Ethernet Controller [VF] 6807 T62100-LP-CR Unified Wire Ethernet Controller [VF] 6808 T62100-SO-CR Unified Wire Ethernet Controller [VF] 6809 T6210-BT Unified Wire Ethernet Controller [VF] 680d T62100-CR Unified Wire Ethernet Controller [VF] 6811 T6225-LL-CR Unified Wire Ethernet Controller [VF] 6814 T62100-SO-OCP3 Unified Wire Ethernet Controller [VF] 6815 T6201-BT Unified Wire Ethernet Controller [VF] 6880 T6225-6080 Unified Wire Ethernet Controller [VF] 6881 T62100-6081 Unified Wire Ethernet Controller [VF] 6882 T6225-6082 Unified Wire Ethernet Controller [VF] 6883 T62100-6083 Unified Wire Ethernet Controller [VF] 6884 T64100-6084 Unified Wire Ethernet Controller [VF] 6885 T6240-6085 Unified Wire Ethernet Controller [VF] 6886 T6225-6086 Unified Wire Ethernet Controller [VF] 6887 T6225-6087 Unified Wire Ethernet Controller [VF] 6888 T62100-6088 Unified Wire Ethernet Controller [VF] 6889 T62100-6089 Unified Wire Ethernet Controller [VF] 688a T62100-608a Unified Wire Ethernet Controller [VF] a000 PE10K Unified Wire Ethernet Controller 1426 Storage Technology Corp. 1427 Better On-Line Solutions 1428 Edec Co Ltd 1429 Unex Technology Corp. 142a Kingmax Technology Inc 142b Radiolan 142c Minton Optic Industry Co Ltd 142d Pix stream Inc 142e Vitec Multimedia 4020 VM2-2 [Video Maker 2] MPEG1/2 Encoder 4337 VM2-2-C7 [Video Maker 2 rev. C7] MPEG1/2 Encoder 142f Radicom Research Inc 1430 ITT Aerospace/Communications Division 1431 Gilat Satellite Networks 1432 Edimax Computer Co. 9130 RTL81xx Fast Ethernet 1433 Eltec Elektronik GmbH # Nee Real Time Devices US Inc. 1435 RTD Embedded Technologies, Inc. 4520 PCI4520 6020 SPM6020 6030 SPM6030 6420 SPM186420 6430 SPM176430 6431 SPM176431 7520 DM7520 7540 SDM7540 7820 DM7820 1436 CIS Technology Inc 1437 Nissin Inc Co 1438 Atmel-dream 1439 Outsource Engineering & Mfg. Inc 143a Stargate Solutions Inc 143b Canon Research Center, America 143c Amlogic Inc 143d Tamarack Microelectronics Inc 143e Jones Futurex Inc 143f Lightwell Co Ltd - Zax Division 1440 ALGOL Corp. 1441 AGIE Ltd 1442 Phoenix Contact GmbH & Co. 1443 Unibrain S.A. 1444 TRW 1445 Logical DO Ltd 1446 Graphin Co Ltd 1447 AIM GmBH 1448 Alesis Studio Electronics 1449 TUT Systems Inc 144a Adlink Technology 6208 PCI-6208V 7250 PCI-7250 7296 PCI-7296 7432 PCI-7432 7433 PCI-7433 7434 PCI-7434 7841 PCI-7841 8133 PCI-8133 8164 PCI-8164 8554 PCI-8554 9111 PCI-9111 9113 PCI-9113 9114 PCI-9114 # 2-16 MB SRAM, 4x UART, I2C, misc I/O a001 ADi-BSEC # nee Loronix Information Systems Inc. 144b Verint Systems Inc. 144c Catalina Research Inc 144d Samsung Electronics Co Ltd 1600 S4LN053X01 AHCI SSD Controller(Apple slot) 9602 RS780/RS880 PCI to PCI bridge (int gfx) a544 Exynos 8890 PCIe Root Complex a575 Exynos 7420 PCIe Root Complex a5e3 Exynos 5433 PCIe Root Complex a800 XP941 PCIe SSD a801 S4LN058A01[SSUBX] AHCI SSD Controller (Apple slot) a802 NVMe SSD Controller SM951/PM951 144d a801 PM963 2.5" NVMe PCIe SSD a804 NVMe SSD Controller SM961/PM961/SM963 144d a801 SM963 2.5" NVMe PCIe SSD a806 NVMe SSD SM0032L a808 NVMe SSD Controller SM981/PM981/PM983 # Used by different variants of SSD 970 EVO and PRO 144d a801 SSD 970 EVO/PRO 1d49 403b Thinksystem U.2 PM983 NVMe SSD a809 NVMe SSD Controller 980 (DRAM-less) a80a NVMe SSD Controller PM9A1/PM9A3/980PRO 0128 215a DC NVMe PM9A3 RI U.2 960GB 0128 215b DC NVMe PM9A3 RI U.2 1.92TB 0128 215c DC NVMe PM9A3 RI U.2 3.84TB 0128 215d DC NVMe PM9A3 RI U.2 7.68TB 0128 2166 DC NVMe PM9A3 RI 110M.2 960GB 0128 2167 DC NVMe PM9A3 RI 110M.2 1.92TB 0128 2168 DC NVMe PM9A3 RI 80M.2 480GB 0128 2169 DC NVMe PM9A3 RI 80M.2 960GB 1028 215a DC NVMe PM9A3 RI U.2 960GB 1028 215b DC NVMe PM9A3 RI U.2 1.92TB 1028 215c DC NVMe PM9A3 RI U.2 3.84TB 1028 215d Dell DC NVMe PM9A3 RI U.2 7.68TB 1028 2166 DC NVMe PM9A3 RI 110M.2 960GB 1028 2167 DC NVMe PM9A3 RI 110M.2 1.92TB 1028 2168 DC NVMe PM9A3 RI 80M.2 480GB 1028 2169 DC NVMe PM9A3 RI 80M.2 960GB 1028 2276 DC NVMe PM9A3 RI 110M.2 960GB 1028 2277 DC NVMe PM9A3 RI 110M.2 1.92TB 1028 512d DC NVMe PM9A3 RI U.2 7.68TB 144d a801 SSD 980 PRO 144d a813 General DC NVMe PM9A3 # Actually 88SS1322 according to techpowerup a80b NVMe SSD Controller PM9B1 (DRAM-less) a80c NVMe SSD Controller S4LV008[Pascal] a80d NVMe SSD Controller PM9C1a (DRAM-less) a80e NVMe SSD Controller PM9D3a a80f BM9C1 QLC NVME SSD (DRAM-less) a810 NVMe SSD 9100 PRO [PM9E1] a811 BM9H1 NVME SSD (DRAM-less) a820 NVMe SSD Controller 171X 1028 1f95 Express Flash NVMe XS1715 SSD 400GB 1028 1f96 Express Flash NVMe XS1715 SSD 800GB 1028 1f97 Express Flash NVMe XS1715 SSD 1600GB 1028 1fa4 Express Flash NVMe SM1715 3.2TB SFF 1028 1fa6 Express Flash NVMe SM1715 3.2TB AIC 1028 1fba Express Flash NVMe SM1715 800GB SFF 1028 1fbb Express Flash NVMe SM1715 1.6TB SFF 1028 1fbc Express Flash NVMe SM1715 1.6TB AIC a821 NVMe SSD Controller 172X 1028 1fb7 Express Flash NVMe PM1725 3.2TB SFF 1028 1fb8 Express Flash NVMe PM1725 3.2TB AIC 1028 1fb9 Express Flash NVMe PM1725 6.4TB AIC 1028 1fc1 Express Flash NVMe PM1725 800GB SFF 1028 1fc2 Express Flash NVMe PM1725 1.6TB SFF 1028 1fc4 Express Flash NVMe PM1725 1.6TB AIC a822 NVMe SSD Controller 172Xa/172Xb 1014 0621 PCIe3 1.6TB NVMe Flash Adapter II x8 1014 0622 PCIe3 3.2TB NVMe Flash Adapter II x8 1014 0629 PCIe3 6.4TB NVMe Flash Adapter II x8 1014 064a PCIe3 1.6TB NVMe Flash Adapter III x8 1014 064b PCIe3 3.2TB NVMe Flash Adapter III x8 1014 064c PCIe3 6.4TB NVMe Flash Adapter III x8 1028 1fd9 Express Flash PM1725a 800GB SFF 1028 1fda Express Flash PM1725a 1.6TB SFF 1028 1fdb Express Flash PM1725a 3.2TB SFF 1028 1fdc Express Flash PM1725a 6.4TB SFF 1028 1fdd Express Flash PM1725a 1.6TB AIC 1028 1fde Express Flash PM1725a 3.2TB AIC 1028 1fdf Express Flash PM1725a 6.4TB AIC 1028 1ff3 Express Flash PM1725b 1.6TB SFF 1028 1ff4 Express Flash PM1725b 3.2TB SFF 1028 1ff5 Express Flash PM1725b 6.4TB SFF 1028 1ff6 Express Flash PM1725b 12.8TB SFF 1028 1ff7 Express Flash PM1725b 1.6TB AIC 1028 1ff8 Express Flash PM1725b 3.2TB AIC 1028 1ff9 Express Flash PM1725b 6.4TB AIC 1028 1ffa Express Flash PM1725b 12.8TB AIC a824 NVMe SSD Controller PM173X 1028 2040 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 1.6TB 1028 2041 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 3.2TB 1028 2042 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 6.4TB 1028 2043 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 12.8TB 1028 2044 EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 1.6TB 1028 2045 EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 3.2TB 1028 2046 EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 6.4TB 1028 2070 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 1.92TB 1028 2071 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 3.84TB 1028 2072 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 7.68TB 1028 2073 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 15.36TB 1028 2074 EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 1.92TB 1028 2075 EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 3.84TB 1028 2076 EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 7.68TB 1028 2090 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 1.6TB 1028 2091 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 3.2TB 1028 2092 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 6.4TB 1028 2093 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 12.8TB 1028 2094 EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 1.6TB 1028 2095 EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 3.2TB 1028 2096 EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 6.4TB 1028 2097 EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 1.92TB 1028 2098 EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 3.84TB 1028 2099 EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 7.68TB 1028 2118 Ent NVMe v2 AGN FIPS MU U.2 1.6TB 1028 2119 Ent NVMe v2 AGN MU U.2 1.6TB 1028 2120 Ent NVMe v2 AGN FIPS MU U.2 3.2T 1028 2121 Ent NVMe v2 AGN MU U.2 3.2TB 1028 2122 Ent NVMe v2 AGN FIPS MU U.2 6.4TB 1028 2123 Ent NVMe v2 AGN MU U.2 6.4TB 1028 2124 Ent NVMe v2 AGN FIPS MU U.2 6.4TB 1028 2125 Ent NVMe v2 AGN MU U.2 12.8TB 1028 2126 Ent NVMe v2 AGN FIPS RI U.2 1.92TB 1028 2127 Ent NVMe v2 AGN RI U.2 1.92TB 1028 2128 Ent NVMe v2 AGN FIPS RI U.2 3.84TB 1028 2129 Ent NVMe v2 AGN RI U.2 3.84TB 1028 2130 Ent NVMe v2 AGN FIPS RI U.2 7.68TB 1028 2131 Ent NVMe v2 AGN RI U.2 7.68TB 1028 2132 Ent NVMe v2 AGN FIPS RI U.2 15.36TB 1028 2133 Ent NVMe v2 AGN RI U.2 15.36TB a825 NVMe SSD Controller PM173Xa 1028 2178 Ent NVMe FIPS PM1733a RI 1.92TB 1028 2179 Ent NVMe PM1733a RI 1.92TB 1028 217a Ent NVMe FIPS PM1733a RI 3.84TB 1028 217b Ent NVMe PM1733a RI 3.84TB 1028 217c Ent NVMe FIPS PM1733a RI 7.68TB 1028 217d Ent NVMe PM1733a RI 7.68TB 1028 217e Ent NVMe FIPS PM1733a RI 15.36TB 1028 217f Ent NVMe PM1733a RI 15.36TB 1028 2180 Ent NVMe FIPS PM1735a MU 1.6TB 1028 2181 Ent NVMe PM1735a MU 1.6TB 1028 2182 Ent NVMe FIPS PM1735a MU 3.2TB 1028 2183 Ent NVMe PM1735a MU 3.2TB 1028 2184 Ent NVMe FIPS PM1735a MU 6.4TB 1028 2185 Ent NVMe PM1735a MU 6.4TB 1028 2186 Ent NVMe FIPS PM1735a MU 12.8TB 1028 2187 Ent NVMe PM1735a MU 12.8TB 1028 226a Ent NVMe FIPS PM1733a RI 30.72TB a826 NVMe SSD Controller PM174X 1028 2214 NVMe PM1743 RI E3.S 1.92TB 1028 2216 NVMe PM1743 RI E3.S 3.84TB 1028 2218 NVMe PM1743 RI E3.S 7.68TB 1028 221a NVMe PM1743 RI E3.S 15.36TB 1028 221c NVMe PM1745 MU E3.S 1.6TB 1028 221e NVMe PM1745 MU E3.S 3.2TB 1028 2220 NVMe PM1745 MU E3.S 6.4TB 1028 2222 NVMe PM1745 MU E3.S 12.8TB 1028 224e NVMe FIPS PM1743 RI U.2 1.92TB 1028 224f NVMe PM1743 RI U.2 1.92TB 1028 2250 NVMe FIPS PM1743 RI U.2 3.84TB 1028 2251 NVMe PM1743 RI U.2 3.84TB 1028 2252 NVMe FIPS PM1743 RI U.2 7.68TB 1028 2253 NVMe PM1743 RI U.2 7.68TB 1028 2254 NVMe FIPS PM1743 RI U.2 15.36TB 1028 2255 NVMe PM1743 RI U.2 15.36TB 1028 2258 NVMe FIPS PM1745 MU U.2 1.6TB 1028 2259 NVMe PM1745 MU U.2 1.6TB 1028 225a NVMe FIPS PM1745 MU U.2 3.2TB 1028 225b NVMe PM1745 MU U.2 3.2TB 1028 225c NVMe FIPS PM1745 MU U.2 6.4TB 1028 225d NVMe PM1745 MU U.2 6.4TB 1028 225e NVMe FIPS PM1745 MU U.2 12.8TB 1028 225f NVMe PM1745 MU U.2 12.8TB a900 NVMe SSD Controller PM9DXa 1028 230f DC NVMe PM9D3a RI 80M.2 480GB ISE 1028 2310 DC NVMe PM9D3a RI 80M.2 960GB ISE 1028 2311 DC NVMe PM9D3a RI 80M.2 1.92TB ISE 1028 2341 DC NVMe PM9D3a RI U.2 960GB  1028 2342 DC NVMe PM9D3a RI U.2 1.92TB 1028 2343 DC NVMe PM9D3a RI U.2 3.84TB 1028 2344 DC NVMe PM9D3a RI U.2 7.68GTB 1028 2345 DC NVMe PM9D3a RI U.2 15.36TB 1028 2346 DC NVMe FIPS PM9D3a RI U.2 960GB 1028 2347 DC NVMe FIPS PM9D3a RI U.2 1.92TB 1028 2348 DC NVMe FIPS PM9D3a RI U.2 3.84TB 1028 2349 DC NVMe FIPS PM9D3a RI U.2 7.68TB 1028 234a DC NVMe FIPS PM9D3a RI U.2 15.36TB  1028 234d DC NVMe PM9D3a RI E3s 1.92TB 1028 234e DC NVMe PM9D3a RI E3s 3.84TB  1028 234f DC NVMe PM9D3a RI E3s 7.68GTB 1028 2350 DC NVMe PM9D3a RI E3s 15.36TB 1028 2351 DC NVMe FIPS PM9D3a RI E3s 1.92TB 1028 2352 DC NVMe FIPS PM9D3a RI E3s 3.84TB 1028 2353 DC NVMe FIPS PM9D3a RI E3s 7.68TB 1028 2354 DC NVMe FIPS PM9D3a RI E3s 15.36TB 1028 2355 DC NVMe PM9D5a MU U.2 800GB 1028 2356 DC NVMe PM9D5a MU U.2 1.6TB 1028 2357 DC NVMe PM9D5a MU U.2 3.2TB 1028 2358 DC NVMe PM9D5a MU U.2 6.4TB 1028 2359 DC NVMe PM9D5a MU E3.s 1.6TB 1028 235a DC NVMe PM9D5a MU E3.s 3.2TB 1028 235b DC NVMe PM9D5a MU E3.s 6.4TB aa00 NVMe SSD Controller BM1743 1028 2312 NVMe FIPS BM1743 QLC U.2 15.36TB 1028 2313 NVMe FIPS BM1743 QLC U.2 30.72TB 1028 2314 NVMe FIPS BM1743 QLC U.2 61.44TB 1028 2315 NVMe BM1743 QLC U.2 15.36TB 1028 2316 NVMe BM1743 QLC U.2 30.72TB 1028 2317 NVMe BM1743 QLC U.2 61.44TB 1028 2364 NVMe BM1743 QLC U.2 122.88TB 1028 2366 MZ3MO15THCLCAD3 1028 2367 MZ3MO30THCLFAD3 ac00 NVMe SSD Controller PM175x ecec Exynos 8895 PCIe Root Complex 144e OLITEC 144f Askey Computer Corp. 1450 Octave Communications Ind. 1451 SP3D Chip Design GmBH 1453 MYCOM Inc 1454 Altiga Networks 1455 Logic Plus Plus Inc 1456 Advanced Hardware Architectures 1457 Nuera Communications Inc 1458 Gigabyte Technology Co., Ltd 1002 Aourus Radeon RX6900XT Xtreme Waterforce WB 16G 22e8 Ellesmere [Radeon RX 480] 2425 Radeon RX 9070 GAMING OC 16G 3483 USB 3.0 Controller (VIA VL80x-based xHCI Controller) 1459 DOOIN Electronics 145a Escalate Networks Inc 145b PRAIM SRL 145c Cryptek 145d Gallant Computer Inc 145e Aashima Technology B.V. 145f Baldor Electric Company 0001 NextMove PCI 1460 DYNARC INC 1461 Avermedia Technologies Inc a3ce M179 a3cf M179 a836 M115 DVB-T, PAL/SECAM/NTSC Tuner e836 M115S Hybrid Analog/DVB PAL/SECAM/NTSC Tuner f436 AVerTV Hybrid+FM 1462 Micro-Star International Co., Ltd. [MSI] 3483 MSI USB 3.0 (VIA VL80x-based xHCI USB Controller) # This is MSI refreshed variant of their MECH series Navi 23 GPU card (73EF) 5027 RX 6650XT MECH 2X 7c56 Realtek Ethernet controller RTL8111H aaf0 Radeon RX 580 Gaming X 8G 1463 Fast Corporation 1464 Interactive Circuits & Systems Ltd 1465 GN NETTEST Telecom DIV. 1466 Designpro Inc. 1467 DIGICOM SPA 1468 AMBIT Microsystem Corp. 1469 Cleveland Motion Controls # formerly IFR. 146a Aeroflex # 1.5 GHz to 3.0 GHz x 1Hz 3010 3010 RF Synthesizer 3a11 3011A PXI RF Synthesizer 146b Parascan Technologies Ltd 146c Ruby Tech Corp. 1430 FE-1430TX Fast Ethernet PCI Adapter 146d Tachyon, INC. 146e Williams Electronics Games, Inc. 146f Multi Dimensional Consulting Inc 1470 Bay Networks 1471 Integrated Telecom Express Inc 1472 DAIKIN Industries, Ltd 1473 ZAPEX Technologies Inc 1474 Doug Carson & Associates 1475 PICAZO Communications 1476 MORTARA Instrument Inc 1477 Net Insight 1478 DIATREND Corporation 1479 TORAY Industries Inc 147a FORMOSA Industrial Computing 147b ABIT Computer Corp. 1084 IP35 [Dark Raider] 147c AWARE, Inc. 147d Interworks Computer Products 147e Matsushita Graphic Communication Systems, Inc. 147f NIHON UNISYS, Ltd. 1480 SCII Telecom 1481 BIOPAC Systems Inc 1482 ISYTEC - Integrierte Systemtechnik GmBH 0001 PCI-16 Host Interface for ITC-16 1483 LABWAY Corporation 1484 Logic Corporation 1485 ERMA - Electronic GmBH 1486 L3 Communications Telemetry & Instrumentation 1487 MARQUETTE Medical Systems 1489 KYE Systems Corporation 148a OPTO 148b INNOMEDIALOGIC Inc. 148c Tul Corporation / PowerColor 2391 Radeon RX 590 [Red Devil] 2398 AXRX 5700 XT 8GBD6-3DHE/OC [PowerColor Red Devil Radeon RX 5700 XT] 148d DIGICOM Systems, Inc. 1003 HCF 56k Data/Fax Modem 148e OSI Plus Corporation 148f Plant Equipment, Inc. 1490 Stone Microsystems PTY Ltd. 1491 ZEAL Corporation 1492 Time Logic Corporation 1493 MAKER Communications 1494 WINTOP Technology, Inc. 1495 TOKAI Communications Industry Co. Ltd 1496 JOYTECH Computer Co., Ltd. 1497 SMA Regelsysteme GmBH 1497 SMA Technologie AG 1498 TEWS Technologies GmbH 0330 TPMC816 2 Channel CAN bus controller. 035d TPMC861 4-Channel Isolated Serial Interface RS422/RS485 0385 TPMC901 Extended CAN bus with 2/4/6 CAN controller 21cc TCP460 CompactPCI 16 Channel Serial Interface RS232/RS422 21cd TCP461 CompactPCI 8 Channel Serial Interface RS232/RS422 3064 TPCI100 (2 Slot IndustryPack PCI Carrier) 30c8 TPCI200 4 Slot IndustryPack PCI Carrier 70c8 TPCE200 4 Slot IndustryPack PCIe Carrier 9177 TXMC375 8 channel RS232/RS422/RS485 programmable serial interface 1499 EMTEC CO., Ltd 149a ANDOR Technology Ltd 149b SEIKO Instruments Inc 149c OVISLINK Corp. 149d NEWTEK Inc 0001 Video Toaster for PC 149e Mapletree Networks Inc. 149f LECTRON Co Ltd 14a0 SOFTING GmBH 14a1 Systembase Co Ltd 4d02 SB16C1052PCI [Multi-2/PCIe RS232] 14a2 Millennium Engineering Inc 14a3 Maverick Networks 14a4 Lite-On Technology Corporation 2100 CA1-8D128 NVMe SSD 21f1 Plextor NVMe SSD 2200 CX2-8B256, CX2-8B512 NVMe SSD 22a0 EP2-KB960 NVMe SSD 22f1 M8Pe Series NVMe SSD 2300 CA3-8D256, CA3-8D512 NVMe SSD 23f1 M9PeG, M9PeGN, M9PeY NVMe SSD 2f00 CAZ-82512 NVMe SSD 3500 CA5-8D512 NVMe SSD 35f1 PLEXTOR PX-256M9PGN+ NVMe SSD # Wrong vendor ID used 4318 Broadcom BCM4318 [AirForce One 54g] 802.11g WLAN Controller 5100 CB1-SD256, CB1-SD512 NVMe SSD 9100 CL1-3D256, CL1-8D512 NVMe SSD (DRAM-less) 14a5 XIONICS Document Technologies Inc 14a6 INOVA Computers GmBH & Co KG 14a7 MYTHOS Systems Inc 14a8 FEATRON Technologies Corporation 14a9 HIVERTEC Inc 14aa Advanced MOS Technology Inc # nee Mentor Graphics Corp. 14ab Siemens Industry Software Inc. 14ac Novaweb Technologies Inc 14ad Time Space Radio AB 14ae CTI, Inc 14af Guillemot Corporation 7102 3D Prophet II MX 14b0 BST Communication Technology Ltd 14b1 Nextcom K.K. 14b2 ENNOVATE Networks Inc 14b3 XPEED Inc 0000 DSL NIC 14b4 PHILIPS Business Electronics B.V. 14b5 Creamware GmBH 0200 Scope 0300 Pulsar 0400 PulsarSRB 0600 Pulsar2 0800 DSP-Board 0900 DSP-Board 0a00 DSP-Board 0b00 DSP-Board 14b6 Quantum Data Corp. 14b7 PROXIM Inc 0001 Symphony 4110 14b8 Techsoft Technology Co Ltd 14b9 Cisco Aironet Wireless Communications 0001 PC4800 0340 PC4800 0350 350 series 802.11b Wireless LAN Adapter 4500 PC4500 4800 Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800 a504 Cisco Aironet Wireless 802.11b a505 Cisco Aironet CB20a 802.11a Wireless LAN Adapter a506 Cisco Aironet Mini PCI b/g 14ba INTERNIX Inc. # ARCNET interface card based on SMSC COM20022 chip and manufactured for SMSC Japan 0600 ARC-PCI/22 14bb SEMTECH Corporation 14bc Globespan Semiconductor Inc. d002 Pulsar [PCI ADSL Card] d00f Pulsar [PCI ADSL Card] 14bd CARDIO Control N.V. 14be L3 Communications 14bf SPIDER Communications Inc. 14c0 COMPAL Electronics Inc 1201 X550 10Gb 2P RJ45 OCP Mezz # now owned by CSP, Inc. 14c1 MYRICOM Inc. 0008 Myri-10G Dual-Protocol NIC 14c1 0008 10G-PCIE-8A 14c1 0009 10G-PCIE-8A (MSI-X firmware) 14c1 000a 10G-PCIE-8B 8043 Myrinet 2000 Scalable Cluster Interconnect 103c 1240 Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM) 14c2 DTK Computer 14c3 MEDIATEK Corp. 0608 MT7921K (RZ608) Wi-Fi 6E 80MHz 0616 MT7922 802.11ax PCI Express Wireless Network Adapter 0717 MT7925 (RZ717) Wi-Fi 7 160MHz 4d75 T700 5G Modem [5G Solution 5000] 7603 MT7603E 802.11bgn PCI Express Wireless Network Adapter 7612 MT7612E 802.11acbgn PCI Express Wireless Network Adapter 7615 MT7615E 802.11ac PCI Express Wireless Network Adapter 7630 MT7630e 802.11bgn Wireless Network Adapter 7650 MT7650 802.11ac # MT7612E too? 7662 MT7662E 802.11ac PCI Express Wireless Network Adapter 7663 MT7663 802.11ac PCI Express Wireless Network Adapter 7915 MT7915E 802.11ax PCI Express Wireless Network Adapter 7916 MT7905D/MT7975 # WiFi 6E capable 7922 MT7922 802.11ax PCI Express Wireless Network Adapter 1a3b 5300 ASUS PCE-AXE59BT 7961 MT7921 802.11ax PCI Express Wireless Network Adapter 7988 MT7988 PCI Express Host Bridge [Filogic 880] 7990 MT7996 802.11be PCI Express Wireless Network Adapter (Port 0) 7991 MT7996 802.11be PCI Express Wireless Network Adapter (Port 1) 8650 MT7650 Bluetooth 14c4 IWASAKI Information Systems Co Ltd 14c5 Automation Products AB 14c6 Data Race Inc 14c7 Modular Technology Holdings Ltd 14c8 Turbocomm Tech. Inc. 14c9 ODIN Telesystems Inc 14ca PE Logic Corp. 14cb Billionton Systems Inc 14cc NAKAYO Telecommunications Inc 14cd Universal Global Scientific Industrial Co.,Ltd 0001 USI-1514-1GbaseT [OCP1] 0002 USI-4227-SFP [OCP2] 0003 USI-X557-10GbaseT [OCP3] 14ce Whistle Communications 14cf TEK Microsystems Inc. 14d0 Ericsson Axe R & D 14d1 Computer Hi-Tech Co Ltd 14d2 Titan Electronics Inc 8001 VScom 010L 1 port parallel adaptor 8002 VScom 020L 2 port parallel adaptor 8010 VScom 100L 1 port serial adaptor 8011 VScom 110L 1 port serial and 1 port parallel adaptor 8020 VScom 200L 1 or 2 port serial adaptor 8021 VScom 210L 2 port serial and 1 port parallel adaptor 8028 VScom 200I/200I-SI 2-port serial adapter 8040 VScom 400L 4 port serial adaptor 8043 VScom 430L 4-port serial and 3-port parallel adapter 8048 VScom 400I 4-port serial adapter 8080 VScom 800L 8 port serial adaptor 8088 VScom 800I 8-port serial adapter a000 VScom 010H 1 port parallel adaptor a001 VScom 100H 1 port serial adaptor a003 VScom 400H 4 port serial adaptor a004 VScom 400HF1 4 port serial adaptor a005 VScom 200H 2 port serial adaptor a007 VScom PCI800EH (PCIe) 8-port serial adapter Port 1-4 a008 VScom PCI800EH (PCIe) 8-port serial adapter Port 5-8 a009 VScom PCI400EH (PCIe) 4-port serial adapter e001 VScom 010HV2 1 port parallel adaptor e010 VScom 100HV2 1 port serial adaptor e020 VScom 200HV2 2 port serial adaptor 14d3 CIRTECH (UK) Ltd 0002 DTL-T14000 Rev. 1 [PS2 TOOL CD/DVD Emulator] 0003 DTL-T14000 Rev. 2 [PS2 TOOL CD/DVD Emulator] 0004 DTL-T14000 Rev. 3 [PS2 TOOL CD/DVD Emulator] 14d4 Panacom Technology Corp 14d5 Nitsuko Corporation 14d6 Accusys Inc 6101 ACS-61xxx, PCIe to SAS/SATA RAID HBA 6201 ACS-62xxx, External PCIe to SAS/SATA RAID controller 14d7 Hirakawa Hewtech Corp 14d8 HOPF Elektronik GmBH # Formerly SiPackets, Inc., formerly API NetWorks, Inc., formerly Alpha Processor, Inc. 14d9 Alliance Semiconductor Corporation 0010 AP1011/SP1011 HyperTransport-PCI Bridge [Sturgeon] 9000 AS90L10204/10208 HyperTransport to PCI-X Bridge 14da National Aerospace Laboratories 14db AFAVLAB Technology Inc 2120 TK9902 2182 AFAVLAB Technology Inc. 8-port serial card 14dc Amplicon Liveline Ltd 0000 PCI230 0001 PCI242 0002 PCI244 0003 PCI247 0004 PCI248 0005 PCI249 0006 PCI260 0007 PCI224 0008 PCI234 0009 PCI236 000a PCI272 000b PCI215 14dd Boulder Design Labs Inc 14de Applied Integration Corporation 14df ASIC Communications Corp 14e1 INVERTEX 14e2 INFOLIBRIA 14e3 AMTELCO 14e4 Broadcom Inc. and subsidiaries 0576 BCM43224 802.11a/b/g/n 0800 Sentry5 Chipcommon I/O Controller 0804 Sentry5 PCI Bridge 0805 Sentry5 MIPS32 CPU 0806 Sentry5 Ethernet Controller 080b Sentry5 Crypto Accelerator 080f Sentry5 DDR/SDR RAM Controller 0811 Sentry5 External Interface Core 0816 BCM3302 Sentry5 MIPS32 CPU 1570 720p FaceTime HD Camera 1600 NetXtreme BCM5752 Gigabit Ethernet PCI Express 1028 01c1 Precision 490 1028 01c2 Latitude D620 103c 3015 PCIe LAN on Motherboard 107b 5048 E4500 Onboard 1259 2705 AT-2711FX 1601 NetXtreme BCM5752M Gigabit Ethernet PCI Express 1604 BCM5745X NetXtreme-E Ethernet Partition 1605 BCM5745X NetXtreme-E RDMA Partition 1606 BCM5745X NetXtreme-E RDMA Virtual Function 1609 BCM5745X NetXtreme-E Ethernet Virtual Function 1612 BCM70012 Video Decoder [Crystal HD] 1614 BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet 14e4 d140 NetXtreme-E Quad-port 10GBASE-T Ethernet PCIe Adapter (BCM957454-P410SDBT) 14e4 d340 NetXtreme-E Quad-port 10GBASE-T Ethernet OCP 3.0 Adapter (BCM957454-N410SDBT) 1615 BCM70015 Video Decoder [Crystal HD] 1639 NetXtreme II BCM5709 Gigabit Ethernet 1028 0235 PowerEdge R710 BCM5709 Gigabit Ethernet 1028 0236 PowerEdge R610 BCM5709 Gigabit Ethernet 1028 0237 PowerEdge T610 BCM5709 Gigabit Ethernet 103c 7055 NC382i Integrated Multi-port PCI Express Gigabit Server Adapter 103c 7059 NC382T PCIe Dual Port Multifunction Gigabit Server Adapter 10a9 8027 Quad port Gigabit Ethernet Controller 163a NetXtreme II BCM5709S Gigabit Ethernet 1028 027b PowerEdge M805 Broadcom NetXtreme II BCM5709S 1028 029c PowerEdge M710 BCM5709S Gigabit Ethernet 103c 171d NC382m Dual Port 1GbE Multifunction BL-c Adapter 103c 7056 NC382i Integrated Quad Port PCI Express Gigabit Server Adapter 1259 2984 AT-2973SX 163b NetXtreme II BCM5716 Gigabit Ethernet 1028 028c PowerEdge R410 BCM5716 Gigabit Ethernet 1028 028d PowerEdge T410 BCM5716 Gigabit Ethernet 1028 02f1 PowerEdge R510 BCM5716 Gigabit Ethernet 163c NetXtreme II BCM5716S Gigabit Ethernet 163d NetXtreme II BCM57811 10-Gigabit Ethernet 1043 858a PEB-10G/57811-1S 163e NetXtreme II BCM57811 10 Gigabit Ethernet Multi Function 163f NetXtreme II BCM57811 10-Gigabit Ethernet Virtual Function 1641 NetXtreme BCM57787 Gigabit Ethernet PCIe 1642 NetXtreme BCM57764 Gigabit Ethernet PCIe 1643 NetXtreme BCM5725 Gigabit Ethernet PCIe 1644 NetXtreme BCM5700 Gigabit Ethernet 1014 0277 Broadcom Vigil B5700 1000Base-T 1028 00d1 Broadcom BCM5700 1028 0106 Broadcom BCM5700 1028 0109 Broadcom BCM5700 1000Base-T 1028 010a Broadcom BCM5700 1000BaseTX 10b7 1000 3C996-T 1000Base-T 10b7 1001 3C996B-T 1000Base-T 10b7 1002 3C996C-T 1000Base-T 10b7 1003 3C997-T 1000Base-T Dual Port 10b7 1004 3C996-SX 1000Base-SX 10b7 1005 3C997-SX 1000Base-SX Dual Port 10b7 1008 3C942 Gigabit LOM (31X31) 14e4 0002 NetXtreme 1000Base-SX 14e4 0003 NetXtreme 1000Base-SX 14e4 0004 NetXtreme 1000Base-T 14e4 1028 NetXtreme 1000BaseTX 14e4 1644 BCM5700 1000Base-T 1645 NetXtreme BCM5701 Gigabit Ethernet 0e11 007c NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T) 0e11 007d NC6770 Gigabit Server Adapter (PCI-X, 1000-SX) 0e11 0085 NC7780 Gigabit Server Adapter (embedded, WOL) 0e11 0099 NC7780 Gigabit Server Adapter (embedded, WOL) 0e11 009a NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T) 0e11 00c1 NC6770 Gigabit Server Adapter (PCI-X, 1000-SX) 1028 0121 Broadcom BCM5701 1000Base-T 103c 128a BCM5701 1000Base-T (HP, OEM 3COM) 103c 128b 1000Base-SX (PCI) [A7073A] 103c 12a4 Core Lan 1000Base-T 103c 12c1 IOX Core Lan 1000Base-T [A7109AX] 103c 1300 Core LAN/SCSI Combo [A6794A] 10a9 8010 IO9/IO10 Gigabit Ethernet (Copper) 10a9 8011 Gigabit Ethernet (Copper) 10a9 8012 Gigabit Ethernet (Fiber) 10b7 1004 3C996-SX 1000Base-SX 10b7 1006 3C996B-T 1000Base-T 10b7 1007 3C1000-T 1000Base-T 10b7 1008 3C940-BR01 1000Base-T 14e4 0001 BCM5701 1000Base-T 14e4 0005 BCM5701 1000Base-T 14e4 0006 BCM5701 1000Base-T 14e4 0007 BCM5701 1000Base-SX 14e4 0008 BCM5701 1000Base-T 14e4 1645 NetXtreme BCM5701 Gigabit Ethernet 14e4 8008 BCM5701 1000Base-T 1646 NetXtreme BCM5702 Gigabit Ethernet 0e11 00bb NC7760 1000BaseTX 1028 0126 Broadcom BCM5702 1000BaseTX 14e4 8009 BCM5702 1000BaseTX 1647 NetXtreme BCM5703 Gigabit Ethernet 0e11 0099 NC7780 1000BaseTX 0e11 009a NC7770 1000BaseTX 10a9 8010 IO9 Gigabit Ethernet (Copper) 14e4 0009 BCM5703 1000BaseTX 14e4 000a BCM5703 1000BaseSX 14e4 000b BCM5703 1000BaseTX 14e4 8009 BCM5703 1000BaseTX 14e4 800a BCM5703 1000BaseTX 1648 NetXtreme BCM5704 Gigabit Ethernet 0e11 00cf NC7772 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 0e11 00d0 NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 0e11 00d1 NC7783 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 1028 014a PowerEdge 1750 1028 0170 PowerEdge 6850 Broadcom NetXtreme BCM5704 103c 310f NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 10a9 8013 Dual Port Gigabit Ethernet (PCI-X,Copper) 10a9 8018 Dual Port Gigabit Ethernet (A330) 10a9 801a Dual Port Gigabit Ethernet (IA-blade) 10a9 801b Quad Port Gigabit Ethernet (PCI-E,Copper) 10b7 2000 3C998-T Dual Port 10/100/1000 PCI-X 10b7 3000 3C999-T Quad Port 10/100/1000 PCI-X 1166 1648 NetXtreme CIOB-E 1000Base-T 1734 100b PRIMERGY RX/TX series onboard LAN 1649 NetXtreme BCM5704S_2 Gigabit Ethernet 164a NetXtreme II BCM5706 Gigabit Ethernet 103c 1709 NC371i Integrated PCI-X Multifunction Gigabit Server Adapter 103c 3070 NC380T PCI Express Dual Port Multifunction Gigabit Server Adapter 103c 3101 NC370T MultifuNCtion Gigabit Server Adapter 103c 3106 NC370i Multifunction Gigabit Server Adapter 164c NetXtreme II BCM5708 Gigabit Ethernet 1028 01f0 PowerEdge R900 Broadcom NetXtreme II BCM5708 1028 0205 PowerEdge 2970 Broadcom NetXtreme II BCM5708 1028 020b PowerEdge T605 Broadcom NetXtreme II BCM5708 1028 0221 PowerEdge R805 Broadcom NetXtreme II BCM5708 1028 0223 PowerEdge R905 Broadcom NetXtreme II BCM5708 1028 1f12 PowerEdge R805/R905 Broadcom NetXtreme II BCM5708 103c 7037 NC373T PCI Express Multifunction Gigabit Server Adapter 103c 7038 NC373i Integrated Multifunction Gigabit Server Adapter 103c 7045 NC374m PCI Express Dual Port Multifunction Gigabit Server Adapter 164d NetXtreme BCM5702FE Gigabit Ethernet 164e NetXtreme II BCM57710 10-Gigabit PCIe [Everest] 103c 171c NC532m Dual Port 10GbE Multifunction BL-C Adapter 103c 7058 NC532i Dual Port 10GbE Multifunction BL-C Adapter 164f NetXtreme II BCM57711 10-Gigabit PCIe 1650 NetXtreme II BCM57711E 10-Gigabit PCIe 103c 171c NC532m Dual Port 10GbE Multifunction BL-C Adapter 103c 7058 NC532i Dual Port 10GbE Multifunction BL-C Adapter 1653 NetXtreme BCM5705 Gigabit Ethernet 0e11 00e3 NC7761 Gigabit Server Adapter 1734 1073 Primergy Econel 200 D2020 mainboard 1654 NetXtreme BCM5705_2 Gigabit Ethernet 0e11 00e3 NC7761 Gigabit Server Adapter 103c 3100 NC1020 ProLiant Gigabit Server Adapter 32 PCI 103c 3226 NC150T 4-port Gigabit Combo Switch & Adapter 1655 NetXtreme BCM5717 Gigabit Ethernet PCIe 1656 NetXtreme BCM5718 Gigabit Ethernet PCIe 1657 NetXtreme BCM5719 Gigabit Ethernet PCIe 1014 0420 FC 5260/5899 4-port 1 GbE Adapter for Power 103c 169d Ethernet 1Gb 4-port 331FLR Adapter 103c 22be Ethernet 1Gb 4-port 331i Adapter 103c 3383 Ethernet 1Gb 4-port 331T Adapter 14e4 1904 4-port 1Gb Ethernet Adapter 14e4 1909 Broadcom NetXtreme 5719 Quad Port Gigabit NIC 14e4 d166 BCM95719-P41 4x1GBT Ethernet NIC 14e4 d366 BCM95719-N41 4x1GBT Ethernet NIC 193d 1025 NIC-ETH330T-LP-4P # NIC-ETH330T-3S-4P 4xGE 1000Base-T for OCP3.0 193d 1086 NIC-ETH330T-3S-4P 1659 NetXtreme BCM5721 Gigabit Ethernet PCI Express 1014 02c6 eServer xSeries server mainboard 1028 01e6 PowerEdge 860 1028 023c PowerEdge R200 Broadcom NetXtreme BCM5721 103c 170b NC320m PCI Express Dual Port Gigabit Server Adapter 103c 7031 NC320T PCIe Gigabit Server Adapter 103c 7032 NC320i PCIe Gigabit Server Adapter 1734 1061 PRIMERGY RX/TX S2 series onboard LAN 165a NetXtreme BCM5722 Gigabit Ethernet PCI Express # Dual NIC server 1014 0378 System x3350 (Machine type 4192) 1028 020f PowerEdge R300 Broadcom NetXtreme 5722 1028 0210 PowerEdge T300 Broadcom NetXtreme 5722 1028 0225 PowerEdge T105 Broadcom NetXtreme 5722 103c 7051 NC105i PCIe Gigabit Server Adapter 103c 7052 NC105T PCIe Gigabit Server Adapter 165b NetXtreme BCM5723 Gigabit Ethernet PCIe 103c 705d NC107i Integrated PCI Express Gigabit Server Adapter 165c NetXtreme BCM5724 Gigabit Ethernet PCIe 165d NetXtreme BCM5705M Gigabit Ethernet 1028 865d Latitude D400 14e4 165d Dell Latitude D600 165e NetXtreme BCM5705M_2 Gigabit Ethernet 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 099c NX6110/NC6120 10cf 1279 LifeBook E8010D 165f NetXtreme BCM5720 Gigabit Ethernet PCIe 1028 04f7 PowerEdge R320 server 1028 08fd PowerEdge R6515/R7515 LOM 1028 08ff PowerEdge Rx5xx LOM Board 1028 0900 PowerEdge C6525 LOM # Dell 5720 LOM 1028 0917 PowerEdge C6520 LOM 103c 1786 NC332T Adapter 103c 193d NC332i Adapter 103c 2133 NC332i Adapter 103c 22e8 NC332i Adapter 103c 22eb NC332i Adapter 15d9 165f H12SSL-i 1662 NetXtreme II BCM57712 10 Gigabit Ethernet 1663 NetXtreme II BCM57712 10 Gigabit Ethernet Multi Function 1665 NetXtreme BCM5717 Gigabit Ethernet PCIe 1668 NetXtreme BCM5714 Gigabit Ethernet 103c 7039 NC324i PCIe Dual Port Gigabit Server Adapter 1669 NetXtreme 5714S Gigabit Ethernet 166a NetXtreme BCM5780 Gigabit Ethernet 103c 7035 NC325i Integrated Dual port PCIe Express Gigabit Server Adapter 166b NetXtreme BCM5780S Gigabit Ethernet 166e 570x 10/100 Integrated Controller 166f NetXtreme II BCM57712 10 Gigabit Ethernet Virtual Function 1672 NetXtreme BCM5754M Gigabit Ethernet PCI Express 1673 NetXtreme BCM5755M Gigabit Ethernet PCI Express 1674 NetXtreme BCM5756ME Gigabit Ethernet PCI Express 1677 NetXtreme BCM5751 Gigabit Ethernet PCI Express 1028 0176 Dimension XPS Gen 4 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 1028 0182 Latitude D610 1028 0187 Precision M70 1028 01a3 Latitude X1 1028 01a8 Precision 380 1028 01ad OptiPlex GX620 103c 3006 DC7100 SFF(DX878AV) 1462 028c 915P/G Neo2 1734 105d Scenic W620 1678 NetXtreme BCM5715 Gigabit Ethernet 103c 703e NC326i PCIe Dual Port Gigabit Server Adapter 1679 NetXtreme BCM5715S Gigabit Ethernet 103c 1707 NC326m PCIe Dual Port Adapter 103c 170c NC325m PCIe Quad Port Adapter 103c 703c NC326i PCIe Dual Port Gigabit Server Adapter 167a NetXtreme BCM5754 Gigabit Ethernet PCI Express 1028 01da OptiPlex 745 1028 01de Precision 390 1028 01df PowerEdge SC440 1028 0214 Precision T3400 1028 021e Precision T5400 167b NetXtreme BCM5755 Gigabit Ethernet PCI Express 103c 280a DC5750 Microtower 167d NetXtreme BCM5751M Gigabit Ethernet PCI Express 1014 0577 ThinkPad X41 / Z60t 103c 0934 nx8220 103c 0940 Compaq nw8240 Mobile Workstation 103c 0944 Compaq nc6220 Notebook PC 17aa 2081 ThinkPad R60e 167e NetXtreme BCM5751F Fast Ethernet PCI Express 167f NetLink BCM5787F Fast Ethernet PCI Express 1680 NetXtreme BCM5761e Gigabit Ethernet PCIe 1681 NetXtreme BCM5761 Gigabit Ethernet PCIe # Integrated on the motherboard 1028 0433 OptiPlex 580 1682 NetXtreme BCM57762 Gigabit Ethernet PCIe 106b 00f6 Thunderbolt to Gigabit Ethernet Adapter 1683 NetXtreme BCM57767 Gigabit Ethernet PCIe 1684 NetXtreme BCM5764M Gigabit Ethernet PCIe 1685 NetXtreme II BCM57500S Gigabit Ethernet 1686 NetXtreme BCM57766 Gigabit Ethernet PCIe 1687 NetXtreme BCM5762 Gigabit Ethernet PCIe 1688 NetXtreme BCM5761 10/100/1000BASE-T Ethernet 1259 2708 AT-2712 FX # The Broadcom 57800 device has two 1Gig ports and two 10Gig ports. The subsystem information can be used to differentiate. 168a NetXtreme II BCM57800 1/10 Gigabit Ethernet # SFP+ ports 1014 0493 PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3) # RJ-45 ports 1014 0494 PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3) 1028 1f5c BCM57800 10-Gigabit Ethernet 1028 1f5d BCM57800 10-Gigabit Ethernet 1028 1f67 BCM57800 1-Gigabit Ethernet 1028 1f68 BCM57800 1-Gigabit Ethernet 168d NetXtreme II BCM57840 10/20 Gigabit Ethernet 168e NetXtreme II BCM57810 10 Gigabit Ethernet 1014 0492 PCIe2 2-port 10 GbE BaseT RJ45 Adapter (FC EN0W; CCIN 2CC4) 103c 1798 Flex-10 10Gb 2-port 530FLB Adapter [Meru] 103c 17a5 Flex-10 10Gb 2-port 530M Adapter 103c 18d3 Ethernet 10Gb 2-port 530T Adapter 103c 1930 FlexFabric 10Gb 2-port 534FLR-SFP+ Adapter 103c 1931 StoreFabric CN1100R Dual Port Converged Network Adapter 103c 1932 FlexFabric 10Gb 2-port 534FLB Adapter 103c 1933 FlexFabric 10Gb 2-port 534M Adapter 103c 193a FlexFabric 10Gb 2-port 533FLR-T Adapter 103c 3382 Ethernet 10Gb 2-port 530FLR-SFP+ Adapter 103c 339d Ethernet 10Gb 2-port 530SFP+ Adapter 193d 1003 530F-B 193d 1006 530F-L 193d 100f NIC-ETH522i-Mb-2x10G 4c52 9812 LREC9812AF Dual-port 10Gb Ethernet Server Adapter 1690 NetXtreme BCM57760 Gigabit Ethernet PCIe 1691 NetLink BCM57788 Gigabit Ethernet PCIe 1028 04aa XPS 8300 1692 NetLink BCM57780 Gigabit Ethernet PCIe 1025 033d Aspire 7740G 1693 NetLink BCM5787M Gigabit Ethernet PCI Express 1025 0121 Aspire 5920G 103c 30c0 6710b 17aa 20d5 ThinkPad R61 1694 NetLink BCM57790 Gigabit Ethernet PCIe 1696 NetXtreme BCM5782 Gigabit Ethernet 103c 12bc d530 CMT (DG746A) 14e4 000d NetXtreme BCM5782 1000Base-T 1698 NetLink BCM5784M Gigabit Ethernet PCIe 1699 NetLink BCM5785 Gigabit Ethernet 169a NetLink BCM5786 Gigabit Ethernet PCI Express 169b NetLink BCM5787 Gigabit Ethernet PCI Express 169c NetXtreme BCM5788 Gigabit Ethernet 103c 308b MX6125 103c 30a1 NC2400 144d c018 X20 1462 590c KT6 Delta-FIS2R (MS-6590) 169d NetLink BCM5789 Gigabit Ethernet PCI Express 16a0 NetLink BCM5785 Fast Ethernet 16a1 BCM57840 NetXtreme II 10 Gigabit Ethernet 1043 866e PEB-10G/57840-2T 10GBase-T Network Adapter 193d 100b NIC-ETH521i-Mb-4x10G 4c52 9814 LREC9814AF Quad-port 10Gb Ethernet Server Adapter 16a2 BCM57840 NetXtreme II 10/20-Gigabit Ethernet 103c 1916 FlexFabric 20Gb 2-port 630FLB Adapter 103c 1917 FlexFabric 20Gb 2-port 630M Adapter 103c 2231 3820C 10/20Gb Converged Network Adapter 103c 22fa FlexFabric 10Gb 2-port 536FLB Adapter 16a3 NetXtreme BCM57786 Gigabit Ethernet PCIe 16a4 BCM57840 NetXtreme II Ethernet Multi Function 103c 1916 NPAR 20Gb 2-port 630FLB Adapter 103c 1917 NPAR 20Gb 2-port 630M Adapter 103c 2231 3820C 10/20Gb Converged Network Adapter (NPAR 1.5) 103c 22fa FlexFabric 10Gb 2-port 536FLB Adapter (NPAR 1.5) # The Broadcom 57800 device has two 1Gig ports and two 10Gig ports. The subsystem information can be used to differentiate. 16a5 NetXtreme II BCM57800 1/10 Gigabit Ethernet Multi Function 1028 1f5c NetXtreme II BCM57800 10-Gigabit Ethernet Multi Function 1028 1f5d NetXtreme II BCM57800 10-Gigabit Ethernet Multi Function 1028 1f67 NetXtreme II BCM57800 1-Gigabit Ethernet Multi Function 1028 1f68 NetXtreme II BCM57800 1-Gigabit Ethernet Multi Function 16a6 NetXtreme BCM5702X Gigabit Ethernet 0e11 00bb NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T) 1028 0126 BCM5702 1000Base-T 14e4 000c BCM5702 1000Base-T 14e4 8009 BCM5702 1000Base-T 16a7 NetXtreme BCM5703X Gigabit Ethernet 0e11 00ca NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 0e11 00cb NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 1014 026f eServer xSeries server mainboard 14e4 0009 NetXtreme BCM5703 1000Base-T 14e4 000a NetXtreme BCM5703 1000Base-SX 14e4 000b NetXtreme BCM5703 1000Base-T 14e4 800a NetXtreme BCM5703 1000Base-T 16a8 NetXtreme BCM5704S Gigabit Ethernet 103c 132b PCI-X 1000Mbps Dual-port Built-in 10a9 8014 Dual Port Gigabit Ethernet (PCI-X,Fiber) 10a9 801c Quad Port Gigabit Ethernet (PCI-E,Fiber) 10b7 2001 3C998-SX Dual Port 1000-SX PCI-X # The Broadcom 57800 device has two 1Gig ports and two 10Gig ports. The subsystem information can be used to differentiate. 16a9 NetXtreme II BCM57800 1/10 Gigabit Ethernet Virtual Function 1028 1f5c NetXtreme II BCM57800 10-Gigabit Ethernet Virtual Function 1028 1f5d NetXtreme II BCM57800 10-Gigabit Ethernet Virtual Function 1028 1f67 NetXtreme II BCM57800 1-Gigabit Ethernet Virtual Function 1028 1f68 NetXtreme II BCM57800 1-Gigabit Ethernet Virtual Function 16aa NetXtreme II BCM5706S Gigabit Ethernet 103c 3102 NC370F MultifuNCtion Gigabit Server Adapter 103c 310c NC370i Multifunction Gigabit Server Adapter 16ab NetXtreme II BCM57840 10/20 Gigabit Ethernet Multi Function 16ac NetXtreme II BCM5708S Gigabit Ethernet 1014 0304 NetXtreme II BCM5708S Gigabit Ethernet 1028 01bb PowerEdge 1955 Broadcom NetXtreme II BCM5708S 1028 020c PowerEdge M605 Broadcom NetXtreme II BCM5708S 103c 1706 NC373m Multifunction Gigabit Server Adapter 103c 7038 NC373i PCI Express Multifunction Gigabit Server Adapter 103c 703b NC373i Integrated Multifunction Gigabit Server Adapter 103c 703d NC373F PCI Express Multifunction Gigabit Server Adapter 16ad NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function 103c 1916 FlexFabric 20Gb 2-port 630FLB Adapter 103c 1917 FlexFabric 20Gb 2-port 630M Adapter 103c 2231 3820C 10/20Gb Converged Network Adapter (SR-IOV VF) 103c 22fa FlexFabric 10Gb 2-port 536FLB Adapter (SR-IOV VF) 16ae NetXtreme II BCM57810 10 Gigabit Ethernet Multi Function 103c 1798 NPAR 10Gb 2-port 530FLB Adapter 103c 17a5 NPAR 10Gb 2-port 530M Adapter 103c 18d3 NPAR 10Gb 2-port 530T Adapter 103c 1930 NPAR 10Gb 2-port 534FLR-SFP+ Adapter 103c 1931 NPAR CN1100R Dual Port Converged Network Adapter 103c 1932 NPAR 10Gb 2-port 534FLB Adapter 103c 1933 NPAR 10Gb 2-port 534M Adapter 103c 193a NPAR 10Gb 2-port 533FLR-T Adapter 103c 3382 NPAR 10Gb 2-port 530FLR-SFP+ Adapter 103c 339d NPAR 10Gb 2-port 530SFP+ Adapter 16af NetXtreme II BCM57810 10 Gigabit Ethernet Virtual Function 103c 1798 Flex-10 10Gb 2-port 530FLB Adapter 103c 17a5 Flex-10 10Gb 2-port 530M Adapter 103c 18d3 Ethernet 10Gb 2-port 530T Adapter 103c 1930 FlexFabric 10Gb 2-port 534FLR-SFP+ Adapter 103c 1931 StoreFabric CN1100R Dual Port Converged Network Adapter 103c 1932 FlexFabric 10Gb 2-port 534FLB Adapter 103c 1933 FlexFabric 10Gb 2-port 534M Adapter 103c 193a FlexFabric 10Gb 2-port 533FLR-T Adapter 103c 3382 Ethernet 10Gb 2-port 530FLR-SFP+ Adapter 103c 339d Ethernet 10Gb 2-port 530SFP+ Adapter 16b0 NetXtreme BCM57761 Gigabit Ethernet PCIe 16b1 NetLink BCM57781 Gigabit Ethernet PCIe 1849 96b1 Z77 Extreme4 motherboard 16b2 NetLink BCM57791 Gigabit Ethernet PCIe 16b3 NetXtreme BCM57786 Gigabit Ethernet PCIe 16b4 NetXtreme BCM57765 Gigabit Ethernet PCIe 16b5 NetLink BCM57785 Gigabit Ethernet PCIe 16b6 NetLink BCM57795 Gigabit Ethernet PCIe 16b7 NetXtreme BCM57782 Gigabit Ethernet PCIe 16bc BCM57765/57785 SDXC/MMC Card Reader 16be BCM57765/57785 MS Card Reader 16bf BCM57765/57785 xD-Picture Card Reader 16c1 NetXtreme-E RDMA Virtual Function 16c6 NetXtreme BCM5702A3 Gigabit Ethernet 10b7 1100 3C1000B-T 10/100/1000 PCI 14e4 000c BCM5702 1000Base-T 14e4 8009 BCM5702 1000Base-T 16c7 NetXtreme BCM5703 Gigabit Ethernet 0e11 00ca NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 0e11 00cb NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T) 103c 12c3 Combo FC/GigE-SX [A9782A] 103c 12ca Combo FC/GigE-T [A9784A] 103c 1321 Core I/O LAN/SCSI Combo [AB314A] 14e4 0009 NetXtreme BCM5703 1000Base-T 14e4 000a NetXtreme BCM5703 1000Base-SX 16c8 BCM57301 NetXtreme-C 10Gb Ethernet Controller 16c9 BCM57302 NetXtreme-C 10Gb/25Gb Ethernet Controller 16ca BCM57304 NetXtreme-C 10Gb/25Gb/40Gb/50Gb Ethernet Controller 16cb NetXtreme-C Ethernet Virtual Function 16cc BCM57417 NetXtreme-E Ethernet Partition 16ce BCM57311 NetXtreme-C 10Gb RDMA Ethernet Controller 16cf BCM57312 NetXtreme-C 10Gb/25Gb RDMA Ethernet Controller 16d0 BCM57402 NetXtreme-E 10Gb Ethernet Controller 16d1 BCM57404 NetXtreme-E 10Gb/25Gb Ethernet Controller 16d2 BCM57406 NetXtreme-E 10GBASE-T Ethernet Controller 16d3 NetXtreme-E Ethernet Virtual Function 16d4 BCM57402 NetXtreme-E Ethernet Partition 16d5 BCM57407 NetXtreme-E 10GBase-T Ethernet Controller 16d6 BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller 1059 01b0 RD10057 10GbE interface 117c 00cd FastFrame N4S2 Dual-port 10Gb Ethernet Adapter 14e4 1202 BCM957412M4122C OCP 1x25G Type1 wRoCE 14e4 4120 NetXtreme E-Series Advanced Dual-port 10Gb SFP+ Ethernet Network Daughter Card 14e4 4126 NetXtreme-E Dual-port 10G SFP+ Ethernet OCP 3.0 Adapter (BCM957412N4120C) 152d 8b20 BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller 152d 8b22 BCM57412 NetXtreme-E 25Gb RDMA Ethernet Controller # NIC-ETH531F-LP-2P BCM57412 2 x 10G SFP+ Ethernet PCIe Card 193d 1024 NIC-ETH531F-LP-2P # NIC-ETH531F-3S-2P 2x10GbE SFP+ Adapter for OCP3.0 193d 1087 NIC-ETH531F-3S-2P 16d7 BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller 117c 00cc FastFrame N422 Dual-port 25Gb Ethernet Adapter 14e4 1402 BCM957414A4142CC 10Gb/25Gb Ethernet PCIe 14e4 1404 BCM957414M4142C OCP 2x25G Type1 wRoCE 14e4 4140 NetXtreme E-Series Advanced Dual-port 25Gb SFP28 Network Daughter Card # BCM957414M4143C 14e4 4143 NetXtreme-E Single-port 40Gb/50Gb Ethernet OCP 2.0 Adapter (BCM957414M4143C) 14e4 4146 NetXtreme-E Dual-port 25G SFP28 Ethernet OCP 3.0 Adapter (BCM957414N4140C) 1590 020e Ethernet 25Gb 2-port 631SFP28 Adapter 1590 0211 Ethernet 25Gb 2-port 631FLR-SFP28 Adapter # NIC-ETH630F-LP-2P SFP28 2x25GbE PCIe Network Adapter 193d 1033 NIC-ETH630F-LP-2P 1bd4 008e ENFB2251-SP2 1bd4 008f ENPB2251-SP2 # VSE-225-31S Dual-port 10Gb/25Gb Ethernet PCIe 1eec 0101 VSE-225-31S Dual-port 10Gb/25Gb Ethernet PCIe 16d8 BCM57416 NetXtreme-E Dual-Media 10G RDMA Ethernet Controller 1028 1feb NetXtreme-E 10Gb SFP+ Adapter 117c 00ce FastFrame N4T2 Dual-port 10GBASE-T Ethernet Adapter 14e4 4163 NetXtreme-E Dual-port 10GBASE-T Ethernet OCP 2.0 Adapter (BCM957416M4163C) 14e4 4166 NetXtreme-E Dual-port 10GBASE-T Ethernet OCP 3.0 Adapter (BCM957416N4160C) 14e4 d140 BCM957416-P410 4x10GBT Ethernet NIC 14e4 d340 BCM957416-N410 4x10GBT Ethernet NIC 1590 020c Ethernet 10Gb 2-port 535T Adapter 1590 0212 Ethernet 10Gb 2-port 535FLR-T Adapter 16d9 BCM57417 NetXtreme-E 10GBASE-T RDMA Ethernet Controller 108e 4866 Dual Port 10GBase-T Ethernet Controller 16dc NetXtreme-E Ethernet Virtual Function 16dd NetLink BCM5781 Gigabit Ethernet PCI Express 16de BCM57412 NetXtreme-E Ethernet Partition 16df BCM57314 NetXtreme-C 10Gb/25Gb/40Gb/50Gb RDMA Ethernet Controller 16e1 NetXtreme-C Ethernet Virtual Function 16e2 BCM57417 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller 108e 4866 Dual Port 10Gb/25Gb SFP28 Ethernet Controller 16e3 BCM57416 NetXtreme-E 10Gb RDMA Ethernet Controller 16e5 NetXtreme-C RDMA Virtual Function 16e7 BCM57404 NetXtreme-E Ethernet Partition 16e8 BCM57406 NetXtreme-E Ethernet Partition 16e9 BCM57407 NetXtreme-E 25Gb Ethernet Controller 16eb BCM57412 NetXtreme-E RDMA Partition 16ec BCM57414 NetXtreme-E Ethernet Partition 16ed BCM57414 NetXtreme-E RDMA Partition 16ee BCM57416 NetXtreme-E Ethernet Partition 16ef BCM57416 NetXtreme-E RDMA Partition 16f1 BCM57452 NetXtreme-E 10Gb/25Gb/40Gb/50Gb Ethernet 16f3 NetXtreme BCM5727 Gigabit Ethernet PCIe 16f7 NetXtreme BCM5753 Gigabit Ethernet PCI Express 16fd NetXtreme BCM5753M Gigabit Ethernet PCI Express 103c 309f Compaq nx9420 Notebook 103c 30a3 Compaq nw8440 16fe NetXtreme BCM5753F Fast Ethernet PCI Express 170c BCM4401-B0 100Base-TX 1028 0188 Inspiron 6000 laptop 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 1028 01af Inspiron 6400 1028 01cd Inspiron 9400 Laptop 1028 01d7 XPS M1210 1028 01d8 Inspiron E1405 103c 099c NX6110/NC6120 103c 30a2 NX7300 laptop 14e4 170c HP Compaq 6720t Mobile Thin Client 170d NetXtreme BCM5901 100Base-TX 1014 0545 ThinkPad R40e 170e NetXtreme BCM5901 100Base-TX 1712 NetLink BCM5906 Fast Ethernet PCI Express 1713 NetLink BCM5906M Fast Ethernet PCI Express 1028 01f3 Inspiron 1420 1028 0209 XPS M1330 103c 30c0 Compaq 6710b 17aa 3a23 IdeaPad S10e 1750 BCM57508 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb/200Gb Ethernet 117c 00cf FastFrame N412 Dual-port 100Gb Ethernet Adapter 117c 40d6 ThunderLink TLNS-5102 Dual-port 100Gb Ethernet Adapter 14e4 2100 NetXtreme-E Dual-port 100G QSFP56 Ethernet PCIe4.0 x16 Adapter (BCM957508-P2100G) 14e4 5208 NetXtreme-E Dual-port 100G QSFP56 Ethernet OCP 3.0 Adapter (BCM957508-N2100G) 14e4 520a NetXtreme-E Dual-port 100G DSFP Ethernet OCP 3.0 Adapter (BCM957508-N2100GD) 14e4 d124 NetXtreme-E P2100D BCM57508 2x100G QSFP PCIE 14e4 d324 NetXtreme-E N2100D BCM57508 2x100G QSFP OCP3.0 Ethernet 14e4 df24 NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz Ethernet 1751 BCM57504 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet 1028 09d4 PowerEdge XR11/XR12 LOM 1028 0b1b PowerEdge XR5610 LOM 117c 00da FastFrame N424 Quad-port 25Gb Ethernet Adapter 14e4 4250 NetXtreme-E Quad-port 25G SFP28 Ethernet PCIe4.0 x16 Adapter (BCM957504-P425G) 14e4 5045 NetXtreme-E BCM57504 4x25G OCP3.0 14e4 5100 NetXtreme-E Single-port 100G QSFP56 Ethernet OCP 3.0 Adapter (BCM957504-N1100G) 14e4 5105 NetXtreme-E Single-port 100G DSFP Ethernet OCP 3.0 Adapter (BCM957504-N1100GD) 14e4 5250 NetXtreme-E BCM57504 4x25G KR Mezz 14e4 5425 NetXtreme-E Quad-port 25G SFP28 Ethernet OCP 3.0 Adapter (BCM957504-N425G) 14e4 d142 NetXtreme-E P425D BCM57504 4x25G SFP28 PCIE 1590 0420 HPE Ethernet 25/50Gb 2-port 6310C Adapter 1752 BCM57502 NetXtreme-E 10Gb/25Gb/40Gb/50Gb Ethernet 1760 BCM57608 25Gb/50Gb/100Gb/200Gb/400Gb Ethernet 14e4 9110 BCM57608 1x400G PCIe Ethernet NIC 14e4 9120 BCM57608 2x200G PCIe Ethernet NIC 14e4 9121 BCM57608 2x100G PCIe Ethernet NIC 14e4 9125 BCM57608 2x200G PCIe Ethernet NIC 14e4 9126 BCM57608 2x100G PCIe Ethernet NIC 14e4 9140 BCM57608 1x400G QSFP-DD PCIe Ethernet NIC 14e4 9310 BCM57608 1x400G QSFP-DD OCP Ethernet NIC 14e4 9311 BCM57608 1x400G OCP Ethernet NIC 14e4 9312 BCM57608 1x200G OCP Ethernet NIC 14e4 9320 BCM57608 2x200G OCP Ethernet NIC 14e4 9325 BCM57608 2x200G OCP Ethernet NIC 14e4 9326 BCM57608 2x100G OCP Ethernet NIC 14e4 9340 BCM57608 4x100G OCP Ethernet NIC 14e4 9345 BCM57608 4x25G OCP Ethernet NIC 14e4 d125 BCM57608 2x200G PCIe Ethernet NIC 1800 BCM57502 NetXtreme-E Ethernet Partition 1801 BCM57504 NetXtreme-E Ethernet Partition 1590 0420 Ethernet NPAR 6310C Adapter 1802 BCM57508 NetXtreme-E Ethernet Partition 14e4 df24 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Partition 1803 BCM57502 NetXtreme-E RDMA Partition 1804 BCM57504 NetXtreme-E RDMA Partition 1590 0420 Ethernet NPAR RoCE 6310C Adapter 1805 BCM57508 NetXtreme-E RDMA Partition 14e4 df24 NetXtreme-E NGM2100D BCM57508 2x100G KR Mezz RDMA Partition 1806 BCM5750X NetXtreme-E Ethernet Virtual Function 14e4 df24 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Virtual Function 1590 0420 Ethernet SRIOV 6310C Adapter 1807 BCM5750X NetXtreme-E RDMA Virtual Function 14e4 df24 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Virtual Function 1590 0420 Ethernet SRIOV RoCE 6310C Adapter 1808 BCM5750X NetXtreme-E Ethernet Virtual Function 14e4 df24 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz Ethernet Virtual Function 1809 BCM5750X NetXtreme-E RDMA Virtual Function 14e4 df24 BCM57508 NetXtreme-E NGM2100D 2x100G KR Mezz RDMA Virtual Function 1819 BCM5760X Ethernet Virtual Function 2711 BCM2711 PCIe Bridge 2712 BCM2712 PCIe Bridge 3352 BCM3352 3360 BCM3360 4210 BCM4210 iLine10 HomePNA 2.0 4211 BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem 4212 BCM4212 v.90 56k modem 4220 802-11b/g Wireless PCI controller, packaged as a Linksys WPC54G ver 1.2 PCMCIA card 4222 NetXtreme BCM5753M Gigabit Ethernet PCI Express 4301 BCM4301 802.11b Wireless LAN Controller 1028 0407 TrueMobile 1180 Onboard WLAN 1043 0120 WL-103b Wireless LAN PC Card 16a5 1602 B-300 802.11b Wireless CardBus Adapter 1737 4301 WMP11 v2.7 802.11b Wireless-B PCI Adapter 4305 BCM4307 V.90 56k Modem 4306 BCM4306 802.11bg Wireless LAN controller 4307 BCM4306 802.11bg Wireless LAN Controller 4310 BCM4310 Chipcommon I/OController 4311 BCM4311 802.11b/g WLAN 1028 0007 Wireless 1390 WLAN Mini-Card 1028 0008 Wireless 1390 WLAN ExpressCard 103c 1363 BCM4311 802.11b/g Wireless LAN Controller 103c 1364 BCM4311 802.11b/g Wireless LAN Controller 103c 1365 BCM4311 802.11b/g Wireless LAN Controller 103c 1374 BCM4311 802.11b/g Wireless LAN Controller 103c 1375 BCM4311 802.11b/g Wireless LAN Controller 103c 1376 BCM4311 802.11b/g Wireless LAN Controller 103c 1377 BCM4311 802.11b/g Wireless LAN Controller 103c 137f BCM4322 802.11a/b/g/n Wireless LAN Controller 103c 1380 BCM4322 802.11a/b/g/n Wireless LAN Controller 14e4 4311 BCM94311MCG 4312 BCM4311 802.11a/b/g 1028 0007 Wireless 1490 Dual Band WLAN Mini-Card 1028 0008 Wireless 1490 Dual Band WLAN ExpressCard 103c 135a Broadcom 802.11a/b/g WLAN 103c 135f Broadcom 802.11a/b/g WLAN 103c 1360 Broadcom 802.11a/b/g WLAN 103c 1361 Broadcom 802.11a/b/g WLAN 103c 1362 Broadcom 802.11a/b/g WLAN 103c 1370 Broadcom 802.11a/b/g WLAN 103c 1371 Broadcom 802.11a/b/g WLAN 103c 1372 Broadcom 802.11a/b/g WLAN 103c 1373 Broadcom 802.11a/b/g WLAN 103c 30b5 Presario V3242AU 106b 0089 AirPort Extreme 1371 103c Broadcom 802.11 Multiband-netwerkadapter(6715s) 4313 BCM4311 802.11a 4315 BCM4312 802.11b/g LP-PHY 1028 000b Wireless 1395 WLAN Mini-Card 1028 000c Wireless 1397 WLAN Mini-Card 103c 137c BCM4312 802.11b/g Wireless LAN Controller 103c 137d BCM4312 802.11b/g Wireless LAN Controller 103c 1507 U98Z049.00 Wireless Mini PCIe Card 105b e003 T77H030.00 Wireless Mini PCIe Card 105b e01b T77H106.00 Wireless Half-size Mini PCIe Card 4318 BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller 1028 0005 Wireless 1370 WLAN Mini-PCI Card 1028 0006 Wireless 1370 WLAN PC Card 103c 1355 Broadcom 802.11b/g WLAN 103c 1356 Broadcom 802.11b/g WLAN 103c 1357 Broadcom 802.11b/g WLAN 1043 100f WL-138G v2 / WL-138gE / WL-100gE 1043 120f A6U notebook embedded card 1154 0355 Buffalo WLI2-PCI-G54S High Speed Mode Wireless Adapter 1468 0311 Aspire 3022WLMi, 5024WLMi, 5020 1468 0312 TravelMate 2410 14e4 0449 Gateway 7510GX 16ec 0119 U.S.Robotics Wireless MAXg PC Card 1737 0042 WMP54GS v1.1 802.11g Wireless-G PCI Adapter with SpeedBooster 1737 0048 WPC54G v3 802.11g Wireless-G Notebook Adapter 1737 0049 WPC54GS v2 802.11g Wireless-G Notebook Adapter with SpeedBooster 1799 7000 F5D7000 v4000 Wireless G Desktop Card 1799 7001 F5D7001 v2000 Wireless G Plus Desktop Card 1799 7010 F5D7010 v4000 Wireless G Notebook Card 1799 7011 F5D7011 v2000 High-Speed Mode Wireless G Notebook Card 4319 BCM4318 [AirForce 54g] 802.11a/b/g PCI Express Transceiver 1028 0005 Wireless 1470 Dual Band WLAN Mini-PCI Card 1028 0006 Wireless 1470 Dual Band WLAN PC Card 103c 1358 Broadcom 802.11a/b/g WLAN 103c 1359 Broadcom 802.11a/b/g WLAN 103c 135a Broadcom 802.11a/b/g WLAN 4320 BCM4306 802.11b/g Wireless LAN Controller 1028 0001 TrueMobile 1300 WLAN Mini-PCI Card 1028 0002 TrueMobile 1300 WLAN PC Card 1028 0003 Wireless 1350 WLAN Mini-PCI Card 1028 0004 Wireless 1350 WLAN PC Card 103c 12f4 Broadcom 802.11b/g WLAN 103c 12f8 Broadcom 802.11b/g WLAN 103c 12fa Broadcom 802.11b/g WLAN 103c 12fb Broadcom 802.11b/g WLAN 1043 100f WL-100G 1057 7025 WN825G 106b 004e AirPort Extreme 1154 0330 Buffalo WLI2-PCI-G54S High Speed Mode Wireless Desktop Adapter 144f 7050 eMachines M6805 802.11g Built-in Wireless 144f 7051 Sonnet Aria Extreme PCI 1737 0013 WMP54G v1 802.11g PCI Adapter 1737 0014 WMP54G v2 802.11g PCI Adapter 1737 0015 WMP54GS v1.0 802.11g Wireless-G PCI Adapter with SpeedBooster 1737 4320 WPC54G v1 / WPC54GS v1 802.11g Wireless-G Notebook Adapter 1799 7000 F5D7000 v1000 Wireless G Desktop Card 1799 7001 F5D7001 v1000 Wireless G Plus Desktop Card 1799 7010 F5D7010 v1000 Wireless G Notebook Card 1799 7011 F5D7011 v1000 High-Speed Mode Wireless G Notebook Card 185f 1220 TravelMate 290E WLAN Mini-PCI Card 4321 BCM4321 802.11a Wireless Network Controller 4322 BCM4322 802.11bgn Wireless Network Controller 4324 BCM4309 802.11abg Wireless Network Controller 1028 0001 Truemobile 1400 1028 0002 TrueMobile 1400 Dual Band WLAN PC Card 1028 0003 Truemobile 1450 MiniPCI 1028 0004 Wireless 1450 Dual Band WLAN PC Card 103c 12f9 Broadcom 802.11a/b/g WLAN 103c 12fc Broadcom 802.11a/b/g WLAN 4325 BCM4306 802.11bg Wireless Network Controller 1414 0003 Wireless Notebook Adapter MN-720 1414 0004 Wireless PCI Adapter MN-730 4326 BCM4307 Chipcommon I/O Controller? 4328 BCM4321 802.11a/b/g/n 1028 0009 Wireless 1500 Draft 802.11n WLAN Mini-Card 1028 000a Wireless 1500 Draft 802.11n WLAN Mini-card 103c 1366 BCM4321 802.11a/b/g/n Wireless LAN Controller 103c 1367 BCM4321 802.11a/b/g/n Wireless LAN Controller 103c 1368 BCM4321 802.11a/b/g/n Wireless LAN Controller 103c 1369 BCM4321 802.11a/b/g/n Wireless LAN Controller 106b 0087 AirPort Extreme 106b 0088 AirPort Extreme 106b 008b AirPort Extreme 106b 008c AirPort Extreme 106b 0090 AirPort Extreme 14e4 4328 BCM4328 802.11a/b/g/n 1737 0066 WPC600N v1 802.11a/b/g/n Wireless-N CardBus Adapter 1737 0068 WEC600N v1 802.11a/b/g/n Wireless-N ExpressCard 4329 BCM4321 802.11b/g/n 1385 7b00 WN511B RangeMax NEXT Wireless Notebook Adapter 1385 7d00 WN311B RangeMax Next 270 Mbps Wireless PCI Adapter 1737 0058 WPC300N v1 Wireless-N Notebook Adapter 432a BCM4321 802.11an Wireless Network Controller 432b BCM4322 802.11a/b/g/n Wireless LAN Controller 1028 000d Wireless 1510 Wireless-N WLAN Mini-Card 106b 008d AirPort Extreme 106b 008e AirPort Extreme 432c BCM4322 802.11b/g/n 1799 d311 Dynex DX-NNBX 802.11n WLAN Cardbus Card 432d BCM4322 802.11an Wireless Network Controller 4331 BCM4331 802.11a/b/g/n 106b 00d6 AirPort Extreme 106b 00e4 AirPort Extreme 106b 00ef AirPort Extreme 106b 00f4 AirPort Extreme 106b 00f5 AirPort Extreme 106b 010e AirPort Extreme 106b 010f AirPort Extreme 4333 Serial (EDGE/GPRS modem part of Option GT Combo Edge) 4344 EDGE/GPRS data and 802.11b/g combo cardbus [GC89] 4350 BCM43222 Wireless Network Adapter 4351 BCM43222 802.11abgn Wireless Network Adapter 4353 BCM43224 802.11a/b/g/n 1028 000e Wireless 1520 Half-size Mini PCIe Card 103c 1509 WMIB-275N Half-size Mini PCIe Card 106b 0093 AirPort Extreme 106b 00d1 AirPort Extreme 106b 00e9 AirPort Extreme 14e4 04d8 Pegatron UPWL6024 4357 BCM43225 802.11b/g/n 105b e021 T77H103.00 Wireless Half-size Mini PCIe Card 4358 BCM43227 802.11b/g/n 4359 BCM43228 802.11a/b/g/n 1028 0011 Wireless 1530 Half-size Mini PCIe Card 103c 182c BCM943228HM4L 802.11a/b/g/n 2x2 Wi-Fi Adapter 4360 BCM4360 802.11ac Wireless Network Adapter 4365 BCM43142 802.11b/g/n 1028 0016 Wireless 1704 802.11n + BT 4.0 43a0 BCM4360 802.11ac Dual Band Wireless Network Adapter 43a1 BCM4360 802.11ac 2,4G Wireless Network Adapter 43a2 BCM4360 802.11ac 5G Wireless Network Adapter 43a3 BCM4350 802.11ac Wireless Network Adapter # Manufactured by Foxconn for Lenovo 17aa 075a 00JT494 43a9 BCM43217 802.11b/g/n 43aa BCM43131 802.11b/g/n 43ae BCM43162 802.11ac Wireless Network Adapter 43b1 BCM4352 802.11ac Dual Band Wireless Network Adapter 1043 85ba PCE-AC56 Dual-Band Wireless PCI-E Adapter 43ba BCM43602 802.11ac Wireless LAN SoC 43bb BCM43602 802.11ac Wireless LAN SoC 43bc BCM43602 802.11ac Wireless LAN SoC 43d3 BCM43567 802.11ac Wireless Network Adapter 43d9 BCM43570 802.11ac Wireless Network Adapter 43dc BCM4355 802.11ac Wireless LAN SoC 43df BCM4354 802.11ac Wireless LAN SoC 43e9 BCM4358 802.11ac Wireless LAN SoC 43ec BCM4356 802.11ac Wireless Network Adapter 4401 BCM4401 100Base-T 1025 0035 TravelMate 660 1025 0064 Extensa 3000 series laptop 1028 8127 Dimension 2400 103c 08b0 tc1100 tablet 1043 80a8 A7V8X motherboard 4402 BCM4402 Integrated 10/100BaseT 4403 BCM4402 V.90 56k Modem 4410 BCM4413 iLine32 HomePNA 2.0 4411 BCM4413 V.90 56k modem 4412 BCM4412 10/100BaseT 4415 BCM4359 802.11ac Dual-Band Wireless Network Controller 441f BCM4361 802.11ac Dual-Band Wireless Network Controller 4420 BCM4361 802.11ac 2.4 GHz Wireless Network Controller 4421 BCM4361 802.11ac 5 GHz Wireless Network Controller 4425 BCM4378 802.11ax Dual Band Wireless Network Adapter 4430 BCM44xx CardBus iLine32 HomePNA 2.0 4432 BCM4432 CardBus 10/100BaseT 4433 BCM4387 802.11ax Dual Band Wireless LAN Controller 4464 BCM4364 802.11ac Wireless Network Adapter # brcmfmac reports it as BCM4377/4 but macOS drivers call it BCM4377b 4488 BCM4377b Wireless Network Adapter 449d BCM43752 802.11ax Dual Band Wireless LAN Controller 4610 BCM4610 Sentry5 PCI to SB Bridge 4611 BCM4610 Sentry5 iLine32 HomePNA 1.0 4612 BCM4610 Sentry5 V.90 56k Modem 4613 BCM4610 Sentry5 Ethernet Controller 4614 BCM4610 Sentry5 External Interface 4615 BCM4610 Sentry5 USB Controller 4704 BCM4704 PCI to SB Bridge 4705 BCM4704 Sentry5 802.11b Wireless LAN Controller 4706 BCM4704 Sentry5 Ethernet Controller 4707 BCM4704 Sentry5 USB Controller 4708 BCM4704 Crypto Accelerator 4710 BCM4710 Sentry5 PCI to SB Bridge 4711 BCM47xx Sentry5 iLine32 HomePNA 2.0 4712 BCM47xx V.92 56k modem 4713 Sentry5 Ethernet Controller 4714 BCM47xx Sentry5 External Interface 4715 BCM47xx Sentry5 USB / Ethernet Controller 4716 BCM47xx Sentry5 USB Host Controller 4717 BCM47xx Sentry5 USB Device Controller 4718 Sentry5 Crypto Accelerator 4719 BCM47xx/53xx RoboSwitch Core 471a BCM47xx EHCI Host Controller 4720 BCM4712 MIPS CPU 4727 BCM4313 802.11bgn Wireless Network Adapter 1028 0010 Inspiron M5010 / XPS 8300 472a BCM47xx xHCI Host Controller 5365 BCM5365P Sentry5 Host Bridge 5600 BCM5600 StrataSwitch 24+2 Ethernet Switch Controller 5605 BCM5605 StrataSwitch 24+2 Ethernet Switch Controller 5615 BCM5615 StrataSwitch 24+2 Ethernet Switch Controller 5625 BCM5625 StrataSwitch 24+2 Ethernet Switch Controller 5645 BCM5645 StrataSwitch 24+2 Ethernet Switch Controller 5670 BCM5670 8-Port 10GE Ethernet Switch Fabric 5680 BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller 5690 BCM5690 12-port Multi-Layer Gigabit Ethernet Switch 5691 BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller 5692 BCM5692 12-port Multi-Layer Gigabit Ethernet Switch 5695 BCM5695 12-port + HiGig Multi-Layer Gigabit Ethernet Switch 5698 BCM5698 12-port Multi-Layer Gigabit Ethernet Switch 5820 BCM5820 Crypto Accelerator 5821 BCM5821 Crypto Accelerator 5822 BCM5822 Crypto Accelerator 5823 BCM5823 Crypto Accelerator 5824 BCM5824 Crypto Accelerator 5840 BCM5840 Crypto Accelerator 5841 BCM5841 Crypto Accelerator 5850 BCM5850 Crypto Accelerator 5e87 Valkyrie offload engine 5e88 Viper Offload Engine # Bluetooth PCI function of the BRCM4378 Wireless Network Adapter 5f69 BRCM4378 Bluetooth Controller # Bluetooth PCI function of the BRCM4387 Wireless Network Adapter 5f71 BRCM4387 Bluetooth Controller # Bluetooth PCI function of the BRCM4377 Wireless Network Adapter 5fa0 BRCM4377 Bluetooth Controller 8411 BCM47xx PCIe Bridge 8602 BCM7400/BCM7405 Serial ATA Controller 9026 CN99xx [ThunderX2] Integrated USB 3.0 xHCI Host Controller 9027 CN99xx [ThunderX2] Integrated AHCI/SATA 3 Host Controller a8d8 BCM43224/5 Wireless Network Adapter aa52 BCM43602 802.11ac Wireless LAN SoC b080 BCM56080 Firelight2 Switch ASIC b302 BCM56302 StrataXGS 24x1GE 2x10GE Switch Controller b334 BCM56334 StrataXGS 24x1GE 4x10GE Switch Controller b370 BCM56370 Switch ASIC b371 BCM56371 Switch ASIC b372 BCM56372 Switch ASIC b375 BCM56375 Switch ASIC b376 BCM56376 Switch ASIC b377 BCM56377 Switch ASIC b379 Broadcom BCM56379 Switch ASIC b470 BCM56470 SWITCH ASIC b471 BCM56471 SWITCH ASIC b472 BCM56472 SWITCH ASIC b800 BCM56800 StrataXGS 10GE Switch Controller b842 BCM56842 Trident 10GE Switch Controller b850 BCM56850 Switch ASIC [Trident2] b880 BCM56880 Switch ASIC b960 BCM56960 Switch ASIC [Tomahawk] b990 BCM56990 Switch ASIC [Tomahawk4] # Switch ASIC b991 Tomahawk4 b992 BCM56992 [Tomahawk4] b993 BCM56993 Switch ASIC [Tomahawk4] b995 BCM56995 Switch ASIC [Tomahawk4] b996 BCM56996 106G Switch ASIC [Tomahawk4G] b998 BCM56998 106G Switch ASIC [Tomahawk4GT] b999 BCM56999 106G Switch ASIC [Tomahawk4D] c909 BCM78909 Switch ASIC d802 BCM58802 Stingray 50Gb Ethernet SoC 14e4 8021 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w16GB DRAM (Part No BCM958802A8046C) 14e4 8023 PS410T-H04 NetXtreme-S 4x10G 10GBaseT PCIe SmartNIC 14e4 8024 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w4GB DRAM (Part No BCM958802A8044C) 14e4 8028 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w8GB DRAM (Part No BCM958802A8048C) 1bb0 0021 HPE SimpliVity Accelerator d804 BCM58804 Stingray 100Gb Ethernet SoC f800 BCM78800 Switch ASIC [Trident5-X12] f900 BCM78900 Switch ASIC [Tomahawk5] f902 BCM78902 Switch ASIC [Tomahawk5T] f903 BCM78903 Switch ASIC [Tomahawk5] f905 BCM78905 Switch ASIC [Tomahawk5+] f910 BCM78910 Switch ASIC [Tomahawk6] f914 BCM78914 Switch ASIC [Tomahawk6] f917 BCM78917 Switch ASIC [Tomahawk6] 14e5 Pixelfusion Ltd 14e6 SHINING Technology Inc 14e7 3CX 14e8 RAYCER Inc 14e9 GARNETS System CO Ltd 14ea Planex Communications, Inc ab06 FNW-3603-TX CardBus Fast Ethernet ab07 RTL81xx RealTek Ethernet ab08 FNW-3602-TX CardBus Fast Ethernet 14eb SEIKO EPSON Corp # nee ACQIRIS 14ec Agilent Technologies 0000 Aciris Digitizer (malformed ID) 14ed DATAKINETICS Ltd 14ee MASPRO KENKOH Corp 14ef CARRY Computer ENG. CO Ltd 14f0 CANON RESEACH CENTRE FRANCE 14f1 Conexant Systems, Inc. 1002 HCF 56k Modem 1003 HCF 56k Modem 1004 HCF 56k Modem 1005 HCF 56k Modem 1006 HCF 56k Modem 1022 HCF 56k Modem 1023 HCF 56k Modem 1024 HCF 56k Modem 1025 HCF 56k Modem 1026 HCF 56k Modem 1032 HCF 56k Modem 1033 HCF 56k Data/Fax Modem 1033 8077 NEC 122d 4027 Dell Zeus - MDP3880-W(B) Data Fax Modem 122d 4030 Dell Mercury - MDP3880-U(B) Data Fax Modem 122d 4034 Dell Thor - MDP3880-W(U) Data Fax Modem 13e0 020d Dell Copper 13e0 020e Dell Silver 13e0 0261 IBM 13e0 0290 Compaq Goldwing 13e0 02a0 IBM 13e0 02b0 IBM 13e0 02c0 Compaq Scooter 13e0 02d0 IBM 144f 1500 IBM P85-DF (1) 144f 1501 IBM P85-DF (2) 144f 150a IBM P85-DF (3) 144f 150b IBM P85-DF Low Profile (1) 144f 1510 IBM P85-DF Low Profile (2) 1034 HCF 56k Data/Fax/Voice Modem 1035 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 10cf 1098 Fujitsu P85-DFSV 1036 HCF 56k Data/Fax/Voice/Spkp Modem 104d 8067 HCF 56k Modem 122d 4029 MDP3880SP-W 122d 4031 MDP3880SP-U 13e0 0209 Dell Titanium 13e0 020a Dell Graphite 13e0 0260 Gateway Red Owl 13e0 0270 Gateway White Horse 1052 HCF 56k Data/Fax Modem (Worldwide) 1053 HCF 56k Data/Fax Modem (Worldwide) 1054 HCF 56k Data/Fax/Voice Modem (Worldwide) 1055 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide) 1056 HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide) 122d 4035 MDP3900V-W 1057 HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide) 1059 HCF 56k Data/Fax/Voice Modem (Worldwide) 1063 HCF 56k Data/Fax Modem 1064 HCF 56k Data/Fax/Voice Modem 1065 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 1066 HCF 56k Data/Fax/Voice/Spkp Modem 122d 4033 Dell Athena - MDP3900V-U 1085 HCF V90 56k Data/Fax/Voice/Spkp PCI Modem 10b6 CX06834-11 HCF V.92 56k Data/Fax/Voice/Spkp Modem 1433 HCF 56k Data/Fax Modem 1434 HCF 56k Data/Fax/Voice Modem 1435 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 1436 HCF 56k Data/Fax Modem 1453 HCF 56k Data/Fax Modem 13e0 0240 IBM 13e0 0250 IBM 144f 1502 IBM P95-DF (1) 144f 1503 IBM P95-DF (2) 1454 HCF 56k Data/Fax/Voice Modem 1455 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 1456 HCF 56k Data/Fax/Voice/Spkp Modem 122d 4035 Dell Europa - MDP3900V-W 122d 4302 Dell MP3930V-W(C) MiniPCI 1610 ADSL AccessRunner PCI Arbitration Device 1611 AccessRunner PCI ADSL Interface Device 1620 AccessRunner V2 PCI ADSL Arbitration Device 1621 AccessRunner V2 PCI ADSL Interface Device 1622 AccessRunner V2 PCI ADSL Yukon WAN Adapter 1803 HCF 56k Modem 0e11 0023 623-LAN Grizzly 0e11 0043 623-LAN Yogi 1811 MiniPCI Network Adapter 1815 HCF 56k Modem 0e11 0022 Grizzly 0e11 0042 Yogi # Integrated in CX86111/CX86113 processors 1830 CX861xx Integrated Host Bridge 2003 HSF 56k Data/Fax Modem 2004 HSF 56k Data/Fax/Voice Modem 2005 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 2006 HSF 56k Data/Fax/Voice/Spkp Modem 2013 HSF 56k Data/Fax Modem 0e11 b195 Bear 0e11 b196 Seminole 1 0e11 b1be Seminole 2 1025 8013 Acer 1033 809d NEC 1033 80bc NEC 155d 6793 HP 155d 8850 E Machines 2014 HSF 56k Data/Fax/Voice Modem 2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem 2016 HSF 56k Data/Fax/Voice/Spkp Modem 2043 HSF 56k Data/Fax Modem (WorldW SmartDAA) 2044 HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA) 2045 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA) 14f1 2045 Generic SoftK56 2046 HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA) 2063 HSF 56k Data/Fax Modem (SmartDAA) 2064 HSF 56k Data/Fax/Voice Modem (SmartDAA) 2065 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA) 2066 HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA) 2093 HSF 56k Modem 155d 2f07 Legend 2143 HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA) 2144 HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA) 2145 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA) 2146 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA) 2163 HSF 56k Data/Fax/Cell Modem (Mob SmartDAA) 2164 HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA) 2165 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA) 2166 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA) 2343 HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA) 2344 HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA) 2345 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA) 2346 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA) 2363 HSF 56k Data/Fax CardBus Modem (Mob SmartDAA) 2364 HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA) 2365 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA) 2366 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA) 2443 HSF 56k Data/Fax Modem (Mob WorldW SmartDAA) 104d 8075 Modem 104d 8083 Modem 104d 8097 Modem 2444 HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA) 2445 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA) 2446 HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA) 2463 HSF 56k Data/Fax Modem (Mob SmartDAA) 2464 HSF 56k Data/Fax/Voice Modem (Mob SmartDAA) 2465 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA) 2466 HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA) 2702 HSFi modem RD01-D270 1028 8d88 SmartHSFi V92 56K PCI Modem 2f00 HSF 56k HSFi Modem 13e0 8d84 IBM HSFi V.90 13e0 8d85 Compaq Stinger 14f1 2004 Dynalink 56PMi 2f02 HSF 56k HSFi Data/Fax 2f11 HSF 56k HSFi Modem 2f20 HSF 56k Data/Fax Modem 14f1 200c Soft Data Fax Modem with SmartCP 14f1 200f Dimension 3000 2f30 SoftV92 SpeakerPhone SoftRing Modem with SmartSP 14f1 2014 Devolo MikroLink 56K Modem PCI 2f50 Conexant SoftK56 Data/Fax Modem 510f Conexant CX 20751/20752 5b7a CX23418 Single-Chip MPEG-2 Encoder with Integrated Analog Video/Broadcast Audio Decoder 0070 7444 WinTV HVR-1600 107d 6f34 WinFast DVR3100 H 5854 3343 GoTView PCI DVD3 Hybrid 8200 CX25850 8234 RS8234 ATM SAR Controller [ServiceSAR Plus] 8800 CX23880/1/2/3 PCI Video and Audio Decoder 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models 0070 3400 WinTV 34604 0070 3401 Hauppauge WinTV 34xxx models 0070 6902 WinTV HVR-4000-HD 0070 7801 WinTV HVR-1800 MCE 0070 9001 Nova-T DVB-T 0070 9002 Nova-T DVB-T Model 909 0070 9200 Nova-SE2 DVB-S 0070 9202 Nova-S-Plus DVB-S 0070 9402 WinTV-HVR1100 DVB-T/Hybrid 0070 9600 WinTV 88x Video 0070 9802 WinTV-HVR1100 DVB-T/Hybrid (Low Profile) 1002 00f8 ATI TV Wonder Pro 1002 00f9 ATI TV Wonder 1002 a101 HDTV Wonder 1043 4823 PVR-416 107d 6611 Winfast TV 2000XP Expert 107d 6613 Leadtek Winfast 2000XP Expert 107d 6620 Leadtek Winfast DV2000 107d 663c Leadtek PVR 2000 107d 665f WinFast DTV1000-T 10fc d003 IODATA GV-VCP3/PCI 10fc d035 IODATA GV/BCTV7E 1421 0334 Instant TV DVB-T PCI 1461 000a AVerTV 303 (M126) 1461 000b AverTV Studio 303 (M126) 1461 8011 UltraTV Media Center PCI 550 1462 8606 MSI TV-@nywhere Master 14c7 0107 GDI Black Gold 14f1 0187 Conexant DVB-T reference design 14f1 0342 Digital-Logic MICROSPACE Entertainment Center (MEC) 153b 1166 Cinergy 1400 DVB-T 1540 2580 Provideo PV259 1554 4811 PixelView 1554 4813 Club 3D ZAP1000 MCE Edition 17de 08a1 KWorld/VStream XPert DVB-T with cx22702 17de 08a6 KWorld/VStream XPert DVB-T 17de 08b2 KWorld DVB-S 100 17de a8a6 digitalnow DNTV Live! DVB-T 1805 0111 PICOLO Jet-X Video 1805 0112 PICOLO Jet-X Video 1805 0113 PICOLO Jet-X Video 1805 0114 PICOLO Jet-X Video 1822 0025 digitalnow DNTV Live! DVB-T Pro 185b e000 VideoMate X500 18ac d500 FusionHDTV 5 Gold 18ac d810 FusionHDTV 3 Gold-Q 18ac d820 FusionHDTV 3 Gold-T 18ac db00 FusionHDTV DVB-T1 18ac db11 FusionHDTV DVB-T Plus 18ac db50 FusionHDTV DVB-T Dual Digital 5654 2388 GoTView PCI Hybrid TV Tuner Card 7063 3000 pcHDTV HD3000 HDTV 7063 5500 pcHDTV HD-5500 8801 CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models 185b e000 VideoMate X500 5654 2388 GoTView PCI Hybrid Audio AVStream Device 7063 5500 pcHDTV HD-5500 8802 CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models 0070 6902 WinTV HVR-4000-HD 0070 9002 Nova-T DVB-T Model 909 0070 9402 WinTV-HVR1100 DVB-T/Hybrid 0070 9600 WinTV 88x MPEG Encoder 1043 4823 PVR-416 107d 663c Leadtek PVR 2000 107d 665f WinFast DTV1000-T 14f1 0187 Conexant DVB-T reference design 17de 08a1 XPert DVB-T PCI BDA DVBT 23880 Transport Stream Capture 17de 08a6 KWorld/VStream XPert DVB-T 1805 0111 PICOLO Jet-X Jpeg 1805 0112 PICOLO Jet-X Jpeg 1805 0113 PICOLO Jet-X Jpeg 1805 0114 PICOLO Jet-X Jpeg 18ac d500 DViCO FusionHDTV5 Gold 18ac d810 DViCO FusionHDTV3 Gold-Q 18ac d820 DViCO FusionHDTV3 Gold-T 18ac db00 DVICO FusionHDTV DVB-T1 18ac db10 DVICO FusionHDTV DVB-T Plus 5654 2388 GoTView PCI Hybrid TS Capture Device 7063 3000 pcHDTV HD3000 HDTV 7063 5500 pcHDTV HD-5500 8804 CX23880/1/2/3 PCI Video and Audio Decoder [IR Port] 0070 6902 WinTV HVR-4000-HD 0070 9002 Nova-T DVB-T Model 909 0070 9402 WinTV-HVR1100 DVB-T/Hybrid 1805 0111 PICOLO Jet-X Control 1805 0112 PICOLO Jet-X Control 1805 0113 PICOLO Jet-X Control 1805 0114 PICOLO Jet-X Control 7063 5500 pcHDTV HD-5500 8811 CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] 0070 3400 WinTV 34604 0070 3401 Hauppauge WinTV 34xxx models 0070 6902 WinTV HVR-4000-HD 0070 9402 WinTV-HVR1100 DVB-T/Hybrid 0070 9600 WinTV 88x Audio 1462 8606 MSI TV-@nywhere Master 18ac d500 DViCO FusionHDTV5 Gold 18ac d810 DViCO FusionHDTV3 Gold-Q 18ac d820 DViCO FusionHDTV3 Gold-T 18ac db00 DVICO FusionHDTV DVB-T1 5654 2388 GoTView PCI Hybrid Audio Capture Device 8852 CX23885 PCI Video and Audio Decoder 0070 8010 WinTV HVR-1400 ExpressCard 0070 f038 WinTV HVR-5525 107d 6f22 WinFast PxTV1200 12ab d585 PE988J Hybrid ATSC/QAM PCI-E AVS Video Capture (SoftEncoder) 13c2 3013 TT-budget CT2-4500 CI 1461 c039 AVerTV Hybrid Express (A577) 153b 117e Cinergy T PCIe Dual 18ac db78 FusionHDTV DVB-T Dual Express 4254 0950 S950 4254 0952 S952 4254 0982 T982 4254 9580 T9580 4254 980c T980C 8880 CX23887/8 PCIe Broadcast Audio and Video Decoder with 3D Comb 0070 2259 WinTV HVR-1250 0070 6a18 WinTV-quadHD 0070 c108 WinTV-HVR-4400-HD model 1278 1461 3100 CE310B SD PCIe Video Capture Card 5654 2389 GoTView X5 DVD Hybrid PCI-E 5654 2390 GoTView X5 3D HYBRID PCI-E 14f2 MOBILITY Electronics 0120 EV1000 bridge 0121 EV1000 Parallel port 0122 EV1000 Serial port 0123 EV1000 Keyboard controller 0124 EV1000 Mouse controller 14f3 BroadLogic 2030 2030 DVB-S Satellite Receiver 2035 2035 DVB-S Satellite Receiver 2050 2050 DVB-T Terrestrial (Cable) Receiver 2060 2060 ATSC Terrestrial (Cable) Receiver 14f4 TOKYO Electronic Industry CO Ltd 14f5 SOPAC Ltd 14f6 COYOTE Technologies LLC 14f7 WOLF Technology Inc 14f8 AUDIOCODES Inc 2077 TP-240 dual span E1 VoIP PCI card 14f9 AG COMMUNICATIONS 14fa WANDEL & GOLTERMANN 14fb TRANSAS MARINE (UK) Ltd 14fc Quadrics Ltd 0000 QsNet Elan3 Network Adapter 0001 QsNetII Elan4 Network Adapter 0002 QsNetIII Elan5 Network Adapter 14fd JAPAN Computer Industry Inc 14fe ARCHTEK TELECOM Corp 14ff TWINHEAD INTERNATIONAL Corp 1500 DELTA Electronics, Inc 1360 RTL81xx RealTek Ethernet 1501 BANKSOFT CANADA Ltd 1502 MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd 1503 KAWASAKI LSI USA Inc 1504 KAISER Electronics 1505 ITA INGENIEURBURO FUR TESTAUFGABEN GmbH 1506 CHAMELEON Systems Inc # Should be HTEC Ltd, but there are no known HTEC chips and 1507 is already used by mistake by Motorola (see vendor ID 1057). 1507 Motorola ?? / HTEC 0001 MPC105 [Eagle] 0002 MPC106 [Grackle] 0003 MPC8240 [Kahlua] 0100 MC145575 [HFC-PCI] 0431 KTI829c 100VG 4801 Raven 4802 Falcon 4803 Hawk 4806 CPX8216 1508 HONDA CONNECTORS/MHOTRONICS Inc 1509 FIRST INTERNATIONAL Computer Inc 150a FORVUS RESEARCH Inc 150b YAMASHITA Systems Corp 150c KYOPAL CO Ltd 150d WARPSPPED Inc 150e C-PORT Corp 150f INTEC GmbH 1510 BEHAVIOR TECH Computer Corp 1511 CENTILLIUM Technology Corp 1512 ROSUN Technologies Inc 1513 Raychem 1514 TFL LAN Inc 1515 Advent design 1516 MYSON Technology Inc 0800 MTD-8xx 100/10M Ethernet PCI Adapter 0803 SURECOM EP-320X-S 100/10M Ethernet PCI Adapter 1320 10bd SURECOM EP-320X-S 100/10M Ethernet PCI Adapter 0891 MTD-8xx 100/10M Ethernet PCI Adapter 1517 ECHOTEK Corp # old ID, now 1059 1518 Kontron 1519 TELEFON AKTIEBOLAGET LM Ericsson 151a Globetek 1002 PCI-1002 1004 PCI-1004 1008 PCI-1008 151b COMBOX Ltd 151c DIGITAL AUDIO LABS Inc 0003 Prodif T 2496 4000 Prodif 88 151d Fujitsu Computer Products Of America 151e MATRIX Corp 151f TOPIC SEMICONDUCTOR Corp 0000 TP560 Data/Fax/Voice 56k modem 1520 CHAPLET System Inc 1521 BELL Corp 1522 MainPine Ltd 0100 PCI <-> IOBus Bridge 1522 0200 RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem 1522 0300 RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem 1522 0400 RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem 1522 0500 RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem 1522 0600 RockForce+ 2 Port V.90 Data/Fax/Voice Modem 1522 0700 RockForce+ 4 Port V.90 Data/Fax/Voice Modem 1522 0800 RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem 1522 0c00 RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem 1522 0d00 RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem 1522 1d00 RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem 1522 2000 RockForceD1 1 Port V.90 Data Modem 1522 2100 RockForceF1 1 Port V.34 Super-G3 Fax Modem 1522 2200 RockForceD2 2 Port V.90 Data Modem 1522 2300 RockForceF2 2 Port V.34 Super-G3 Fax Modem 1522 2400 RockForceD4 4 Port V.90 Data Modem 1522 2500 RockForceF4 4 Port V.34 Super-G3 Fax Modem 1522 2600 RockForceD8 8 Port V.90 Data Modem 1522 2700 RockForceF8 8 Port V.34 Super-G3 Fax Modem 1522 3000 IQ Express D1 - 1 Port V.92 Data Modem 1522 3100 IQ Express F1 - 1 Port V.34 Super-G3 Fax Modem 1522 3200 IQ Express D2 - 2 Port V.92 Data Modem 1522 3300 IQ Express F2 - 2 Port V.34 Super-G3 Fax Modem 1522 3400 IQ Express D4 - 4 Port V.92 Data Modem 1522 3500 IQ Express F4 - 4 Port V.34 Super-G3 Fax Modem 1522 3c00 IQ Express D8 - 8 Port V.92 Data Modem 1522 3d00 IQ Express F8 - 8 Port V.34 Super-G3 Fax Modem 4000 PCI Express UART 1522 4001 IQ Express 1-port V.34 Super-G3 Fax 1522 4002 IQ Express 2-port V.34 Super-G3 Fax 1522 4004 IQ Express 4-port V.34 Super-G3 Fax 1522 4008 IQ Express 8-port V.34 Super-G3 Fax 1522 4100 IQ Express SideBand 1523 MUSIC Semiconductors 1524 ENE Technology Inc 0510 CB710 Memory Card Reader Controller 103c 006a NX9500 0520 FLASH memory: ENE Technology Inc: 0530 ENE PCI Memory Stick Card Reader Controller 0550 ENE PCI Secure Digital Card Reader Controller 0551 SD/MMC Card Reader Controller 0610 PCI Smart Card Reader Controller 0720 Memory Stick Card Reader Controller 0730 ENE PCI Memory Stick Card Reader Controller 0750 ENE PCI SmartMedia / xD Card Reader Controller 0751 ENE PCI Secure Digital / MMC Card Reader Controller 1211 CB1211 Cardbus Controller 1225 CB1225 Cardbus Controller 1410 CB1410 Cardbus Controller 1025 003c CL50 motherboard 1025 005a TravelMate 290 103c 30d5 530 Laptop 1411 CB-710/2/4 Cardbus Controller 103c 006a NX9500 1412 CB-712/4 Cardbus Controller 1420 CB1420 Cardbus Controller 1421 CB-720/2/4 Cardbus Controller 1422 CB-722/4 Cardbus Controller 1525 IMPACT Technologies 1526 ISS, Inc 1527 SOLECTRON 1528 ACKSYS # nee American Microsystems Inc 1529 ON Semiconductor 152a QUICKTURN DESIGN Systems 152b FLYTECH Technology CO Ltd 152c MACRAIGOR Systems LLC 152d QUANTA Computer Inc 152e MELEC Inc 152f PHILIPS - CRYPTO 1530 ACQIS Technology Inc 1531 CHRYON Corp 1532 ECHELON Corp 0020 LonWorks PCLTA-20 PCI LonTalk Adapter 1533 BALTIMORE 1534 ROAD Corp 1535 EVERGREEN Technologies Inc 1536 ACTIS Computer 1537 DATALEX COMMUNCATIONS 1538 ARALION Inc 0303 ARS106S Ultra ATA 133/100/66 Host Controller 1539 ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A. 153a ONO SOKKI 153b TERRATEC Electronic GmbH 1144 Aureon 5.1 # Terratec seems to use several IDs for the same card. 1147 Aureon 5.1 Sky 1158 Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV] 153c ANTAL Electronic 153d FILANET Corp 153e TECHWELL Inc 153f MIPS Technologies, Inc. 0001 SOC-it 101 System Controller 1540 PROVIDEO MULTIMEDIA Co Ltd 1541 MACHONE Communications # nee VIVID Technology Inc. 1542 Concurrent Real-Time 9260 RCIM-II Real-Time Clock & Interrupt Module 9271 RCIM-III Real-Time Clock & Interrupt Module (PCIe) 9272 Pulse Width Modulator Card 9273 RCIM-IV Real-Time Clock & Interrupt Module (PCIe) 9277 5 Volt Delta Sigma Converter Card 9278 10 Volt Delta Sigma Converter Card 9287 Analog Output Card 9290 FPGA Card 9300 Universal Exhaust Gas Oxygen Sensor Simulator 9310 Digital Programmable Resistor 9320 Arria 10 FPGA Card 9330 Cyclone V FPGA Card 9350 Analog Input Card 1543 SILICON Laboratories 3052 Intel 537 [Winmodem] 4c22 Si3036 MC'97 DAA 1544 DCM DATA Systems 1545 VISIONTEK 1546 IOI Technology Corp 1547 MITUTOYO Corp 1548 JET PROPULSION Laboratory 1549 INTERCONNECT Systems Solutions 154a MAX Technologies Inc 154b COMPUTEX Co Ltd 154c VISUAL Technology Inc 154d PAN INTERNATIONAL Industrial Corp 154e SERVOTEST Ltd 154f STRATABEAM Technology 1550 OPEN NETWORK Co Ltd 1551 SMART Electronic DEVELOPMENT GmBH 1552 RACAL AIRTECH Ltd 1553 CHICONY Electronics Co Ltd 1554 PROLINK Microsystems Corp 1555 GESYTEC GmBH 1556 PLDA 1100 PCI Express Core Reference Design 110f PCI Express Core Reference Design Virtual Function 1110 XpressRich Reference Design 1111 XpressRich-AXI Ref Design 1112 QuickPCIe 1113 XpressSwitch 1114 Inspector 1115 XpressLINK Ref Design 1116 XpressLINK-SOC Ref Design be00 PCI Express Bridge 1557 MEDIASTAR Co Ltd 1558 CLEVO/KAPOK Computer 9602 RS780/RS880 PCI to PCI bridge (int gfx) 1559 SI LOGIC Ltd 155a INNOMEDIA Inc 155b PROTAC INTERNATIONAL Corp 155c Cemax-Icon Inc 155d Mac System Co Ltd 155e LP Elektronik GmbH 155f Perle Systems Ltd 1560 Terayon Communications Systems 1561 Viewgraphics Inc 1562 Symbol Technologies 1563 A-Trend Technology Co Ltd 1564 Yamakatsu Electronics Industry Co Ltd 1565 Biostar Microtech Int'l Corp 1566 Ardent Technologies Inc 1567 Jungsoft 1568 DDK Electronics Inc 1569 Palit Microsystems Inc. 156a Avtec Systems 156b 2wire Inc 156c Vidac Electronics GmbH 156d Alpha-Top Corp 156e Alfa Inc 156f M-Systems Flash Disk Pioneers Ltd 1570 Teledyne Lecroy 1571 Contemporary Controls a001 CCSI PCI20-485 ARCnet a002 CCSI PCI20-485D ARCnet a003 CCSI PCI20-485X ARCnet a004 CCSI PCI20-CXB ARCnet a005 CCSI PCI20-CXS ARCnet a006 CCSI PCI20-FOG-SMA ARCnet a007 CCSI PCI20-FOG-ST ARCnet a008 CCSI PCI20-TB5 ARCnet a009 CCSI PCI20-5-485 5Mbit ARCnet a00a CCSI PCI20-5-485D 5Mbit ARCnet a00b CCSI PCI20-5-485X 5Mbit ARCnet a00c CCSI PCI20-5-FOG-ST 5Mbit ARCnet a00d CCSI PCI20-5-FOG-SMA 5Mbit ARCnet a201 CCSI PCI22-485 10Mbit ARCnet a202 CCSI PCI22-485D 10Mbit ARCnet a203 CCSI PCI22-485X 10Mbit ARCnet a204 CCSI PCI22-CHB 10Mbit ARCnet a205 CCSI PCI22-FOG_ST 10Mbit ARCnet a206 CCSI PCI22-THB 10Mbit ARCnet 1572 Otis Elevator Company 1573 Lattice - Vantis 1574 Fairchild Semiconductor 1575 Voltaire Advanced Data Security Ltd 1576 Viewcast COM 1578 HITT 4d34 VPMK4 [Video Processor Mk IV] 5615 VPMK3 [Video Processor Mk III] 1579 Dual Technology Corp 157a Japan Elecronics Ind Inc 157b Star Multimedia Corp 157c Eurosoft (UK) 8001 Fix2000 PCI Y2K Compliance Card 157d Gemflex Networks 157e Transition Networks 157f PX Instruments Technology Ltd 1580 Primex Aerospace Co 1581 SEH Computertechnik GmbH 1582 Cytec Corp 1583 Inet Technologies Inc 1584 Uniwill Computer Corp 1585 Logitron 1586 Lancast Inc 1587 Konica Corp 1588 Solidum Systems Corp 1589 Atlantek Microsystems Pty Ltd 0008 Leutron Vision PicPortExpress CL 0009 Leutron Vision PicPortExpress CL Stereo 158a Digalog Systems Inc 158b Allied Data Technologies 158c Hitachi Semiconductor & Devices Sales Co Ltd 158d Point Multimedia Systems 158e Lara Technology Inc 158f Ditect Coop # formerly 3PAR Inc. 1590 Hewlett Packard Enterprise 0001 Eagle Cluster Manager 0002 Osprey Cluster Manager 0003 Harrier Cluster Manager 0371 Cassini 2 [Slingshot 400Gb] 0372 Cassini 2 [Slingshot 400Gb] SR-IOV VF a01d FC044X Fibre Channel HBA 1591 ARN 1592 Syba Tech Ltd 0781 Multi-IO Card 0782 Parallel Port Card 2xEPP 0783 Multi-IO Card 0785 Multi-IO Card 0786 Multi-IO Card 0787 Multi-IO Card 0788 Multi-IO Card 078a Multi-IO Card 1593 Bops Inc 1594 Netgame Ltd 1595 Diva Systems Corp 1596 Folsom Research Inc 1597 Memec Design Services 1598 Granite Microsystems 1599 Delta Electronics Inc 159a General Instrument 159b Faraday Technology Corp 4321 StorLink SL3516 (Gemini) Host Bridge 159c Stratus Computer Systems 159d Ningbo Harrison Electronics Co Ltd 159e A-Max Technology Co Ltd 159f Galea Network Security 15a0 Compumaster SRL 15a1 Geocast Network Systems 15a2 Catalyst Enterprises Inc 0001 TA700 PCI Bus Analyzer/Exerciser 15a3 Italtel 15a4 X-Net OY 15a5 Toyota Macs Inc 15a6 Sunlight Ultrasound Technologies Ltd 15a7 SSE Telecom Inc 15a8 Shanghai Communications Technologies Center 15aa Moreton Bay 15ab Bluesteel Networks Inc 15ac North Atlantic Instruments 6893 3U OpenVPX Multi-function I/O Board [Model 68C3] 15ad VMware 0405 SVGA II Adapter 0406 SVGA II Adapter (Fusion) 0710 SVGA Adapter 0720 VMXNET Ethernet Controller 0740 Virtual Machine Communication Interface 0770 USB2 EHCI Controller 0774 USB1.1 UHCI Controller 0778 USB3 xHCI 0.96 Controller 0779 USB3 xHCI 1.0 Controller 0790 PCI bridge 07a0 PCI Express Root Port 07b0 VMXNET3 Ethernet Controller 07c0 PVSCSI SCSI Controller 07e0 SATA AHCI controller 07f0 NVMe SSD Controller 0801 Virtual Machine Interface 15ad 0800 Hypervisor ROM Interface 0820 Paravirtual RDMA controller 1977 HD Audio Controller 15ae Amersham Pharmacia Biotech 15b0 Zoltrix International Ltd 15b1 Source Technology Inc 15b2 Mosaid Technologies Inc # now NVIDIA 15b3 Mellanox Technologies 0191 MT25408 [ConnectX IB Flash Recovery] 01f6 MT27500 Family [ConnectX-3 Flash Recovery] 01f8 MT27520 Family [ConnectX-3 Pro Flash Recovery] 01ff MT27600 Family [Connect-IB Flash Recovery] 0209 MT27700 Family [ConnectX-4 Flash Recovery] 020b MT27710 Family [ConnectX-4 Lx Flash Recovery] 020d MT28800 Family [ConnectX-5 Flash Recovery] 020f MT28908A0 Family [ConnectX-6 Flash Recovery] 0210 MT28908A0 Family [ConnectX-6 Secure Flash Recovery] 0211 MT416842 Family [BlueField SoC Flash Recovery] 0212 MT2892 Family [ConnectX-6 Dx Flash Recovery] 0213 MT2892 Family [ConnectX-6 Dx Secure Flash Recovery] 0214 MT42822 Family [BlueField-2 SoC Flash Recovery] 0215 MT42822 Family [BlueField-2 Secure Flash Recovery] 0216 MT2894 Family [ConnectX-6 Lx Flash Recovery] 0217 MT2894 Family [ConnectX-6 Lx Secure Flash Recovery] 0218 MT2910 Family [ConnectX-7 Flash Recovery] 0219 MT2910 Family [ConnectX-7 Secure Flash Recovery] 021a MT43162 Family [BlueField-3 Lx SoC Flash Recovery] 021b MT43162 Family [BlueField-3 Lx Secure Flash Recovery] 021c MT43244 Family [BlueField-3 SoC Flash Recovery] 021d MT43244 Family [BlueField-3 Secure Flash Recovery] 021e CX8 Family [ConnectX-8 Flash Recovery] 021f CX8 Family [ConnectX-8 Secure Flash Recovery] 0220 BF4 Family Flash Recovery [BlueField-4 SoC Flash Recovery] 0221 BF4 Family Secure Flash Recovery [BlueField-4 Secure Flash Recovery] 0222 CX8 PCIe Switch Family [ConnectX-8 PCIe Switch Flash Recovery] 0223 CX8 PCIe Switch Family [ConnectX-8 PCIe Switch Secure Flash Recovery-RMA] 0224 CX9 Family [ConnectX-9 Flash Recovery] 0225 CX9 Family [ConnectX-9 Secure Flash Recovery-RMA] 0226 CX10 Family [ConnectX-10 Flash Recovery] 0227 CX10 Family [ConnectX-10 Secure Flash Recovery-RMA] 0228 CX9 PCIe Switch Family [ConnectX-9 PCIe Switch Flash Recovery] 0229 CX9 PCIe Switch Family [ConnectX-9 PCIe Switch Secure Flash Recovery-RMA] 024e MT53100 [Spectrum-2, Flash recovery mode] 024f MT53100 [Spectrum-2, Secure Flash recovery mode] 0250 Spectrum-3, Flash recovery mode 0251 Spectrum-3, Secure Flash recovery mode 0252 Amos chiplet 0253 Amos GearBox Manager 0254 Spectrum-4, Flash recovery mode 0255 Spectrum-4 RMA 0256 Abir GearBox 0257 Quantum-2 in Flash Recovery Mode 0258 Quantum-2 RMA 0259 Abir Chiplet 025b Quantum-3 in Flash Recovery Mode 025c Quantum-3 RMA 025d Quantum-3CPO in Flash Recovery Mode 025e Quantum-3CPO RMA 0262 MT27710 [ConnectX-4 Lx Programmable] EN 0263 MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN 0264 Innova-2 Flex Burn image 0270 Spectrum-5 in Flash Recovery Mode 0271 Spectrum-5 RMA 0274 Spectrum-6 in Flash Recovery Mode 0275 Spectrum-6 RMA 0277 Spectrum-6 Tile 0278 Quantum-4 in Flash Recovery Mode 0279 Quantum-4 RMA 027a Eros Chiplet 027c Quantum-5 in Flash Recovery Mode 027d Quantum-5 RMA 0281 NPS-600 Flash Recovery 0282 ArcusE Flash recovery 0283 ArcusE RMA 0284 Sagitta 0285 Sagitta RMA 0286 LibraE Flash Recovery 0287 LibraE RMA # Flash recovery 0288 Arcus2 0289 Arcus2 RMA 0290 SagittaZ 0292 Arcus3 Flash Recovery 0293 Arcus3 RMA 0294 Ophy 2.1 (SagittaZ) # Sagitta 0296 OPHY2.6 # Sagitta 0298 OPHY3.0 # Sagitta 029a OPHY3.1 # Sagitta 029c OPHY3.5 02a0 Quantum-6 in Flash Recovery Mode 02a1 Quantum-6 RMA 02a2 Spectrum-7 in Flash Recovery Mode 02a3 Spectrum-7 RMA 1002 MT25400 Family [ConnectX-2 Virtual Function] 1003 MT27500 Family [ConnectX-3] 1014 04b5 PCIe3 40GbE RoCE Converged Host Bus Adapter for Power 103c 1777 InfiniBand FDR/EN 10/40Gb Dual Port 544FLR-QSFP Adapter (Rev Cx) 103c 17c9 Infiniband QDR/Ethernet 10Gb 2-port 544i Adapter 103c 18ce InfiniBand QDR/EN 10Gb Dual Port 544M Adapter 103c 18cf InfiniBand FDR/EN 10/40Gb Dual Port 544M Adapter 103c 18d6 InfiniBand FDR/EN 10/40Gb Dual Port 544QSFP Adapter 15b3 0025 ConnectX-3 IB QDR Dual Port Mezzanine Card 15b3 0026 ConnectX-3 IB FDR Dual Port Mezzanine Card 15b3 0028 ConnectX-3 VPI Dual QSFP+ Port QDR Infiniband 40Gb/s or 10Gb Ethernet 15b3 0055 ConnectX-3 10 GbE Single Port SFP+ Adapter 15b3 0059 ConnectX-3 VPI IB FDR/40 GbE Single Port QSFP+ Mezzanine Card 15b3 0064 ConnectX-3 EN 10/40 GbE Single Port QSFP+ Adapter (MCX313A-BCBT) 15b3 0065 ConnectX-3 VPI IB FDR/40 GbE Dual Port QSFP+ Adapter 15b3 0066 ConnectX-3 IB FDR10 Dual Port Mezzanine Card 15b3 0067 ConnectX-3 VPI IB FDR/40 GbE Single Port QSFP+ Adapter 15b3 0071 ConnectX-3 VPI IB FDR/40 GbE Dual Port QSFP+ Mezzanine Card 15b3 0078 ConnectX-3 10 GbE Dual Port KR Mezzanine Card 15b3 0079 ConnectX-3 40 GbE Dual Port QSFP+ Adapter 15b3 0080 ConnectX-3 10 GbE Dual Port SFP+ Adapter 1004 MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function] 1005 MT27510 Family 1006 MT27511 Family 1007 MT27520 Family [ConnectX-3 Pro] 1014 04eb 2-Port 10GbE NIC and RoCE SR PCIe3 103c 22f3 InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+QSFP Adapter 103c 22f4 InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP Adapter 103c 801f Ethernet 10G 2-port 546SFP+ Adapter 117c 0090 FastFrame NQ41 117c 0091 FastFrame NQ42 117c 0092 FastFrame NQ11 117c 0093 FastFrame NQ12 15b3 0006 Mellanox Technologies ConnectX-3 Pro Stand-up dual-port 40GbE MCX314A-BCCT 15b3 000c ConnectX-3 Pro 10 GbE Dual Port SFP+ Adapter revision A1 15b3 0078 ConnectX-3 Pro 10 GbE Dual Port KR Mezzanine Card 15b3 0079 ConnectX-3 Pro 40 GbE Dual Port QSFP+ Adapter 15b3 0080 ConnectX-3 Pro 10 GbE Dual Port SFP+ Adapter 193d 1002 520F-B 1009 MT27530 Family 100a MT27531 Family 100b MT27540 Family 100c MT27541 Family 100d MT27550 Family 100e MT27551 Family 100f MT27560 Family 1010 MT27561 Family 1011 MT27600 [Connect-IB] 1012 MT27600 Family [Connect-IB Virtual Function] 1013 MT27700 Family [ConnectX-4] 1014 04f7 PCIe3 2-port 100 GbE (NIC and RoCE) QSFP28 Adapter for Power 117c 00af FastFrame N351 Single-port 50Gb Ethernet Adapter 117c 00b0 FastFrame N352 Dual-port 50Gb Ethernet Adapter 15b3 0003 Mellanox Technologies ConnectX-4 Stand-up single-port 40GbE MCX413A-BCAT 15b3 0005 Mellanox Technologies ConnectX-4 Stand-up single-port 40GbE MCX415A-BCAT 15b3 0006 MCX416A-BCAT, ConnectX-4 EN, 40/56GbE 2P, PCIe3.0 x16 15b3 0007 ConnectX-4 EN network interface card, 40/56GbE dual-port QSFP28, PCIe3.0 x16, tall bracket 15b3 0008 ConnectX-4 Stand-up dual-port 100GbE MCX416A-CCAT 15b3 0033 ConnectX-4 VPI IB EDR/100 GbE Single Port QSFP28 Adapter 15b3 0034 ConnectX-4 VPI IB EDR/100 GbE Dual Port QSFP28 Adapter 15b3 0050 ConnectX-4 100 GbE Dual Port QSFP28 Adapter 1014 MT27700 Family [ConnectX-4 Virtual Function] 1015 MT27710 Family [ConnectX-4 Lx] 117c 00b4 FastFrame N322 Dual-port 25Gb Ethernet Adapter 117c 40b7 ThunderLink TLN3-3252 Dual-port 25Gb Ethernet Adapter 117c 40b8 ThunderLink TLN3-3102 Dual-port 10Gb Ethernet Adapter 15b3 0001 ConnectX-4 Lx EN network interface card, 25GbE single-port SFP28, PCIe3.0 x8, tall bracket, ROHS R6 15b3 0003 Stand-up ConnectX-4 Lx EN, 25GbE dual-port SFP28, PCIe3.0 x8, MCX4121A-ACAT 15b3 0004 ConnectX-4 Lx Stand-up dual-port 10GbE MCX4121A-XCAT 15b3 0005 Mellanox Technologies ConnectX-4 Lx Stand-up single-port 40GbE MCX4131A-BCAT 15b3 0020 MCX4411A-ACQN, ConnectX-4 Lx EN OCP, 1x25Gb 15b3 0021 MCX4421A-ACQN ConnectX-4 Lx EN OCP,2x25G 15b3 0025 ConnectX-4 Lx 25 GbE Dual Port SFP28 rNDC 193d 100a 620F-B # NIC-ETH540F-LP-2P SFP+ Ethernet Card 193d 1023 NIC-ETH540F-LP-2P 193d 1031 NIC-ETH640i-Mb-2x25G # NIC-ETH640F-3S-2P OCP3.0 Card 193d 1083 NIC-ETH640F-3S-2P # NIC-ETH540F-3S-2P OCP3.0 2x10G Card 193d 1084 NIC-ETH540F-3S-2P 1e81 0c10 25GbE dual-port SFP28, PCIe3.0 x8 [3SC10] 1f3f 0c10 25GbE dual-port SFP28, PCIe3.0 x8, 3SC10 1016 MT27710 Family [ConnectX-4 Lx Virtual Function] 1017 MT27800 Family [ConnectX-5] 117c 00b1 FastFrame N311 Single-port 10Gb Ethernet Adapter 117c 00b2 FastFrame N312 Dual-port 10Gb Ethernet Adapter 15b3 0006 ConnectX-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT 15b3 0007 Mellanox ConnectX-5 MCX516A-CCAT 15b3 0020 ConnectX-5 EN network interface card, 10/25GbE dual-port SFP28, PCIe3.0 x8, tall bracket ; MCX512A-ACAT 15b3 0068 ConnectX-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN 193d 1051 NIC-IB1040i-Mb-2P 1018 MT27800 Family [ConnectX-5 Virtual Function] 1019 MT28800 Family [ConnectX-5 Ex] 1014 0617 PCIe4 x16 2-Port EDR IB-only ConnectX-5 CAPI Capable Adapter [IBM EC64] 1014 0635 PCIe4 2-port 100 GbE RoCE x16 adapter [IBM EC66] 15b3 0008 ConnectX-5 Ex EN network interface card, 100GbE dual-port QSFP28, PCIe4.0 x16, tall bracket; MCX516A-CDAT 15b3 0125 Tencent ConnectX-5 EN Ex network interface card for OCP 3.0, with host management, 50GbE Dual-port QSFP28, PCIe4.0 x16, Thumbscrew (pull-tab) bracket 15b3 0126 PCIe4 x16 2-port EDR 100GbE ConnectX-5 CAPI Capable adapter [IBM AJP1] 101a MT28800 Family [ConnectX-5 Ex Virtual Function] 101b MT28908 Family [ConnectX-6] 101c MT28908 Family [ConnectX-6 Virtual Function] 101d MT2892 Family [ConnectX-6 Dx] 193d 1055 NIC-ETH1040F-LP-2P QSFP56 2x100GbE PCIe Network Adapter 101e ConnectX Family mlx5Gen Virtual Function 101f MT2894 Family [ConnectX-6 Lx] 193d 1035 NIC-ETH641F-LP-2P SFP28 2x25GbE PCIe Network Adapter 1bd4 00ac O252MCX6Lx 1bd4 00ae S252MCX6Lx 1f3f 0c11 25GbE dual-port SFP28, PCIe4.0 x8, 3SC1125GbE dual-port SFP28, PCIe4.0 x8, 3SC11 1ff9 00ad ENFM6251-SP2 1ff9 00af ENPM6251-SP2 1020 MT28860 1021 MT2910 Family [ConnectX-7] 1023 CX8 Family [ConnectX-8] 1024 CX8 PCIe Switch Family [ConnectX-8 PCIe Switch] 1025 CX9 Family [ConnectX-9] 1027 CX10 Family [ConnectX-10] 1974 MT28800 Family [ConnectX-5 PCIe Bridge] 1975 MT416842 Family [BlueField SoC PCIe Bridge] 1976 MT28908 Family [ConnectX-6 PCIe Bridge] 1977 MT2892 Family [ConnectX-6 Dx PCIe Bridge] 1978 MT42822 Family [BlueField-2 SoC PCIe Bridge] 1979 MT2910 Family [ConnectX-7 PCIe Bridge] 197a MT43162 Family [BlueField-3 Lx SoC PCIe Bridge] 197b MT43244 Family [BlueField-3 SoC PCIe Bridge] 197c ConnectX/BlueField Family mlx5Gen PCIe Bridge [PCIe Bridge] 197d CX8 Family [ConnectX-8 PCIe Bridge] 197e CX9 Family [ConnectX-9 PCIe Bridge] 197f CX10 Family [ConnectX-10 PCIe Bridge] 2020 MT2892 Family [ConnectX-6 Dx Emulated PCIe Bridge] 2021 MT42822 Family [BlueField-2 SoC Emulated PCIe Bridge] 2023 MT2910 Family [ConnectX-7 Emulated PCIe Bridge] 2024 MT43244 Family [BlueField-3 SoC Emulated PCIe Bridge] 2025 ConnectX/BlueField Family mlx5Gen Emulated PCIe Bridge [Emulated PCIe Bridge] 2100 CX8 Family [CX8 Data Direct Interface] 4117 MT27712A0-FDCF-AE 1bd4 0039 SN10XMP2P25 1bd4 003a 25G SFP28 SP EO251FM9 Adapter 1bd4 004d SN10XMP2P25,YZPC-01191-101 5274 MT21108 InfiniBridge 5a44 MT23108 InfiniHost 5a45 MT23108 [Infinihost HCA Flash Recovery] 5a46 MT23108 PCI Bridge 5e8c MT24204 [InfiniHost III Lx HCA] 5e8d MT25204 [InfiniHost III Lx HCA Flash Recovery] 6001 NVMe SNAP Controller 6274 MT25204 [InfiniHost III Lx HCA] 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) 6279 MT25208 [InfiniHost III Ex HCA Flash Recovery] 6282 MT25208 [InfiniHost III Ex] 6340 MT25408A0-FCC-SI ConnectX, Dual Port 10Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 2.5GT/s Interface 634a MT25408A0-FCC-DI ConnectX, Dual Port 20Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 2.5GT/s Interface 1014 1014 4X InfiniBand DDR Expansion Card (CFFh) for IBM BladeCenter 6368 MT25448 [ConnectX EN 10GigE, PCIe 2.0 2.5GT/s] 6372 MT25458 ConnectX EN 10GBASE-T PCIe 2.5 GT/s 6732 MT25408A0-FCC-GI ConnectX, Dual Port 20Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 5.0GT/s Interface 673c MT25408A0-FCC-QI ConnectX, Dual Port 40Gb/s InfiniBand / 10GigE Adapter IC with PCIe 2.0 x8 5.0GT/s Interface 1014 0415 PCIe2 2-port 4X InfiniBand QDR Adapter for Power 1014 0487 GX++ 1-port 4X IB QDR Adapter for Power 795 103c 1782 4X QDR InfiniBand Mezzanine HCA for c-Class BladeSystem 15b3 0021 HP InfiniBand 4X QDR CX-2 PCI-e G2 Dual Port HCA 6746 MT26438 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE Virtualization+] 103c 1781 NC543i 1-port 4x QDR IB/Flex-10 10Gb Adapter 103c 3349 NC543i 2-port 4xQDR IB/10Gb Adapter 6750 MT26448 [ConnectX EN 10GigE, PCIe 2.0 5GT/s] 1014 0416 PCIe2 2-Port 10GbE RoCE SFP+ Adapter 1014 0461 PCIe2 2-Port 10GbE RoCE SR Adapter 15b3 0018 HP 10 GbE PCI-e G2 Dual-Port NIC (rev C1) # FC EC26 15b3 6572 IBM Flex System EN4132 2-port 10Gb RoCE Adapter 675a MT26458 ConnectX EN 10GBASE-T PCIe Gen2 5.0 GT/s 6764 MT26468 [ConnectX EN 10GigE, PCIe 2.0 5GT/s Virtualization+] 103c 3313 NC542m Dual Port Flex-10 10GbE BLc Adapter 676e MT26478 [ConnectX EN 40GigE, PCIe 2.0 5GT/s] 6778 MT26488 [ConnectX VPI PCIe 2.0 5GT/s - IB DDR / 10GigE Virtualization+] 7101 NPS-400 configuration and management interface 7102 NPS-400 network interface PF 7103 NPS-400 network interface VF 7121 NPS-600 configuration and management interface 7122 NPS-600 network interface PF 7123 NPS-600 network interface VF 8200 Innova-2 Flex Shell Logic a2d0 MT416842 BlueField SoC Crypto enabled a2d1 MT416842 BlueField SoC Crypto disabled a2d2 MT416842 BlueField integrated ConnectX-5 network controller a2d3 MT416842 BlueField multicore SoC family VF a2d4 MT42822 BlueField-2 SoC Crypto enabled a2d5 MT42822 BlueField-2 SoC Crypto disabled a2d6 MT42822 BlueField-2 integrated ConnectX-6 Dx network controller a2d7 MT43162 BlueField-3 Lx SoC Crypto enabled a2d8 MT43162 BlueField-3 Lx SoC Crypto disabled a2d9 MT43162 BlueField-3 Lx integrated ConnectX-7 network controller a2da MT43244 BlueField-3 SoC Crypto enabled a2db MT43244 BlueField-3 SoC Crypto disabled a2dc MT43244 BlueField-3 integrated ConnectX-7 network controller a2dd BF4 Family Crypto enabled [BlueField-4 SoC Crypto enabled] a2de BF4 Family Crypto disabled [BlueField-4 SoC Crypto disabled] a2df BF4 Family integrated network controller [BlueField-4 integrated network controller] b200 ArcusE b201 LibraE b202 Arcus2 b203 Arcus3 c2d1 BlueField DPU Family Auxiliary Communication Channel [BlueField Family] c2d2 MT416842 BlueField SoC management interfac c2d3 MT42822 BlueField-2 SoC Management Interface c2d4 MT43162 BlueField-3 Lx SoC Management Interface c2d5 MT43244 BlueField-3 SoC Management Interface c2d6 BF4 Family Management Interface [BlueField-4 SoC Management Interface] # SwitchX-2, 40GbE switch c738 MT51136 c739 MT51136 GW c838 MT52236 c839 MT52236 router caf1 ConnectX-4 CAPI Function # Spectrum, 100GbE Switch cb84 MT52100 cf08 Switch-IB2 cf6c MT53100 [Spectrum-2] cf70 Spectrum-3 cf80 Spectrum-4 cf82 Spectrum-5 cf84 Spectrum-6 cf86 Spectrum-7 d2f0 Quantum HDR (200Gbps) switch d2f2 Quantum-2 NDR (400Gbps) switch d2f4 Quantum-3 d2f6 Quantum-3CPO d2f8 Quantum-4 d2fa Quantum-5 d2fc Quantum-6 15b4 CCI/TRIAD 15b5 Cimetrics Inc 15b6 Texas Memory Systems Inc 0001 XP15 DSP Accelerator 0002 XP30 DSP Accelerator 0003 XP00 Data Acquisition Device 0004 XP35 DSP Accelerator 0007 XP100 DSP Accelerator [XP100-T0] 0008 XP100 DSP Accelerator [XP100-T1] 0009 XP100 DSP Accelerator [XP100-E0] 000a XP100 DSP Accelerator [XP100-E1] 000e XP100 DSP Accelerator [XP100-0] 000f XP100 DSP Accelerator [XP100-1] 0010 XP100 DSP Accelerator [XP100-P0] 0011 XP100 DSP Accelerator [XP100-P1] 0012 XP100 DSP Accelerator [XP100-P2] 0013 XP100 DSP Accelerator [XP100-P3] 0014 RamSan Flash SSD 0015 ZBox 15b7 Sandisk Corp 2001 Skyhawk Series NVME SSD 5001 WD Black NVMe SSD 5002 SanDisk Extreme Pro / WD Black 2018/SN750/PC SN720 NVMe SSD 5003 WD Blue SN500 / PC SN520 x2 M.2 2280 NVMe SSD 5004 PC SN520 x2 M.2 2230 NVMe SSD 5005 PC SN520 x2 M.2 2242 NVMe SSD 5006 SanDisk Extreme Pro / WD Black SN750 / PC SN730 / Red SN700 NVMe SSD 5007 IX SN530 NVMe SSD (DRAM-less) 5008 PC SN530 NVMe SSD (DRAM-less) 5009 SanDisk Ultra 3D / WD PC SN530, IX SN530, Blue SN550 NVMe SSD (DRAM-less) 15b7 5009 WD Blue SN550 NVMe SSD 500b PC SN530 NVMe SSD 1414 500b Xbox Series X 500d WD Ultrastar DC SN340 NVMe SSD 5011 WD PC SN810 / Black SN850 NVMe SSD 5014 WD PC SN540 / Green SN350 NVMe SSD 1 TB (DRAM-less) 5015 PC SN740 NVMe SSD (DRAM-less) 5016 WD PC SN740 NVMe SSD 512GB (DRAM-less) 5017 WD SN560/SN740/SN770/SN5000 NVMe SSD 5019 WD Green SN350 240GB (DRAM-less) / SN560E NVMe SSD 501a SanDisk Ultra 3D / WD Blue SN570 NVMe SSD (DRAM-less) 501d WD Blue SN550 NVMe SSD 2TB (DRAM-less) 501e PC SN735 / WD_BLACK SN750 SE NVMe SSD (DRAM-less) 501f WD PC SN735 NVMe SSD 512GB (DRAM-less) 5025 WD Blue SN570 NVMe SSD 2TB 5026 WD PC SN735 NVMe SSD 1TB (DRAM-less) 5028 WD CH SN560 NVMe SSD 5030 WD Black SN850X NVMe SSD 5034 WD PC SN5000S M.2 2230 NVMe SSD (DRAM-less) 5035 WD PC SN5000S M.2 2242 NVMe SSD (DRAM-less) 5036 WD PC SN5000S M.2 2280 NVMe SSD (DRAM-less) 5041 WD Blue SN580 NVMe SSD (DRAM-less) 5042 WD Black SN770M NVMe SSD (DRAM-less) 5044 WD PC SN7100S NVMe SSD (DRAM-less) 5045 WD_BLACK SN7100 NVMe SSD (DRAM-less) 5046 SanDisk Extreme NVMe SSD (DRAM-less) 5049 SN8000S NVMe SSD 504a WD Blue SN5000 NVMe SSD (DRAM-less) 5050 WD PC SN8050S / WD_BLACK SN8100 NVMe SSD 15b8 ADDI-DATA GmbH 1001 APCI1516 SP controller (16 digi outputs) 1003 APCI1032 SP controller (32 digi inputs w/ opto coupler) 1004 APCI2032 SP controller (32 digi outputs) 1005 APCI2200 SP controller (8/16 digi outputs (relay)) 1006 APCI1564 SP controller (32 digi ins, 32 digi outs) 100a APCI1696 SP controller (96 TTL I/Os) 3001 APCI3501 SP controller (analog output board) 300f APCI3600 Noise and vibration measurement board 7001 APCI7420 2-port Serial Controller 7002 APCI7300 Serial Controller 15b9 Maestro Digital Communications 15ba Impacct Technology Corp 15bb Portwell Inc 15bc Agilent Technologies 0100 HPFC-5600 Tachyon DX2+ FC 0103 QX4 PCI Express quad 4-gigabit Fibre Channel controller 0105 Celerity FC-44XS/FC-42XS/FC-41XS/FC-44ES/FC-42ES/FC-41ES 117c 0022 Celerity FC-42XS Fibre Channel Adapter 117c 0025 Celerity FC-44ES Fibre Channel Adapter 117c 0026 Celerity FC-42ES Fibre Channel Adapter 0500 Infiniium Memory Controller Interface 0501 Infiniium Acquisition System Interface 0507 Infiniium Acquisition System (80000 series) 0508 Infiniium Acquisition Support 0b01 82350B PCI GPIB 1100 E8001-66442 PCI Express CIC 1218 82351A PCI Express GPIB 12d6 82350C PCI GPIB 12d7 82351B PCI Express GPIB 2922 64 Bit, 133MHz PCI-X Exerciser & Protocol Checker 2928 64 Bit, 66MHz PCI Exerciser & Analyzer 2929 64 Bit, 133MHz PCI-X Analyzer & Exerciser 15bd DFI Inc 15be Sola Electronics 15bf High Tech Computer Corp (HTC) 15c0 BVM Ltd 15c1 Quantel 15c2 Newer Technology Inc 15c3 Taiwan Mycomp Co Ltd 15c4 EVSX Inc 15c5 Procomp Informatics Ltd 8010 1394b - 1394 Firewire 3-Port Host Adapter Card 15c6 Technical University of Budapest 15c7 Tateyama System Laboratory Co Ltd 0349 Tateyama C-PCI PLC/NC card Rev.01A 15c8 Penta Media Co Ltd 15c9 Serome Technology Inc 15ca Bitboys OY 15cb AG Electronics Ltd 15cc Hotrail Inc 15cd Dreamtech Co Ltd 15ce Genrad Inc 15cf Hilscher Gesellschaft für Systemautomation mbH 0000 CIFX PCI/PCIe 15d1 Infineon Technologies AG 15d2 FIC (First International Computer Inc) 15d3 NDS Technologies Israel Ltd 15d4 Iwill Corp 15d5 Tatung Co 15d6 Entridia Corp 15d7 Rockwell-Collins Inc 15d8 Cybernetics Technology Co Ltd 15d9 Super Micro Computer Inc 1b64 SCC-B8SB80-B1 1b9d Supermicro AOC-S3816L-L16IR 1c6e Supermicro AOC-SLG4-2H8M2 15da Cyberfirm Inc 15db Applied Computing Systems Inc 15dc Litronic Inc 0001 Argus 300 PCI Cryptography Module 15dd Sigmatel Inc 15de Malleable Technologies Inc 15df Infinilink Corp 15e0 Cacheflow Inc 15e1 Voice Technologies Group Inc 15e2 Quicknet Technologies Inc 0500 PhoneJack-PCI 15e3 Networth Technologies Inc 15e4 VSN Systemen BV 15e5 Valley technologies Inc 15e6 Agere Inc 15e7 Get Engineering Corp 15e8 National Datacomm Corp 0130 Wireless PCI Card 0131 NCP130A2 Wireless NIC 15e9 Pacific Digital Corp 1841 ADMA-100 DiscStaQ ATA Controller 15ea Tokyo Denshi Sekei K.K. 15eb DResearch Digital Media Systems GmbH 15ec Beckhoff GmbH 3101 FC3101 Profibus DP 1 Channel PCI 5102 FC5102 15ed Macrolink Inc 15ee In Win Development Inc 15ef Intelligent Paradigm Inc 15f0 B-Tree Systems Inc 15f1 Times N Systems Inc 15f2 Diagnostic Instruments Inc 15f3 Digitmedia Corp 15f4 Valuesoft 15f5 Power Micro Research 15f6 Extreme Packet Device Inc 15f7 Banctec 15f8 Koga Electronics Co 15f9 Zenith Electronics Corp 15fa J.P. Axzam Corp 15fb Zilog Inc 15fc Techsan Electronics Co Ltd 15fd N-CUBED.NET 15fe Kinpo Electronics Inc 15ff Fastpoint Technologies Inc 1600 Northrop Grumman - Canada Ltd 1601 Tenta Technology 1602 Prosys-tec Inc 1603 Nokia Wireless Communications 1604 Central System Research Co Ltd 1605 Pairgain Technologies 1606 Europop AG 1607 Lava Semiconductor Manufacturing Inc 1608 Automated Wagering International 1609 Scimetric Instruments Inc 1612 Telesynergy Research Inc. 1618 Stone Ridge Technology 0001 RDX 11 0002 HFT-01 0400 FarSync T2P (2 port X.21/V.35/V.24) 0440 FarSync T4P (4 port X.21/V.35/V.24) 0610 FarSync T1U (1 port X.21/V.35/V.24) 0620 FarSync T2U (2 port X.21/V.35/V.24) 0640 FarSync T4U (4 port X.21/V.35/V.24) 1610 FarSync TE1 (T1,E1) 2610 FarSync DSL-S1 (SHDSL) 3640 FarSync T4E (4-port X.21/V.35/V.24) 4620 FarSync T2Ue PCI Express (2-port X.21/V.35/V.24) 4640 FarSync T4Ue PCI Express (4-port X.21/V.35/V.24) 1619 FarSite Communications Ltd 0400 FarSync T2P (2 port X.21/V.35/V.24) 0440 FarSync T4P (4 port X.21/V.35/V.24) 0610 FarSync T1U (1 port X.21/V.35/V.24) 0620 FarSync T2U (2 port X.21/V.35/V.24) 0640 FarSync T4U (4 port X.21/V.35/V.24) 1610 FarSync TE1 (T1,E1) 1612 FarSync TE1 PCI Express (T1,E1) 2610 FarSync DSL-S1 (SHDSL) 3640 FarSync T4E (4-port X.21/V.35/V.24) 4620 FarSync T2Ue PCI Express (2-port X.21/V.35/V.24) 4640 FarSync T4Ue PCI Express (4-port X.21/V.35/V.24) 5621 FarSync T2Ee PCI Express (2 port X.21/V.35/V.24) 5641 FarSync T4Ee PCI Express (4 port X.21/V.35/V.24) 6620 FarSync T2U-PMC PCI Express (2 port X.21/V.35/V.24) 161f Rioworks 1621 Lynx Studio Technology, Inc. 0020 LynxTWO-A 0021 LynxTWO-B 0022 LynxTWO-C 0023 Lynx L22 0024 Lynx AES16 0025 Lynx AES16-SRC 0028 Lynx AES16e 1626 TDK Semiconductor Corp. 8410 RTL81xx Fast Ethernet 1629 Kongsberg Spacetec AS 1003 Format synchronizer v3.0 1006 Format synchronizer, model 10500 1007 Format synchronizer, model 21000 2002 Fast Universal Data Output 3100 IO31000 Frame Synchronizer and I/O 3200 IO32000 Frame Synchronizer and I/O 4002 High Rate Demodulator 5001 High Rate FEC 6001 High Rate Demodulator and FEC 1631 Packard Bell B.V. 1638 Standard Microsystems Corp [SMC] 1100 SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000 163c Smart Link Ltd. 3052 SmartLink SmartPCI562 56K Modem 5449 SmartPCI561 Modem 1641 MKNet Corp. 1642 Bitland(ShenZhen) Information Technology Co., Ltd. # nee Brocade Communications Systems, Inc. 1657 Cavium QLogic 0013 425/825/42B/82B 4Gbps/8Gbps PCIe dual port FC HBA 103c 1742 82B 8Gbps dual port FC HBA 103c 1744 42B 4Gbps dual port FC HBA 1657 0014 425/825 4Gbps/8Gbps PCIe dual port FC HBA 0014 1010/1020/1007/1741 10Gbps CNA 1657 0014 1010/1020/1007/1741 10Gbps CNA - FCOE 1657 0015 1010/1020/1007/1741 10Gbps CNA - LL 0017 415/815/41B/81B 4Gbps/8Gbps PCIe single port FC HBA 103c 1741 41B 4Gbps single port FC HBA 103c 1743 81B 8Gbps single port FC HBA 1657 0014 415/815 4Gbps/8Gbps single port PCIe FC HBA 0021 804 8Gbps FC HBA for HP Bladesystem c-class 0022 BR-1860 Fabric Adapter 1657 0022 10Gbps CNA - FCOE 1657 0023 10Gbps CNA - LL 1657 0024 16Gbps FC HBA # Mezz card for IBM 0023 1867/1869 16Gbps FC HBA # Same Device_ID used for 410 (1port) and 420 (2 port) HBAs. 0646 400 4Gbps PCIe FC HBA 165a Epix Inc c100 PIXCI(R) CL1 Camera Link Video Capture Board [custom QL5232] d200 PIXCI(R) D2X Digital Video Capture Board [custom QL5232] d300 PIXCI(R) D3X Digital Video Capture Board [custom QL5232] eb01 PIXCI(R) EB1 PCI Camera Link Video Capture Board # Gidel Reconfigurable Computing 165c Gidel Ltd. 5361 PROCStarII60-1 5362 PROCStarII60-2 5364 PROCStarII60-4 5435 ProcSparkII 5661 ProcE60 56e1 ProcE180 5911 ProcStarIII110-1 5912 ProcStarIII110-2 5913 ProcStarIII110-3 5914 ProcStarIII110-4 5921 ProcStarIII150-1 5922 ProcStarIII150-2 5923 ProcStarIII150-3 5924 ProcStarIII150-4 5931 ProcStarIII260-1 5932 ProcStarIII260-2 5933 ProcStarIII260-3 5934 ProcStarIII260-4 5941 ProcStarIII340-1 5942 ProcStarIII340-2 5943 ProcStarIII340-3 5944 ProcStarIII340-4 5a01 ProceIII80 5a11 ProceIII110 5a21 ProceIII150 5a31 ProceIII260 5a41 ProceIII340 5b51 ProceIV360 5b61 ProceIV530 5b71 ProceIV820 5c01 ProcStarIV80-1 5c02 ProcStarIV80-2 5c03 ProcStarIV80-3 5c04 ProcStarIV80-4 5c11 ProcStarIV110-1 5c12 ProcStarIV110-2 5c13 ProcStarIV110-3 5c14 ProcStarIV110-4 5c51 ProcStarIV360-1 5c52 ProcStarIV360-2 5c53 ProcStarIV360-3 5c54 ProcStarIV360-4 5c61 ProcStarIV530-1 5c62 ProcStarIV530-2 5c63 ProcStarIV530-3 5c64 ProcStarIV530-4 5c71 ProcStarIV820-1 5c72 ProcStarIV820-2 5c73 ProcStarIV820-3 5c74 ProcStarIV820-4 5d01 Proc10480 5d11 Proc104110 5f01 ProceV_A3 5f11 ProceV_A7 5f21 ProceV_AB 5f31 ProceV_D5 5f41 ProceV_D8 6732 Proc6M 6832 Proc12M 7101 Proc10a_27 7111 Proc10a_48 7121 Proc10a_66 7141 Proc10a_115 7181 Proc10a_27S 7191 Proc10a_48S 71a1 Proc10a_66S 71b1 Proc10A 72b1 HawkEye 73b1 Proc10s 165d Hsing Tech. Enterprise Co., Ltd. 165f Linux Media Labs, LLC 1020 LMLM4 MPEG-4 encoder 1661 Worldspace Corp. 1665 EDAX Inc # P/N 4035.006.19720 1973 DPP-II FR2 Board # P/N 4035.065.20000 2000 SG-IIP Board 1668 Actiontec Electronics Inc 0100 Mini-PCI bridge # Formerly SiByte, Inc. 166d Broadcom Corporation 0001 SiByte BCM1125/1125H/1250 System-on-a-Chip PCI 0002 SiByte BCM1125H/1250 System-on-a-Chip HyperTransport 0012 SiByte BCM1280/BCM1480 System-on-a-Chip PCI-X 0014 Sibyte BCM1280/BCM1480 System-on-a-Chip HyperTransport 1677 B&R Industrial Automation GmbH 104e 5LS172.6 B&R Dual CAN Interface Card 12d7 5LS172.61 B&R Dual CAN Interface Card 20ad 5ACPCI.MFIO-K01 Profibus DP / K-Feldbus / COM 1678 NetEffect 0100 NE020 10Gb Accelerated Ethernet Adapter (iWARP RNIC) 1679 Tokyo Electron Device Ltd. 3000 SD Standard host controller [Ellen] 167b ZyDAS Technology Corp. 2102 ZyDAS ZD1202 187e 3406 ZyAIR B-122 CardBus 11Mbs Wireless LAN Card 187e 3407 ZyAIR B-320 802.11b Wireless PCI Adapter 2116 ZD1212B Wireless Adapter 167d Samsung Electro-Mechanics Co., Ltd. a000 MagicLAN SWL-2210P 802.11b [Intersil ISL3874] 167e ONNTO Corp. 1681 Hercules 1682 XFX Pine Group Inc. 5701 Radeon 5700 XT Thicc III Ultra c580 Radeon RX 580 1688 CastleNet Technology Inc. 1170 WLAN 802.11b card 168a Utimaco IS GmbH 2086 CryptoServer Se-Series Hardware Security Module c040 CryptoServer CSe-Series Hardware Security Module c051 CryptoServer Se-Series Gen2 Hardware Security Module c070 u.trust Anchor Hardware Security Module cs7.2 Series c071 u.trust Anchor Hardware Security Module cs7.3 Series c072 u.trust Anchor Hardware Security Module cs7.3 Series Virtual Function # nee Atheros Communications, Inc. 168c Qualcomm Atheros 0007 AR5210 Wireless Network Adapter [AR5000 802.11a] 1737 0007 WPC54A Wireless PC Card 1b47 0100 Harmony 8450CN Wireless CardBus Module 1b47 0110 Skyline 4030 / Harmony 8450 802.11a Wireless CardBus Adapter 8086 2501 PRO/Wireless 5000 LAN PCI Adapter Module 0011 AR5211 Wireless Network Adapter [AR5001A 802.11a] 0012 AR5211 Wireless Network Adapter [AR5001X 802.11ab] 1186 3a03 AirPro DWL-A650 Wireless Cardbus Adapter (rev.B) 1186 3a04 AirPro DWL-AB650 Multimode Wireless Cardbus Adapter 1186 3a05 AirPro DWL-AB520 Multimode Wireless PCI Adapter 126c 8031 2201 Mobile Adapter 1385 4400 WAB501 802.11ab Wireless CardBus Card 1b47 aa00 8460 802.11ab Wireless CardBus Adapter 0013 AR5212/5213/2414 Wireless Network Adapter 0308 3402 AG-100 802.11ag Wireless Cardbus Adapter 0308 3405 G-102 v2 802.11g Wireless Cardbus Adapter 0308 3408 G-170S 802.11g Wireless CardBus Adapter 0e11 00e5 NC6000/NC8000 laptop 10b7 6002 3CRWE154A72 802.11abg Cardbus Adapter 1113 d301 Philips CPWNA100 Wireless CardBus adapter 1113 ee23 SMCWPCIT-G 108Mbps Wireless PCI adapter 1154 033b Buffalo WLI-CB-AMG54 1154 034e Buffalo WLI-CB-AG108HP 802.11abg Cardbus Adapter 1186 3202 DWL-G650 (Rev B3,B5) Wireless cardbus adapter 1186 3203 AirPlus DWL-G520 Wireless PCI Adapter (rev. A) 1186 3a07 AirXpert DWL-AG650 Wireless Cardbus Adapter 1186 3a08 AirXpert DWL-AG520 Wireless PCI Adapter 1186 3a12 D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C) 1186 3a13 AirPlus DWL-G520 Wireless PCI Adapter (rev. B) 1186 3a14 AirPremier AG DWL-AG530 Wireless PCI Adapter (rev.A) 1186 3a17 D-Link AirPremier DWL-G680 Wireless Cardbus Adapter 1186 3a18 D-Link AirPremier DWL-G550 Wireless PCI Adapter 1186 3a1a WNA-2330 802.11bg Wireless CardBus Adapter 1186 3a63 D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter 1186 3a93 Conceptronic C54I Wireless 801.11g PCI card 1186 3a94 Conceptronic C54C 802.11g Wireless Cardbus Adapter 1186 3ab0 Allnet ALL0281 Wireless PCI Card 1385 4600 WAG511 802.11a/b/g Dual Band Wireless PC Card 1385 4610 WAG511 802.11a/b/g Dual Band Wireless PC Card 1385 4900 WG311v1 802.11g Wireless PCI Adapter 1385 4a00 WAG311 802.11a/g Wireless PCI Adapter 1385 4b00 WG511T 108 Mbps Wireless PC Card (rev.A/B) 1385 4d00 WG311T 108 Mbps Wireless PCI Adapter (rev.A2) 1385 4f00 WG511U Double 108 Mbps Wireless PC Card 1385 5a00 WG311T (rev.A3 v1h3/v1h4) 108 Mbps Wireless PCI Adapter [AR2412] 1385 5b00 WG511T 108 Mbps Wireless PC Card (rev.C) 1385 5d00 WPN511 RangeMax Wireless PC Card 1458 e911 GN-WIAG02 1468 0403 U10H014 802.11g Cardbus Adapter 1468 0408 ThinkPad 11b/g Wireless LAN Mini PCI Adapter 14b7 0a10 8480-WD 802.11abg Cardbus Adapter 14b7 0a60 8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter 14b7 aa30 8800-FC 802.11bg Cardbus Adapter 14b7 aa40 8470-WD 802.11bg Cardbus Adapter 14b9 cb21 CB21 802.11a/b/g Cardbus Adapter 1668 1026 IBM HighRate 11 a/b/g Wireless CardBus Adapter 168c 0013 AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter 168c 1025 DWL-G650B2 Wireless CardBus Adapter 168c 1027 Engenius NL-3054CB ARIES b/g CardBus Adapter 168c 1042 Ubiquiti Networks SuperRange a/b/g Cardbus Adapter 168c 1051 EZ Connect g 802.11g 108Mbps Wireless PCI Adapter 168c 2026 Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter 168c 2027 D-Link AirPlus DWL-G520 Wireless PCI Adapter (rev. A) 168c 2041 Engenius 5354MP Plus ARIES2 b/g MiniPCI Adapter 168c 2042 Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter 168c 2051 TRENDnet TEW-443PI Wireless PCI Adapter 16a5 160a BWP712 802.11bg Wireless CardBus Adapter 16ab 7302 Trust Speedshare Turbo Pro Wireless PCI Adapter 1737 0017 WPC55AG 1737 0026 WMP55AG v1.1 1737 0035 WPC55AG v1.2 802.11abg Cardbus Adapter 1737 0036 WMP55AG v1.2 802.11abg PCI Adapter 1799 3000 F6D3000 Dual-Band Wireless A+G Desktop Card 1799 3010 F6D3010 Dual-Band Wireless A+G Notebook Card 17cf 0042 Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter 185f 1012 CM9 Wireless a/b/g MiniPCI Adapter 185f 2012 Wistron NeWeb WLAN a+b+g model CB9 a727 6801 3CRXJK10075 OfficeConnect Wireless 108Mbps 11g XJACK PC Card 001a AR2413/AR2414 Wireless Network Adapter [AR5005G(S) 802.11bg] 1052 168c Sweex Wireless Lan PC Card 54Mbps 1113 ee20 SMC Wireless CardBus Adapter 802.11g (SMCWCB-G EU) 1113 ee24 SMC Wireless PCI Card WPCI-G 1186 3a15 AirPlus G DWL-G630 Wireless Cardbus Adapter (rev.D1) 1186 3a16 AirPlus G DWL-G510 Wireless PCI Adapter(rev.B) 1186 3a1c WNA-1330 Notebook Adapter 1186 3a1d WDA-1320 Desktop Adapter 1186 3a23 AirPlus G DWL-G520+A Wireless PCI Adapter 1186 3a24 AirPlus G DWL-G650+A Wireless Cardbus Adapter 1186 3b08 AirPlus G DWL-G630 Wireless Cardbus Adapter (rev.C1) 168c 001a Belkin FD7000 168c 1052 TP-Link TL-WN510G Wireless CardBus Adapter 168c 2052 Compex Wireless 802.11 b/g MiniPCI Adapter, Rev A1 [WLM54G] 16ec 0122 Wireless PCI Adapter Model 5418 1737 0053 WPC54G v7 802.11g Wireless-G Notebook Adapter 1799 700c F5D7000 v5000 Wireless G Desktop Card 1799 701d F5D7010 v5000 Wireless G Notebook Card 17f9 0008 DX-WGNBC 802.11bg Wireless CardBus Adapter 17f9 0018 DX-WGDTC 802.11bg Wireless PCI Adapter 001b AR5413/AR5414 Wireless Network Adapter [AR5006X(S) 802.11abg] # Atheros AR5414 32-bit mini-PCI type IIIB 0777 1107 UB5 802.11a Wireless Mini PCI Adapter 0777 3002 XR2 802.11g Wireless Mini PCI Adapter 0777 3005 XR5 802.11a Wireless Mini PCI Adapter 0777 3009 XR9 900MHz Wireless Mini PCI Adapter 1154 034e WLI-CB-AG108HP 802.11abg Wireless CardBus Adapter 1186 3a19 D-Link AirPremier AG DWL-AG660 Wireless Cardbus Adapter 1186 3a22 AirPremier AG DWL-AG530 Wireless PCI Adapter (rev.B) 11ad 5001 WN5301A 802.11bg Wireless PCI Adapter 1458 e901 GN-WI01HT Wireless a/b/g MiniPCI Adapter 168c 001b Wireless LAN PCI LiteOn 168c 1062 IPN-W100CB 802.11abg Wireless CardBus Adapter 168c 2062 EnGenius EMP-8602 (400mw) or Compex WLM54AG (SuperAG) 168c 2063 EnGenius EMP-8602 (400mw) or Compex WLM54AG 17f9 000b WL-711A 802.11abg Wireless CardBus Adapter 17f9 000c WPIA-112AG 802.11abg Wireless PCI Adapter 17f9 000d PC-686X 802.11abg Wireless Mini PCI Adapter 185f 1600 DCMA-82 High Power WLAN 802.11a/b/g mini-PCI Module (Super A/G, eXtended Range, 400mW) 1948 3aba RBTBJ-AW 802.11abg Wireless Cardbus Adapter a727 6804 Wireless 11a/b/g PC Card with XJACK(r) Antenna 001c AR242x / AR542x Wireless Network Adapter (PCI-Express) 0777 3006 SRX 802.11abg Wireless ExpressCard Adapter 103c 137a AR5BXB63 (Foxconn) 802.11bg Mini PCIe NIC 106b 0086 AirPort Extreme 144f 7106 WLL3140 (Toshiba PA3501U-1MPC) 802.11bg Wireless Mini PCIe Card 144f 7128 WLL3141 (Toshiba PA3613U-1MPC) 802.11bg Wireless Mini PCIe Card 1468 0428 AR5BXB63 802.11bg NIC 1468 042a AR5007EG 802.11bg NIC 147b 1033 AirPace Wi-Fi 168c 001c AR242x 802.11abg NIC (PCI Express) 168c 3061 AR5006EGS 802.11bg NIC (2.4GHz, PCI Express) 168c 3062 AR5006EXS 802.11abg NIC (2.4/5.0GHz, PCI Express) 168c 3063 AR5006EX 802.11abg NIC (2.4/5.0GHz, PCI Express) 168c 3065 AR5006EG 802.11bg NIC (2.4GHz, PCI Express) 168c 3067 AR242x 802.11abg Wireless PCI Express Adapter (rev 01) 1a3b 1026 AW-GE780 802.11bg Wireless Mini PCIe Card 001d AR2417 Wireless Network Adapter [AR5007G 802.11bg] 1799 720b F5D7000 v8000 Wireless G Desktop Card 1799 721b F5D7010 v8000 Wireless G Notebook Card # the name AR5005VL is used for some AR5513 based designs 0020 AR5513 802.11abg Wireless NIC 0308 3407 M-102 802.11g Wireless Cardbus Adapter 1186 3a67 DWL-G650M Super G MIMO Wireless Notebook Adapter 1186 3a68 DWL-G520M Wireless 108G MIMO Desktop Adapter 187e 340e M-302 802.11g Wireless PCI Adapter 1976 2003 TEW-601PC 802.11g Wireless CardBus Adapter 0023 AR5416 Wireless Network Adapter [AR5008 802.11(a)bgn] 0308 340b NWD-170N 802.11bgn Wireless CardBus Adapter 1154 0365 Buffalo WLP-CB-AG300 802.11abgn Cardbus Adapter 1154 0367 WLI-CB-AG301N 802.11abgn Wireless CardBus Adapter 1186 3a6a DWA-642 802.11n RangeBooster N CardBus Adapter 1186 3a6b DWA-547 802.11n RangeBooster N 650 DeskTop Adapter 1186 3a6d DWA-552 802.11n Xtreme N Desktop Adapter (rev A1) 1186 3a76 DWA-645 802.11n RangeBooster N 650 Notebook Adapter (rev A1) 1737 0059 WPC300N v2 Wireless-N Notebook Adapter 1737 0069 WPC100 v1 802.11n RangePlus Wireless Notebook Adapter 1737 0072 WMP110 v1 802.11n RangePlus Wireless PCI Adapter 1799 8011 F5D8011 v1 802.11n N1 Wireless Notebook Card 187e 3411 NWD-370N 802.11n Wireless PCI Adapter 1976 2008 TEW-621PC 802.11bgn Wireless CardBus Adapter 0024 AR5418 Wireless Network Adapter [AR5008E 802.11(a)bgn] (PCI-Express) 106b 0087 AirPort Extreme 1186 3a70 DWA-556 Xtreme N PCI Express Desktop Adapter 0027 AR9160 Wireless Network Adapter [AR9001 802.11(a)bgn] 0777 4082 SR71-A 802.11abgn Wireless Mini PCI Adapter 0029 AR922X Wireless Network Adapter 0777 4005 SR71-15 802.11an Mini PCI Adapter 1186 3a7a DWA-552 802.11n Xtreme N Desktop Adapter (rev A2) 1186 3a7d DWA-552 802.11n Xtreme N Desktop Adapter (rev A3) 168c 0029 AR922X Wireless Network Adapter 168c 2096 Compex WLM200NX / Wistron DNMA-92 002a AR928X Wireless Network Adapter (PCI-Express) 0777 4f05 SR71-X 802.11abgn Wireless ExpressCard Adapter [AR9280] 103c 3041 AR5BHB92-H 802.11abgn Wireless Half-size Mini PCIe Card [AR9280] 103c 3042 AzureWave AW-NE773 802.11abgn Wireless Half-size Mini PCIe Card [AR9280] 105b e006 T77H053.00 802.11bgn Wireless Mini PCIe Card [AR9281] 105b e01f T77H047.31 802.11bgn Wireless Half-size Mini PCIe Card [AR9283] 106b 008f AirPort Extreme 11ad 6600 WN6600A 802.11bgn Wireless Mini PCIe Card [AR9281] 144f 7141 WLL6080 802.11bgn Wireless Mini PCIe Card [AR9281] 168c 0203 DW1525 802.11abgn WLAN PCIe Card [AR9280] 1a32 0303 EM303 802.11bgn Wireless Mini PCIe Card [AR9281] 1a32 0306 EM306 802.11bgn Wireless Half-size Mini PCIe Card [AR9283] 1a3b 1067 AW-NE771 802.11bgn Wireless Mini PCIe Card [AR9281] 1a3b 1071 AW-NE772 802.11abgn Wireless Mini PCIe Card [AR9280] 1a3b 1081 AW-NE773 802.11abgn Wireless Half-size Mini PCIe Card [AR9280] 002b AR9285 Wireless Network Adapter (PCI-Express) 1028 0204 Wireless 1502 802.11bgn Half-size Mini PCIe Card 1028 0205 Wireless 1702 802.11bgn Half-size Mini PCIe Card [AR9002WB-1NGCD] 103c 303f U98Z062.10 802.11bgn Wireless Half-size Mini PCIe Card 103c 3040 U98Z062.12 802.11bgn Wireless Half-size Mini PCIe Card 105b e017 T77H126.00 802.11bgn Wireless Half-size Mini PCIe Card 105b e023 T77H121.04 802.11bgn Wireless Half-size Mini PCIe Card 105b e025 T77H121.05 802.11bgn Wireless Half-size Mini PCIe Card 1113 e811 WN7811A (Toshiba PA3722U-1MPC) 802.11bgn Wireless Half-size Mini PCIe Card 185f 30af DNXA-95 802.11bgn Wireless Half-size Mini PCIe Card 1931 0023 Option GTM67x PCIe WiFi Adapter 1a3b 1089 AW-NE785 / AW-NE785H 802.11bgn Wireless Full or Half-size Mini PCIe Card 1a3b 2c37 AW-NB037H 802.11bgn Wireless Half-size Mini PCIe Card [AR9002WB-1NGCD] 1b9a 0401 XW204E 802.11bgn Wireless Half-size Mini PCIe Card 1b9a 0c03 WB214E 802.11bgn Wireless Half-size Mini PCIe Card [AR9002WB-1NGCD] 002c AR2427 802.11bg Wireless Network Adapter (PCI-Express) 002d AR9227 Wireless Network Adapter 002e AR9287 Wireless Network Adapter (PCI-Express) 105b e034 T77H167.00 0030 AR93xx Wireless Network Adapter 103c 1627 AR9380/HB112 802.11abgn 3x3 Wi-Fi Adapter 106b 009a AirPort Extreme 1186 3a7e DWA-566 Wireless N 300 Dual Band PCIe Desktop Adapter 1a56 2000 Killer Wireless-N 1102 Half-size Mini PCIe Card [AR9382] 1a56 2001 Killer Wireless-N 1103 Half-size Mini PCIe Card [AR9380] 0032 AR9485 Wireless Network Adapter 1028 0208 Wireless 1506 WLAN Half Mini-Card 103c 1838 AR9485/HB125 802.11bgn 1x1 Wi-Fi Adapter 105b e044 Unex DHXA-225 144d 410e AR9485WB-EG 802.11b/g/n mini-PCIe card on a series 3 laptop 1a3b 1186 AW-NE186H 0033 AR958x 802.11abgn Wireless Network Adapter 168c a120 AR9582 802.11a/n WLAN Mini-PCIe Adapter 0034 AR9462 Wireless Network Adapter 1028 020b Wireless 1601 802.11abgn Adapter 1028 0300 Wireless 1802 802.11abgn Adapter 1a56 2003 Killer Wireless-N 1202 Half-size Mini PCIe Card 0036 QCA9565 / AR9565 Wireless Network Adapter 1028 020e Vostro 3470 0037 AR9485 Wireless Network Adapter # Also used as Gigabyte GC-WB150 on a PCIe-to-mini-PCIe converter 1a3b 2100 AW-NB100H 802.11n Wireless Mini PCIe Card 003c QCA986x/988x 802.11ac Wireless Network Adapter 003e QCA6174 802.11ac Wireless Network Adapter 1a56 143a Killer 1435 Wireless-AC 1a56 1525 Killer N1525 Wireless-AC 1a56 1535 Killer Wireless-n/a/ac 1535 Wireless Network Adapter 0040 QCA9980/9990 802.11ac Wireless Network Adapter 0041 QCA6164 802.11ac Wireless Network Adapter 0042 QCA9377 802.11ac Wireless Network Adapter 11ad 08a6 Qualcomm Atheros QCA9377 802.11ac Wireless Network Adapter # compatible with Lenovo's BIOS lock 17aa 0901 Qualcomm Atheros QCA9377 Wireless Network Adapter 0046 QCA9984 802.11ac Wave 2 Wireless Network Adapter 0050 QCA9887 802.11ac Wireless Network Adapter 0207 AR5210 Wireless Network Adapter [AR5000 802.11a] 1014 AR5212 802.11abg NIC 1014 058a ThinkPad 11a/b/g Wireless LAN Mini Express Adapter (AR5BXB6) 9013 AR5002X Wireless Network Adapter ff19 AR5006X Wireless Network Adapter ff1b AR2425 Wireless Network Adapter [AR5007EG 802.11bg] ff1c AR5008 Wireless Network Adapter ff1d AR922x Wireless Network Adapter # Found in "AVM Fritz!Box FON WLAN 7270v3" 168c ee1c AR9220-AC1A [AVM Fritz!Box FON WLAN 7270 v3] 1695 EPoX Computer Co., Ltd. 169c Netcell Corporation 0044 Revolution Storage Processing Card # The right ID is 196d, but they got it nibble-swapped in 2202. 169d Club-3D VB (Wrong ID) 16a5 Tekram Technology Co.,Ltd. 16ab Global Sun Technology Inc 1100 GL24110P 1101 PLX9052 PCMCIA-to-PCI Wireless LAN 1102 PCMCIA-to-PCI Wireless Network Bridge 8501 WL-8305 Wireless LAN PCI Adapter 16ae SafeNet Inc 0001 SafeXcel 1140 000a SafeXcel 1841 1141 SafeXcel 1141 # misused vendor ID 0001 0001 0001 SafeXcel 1141 v. 1.1 1841 SafeXcel 1842 16af SparkLAN Communications, Inc. 16b4 Aspex Semiconductor Ltd 16b8 Sonnet Technologies, Inc. 16be Creatix Polymedia GmbH 16c3 Synopsys, Inc. abcd DWC_usb3 / PCIe bridge abce DWC_usb3 abcf DWC_usb31 edda EPMockUp 16c6 Micrel-Kendin 8695 Centaur KS8695 ARM processor 8842 KSZ8842-PMQL 2-Port Ethernet Switch 16c8 Octasic Inc. 16c9 EONIC B.V. The Netherlands 16ca CENATEK Inc 0001 Rocket Drive DL # nee Innocore Gaming Ltd., nee Densitron Gaming Ltd., a division of Densitron Technologies 16cd Advantech Co. Ltd 0101 DirectPCI SRAM for DPX-11x series 0102 DirectPCI SRAM for DPX-S/C/E-series 0103 DirectPCI ROM for DPX-11x series 0104 DirectPCI ROM for DPX-S/C/E-series 0105 DirectPCI I/O for DPX-114/DPX-115 0106 DirectPCI I/O for DPX-116 0107 DirectPCI I/O for DPX-116U 0108 DirectPCI I/O for DPX-117 0109 DirectPCI I/O for DPX-112 010a DirectPCI I/O for DPX-C/E-series 010b DirectPCI I/O for DPX-S series 16ce Roland Corp. 16d5 Acromag, Inc. 0504 PMC-DX504 Reconfigurable FPGA with LVDS I/O 0520 PMC520 Serial Communication, 232 Octal 0521 PMC521 Serial Communication, 422/485 Octal 1020 PMC-AX1020 Reconfigurable FPGA with A/D & D/A 1065 PMC-AX1065 Reconfigurable FPGA with A/D & D/A 2004 PMC-DX2004 Reconfigurable FPGA with LVDS I/O 2020 PMC-AX2020 Reconfigurable FPGA with A/D & D/A 2065 PMC-AX2065 Reconfigurable FPGA with A/D & D/A 3020 PMC-AX3020 Reconfigurable FPGA with A/D & D/A 3065 PMC-AX3065 Reconfigurable FPGA with A/D & D/A 4243 PMC424, APC424, AcPC424 Digital I/O and Counter Timer Module 4248 PMC464, APC464, AcPC464 Digital I/O and Counter Timer Module 424b PMC-DX2002 Reconfigurable FPGA with Differential I/O 4253 PMC-DX503 Reconfigurable FPGA with TTL and Differential I/O 4312 PMC-CX1002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O 4313 PMC-CX1003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O 4322 PMC-CX2002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O 4323 PMC-CX2003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O 4350 PMC-DX501 Reconfigurable Digital I/O Module 4353 PMC-DX2003 Reconfigurable FPGA with TTL and Differential I/O 4357 PMC-DX502 Reconfigurable Differential I/O Module 4457 PMC730, APC730, AcPC730 Multifunction Module 4471 XMC730 Multi-function I/O module with front I/O 4473 XMC730CC Multi-function I/O module with rear I/O Conduction-cooled 464d PMC408 32-Channel Digital Input/Output Module 4850 PMC220-16 12-Bit Analog Output Module 4a42 PMC483, APC483, AcPC483 Counter Timer Module 4a50 PMC484, APC484, AcPC484 Counter Timer Module 4a56 PMC230 16-Bit Analog Output Module 4b47 PMC330, APC330, AcPC330 Analog Input Module, 16-bit A/D 4c40 PMC-LX40 Reconfigurable Virtex-4 FPGA with plug-in I/O 4c60 PMC-LX60 Reconfigurable Virtex-4 FPGA with plug-in I/O 4d4d PMC341, APC341, AcPC341 Analog Input Module, Simultaneous Sample & Hold 4d4e PMC482, APC482, AcPC482 Counter Timer Board 524d PMC-DX2001 Reconfigurable FPGA with TTL I/O 5335 PMC-SX35 Reconfigurable Virtex-4 FPGA with plug-in I/O 5456 PMC470 48-Channel Digital Input/Output Module 5601 PMC-VLX85 Reconfigurable Virtex-5 FPGA with plug-in I/O 5602 PMC-VLX110 Reconfigurable Virtex-5 FPGA with plug-in I/O 5603 PMC-VSX95 Reconfigurable Virtex-5 FPGA with plug-in I/O 5604 PMC-VLX155 Reconfigurable Virtex-5 FPGA with plug-in I/O 5605 PMC-VFX70 Reconfigurable Virtex-5 FPGA with plug-in I/O 5606 PMC-VLX155-1M Reconfigurable Virtex-5 FPGA with plug-in I/O 5701 PMC-SLX150: Reconfigurable Spartan-6 FPGA with plug-in I/O 5702 PMC-SLX150-1M: Reconfigurable Spartan-6 FPGA with plug-in I/O 5801 XMC-VLX85 Reconfigurable Virtex-5 FPGA with plug-in I/O 5802 XMC-VLX110 Reconfigurable Virtex-5 FPGA with plug-in I/O 5803 XMC-VSX95 Reconfigurable Virtex-5 FPGA with plug-in I/O 5804 XMC-VLX155 Reconfigurable Virtex-5 FPGA with plug-in I/O 5807 XMC-SLX150: Reconfigurable Spartan-6 FPGA with plug-in I/O 5808 XMC-SLX150-1M: Reconfigurable Spartan-6 FPGA with plug-in I/O 5901 APCe8650 PCI Express IndustryPack Carrier Card 6301 XMC Module with user-configurable Virtex-6 FPGA, 240k logic cells, SFP front I/O 6302 XMC Module with user-configurable Virtex-6 FPGA, 365k logic cells, SFP front I/O 6303 XMC Module with user-configurable Virtex-6 FPGA, 240k logic cells, no front I/O 6304 XMC Module with user-configurable Virtex-6 FPGA, 365k logic cells, no front I/O 7000 XMC-7K325F: User-configurable Kintex-7 FPGA, 325k logic cells plus SFP front I/O 7001 XMC-7K410F: User-configurable Kintex-7 FPGA, 410k logic cells plus SFP front I/O 7002 XMC-7K325AX: User-Configurable Kintex-7 FPGA, 325k logic cells with AXM Plug-In I/O 7003 XMC-7K410AX: User-Configurable Kintex-7 FPGA, 410k logic cells with AXM Plug-In I/O 7004 XMC-7K325CC: User-Configurable Kintex-7 FPGA, 325k logic cells, conduction-cooled 7005 XMC-7K410CC: User-Configurable Kintex-7 FPGA, 410k logic cells, conduction-cooled 7006 XMC-7A200: User-Configurable Artix-7 FPGA, 200k logic cells with Plug-In I/O 7007 XMC-7A200CC: User-Configurable Conduction-Cooled Artix-7 FPGA, with 200k logic cells 7011 AP440-1: 32-Channel Isolated Digital Input Module 7012 AP440-2: 32-Channel Isolated Digital Input Module 7013 AP440-3: 32-Channel Isolated Digital Input Module 7014 AP445: 32-Channel Isolated Digital Output Module 7015 AP471 48-Channel TTL Level Digital Input/Output Module 7016 AP470 48-Channel TTL Level Digital Input/Output Module 7017 AP323 16-bit, 20 or 40 Channel Analog Input Module 7018 AP408: 32-Channel Digital I/O Module 7019 AP341 14-bit, 16-Channel Simultaneous Conversion Analog Input Module 701a AP220-16 12-Bit, 16-Channel Analog Output Module 701b AP231-16 16-Bit, 16-Channel Analog Output Module 701c AP225 12-Bit, 16-Channel Analog Output Module with Waveform Memory 701d AP235 16-Bit, 16-Channel Analog Output Module with Waveform Memory 7021 APA7-201 Reconfigurable Artix-7 FPGA module 48 TTL channels 7022 APA7-202 Reconfigurable Artix-7 FPGA module 24 RS485 channels 7023 APA7-203 Reconfigurable Artix-7 FPGA module 24 TTL & 12 RS485 channels 7024 APA7-204 Reconfigurable Artix-7 FPGA module 24 LVDS channels 7027 AP418 16-Channel High Voltage Digital Input/Output Module 7029 AP342 14-bit, 12-Channel Isolated Simultaneous Conversion Analog Input Module 702a AP226 12-Bit, 8-Channel Isolated Analog Output Module 702b AP236 16-Bit, 8-Channel Isolated Analog Output Module 702c AP560A Module 4 Independent isolated CAN bus channels 7031 AP441-1: 32-Channel Isolated Digital Input Module 7032 AP441-2: 32-Channel Isolated Digital Input Module 7033 AP441-3: 32-Channel Isolated Digital Input Module 7042 AP482 Counter Timer Module with TTL Level Input/Output 7043 AP483 Counter Timer Module with TTL Level and RS422 Input/Output 7044 AP484 Counter Timer Module with RS422 Input/Output 7051 APA7-501 Reconfigurable Artix-7 52,160 Cell FPGA module 48 TTL channels 7052 APA7-502 Reconfigurable Artix-7 52,160 Cell FPGA module 24 RS485 channels 7053 APA7-503 Reconfigurable Artix-7 52,160 Cell FPGA module 24 TTL & 12 RS485 channels 7054 APA7-504 Reconfigurable Artix-7 52,160 Cell FPGA module 24 LVDS channels 7072 AP731 Multi-function I/O Module with 12-bit DAC 7073 AP730 Multi-function I/O Module 16 Digital I/O 8 Differential Analog In 4 Analog Out 7731 APZU-301 Zynq Ultrascale+ Module 28 TTL channels 7733 APZU-303 Zynq Ultrascale+ Module 20 TTL & 3 RS485/422 channels 7734 APZU-304 Zynq Ultrascale+ Module 14 LVDS channels 16da Advantech Co., Ltd. 0011 INES GPIB-PCI 16df PIKA Technologies Inc. # nee Geotest-MTS 16e2 Marvin Test Solutions 1034 GX1034 Certification and Verification Module PXI Board 1100 GX1100 Arbitrary Waveform and Function Generator PXI Board 1120 GX1120 Arbitrary Waveform and Function Generator PXI Board 1164 GX1164 Multi-Channel Programmable Resistor PXI Board 1632 GX1632e 32-Channel Arbitrary Analog Output PXIe Board 1648 GX1648 64-Channel Analog Output PXI Board 1649 GX1649 64-Channel Arbitrary Analog Output PXI Board 1838 GX1838 Precision DC Source PXI Board 2065 GX2065 Digital Multimeter PXI Board 2200 GTX2200 High Resolution Universal Time Interval Counter PXI Board 2201 GC2200 High Resolution Universal Time Interval Counter PCI Board 3104 GX3104 4-Channel 20V, 250mA Per Channel SMU PXI Board 3108 GX3108 4-Channel Source Measure Unit PXI Board 3116 GX3116e 16-Channel DUT Power Supply PXIe Board 3348 GX3348 Multi-Channel DC Source and Switch Matrix Board 3500 GX3500 Digital I/O FLEX FPGA Board 3700 GX3700e Digital I/O FLEX FPGA PXIe Board 3701 GX3700 Digital I/O FLEX FPGA PXI Board 3800 GX3800e Digital I/O FLEX FPGA PXIe Board 4943 GX4943 HellFire/Longbow Serial Communication Board 5050 GC5050 Dynamic Digital I/O with Algorithmic Sequencer PCI Board 5055 GX5055 Dynamic Digital I/O with Pin Electronics PXI Board 5083 GX5083 Dynamic Digital I/O with Algorithmic Sequencer PXI Board 5105 GX5105 High-Speed Digital I/O Timing (Master) Module PXI Board 5106 GX5106 High-Speed Digital I/O Cycle Timing (Master) Module PXI Board 5151 GX5150/1 High Speed Digital I/O (50/100MHz) PXI Board 5152 GX5152/3 DSR High Speed Digital Stimulus/Response PXI Board 5250 GX5250 Digital I/O Streaming PXI Board 5280 GX5280 High-Speed Digital I/O PXI Board 5290 GX5290 High-Speed Dynamic Digital I/O PXI Board 5294 GX5294 High-Speed Digital I/O PXI Board 5295 GX5295 Digital I/O with Pin Electronics and PMU PXI Board 5296 GX5296 Digital I/O with Pin Electronics and PMU PXI Board 5550 GX5050 Dynamic Digital I/O with Algorithmic Sequencer PXI Board 5641 GX5641/2 Bi-directional Differential-TTL I/O PXI Board 5731 GX5731 Digital I/O with 128 TTL Channels and 3x32 Customizable Channels PXI Board 5732 GX5732 224-Channel Static Digital I/O PXI Board 5733 GX5733 Digital I/O with 96 TTL Channels and 32 Customizable Channels PXI Board 5960 GX5961/4 Digital I/O Timing/Sync with Pin Electronics and PMU PXI Board 6021 GX6021 20-Channel RF Multiplexer PXI Board 6062 GX6062 60-Channel RF Multiplexer PXI Board 6115 GX6115 15-Channel High Current SPDT Form-C Relay PXI Board 6125 GX6125 25-Channel High-Density SPDT Form-C Relay PXI Board 6138 GX6138 38-Channel SPST Form-A Relay PXI Board 6188 GX6188 104-Channel 8x8 Multiplexer/Matrix PXI Board 6192 GX6192 16, 16x2 High Frequency, High Density Multiplexer PXI Board 6196 GX6196 96-Channel DPST Form-A Relay Carrier PXI Board 6256 GX6256 16, 16x2 Low Frequency, High Density Multiplexer PXI Board 6264 GX6264 128-Channel Scanner/Multiplexer Board 6315 GX6315 45-Channel High Current SPDT Form-C Relay Board 6325 GX6325 75-Channel High-Density SPDT Form-C Relay Board 6338 GX6338 114-Channel SPST Form-A Relay PXI Board 6377 GX6377 Multifunction Switching PXI Board 6384 GX6384 Configurable High-Density Switch Matrix PXI Board 6616 GX6616 6x2:16 Switch Matrix PXI Board 6864 GX6864 Video Switching PXI Board 7400 GX7400 Dual-Output Programmable Power Supply PXI Board 7404 GX7404 Prototyping and Power Interface PXI Board 7777 GX7777 Generic Interface PXI Board 7779 GX7779 Backplane Tester PXI Board 16e3 European Space Agency 1e0f LEON2FT Processor 16e5 Intellon Corp. 6000 INT6000 Ethernet-to-Powerline Bridge [HomePlug AV] 6300 INT6300 Ethernet-to-Powerline Bridge [HomePlug AV] 16ec U.S. Robotics 00ed USR997900 0116 USR997902 10/100/1000 Mbps PCI Network Card 2f00 USR5660A (USR265660A, USR5660A-BP) 56K PCI Faxmodem 3685 Wireless Access PCI Adapter Model 022415 4320 USR997904 10/100/1000 64-bit NIC (Marvell Yukon) ab06 USR997901A 10/100 Cardbus NIC 16ed Sycron N. V. 1001 UMIO communication card 16f2 ETAS GmbH 0200 I/O board 16f2 0010 ES53xx I/O board 16f3 Jetway Information Co., Ltd. 16f4 Vweb Corp 8000 VW2010 16f6 VideoTele.com, Inc. 1702 Internet Machines Corporation (IMC) 1705 Digital First, Inc. 170b NetOctave 0100 NSP2000-SSL crypto accelerator 170c YottaYotta Inc. 1719 EZChip Technologies 1000 NPA Access Network Processor Family # Seems to be a 2nd ID for Vitesse Semiconductor 1725 Vitesse Semiconductor 7174 VSC7174 PCI/PCI-X Serial ATA Host Bus Controller 172a Accelerated Encryption 13c8 AEP SureWare Runner 1000V3 # nee Fujitsu Siemens Computers GmbH 1734 Fujitsu Technology Solutions 9602 RS780/RS880 PCI to PCI bridge (int gfx) 1735 Aten International Co. Ltd. 1737 Linksys 0029 WPG54G ver. 4 PCI Card 1032 Gigabit Network Adapter 1737 0015 EG1032 v2 Instant Gigabit Network Adapter 1737 0024 EG1032 v3 Instant Gigabit Network Adapter 1064 Gigabit Network Adapter 1737 0016 EG1064 v2 Instant Gigabit Network Adapter ab08 21x4x DEC-Tulip compatible 10/100 Ethernet ab09 21x4x DEC-Tulip compatible 10/100 Ethernet 173b Altima (nee Broadcom) 0001 AC1002 PCI Gigabit Ethernet controller 03e8 AC1000 Gigabit Ethernet 03e9 AC1001 Gigabit Ethernet 03ea AC9100 Gigabit Ethernet 173b 0001 AC1002 03eb AC1003 Gigabit Ethernet 1743 Peppercon AG 8139 ROL/F-100 Fast Ethernet Adapter with ROL 1745 ViXS Systems, Inc. 2020 XCode II Series 2100 XCode 2100 Series 1043 48c9 My Cinema PE6200 Analoog 1749 RLX Technologies 174b PC Partner Limited / Sapphire Technology 174d WellX Telecom SA 175c AudioScience Inc 175e Sanera Systems, Inc. 1760 TEDIA spol. s r. o. 0101 PCD-7004 Digital Bi-Directional Ports PCI Card 0102 PCD-7104 Digital Input & Output PCI Card 0121 PCT-7303A PC card with IRC counters 0122 PCT-7408A PC card with counters and timers 0123 PCT-7424 PCI card with standard counters 0141 PCA7208AL - Analog Inputs/Outputs 0142 PCA7208AS - Analog inputs/Outputs 0143 PCA7408AL - Analog Inputs/Outputs 0144 PCA7408AS - Analog Inputs/Outputs 0145 PCA-7228AL Multifunction PCI IO card 0146 PCA-7228AS Multifunction PCI IO card 0147 PCA7428AL Multifunction PCI IO card 0148 PCA7428AS Multifunction PCI IO card 0149 PCA7228EL Multifunction PCI IO card with isolated analog inputs 0150 PCA7428EL Multifunction PCI IO card with isolated analog inputs 0151 PCA7628AL - PCI card with analog inputs, counters and DIO 0152 PCA7628AS PCI card with analog inputs, outputs, counters and DIO 0161 PCA7288A PCI card with analog outputs, counters and DIO 0180 PCI1052 Communication card for MicroUnit network 0214 PCT-7424C (F0) PC card with standard counters 0215 PCT-7424C (F1) PC card with standard counters 0216 PCT-7424E (F0) PC card with standard counters 0217 PCT-7424E (F1) PC card with standard counters 0240 PCA7428CL_F0 - analog Inputs 0241 PCA7428CL_F1 - analog Inputs 0242 PCA7428CS_F0 - Analog Inputs/Outputs non isolated 0243 PCA7428CS_F1 - Analog Inputs/Outputs non isolated 0244 PCA7428CE_F0 - Analog Inputs isolated 0245 PCA7428CE_F1 - Analog Inputs isolated 0303 PCD-7006C Digital Input & Output PCI Card 0800 PCD8006 - PCIe digital Inputs/Outputs 0840 PCA-8428 General-purpose multifunctional PCIe card with 8 analog inputs and 2 analog outputs 0841 PCA-8429 General-purpose multifunctional PCIe card with 8 analog inputs 0842 PCA-8438 General-purpose multifunctional PCIe card with 16 analog inputs and 2 analog outputs 0843 PCA-8439 General-purpose multifunctional PCIe card with 16 analog inputs ff00 CTU CAN FD PCIe Card 1761 Pickering Interfaces Ltd 1771 InnoVISION Multimedia Ltd. 1775 General Electric 177d Cavium, Inc. 0001 Nitrox XL N1 0003 Nitrox XL N1 Lite 0004 Octeon (and older) FIPS 0005 Octeon CN38XX Network Processor Pass 3.x 0006 RoHS 0010 CN15XX/CN16XX [Nitrox PX] 0011 CNN35XX [Nitrox III] 0012 CNN55XX [Nitrox V] 0020 Octeon CN31XX Network Processor 0030 Octeon CN30XX Network Processor 0040 Octeon CN58XX Network Processor 0050 Octeon CN57XX Network Processor (CN54XX/CN55XX/CN56XX) 0070 Octeon CN50XX Network Processor 0080 Octeon CN52XX Network Processor 0090 Octeon II CN63XX Network Processor 0091 Octeon II CN68XX Network Processor 0092 Octeon II CN65XX Network Processor 0093 Octeon II CN61XX Network Processor 0094 Octeon Fusion CNF71XX Cell processor 0095 Octeon III CN78XX Network Processor 0096 Octeon III CN70XX Network Processor 9700 Octeon III CN73XX Network Processor 9702 CN23XX [LiquidIO II] Intelligent Adapter 177d 0003 CN2350 [LiquidIO II] 2-port 10GbE Intelligent adapter # This was changed during the production phase to 10GbE adapter. 177d 0004 CN2350 [LiquidIO II] 2-port 10GbE Intelligent adapter 177d 0005 CN2360 [LiquidIO II] 2-port 10GbE Intelligent adapter 177d 0006 CN2360 [LiquidIO II] 2-port 25GbE Intelligent adapter 177d 0007 CN2350 [LiquidIO II] 2-port 25GbE Intelligent adapter 177d 0008 CN2350 [LiquidIO II] 2-port 10GbE SFP+ Intelligent adapter 177d 0009 CN2360 [LiquidIO II] 2-port 10GbE SFP+ Intelligent adapter 177d 000a CN2350 [LiquidIO II] 2-port 10GBASE-T Intelligent adapter 177d 000b CN2360 [LiquidIO II] 2-port 10GBASE-T Intelligent adapter 9703 CN23XX [LiquidIO II] NVMe Controller 9712 CN23XX [LiquidIO II] SRIOV Virtual Function 177d 0003 CN2350 [LiquidIO II] 2-port 10GbE SRIOV Virtual Function 177d 0004 CN2350 [LiquidIO II] 2-port 10GbE SRIOV Virtual Function 177d 0005 CN2360 [LiquidIO II] 2-port 10GbE SRIOV Virtual Function 177d 0006 CN2360 [LiquidIO II] 2-port 25GbE SRIOV Virtual Function 177d 0007 CN2350 [LiquidIO II] 2-port 25GbE SRIOV Virtual Function 9713 CN23XX [LiquidIO II] NVMe SRIOV Virtual Function 9800 Octeon Fusion CNF75XX Processor a001 ThunderX MRML(Master RML Bridge to RSL devices) a002 THUNDERX PCC Bridge 177d a102 CN88XX PCC Bridge a008 THUNDERX SMMU 177d a108 CN88XX SMMU a009 THUNDERX Generic Interrupt Controller a00a THUNDERX GPIO Controller a00b THUNDERX MPI / SPI Controller a00c THUNDERX MIO-PTP Controller a00d THUNDERX MIX Network Controller a00e THUNDERX Reset Controller a00f THUNDERX UART Controller a010 THUNDERX eMMC/SD Controller a011 THUNDERX MIO-BOOT Controller a012 THUNDERX TWSI / I2C Controller a013 THUNDERX CCPI (Multi-node connect) a014 THUNDERX Voltage Regulator Module a015 THUNDERX PCIe Switch Logic Interface a016 THUNDERX Key Memory a017 THUNDERX GTI (Global System Timers) a018 THUNDERX Random Number Generator a019 THUNDERX DFA a01a THUNDERX Zip Coprocessor a01b THUNDERX xHCI USB Controller a01c THUNDERX AHCI SATA Controller 177d a11c CN88XX AHCI SATA Controller a01d THUNDERX RAID Coprocessor a01e THUNDERX Network Interface Controller a01f THUNDERX Traffic Network Switch a020 THUNDERX PEM (PCI Express Interface) a021 THUNDERX L2C (Level-2 Cache Controller) a022 THUNDERX LMC (DRAM Controller) a023 THUNDERX OCLA (On-Chip Logic Analyzer) a024 THUNDERX OSM a025 THUNDERX GSER (General Serializer/Deserializer) a026 THUNDERX BGX (Common Ethernet Interface) a027 THUNDERX IOBN a029 THUNDERX NCSI (Network Controller Sideband Interface) a02a ThunderX SGPIO (Serial GPIO controller for SATA disk lights) a02b THUNDERX SMI / MDIO Controller a02c THUNDERX DAP (Debug Access Port) a02d THUNDERX PCIERC (PCIe Root Complex) a02e ThunderX L2C-TAD (Level 2 cache tag and data) a02f THUNDERX L2C-CBC a030 THUNDERX L2C-MCI a031 THUNDERX MIO-FUS (Fuse Access Controller) a032 THUNDERX FUSF (Fuse Controller) a033 THUNDERX Random Number Generator virtual function a034 THUNDERX Network Interface Controller virtual function a035 THUNDERX Parallel Bus a036 ThunderX RAD (RAID acceleration engine) virtual function a037 THUNDERX ZIP virtual function a040 THUNDERX CPT Cryptographic Accelerator # MAC found on OcteonTx2 series of silicons a059 Octeon TX2 CGX (MAC) # MAC found on Octeon 10 series of silicons a060 Octeon 10 RPM (MAC) # Octeon Tx2 Loopback Interface block a061 Octeon Tx2 Loopback Interface (LBK) # Octeon Tx2 Resource Virtualization Unit Physical Function a063 Octeon Tx2 RVU Physical Function # Octeon Tx2 Resource Virtualization Unit Virtual Function a064 Octeon Tx2 RVU Virtual Function # Octeon Tx2 Resource Virtualization Unit Admin Function a065 Octeon Tx2 RVU Admin Function # PTP Timestamping unit on Octeon 10 silicon series a09e Octeon 10 PTP controller # Cryptographic Accelerator found on Octeon 10 series of silicons a0f2 Octeon 10 CPT Cryptographic Accelerator, Physical function a0f3 Octeon 10 CPT Cryptographic Accelerator, Virtual function # Octeon Tx2 System DPI Interface (SDP) Physical Function a0f6 Octeon Tx2 SDP Physical Function # Octeon Tx2 System DPI Interface (SDP) Virtual Function a0f7 Octeon Tx2 SDP Virtual Function a0f8 Octeon Tx2 Loopback Interface Virtual Function (LBKVF) # Cryptographic Accelerator found on OcteonTx2 series of silicons a0fd Octeon Tx2 CPT Cryptographic Accelerator, Physical function # Cryptographic Accelerator found on OcteonTx2 series of silicons a0fe Octeon Tx2 CPT Cryptographic Accelerator, Virtual function a100 THUNDERX CN88XX 48 core SoC a200 OCTEON TX CN81XX/CN80XX a300 OCTEON TX CN83XX af00 CN99xx [ThunderX2] Integrated PCI Host bridge af84 CN99xx [ThunderX2] Integrated PCI Express RP Bridge 1787 Hightech Information System Ltd. 1789 Ennyah Technologies Corp. # also used by Struck Innovative Systeme for joint developments 1796 Research Centre Juelich 0001 SIS1100 [Gigabit link] 0002 HOTlink 0003 Counter Timer 0004 CAMAC Controller 0005 PROFIBUS 0006 AMCC HOTlink 0007 LVD Cable Bus 0008 100MHz, 64bit Sequence Generator based on VirtexII 0009 double 14bit-ADC 000a SIS1100 with N110 TDC 000b double 14bit-ADC with memory 000d Synchronisation Slave 000e SIS1100-eCMC 000f TDC (GPX) 0010 PCIe Counter Timer 0011 SIS1100-e single link 0012 SIS1100-e quad link 0013 4x2.5GHz SFP to 4 lane PCIe bridge 0014 SIS1100 with GPX piggy back 0015 SIS8100 [Gigabit link, MicroTCA] 0016 SIS1100e with 4 lanes 0017 Quad 14bit, 50MHz ADC with 2.5GHz SFP 0018 SIS8300 4-lane PCI Express, Micro TCA for Physics ADC 0019 SIS SIS8300-Lx MTCA.4 Digitizer 001a 100MHz, 64bit Sequence Generator based on VirtexII 001c Quad 16bit, 150MHz ADC with 2.5GHz SFP 0030 100MHz, 64bit Sequence Generator based on Spartan6 0031 200MHz 64bit Sequence Generator based on Spartan7 # nee Techwell, Inc. 1797 Intersil Techwell 5864 TW5864 multimedia video controller 6801 TW6802 multimedia video card 6802 TW6802 multimedia other device 6810 TW6816 multimedia video controller 6811 TW6816 multimedia video controller 6812 TW6816 multimedia video controller 6813 TW6816 multimedia video controller # port 5 of 8 6814 TW6816 multimedia video controller # port 6 of 8 6815 TW6816 multimedia video controller # port 7 of 8 6816 TW6816 multimedia video controller # channel 8 of 8 6817 TW6816 multimedia video controller # Example MuniPCI-E card: http://www.commell.com.tw/product/surveillance/MPX-6864.htm 6864 TW6864 multimedia video controller 1799 Belkin 6001 F5D6001 Wireless PCI Card [Realtek RTL8180] 6020 F5D6020 v3000 Wireless PCMCIA Card [Realtek RTL8180] 6060 F5D6060 Wireless PDA Card 700f F5D7000 v7000 Wireless G Desktop Card [Realtek RTL8185] 701f F5D7010 v7000 Wireless G Notebook Card [Realtek RTL8185] 179a id Quantique 0001 Quantis PCI 16Mbps 179c Data Patterns 0557 DP-PCI-557 [PCI 1553B] 0566 DP-PCI-566 [Intelligent PCI 1553B] 1152 DP-cPCI-1152 (8-channel Isolated ADC Module) 5031 DP-CPCI-5031-Synchro Module # cPCI Carrier for Mezzanine Modules 5112 DP-cPCI-5112 [MM-Carrier] 5121 DP-CPCI-5121-IP Carrier 5211 DP-CPCI-5211-IP Carrier 5679 AGE Display Module 17a0 Genesys Logic, Inc 7163 GL9701 PCIe to PCI Bridge 8083 GL880 USB 1.1 UHCI controller 8084 GL880 USB 2.0 EHCI controller 9750 GL9750 SD Host Controller 9755 GL9755 SD Host Controller 9767 GL9767 SD Host Controller e763 GL9763E eMMC Controller 17aa Lenovo 0003 LENSE20256GMSP34MEAT2TA 0004 LENSE20512GMSP34MEAT2TA # 250GB nvme ssd from lenovo, can be found in Thinkpad x380 yoga 0005 LENSE30256GMSP34MEAT3TA 0006 LENSE30512GMSP34MEAT3TA 402b Intel 82599ES 10Gb 2-port Server Adapter X520-2 9602 RS780/RS880 PCI to PCI bridge (int gfx) 17ab Phillips Components 17af Hightech Information System Ltd. 17b3 Hawking Technologies ab08 PN672TX 10/100 Ethernet 17b4 Indra Networks, Inc. 0011 WebEnhance 100 GZIP Compression Card 0012 WebEnhance 200 GZIP Compression Card 0015 WebEnhance 300 GZIP Compression Card 0016 StorCompress 300 GZIP Compression Card 0017 StorSecure 300 GZIP Compression and AES Encryption Card 17c0 Wistron Corp. 17c2 Newisys, Inc. 17c3 Protogate, Inc. # nee Airgo Networks, Inc. 17cb Qualcomm Technologies, Inc 0001 AGN100 802.11 a/b/g True MIMO Wireless Card 1385 5c00 WGM511 Pre-N 802.11g Wireless CardBus Adapter 1737 0045 WMP54GX v1 802.11g Wireless-G PCI Adapter with SRX 0002 AGN300 802.11 a/b/g True MIMO Wireless Card 1385 6d00 WPNT511 RangeMax 240 Mbps Wireless CardBus Adapter 1737 0054 WPC54GX4 v1 802.11g Wireless-G Notebook Adapter with SRX400 0104 APQ8096 PCIe Root Complex [Snapdragon 820] 0105 MSM8998 PCIe Root Complex 0106 SDM850 PCIe Root Complex [Snapdragon 850] 0107 SDM850 PCIe Root Port [Snapdragon 850] 0108 SM8150 PCIe Root Complex 0109 SA8195P PCIe Root Complex 010b SM8250 PCIe Root Complex [Snapdragon 865/870 5G] 010c SM8350 PCIe Root Complex [Snapdragon 888] 010e SC8280XP PCI Express Root Port 0110 SM8475 PCIe Root Complex [Snapdragon 8+ Gen 1] 0111 SC8380XP PCIe Root Complex [Snapdragon X / X Plus / X Elite] 0113 SM8550/SM8650 PCIe Root Complex [Snapdragon 8 Gen 2/Gen 3] 0300 MDM9x35 LTE Modem [Snapdragon X7] 0301 MDM9x45 LTE Modem [Snapdragon X12] 0302 MDM9x55 LTE Modem [Snapdragon X16] 0304 SDX24 [Snapdragon X24 4G] 0306 SDX55 [Snapdragon X55 5G] 0400 Datacenter Technologies QDF2432 PCI Express Root Port 0401 Datacenter Technologies QDF2400 PCI Express Root Port 1000 QCS405 PCIe Root Complex 1003 IPQ6018 PCIe Root Complex 1101 QCA6390 Wireless Network Adapter 1103 QCNFA765 Wireless Network Adapter 1104 QCN6024/9024/9074 Wireless Network Adapter 1107 WCN785x Wi-Fi 7(802.11be) 320MHz 2x2 [FastConnect 7800] 105b e0f7 High Band Simultaneous Wireless Network Adapter 1108 IPQ95xx/97xx PCIe Root Port 1109 QCN62xx/92xx Wireless Network Adapter 17cc NetChip Technology, Inc 2280 NET2280 PCI to USB 2.0 Hi-Speed Peripheral Controller 2282 NET2282 PCI to USB 2.0 Hi-Speed Peripheral Controller 17cd Cadence Design Systems, Inc. 17cf Z-Com, Inc. 17d3 Areca Technology Corp. 1110 ARC-1110 4-Port PCI-X to SATA RAID Controller 1120 ARC-1120 8-Port PCI-X to SATA RAID Controller 1130 ARC-1130 12-Port PCI-X to SATA RAID Controller 1160 ARC-1160 16-Port PCI-X to SATA RAID Controller 1170 ARC-1170 24-Port PCI-X to SATA RAID Controller 1201 ARC-1200 2-Port PCI-Express to SATA II RAID Controller 1203 ARC-1203 2/4/8 Port PCIe 2.0 to SATA 6Gb RAID Controller 1210 ARC-1210 4-Port PCI-Express to SATA RAID Controller 1214 ARC-12x4 PCIe 2.0 to SAS/SATA 6Gb RAID Controller 17d3 1214 ARC-1214 4-Port PCIe 2.0 to SAS/SATA 6Gb RAID Controller 17d3 1224 ARC-1224 8-Port PCIe 2.0 to SAS/SATA 6Gb RAID Controller 17d3 1264 ARC-1264 12/16 Port PCIe 2.0 to SATA 6Gb RAID Controller 17d3 1284 ARC-1284 24 Port PCIe 2.0 to SATA 6Gb RAID Controller 1220 ARC-1220 8-Port PCI-Express to SATA RAID Controller 1222 ARC-1222 8-Port PCI-Express to SAS/SATA II RAID Controller 1230 ARC-1230 12-Port PCI-Express to SATA RAID Controller 1260 ARC-1260 16-Port PCI-Express to SATA RAID Controller 1280 ARC-1280/1280ML 24-Port PCI-Express to SATA II RAID Controller 17d3 1221 ARC-1221 8-Port PCI-Express to SATA RAID Controller 1300 ARC-1300ix-16 16-Port PCI-Express to SAS Non-RAID Host Adapter 1320 ARC-1320 8/16 Port PCIe 2.0 to SAS/SATA 6Gb Non-RAID Host Adapter 1330 ARC-1330 16 Port PCIe 3.0 to SAS/SATA 12Gb Non-RAID Host Adapter 1680 ARC-1680 series PCIe to SAS/SATA 3Gb RAID Controller 17d3 1212 ARC-1212 4-Port PCIe to SAS/SATA II RAID Controller 17d3 1222 ARC-1222 8-Port PCIe to SAS/SATA 3Gb RAID Controller 17d3 1680 ARC-1680 8/12/16/24 Port PCIe to SAS/SATA 3Gb RAID Controller 1880 ARC-188x series PCIe 2.0/3.0 to SAS/SATA 6/12Gb RAID Controller 17d3 1213 ARC-1213 4-Port PCIe 2.0 to SAS/SATA 6Gb RAID Controller 17d3 1215 ARC-1215 4-Port PCIe 3.0 to SAS/SATA 6Gb RAID Controller 17d3 1216 ARC-1216 4-Port PCIe 3.0 to SAS/SATA 12Gb RAID Controller 17d3 1223 ARC-1223 8-Port PCIe 2.0 to SAS/SATA 6Gb RAID Controller 17d3 1225 ARC-1225 8-Port PCIe 3.0 to SAS/SATA 6Gb RAID Controller 17d3 1226 ARC-1226 8-Port PCIe 3.0 to SAS/SATA 12Gb RAID Controller 17d3 1880 ARC-1880 8/12/16/24 Port PCIe 2.0 to SAS/SATA 6Gb RAID Controller 17d3 1882 ARC-1882 8/12/16/24 Port PCIe 3.0 to SAS/SATA 6Gb RAID Controller 17d3 1883 ARC-1883 8/12/16/24 Port PCIe 3.0 to SAS/SATA 12Gb RAID Controller 1884 ARC-1884 series PCIe 3.0 to SAS/SATA 12/6Gb RAID Controller 1886 ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller 17d3 1686 ARC-1686 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller 17d3 1886 ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller 188a ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller 17d3 1217 ARC-1217 4-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller 17d3 1227 ARC-1227 8-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller 17d3 1686 ARC-1686 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller 17d3 1688 ARC-1688 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller 17d3 1886 ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller # nee Neterion Inc., previously S2io Inc. 17d5 Exar Corp. 5731 Xframe 10-Gigabit Ethernet PCI-X 5732 Xframe II 10-Gigabit Ethernet PCI-X 2.0 5831 Xframe 10-Gigabit Ethernet PCI-X 103c 12d5 PCI-X 133MHz 10GbE SR Fiber 10a9 8020 Single Port 10-Gigabit Ethernet (PCI-X, Fiber) 10a9 8024 Single Port 10-Gigabit Ethernet (PCI-X, Fiber) 5832 Xframe II 10-Gigabit Ethernet PCI-X 2.0 103c 1337 PCI-X 266MHz 10GigE SR [AD385A] 10a9 8021 Single Port 10-Gigabit Ethernet II (PCI-X, Fiber) 17d5 6020 Xframe II SR 17d5 6021 Xframe II SR, Low Profile 17d5 6022 Xframe E SR 17d5 6420 Xframe II LR 17d5 6421 Xframe II LR, Low Profile 17d5 6422 Xframe E LR 17d5 6c20 Xframe II CX4 17d5 6c21 Xframe II CX4, Low Profile 17d5 6c22 Xframe E CX4 5833 X3100 Series 10 Gigabit Ethernet PCIe 17d5 6030 X3110 Single Port SR 17d5 6031 X3120 Dual Port SR 17d5 6430 X3110 Single Port LR 17d5 6431 X3120 Dual Port LR 17d5 7030 X3110 Single Port LRM 17d5 7031 X3120 Dual Port LRM 17d5 7430 X3110 Single Port 10GBase-T 17d5 7431 X3120 Dual Port 10GBase-T 17d5 7830 X3110 Single Port 10GBase-CR 17d5 7831 X3120 Dual Port 10GBase-CR 17db Cray Inc 0101 XT Series [Seastar] 3D Toroidal Router 0501 Cassini 1 [Slingshot 200Gb] 17de KWorld Computer Co. Ltd. 17df Dini Group 1864 Virtex4 PCI Board w/ QL5064 Bridge [DN7000K10PCI/DN8000K10PCI/DN8000K10PSX/NOTUS] 1865 Virtex4 ASIC Emulator [DN8000K10PCIe] 1866 Virtex4 ASIC Emulator Cable Connection [DN8000K10PCI] 1867 Virtex4 ASIC Emulator Cable Connection [DN8000K10PCIe] 1868 Virtex4 ASIC Emulator [DN8000K10PCIe-8] 1900 Virtex5 PCIe ASIC Emulator [DN9000K10PCIe8T/DN9002K10PCIe8T/DN9200K10PCIe8T/DN7006K10PCIe8T/DN7406K10PCIe8T] 1901 Virtex5 PCIe ASIC Emulator Large BARs [DN9000K10PCIe8T/DN9002K10PCIe8T/DN9200K10PCIe8T/DN7006K10PCIe8T/DN7406K10PCIe8T] 1902 Virtex5 PCIe ASIC Emulator Low Power [Interceptor] 1903 Spartan6 PCIe FPGA Accelerator Board [DNBFCS12PCIe] 1904 Virtex6 PCIe ASIC Emulation Board [DNDUALV6_PCIe4] 1905 Virtex6 PCIe ASIC Emulation Board [DNV6F6PCIe] 1906 Virtex6 PCIe ASIC Emulation Board [DN2076K10] 1907 Virtex6 PCIe ASIC Emulation Board [DNV6F2PCIe] 1908 Virtex6 PCIe ASIC Emulation Board Large BARs[DNV6F2PCIe] 1909 Kintex7 PCIe FPGA Accelerator Board [DNK7F5PCIe] 190a Virtex7 PCIe ASIC Emulation Board [DNV7F1A] 190b Stratix5 PCIe ASIC Emulation Board [DNS5GXF2] 190c Virtex7 PCIe ASIC Emulation Board [DNV7F2A] 190d Virtex7 PCIe ASIC Emulation Board [DNV7F4A] 190e Virtex7 PCIe ASIC Emulation Board [DNV7F2B] 190f KintexUS PCIe MainRef Design [DNPCIE_40G_KU_LL] 1910 VirtexUS ASIC Emulation Board [DNVUF4A] 1911 VirtexUS PCIe ASIC Emulation Board [DNVU_F2PCIe] 1912 KintexUS PCIe MainRef Design [DNPCIe_40G_KU_LL_QSFP] 1913 VirtexUS ASIC Emulation Board [DNVUF1A] 1914 VirtexUS ASIC Emulation Board [DNVUF2A] 1915 Arria10 PCIe MainRef Design [DNPCIe_80G_A10_LL] 1916 VirtexUS PCIe Accelerator Board [DNVUF2_HPC_PCIe] 1917 UltrascalePlus PCIe Accelerator Board [DNPCIe_400G_VU_LL] 1918 VirtexUS+ ASIC Emulation Board [DNVUPF4A] 1919 UltrascalePlus PCIe Accelerator Board [DNPCIe_400G_VUP_HBM_LL] 1a00 Virtex6 PCIe DMA Netlist Design 1a01 Virtex6 PCIe Darklite Design [DNPCIe_HXT_10G_LL] 1a02 Virtex7 PCIe DMA Netlist Design 1a03 Kintex7 PCIe Darklite Design [DNPCIe_K7_10G_LL] 1a05 Stratix5 PCIe Darklite Design [DNS5GX_F2] 1a06 VirtexUS PCIe DMA Netlist Design 1a07 KintexUS PCIe Darklite Design [DNPCIe_40G_KU_LL] 1a08 KintexUS PCIe Darklite Design [DNPCIe_40G_KU_LL_QSFP] 1a09 Arria10 PCIe Darklite Design [DNPCIe_80G_A10_LL] 1a0a VirtexUS PCIe Darklite Design [DNVUF2_HPC_PCIe] 1a0b UltrascalePlus PCIe Darklite Design [DNPCIe_400G_VU_LL] 1a0c KintexUS PCIe DRAM Packet Capture Design [DNPCIe_40G_KU_LL] 1a0d KintexUS PCIe DRAM Packet Capture Design [DNPCIe_40G_KU_LL_2QSFP] 1a0e UltrascalePlus PCIe Darklite Design [DNPCIe_400G_VUP_HBM_LL] 17e4 Sectra AB 0001 KK671 Cardbus encryption board 0002 KK672 Cardbus encryption board # nee Entropic Communications Inc. 17e6 MaxLinear 0010 EN2010 [c.Link] MoCA Network Controller (Coax, PCI interface) 0011 EN2010 [c.Link] MoCA Network Controller (Coax, MPEG interface) 0021 EN2210 [c.Link] MoCA Network Controller (Coax) 0025 EN2510 [c.Link] MoCA Network Controller (Coax, PCIe interface) 0027 EN2710 [c.Link] MoCA 2.0 Network Controller (Coax, PCIe interface) 3700 MoCA 2.0 Network Controller (Coax, PCIe interface) 3710 MoCA 2.5 Network Controller (Coax, PCIe interface) 17ee Connect Components Ltd 17f2 Albatron Corp. 17f3 RDC Semiconductor, Inc. 1010 R1010 IDE Controller 1011 R1011 IDE Controller 1012 R1012 IDE Controller 1031 PCI/PCI-X to PCI-E Bridge # Integrated in Vortex86EX, Vortex86EX2 SoC 1070 CAN Bus Controller # Integrated in Vortex86EX, Vortex86EX2 SoCs 1331 Motion Control Interface # Found in the Vortex86EX2 SoC 1930 Hybrid Function Control Register # IGP = on-chip integrated in the MSTI-PMX-1000 (Vortex86MX). 2010 RDC M2010 VGA-compatible graphics adapter 2012 M2012/R3308 VGA-compatible graphics adapter # IGP = on-chip integrated in the Vortex86DX3. Basic 2D accel. UMA architecture. 2015 RDC M2015 VGA-compatible graphics adapter 3010 R3010 HD Audio Controller # Found in the Vortex86EX SoC 6011 R6011 ISA Bridge # Found in the Vortex86EX2 SoC 6013 R6013 ISA Bridge 6020 R6020 North Bridge 6021 R6021 Host Bridge # Integrated in the Vortex86DX2 SoC 6022 R6022 Host Bridge # Found in the Vortex86DX3 SoC 6023 R6023 Host Bridge # Found in the Vortex86EX SoC 6025 R6025 Host Bridge # Found in the Vortex86EX2 SoC 6026 R6026 Host Bridge 6030 R6030 ISA Bridge 6031 R6031 ISA Bridge # Found in the Vortex86DX3 SoC 6035 R6035 ISA Bridge # Found in MSTI-PMX-1000 (Vortex86MX) SoC. 6036 R6036 ISA Bridge 6040 R6040 MAC Controller 6060 R6060 USB 1.1 Controller 6061 R6061 USB 2.0 Controller 17f7 Topdek Semiconductor Inc. 17f9 Gemtek Technology Co., Ltd 17fc IOGEAR, Inc. 17fe InProComm Inc. 2120 IPN 2120 802.11b 1737 0020 WMP11 v4 802.11b Wireless-B PCI Adapter 2220 IPN 2220 802.11g 1468 0305 T60N871 802.11g Mini PCI Wireless Adapter 1737 0029 WPC54G v4 802.11g Wireless-G Notebook Adapter 17ff Benq Corporation 1800 Qualcore Logic Inc. 1100 Nanospeed Trading Gateway 1803 ProdaSafe GmbH 1804 Ralink corp. (wrong ID) 3060 RT3060 Wireless 802.11n 1T/1R 1805 Euresys S.A. 0201 PICOLO Alert PCI 0202 PICOLO Diligent 0204 PICOLO Alert-RC 0205 PICOLO Alert PCIe 0206 PICOLO Diligent Plus PCIe 0207 PICOLO Alert-RC PCIe 0300 GRABLINK Expert 2 0301 GRABLINK Quickpack ColorScan 0302 GRABLINK Value cPCI 0303 GRABLINK Expert 2 cPCI 0305 GRABLINK Avenue 0306 GRABLINK Quickpack CFA 0307 GRABLINK Express 0308 GRABLINK Quickpack CFA PCIe 0309 GRABLINK Quickpack CFA PCIe (Recovery) 030a GRABLINK Full 030b GRABLINK Full (Recovery) 030c GRABLINK DualBase 030d GRABLINK DualBase (Recovery) 030e GRABLINK Base 030f GRABLINK Base (Recovery) 0310 GRABLINK Full XR 0311 GRABLINK Full XR (Recovery) 0401 DOMINO Iota 0402 DOMINO Alpha 2 0403 DOMINO Harmony 0404 DOMINO Melody 0407 DOMINO Symphony 0408 DOMINO Symphony PCIe 0814 Coaxlink Quad CXP-12 1809 Lumanate, Inc. 180c IEI Integration Corp 1813 Ambient Technologies Inc 4000 HaM controllerless modem 16be 0001 V9x HAM Data Fax Modem 4100 HaM plus Data Fax Modem 16be 0002 V9x HAM 1394 1814 Ralink corp. 0101 Wireless PCI Adapter RT2400 / RT2460 1043 0127 WiFi-b add-on Card 1371 0010 Minitar MNW2BPCI Wireless PCI Card 1462 6828 PC11B2 (MS-6828) Wireless 11b PCI Card 0200 RT2500 802.11g PCI [PC54G2] 0201 RT2500 Wireless 802.11bg 1043 130f WL-130g 1186 3c00 DWL-G650X Wireless 11g CardBus Adapter 1371 001e CWC-854 Wireless-G CardBus Adapter 1371 001f CWM-854 Wireless-G Mini PCI Adapter 1371 0020 CWP-854 Wireless-G PCI Adapter 1458 e381 GN-WMKG 802.11b/g Wireless CardBus Adapter 1458 e931 GN-WIKG 802.11b/g mini-PCI Adapter 1462 6833 Unknown 802.11g mini-PCI Adapter 1462 6835 Wireless 11G CardBus CB54G2 1737 0032 WMP54G v4.0 PCI Adapter 1799 700a F5D7000 v2000/v3000 Wireless G Desktop Card 1799 701a F5D7010 v2000/v3000 Wireless G Notebook Card 1814 2560 RT2500 Wireless 802.11bg 182d 9073 WL-115 Wireless Network PCI Adapter 185f 22a0 CN-WF513 Wireless Cardbus Adapter 18eb 5312 WL531P IEEE 802.11g PCI Card-EU 1948 3c00 C54RC v1 Wireless 11g CardBus Adapter 1948 3c01 C54Ri v1 Wireless 11g PCI Adapter 0300 Wireless Adapter Canyon CN-WF511 0301 RT2561/RT61 802.11g PCI 1186 3c08 AirPlus G DWL-G630 Wireless Cardbus Adapter (rev.E1) 1186 3c09 DWL-G510 Rev C 13d1 abe3 miniPCI Pluscom 802.11 a/b/g 1458 e933 GN-WI01GS 1458 e934 GN-WP01GS 1462 b833 MP54G5 (MS-6833B) 1737 0055 WMP54G v4.1 1799 700e F5D7000 v6000 Wireless G Desktop Card 1799 701e F5D7010 v6000 Wireless G Notebook Card 17f9 0012 AWLC3026T 802.11g Wireless CardBus Adapter 1814 2561 EW-7108PCg/EW-7128g 0302 RT2561/RT61 rev B 802.11g 1186 3a71 DWA-510 Wireless G Desktop Adapter 1186 3c08 AirPlus G DWL-G630 Wireless Cardbus Adapter (rev.E2) 1186 3c09 AirPlus G DWL-G510 Wireless Network Adapter (Rev.C) 1462 b834 PC54G3 Wireless 11g PCI Card 1948 3c23 C54RC v2 Wireless 11g CardBus Adapter 1948 3c24 C54Ri v2 Wireless 11g PCI Adapter 0401 RT2600 802.11 MIMO 1737 0052 WPC54GR v1 802.11g Wireless-G Notebook Adapter with RangeBooster 17f9 0011 WPCR-137G 802.11bg Wireless CardBus Adapter 17f9 0016 WPIR-119GH 802.11bg Wireless Desktop Adapter 0601 RT2800 802.11n PCI 1799 801c F5D8011 v3 802.11n N1 Wireless Notebook Card 187e 3412 NWD-310N 802.11n Wireless PCI Adapter 0681 RT2890 Wireless 802.11n PCIe 1458 e939 GN-WS30N-RH 802.11bgn Mini PCIe Card 0701 RT2760 Wireless 802.11n 1T/2R 1737 0074 WMP110 v2 802.11n RangePlus Wireless PCI Adapter 0781 RT2790 Wireless 802.11n 1T/2R PCIe 11ad 7600 HP WN7600R 1814 2790 RT2790 Wireless 802.11n 1T/2R PCIe 3060 RT3060 Wireless 802.11n 1T/1R 1186 3c04 DWA-525 Wireless N 150 Desktop Adapter (rev.A1) 3062 RT3062 Wireless 802.11n 2T/2R 3090 RT3090 Wireless 802.11n 1T/1R PCIe 13bd 1057 GN-WS32L-RH Half-size Mini PCIe Card 3091 RT3091 Wireless 802.11n 1T/2R PCIe 3092 RT3092 Wireless 802.11n 2T/2R PCIe 3290 RT3290 Wireless 802.11n 1T/1R PCIe 103c 18ec Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter 3298 RT3290 Bluetooth 103c 18ec Ralink RT3290LE 802.11bgn 1x1 Wi-Fi and Bluetooth 4.0 Combo Adapter 3592 RT3592 Wireless 802.11abgn 2T/2R PCIe 359f RT3592 PCIe Wireless Network Adapter 5360 RT5360 Wireless 802.11n 1T/1R 1186 3c05 DWA-525 Wireless N 150 Desktop Adapter (rev.A2) 20f4 703a TEW-703PI N150 Wireless PCI Adapter 5362 RT5362 PCI 802.11n Wireless Network Adapter 5390 RT5390 Wireless 802.11n 1T/1R PCIe 103c 1636 U98Z077.00 Half-size Mini PCIe Card 5392 RT5392 PCIe Wireless Network Adapter 539b RT5390R 802.11bgn PCIe Wireless Network Adapter 539f RT5390 [802.11 b/g/n 1T1R G-band PCI Express Single Chip] 103c 1637 Pavilion DM1Z-3000 PCIe wireless card 5592 RT5592 PCIe Wireless Network Adapter e932 RT2560F 802.11 b/g PCI 1815 Devolo AG 1820 InfiniCon Systems Inc. 1822 Twinhan Technology Co. Ltd 4e35 Mantis DTV PCI Bridge Controller [Ver 1.0] 182d SiteCom Europe BV # HFC-based ISDN card 3069 ISDN PCI DC-105V2 9790 WL-121 Wireless Network Adapter 100g+ [Ver.3] 182e Raza Microelectronics, Inc. 0008 XLR516 Processor # Strange vendor ID used by BCM5785 when in RAID mode 182f Broadcom # HT1000 uses 3 IDs 1166:024a (Native SATA Mode), 1166:024b (PATA/IDE Mode), 182f:000b (RAID Mode) depends on SATA BIOS setting 000b BCM5785 [HT1000] SATA (RAID Mode) 1830 Credence Systems Corporation 8000 CPIn 8001 CPId 8002 CPIx 8003 CPIq 183b MikroM GmbH 08a7 MVC100 DVI 08a8 MVC101 SDI 08a9 MVC102 DVI+Audio 08b0 MVC200-DC 1846 Alcatel-Lucent 1849 ASRock Incorporation 9602 RS780/RS880 PCI to PCI bridge (int gfx) 184a Thales Computers 1100 MAX II cPLD 1850 Advantest Corporation 0048 EK220-66401 Computer Interface Card 1851 Microtune, Inc. 1852 Anritsu Corp. 1853 SMSC Automotive Infotainment System Group 1854 LG Electronics, Inc. 185b Compro Technology, Inc. 1489 VideoMate Vista T100 185f Wistron NeWeb Corp. 1864 SilverBack 2110 ISNAP 2110 1867 Topspin Communications 5a44 MT23108 InfiniHost HCA 5a45 MT23108 InfiniHost HCA flash recovery 5a46 MT23108 InfiniHost HCA bridge 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) 6282 MT25208 InfiniHost III Ex 186c Humusoft, s.r.o. 0612 AD612 Data Acquisition Device 0614 MF614 Multifunction I/O Card 0622 AD622 Data Acquisition Device 0624 MF624 Multifunction I/O PCI Card 0625 MF625 3-phase Motor Driver 0634 MF634 Multifunction I/O PCIe Card 0644 MF644 Multifunction I/O Thb Card 186f WiNRADiO Communications 1876 L-3 Communications a101 VigraWATCH PCI a102 VigraWATCH PMC a103 Vigra I/O 187e ZyXEL Communications Corporation 3403 ZyAir G-110 802.11g 340e M-302 802.11g XtremeMIMO 1885 Avvida Systems Inc. 1888 Varisys Ltd 0301 VMFX1 FPGA PMC module 0601 VSM2 dual PMC carrier 0710 VS14x series PowerPC PCI board 0720 VS24x series PowerPC PCI board 188a Ample Communications, Inc 1890 Egenera, Inc. 1894 KNC One 1896 B&B Electronics Manufacturing Company, Inc. 4202 MIport 3PCIU2 2-port Serial 4204 MIport 3PCIU4 4-port Serial 4208 MIport 3PCIU8 8-port Serial 4211 MIport 3PCIOU1 1-port Isolated Serial 4212 MIport 3PCIOU2 2-port Isolated Serial 4214 MIport 3PCIOU4 4-port Isolated Serial bb10 3PCI2 2-Port Serial bb11 3PCIO1 1-Port Isolated Serial 1897 AMtek 18a1 Astute Networks Inc. 18a2 Stretch Inc. 0002 VRC6016 16-Channel PCIe DVR Card 18a3 AT&T 18ac DViCO Corporation d500 FusionHDTV 5 d800 FusionHDTV 3 Gold d810 FusionHDTV 3 Gold-Q d820 FusionHDTV 3 Gold-T db30 FusionHDTV DVB-T Pro db40 FusionHDTV DVB-T Hybrid db78 FusionHDTV DVB-T Dual Express 18b8 Ammasso b001 AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor # formally Info-Tek Corp. 18bc GeCube Technologies, Inc. 18c3 Micronas Semiconductor Holding AG 0720 nGene PCI-Express Multimedia Controller 1461 032e Hybrid M779 PCI-E # Nee Octigabay System 18c8 Cray Inc 18c9 ARVOO Engineering BV 18ca XGI Technology Inc. (eXtreme Graphics Innovation) 0020 Z7/Z9 (XG20 core) 0021 Z9s/Z9m (XG21 core) 0027 Z11/Z11M 0040 Volari V3XT/V5/V8 0047 Volari 8300 (chip: XP10, codename: XG47) # should be 182d 18d2 Sitecom Europe BV (Wrong ID) # Sitecom HFC-S based ISDN controller card DC-105v2 3069 DC-105v2 ISDN controller 18d4 Celestica # OCP-TAP 1007 Time Card 18d8 Dialogue Technology Corp. 18dd Artimi Inc 4c6f Artimi RTMI-100 UWB adapter 18df LeWiz Communications 18e6 MPL AG 0001 OSCI [Octal Serial Communication Interface] 18eb Advance Multimedia Internet Technology, Inc. 18ec Cesnet, z.s.p.o. 6d05 ML555 18ec 0100 NIC (ethernet interfaces) 18ec 0200 NIC (szedata2) 4x1G 18ec 0201 NIC (szedata2) 2x10G 18ec 0300 NIFIC (szedata2) 4x1G 18ec 0302 NIFIC (szedata2) 2x10G 18ec 4200 Flexible FlowMon (szedata2) 1x10G 18ec ff00 Testing design 18ec ff01 Boot design c006 COMBO6 18ec d001 COMBO-4MTX 18ec d002 COMBO-4SFP 18ec d003 COMBO-4SFPRO 18ec d004 COMBO-2XFP c032 COMBO-LXT110 18ec 0100 NIC (ethernet interfaces) 18ec 0200 NIC (szedata2) 4x1G 18ec 0201 NIC (szedata2) 2x10G 18ec 0300 NIFIC (szedata2) 4x1G 18ec 0302 NIFIC (szedata2) 2x10G 18ec 4200 Flexible FlowMon (szedata2) 1x10G 18ec ff00 Testing design 18ec ff01 Boot design c045 COMBO6E c050 COMBO-PTM c058 COMBO6X 18ec d001 COMBO-4MTX 18ec d002 COMBO-4SFP 18ec d003 COMBO-4SFPRO 18ec d004 COMBO-2XFP c132 COMBO-LXT155 18ec 0100 NIC (ethernet interfaces) 18ec 0200 NIC (szedata2) 4x1G 18ec 0201 NIC (szedata2) 2x10G 18ec 0300 NIFIC (szedata2) 4x1G 18ec 0302 NIFIC (szedata2) 2x10G 18ec 4200 Flexible FlowMon (szedata2) 1x10G 18ec ff00 Testing design 18ec ff01 Boot design c232 COMBO-FXT100 18ec 0100 NIC (ethernet interfaces) 18ec 0200 NIC (szedata2) 4x1G 18ec 0201 NIC (szedata2) 2x10G 18ec 0300 NIFIC (szedata2) 4x1G 18ec 0302 NIFIC (szedata2) 2x10G 18ec 4200 Flexible FlowMon (szedata2) 1x10G 18ec ff00 Testing design 18ec ff01 Boot design c400 COMBO-400G1 18ee Chenming Mold Ind. Corp. 18f1 Spectrum GmbH 18f4 Napatech A/S 0031 NT20X Network Adapter 0051 NT20X Capture Card 0061 NT20E Capture Card 0064 NT20E Inline Card 0071 NT4E Capture Card 0074 NT4E Inline Card 0081 NT4E 4-port Expansion Card 0091 NT20X Capture Card [New Rev] 00a1 NT4E-STD Capture Card 00a4 NT4E-STD Inline Card # 8 x 1 Gbps / 10 Gbps PCIe Optical Bypass Adapter 00b1 NTBPE Optical Bypass Adapter 00c5 NT20E2 Network Adapter 2x10Gb 00d5 NT40E2-4 Network Adapter 4x10Gb 00e5 NT40E2-1 Network Adapter 1x40Gb # 4-Port Adapter for 1 GbE In-Line Bypass Applications 00f5 NT4E2-4T-BP Network Adapter 4x1Gb with Electrical Bypass 0105 NT4E2-4-PTP Network Adapter 4x1Gb 0115 NT20E2-PTP Network Adapter 2x10Gb 0125 NT4E2-4-PTP Network Adapter 4x1Gb 0135 NT20E2-PTP Network Adapter 2x10Gb 0145 NT40E3-4-PTP Network Adapter 4x10Gb 0155 NT100E3-1-PTP Network Adapter 1x100Gb 0165 NT80E3-2-PTP Network Adapter 2x40Gb 0175 NT20E3-2-PTP Network Adapter 2x10Gb 0185 NT40A01 Network Adapter 01a5 NT200A01 Network Adapter 01c5 NT200A02 Network Adapter 01d5 NT50B01 Network Adapter 01e5 NT100A01 Network Adapter 0215 NT400D11 Network Adapter 0225 NT40A11 Network Adapter 0295 NT400D13 Network Adapter 18f6 NextIO 1000 [Nexsis] Switch Virtual P2P PCIe Bridge 1001 [Texsis] Switch Virtual P2P PCIe Bridge 1050 [Nexsis] Switch Virtual P2P PCI Bridge 1051 [Texsis] Switch Virtual P2P PCI Bridge 2000 [Nexsis] Switch Integrated Mgmt. Endpoint 2001 [Texsis] Switch Integrated Mgmt. Endpoint 18f7 Commtech, Inc. 0001 ESCC-PCI-335 Serial PCI Adapter [Fastcom] 0002 422/4-PCI-335 Serial PCI Adapter [Fastcom] 0003 232/4-1M-PCI Serial PCI Adapter [Fastcom] 0004 422/2-PCI-335 Serial PCI Adapter [Fastcom] 0005 IGESCC-PCI-ISO/1 Serial PCI Adapter [Fastcom] 000a 232/4-PCI-335 Serial PCI Adapter [Fastcom] 000b 232/8-PCI-335 Serial PCI Adapter [Fastcom] 000f FSCC Serial PCI Adapter [Fastcom] 0010 GSCC Serial PCI Adapter [Fastcom] 0011 QSSB Serial PCI Adapter [Fastcom] 0014 SuperFSCC Serial PCI Adapter [Fastcom] 0015 SuperFSCC-104-LVDS Serial PC/104+ Adapter [Fastcom] 0016 FSCC-232 RS-232 Serial PCI Adapter [Fastcom] # Software UARTs 0017 SuperFSCC-104 Serial PC/104+ Adapter [Fastcom] # Software UARTs 0018 SuperFSCC/4 Serial PCI Adapter [Fastcom] # Software UARTs 0019 SuperFSCC Serial PCI Adapter [Fastcom] 001a SuperFSCC-LVDS Serial PCI Adapter [Fastcom] # Software UARTs 001b FSCC/4 Serial PCI Adapter [Fastcom] # RS-644 Only 001c SuperFSCC/4-LVDS Serial PCI Adapter [Fastcom] # Software UARTs 001d FSCC Serial PCI Adapter [Fastcom] 001e SuperFSCC/4 Serial PCIe Adapter [Fastcom] 001f SuperFSCC/4 Serial cPCI Adapter [Fastcom] 0020 422/4-PCIe Serial PCIe Adapter [Fastcom] 0021 422/8-PCIe Serial PCIe Adapter [Fastcom] # RS-644 Only 0022 SuperFSCC/4-LVDS Serial PCIe Adapter [Fastcom] # Software UARTs 0023 SuperFSCC/4 Serial cPCI Adapter [Fastcom] # RS-644 Only, Software UARTs 0025 SuperFSCC/4-LVDS Serial PCI Adapter [Fastcom] # RS-644 Only, Software UARTs 0026 SuperFSCC-LVDS Serial PCI Adapter [Fastcom] # Software UARTs 0027 FSCC/4 Serial PCIe Adapter [Fastcom] 18fb Resilience Corporation 1904 Hangzhou Silan Microelectronics Co., Ltd. 2031 SC92031 PCI Fast Ethernet Adapter 8139 RTL8139D [Realtek] PCI 10/100BaseTX ethernet adaptor 1905 Micronas USA, Inc. # since the merger with NEC Electronics in 2010 1912 Renesas Electronics Corp. 0002 SH7780 PCI Controller (PCIC) 0011 SH7757 PCIe End-Point [PBI] 0012 SH7757 PCIe-PCI Bridge [PPB] 0013 SH7757 PCIe Switch [PS] 0014 uPD720201 USB 3.0 Host Controller 0015 uPD720202 USB 3.0 Host Controller 4c52 9a72 LRSU9A72 2-Port USB 3.0 Exchange Adapter 001a SH7758 PCIe-PCI Bridge [PPB] 001b SH7758 PCIe End-Point [PBI] 001d SH7758 PCIe Switch [PS] 1919 Soltek Computer Inc. 1923 Sangoma Technologies Corp. 0040 A200/Remora FXO/FXS Analog AFT card 0100 A104d QUAD T1/E1 AFT card 0300 A101 single-port T1/E1 0400 A104u Quad T1/E1 AFT 1924 AMD Solarflare 0703 SFC4000 rev A net [Solarstorm] 10b8 0102 SMC10GPCIe-10BT (A2) [TigerCard] 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] 1924 0101 SFE4001-A1 1924 0102 SFE4001-A2 1924 0103 SFE4001-A3 1924 0201 SFE4002-A1 1924 0301 SFE4003-A1 1924 0302 SFE4003-A2 1924 0303 SFE4003-A3 1924 0304 SFE4003-A4 1924 0500 SFE4005-A0 0710 SFC4000 rev B [Solarstorm] 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] 1924 0102 SFE4001-A2 1924 0103 SFE4001-A3 1924 0201 SFE4002-A1 1924 0302 SFE4003-A2 1924 0303 SFE4003-A3 1924 0304 SFE4003-A4 1924 0500 SFE4005-A0 1924 5102 SFN4111T-A2 1924 5103 SFN4111T-R3 1924 5104 SFN4111T-R4 1924 5105 SFN4111T-R5 1924 5201 SFN4112F-R1 1924 5202 SFN4112F-R2 0803 SFC9020 10G Ethernet Controller 1014 0478 2-port 10GbE Low-Latency (R7) 1014 0479 2-port 10GbE OpenOnload (R7) 1014 04a7 Solarflare 10Gb Low-latency Dual-port HBA (R7) 1014 04a8 Solarflare 10Gb Dual-port HBA (R7) 103c 2132 Ethernet 10Gb 2-port 570FLR-SFP+ Adapter (R1) 103c 2136 Ethernet 10Gb 2-port 570SFP+ Adapter (R7) 1924 1201 SFA6902F-R1 SFP+ AOE Adapter 1924 6200 SFN5122F-R0 SFP+ Server Adapter 1924 6201 SFN5122F-R1 SFP+ Server Adapter 1924 6202 SFN5122F-R2 SFP+ Server Adapter 1924 6204 SFN5122F-R4 SFP+ Server Adapter 1924 6205 SFN5122F-R5 SFP+ Server Adapter 1924 6206 SFN5122F-R6 SFP+ Server Adapter 1924 6207 SFN5122F-R7 SFP+ Server Adapter 1924 6210 SFN5322F-R0 SFP+ Precision Time Synchronization Server Adapter 1924 6211 SFN5322F-R1 SFP+ Precision Time Synchronization Server Adapter 1924 6217 SFN5322F-R7 SFP+ Precision Time Synchronization Server Adapter 1924 6227 SFN6122F-R7 SFP+ Server Adapter 1924 6237 SFN6322F-R7 SFP+ Precision Time Synchronization Server Adapter 1924 6501 SFN5802K-R1 Mezzanine Adapter 1924 6511 SFN5814H-R1 Mezzanine Adapter 1924 6521 SFN5812H-R1 Mezzanine Adapter 1924 6562 SFN6832F-R2 SFP+ Mezzanine Adapter 1924 6a05 SFN5112F-R5 SFP+ Server Adapter 1924 6a06 SFN5112F-R6 SFP+ Server Adapter 1924 7206 SFN5162F-R6 SFP+ Server Adapter 1924 7207 SFN5162F-R7 SFP+ Server Adapter 1924 7a06 SFN5152F-R6 SFP+ Server Adapter 1924 7a07 SFN5152F-R7 SFP+ Server Adapter 0813 SFL9021 10GBASE-T Ethernet Controller 1924 6100 SFN5121T-R0 10GBASE-T Server Adapter 1924 6102 SFN5121T-R2 10GBASE-T Server Adapter 1924 6103 SFN5121T-R3 10GBASE-T Server Adapter 1924 6104 SFN5121T-R4 10GBASE-T Server Adapter 1924 6902 SFN5111T-R2 10GBASE-T Server Adapter 1924 6904 SFN5111T-R4 10GBASE-T Server Adapter 1924 7104 SFN5161T-R4 10GBASE-T Server Adapter 1924 7904 SFN5151T-R4 10GBASE-T Server Adapter 0903 SFC9120 10G Ethernet Controller 1014 04cc SFN7122F-R2 2x10GbE SFP+ Flareon Ultra 1924 8002 SFN7122F-R1 SFP+ Server Adapter 1924 8003 SFN7x41Q-R1 Flareon Ultra 7000 Series 10/40G Adapter 1924 8006 SFN7022F-R1 SFP+ Server Adapter 1924 8007 SFN7322F-R2 Precision Time SFP+ Server Adapter 1924 8009 SFN7x22F-R2 Flareon Ultra 7000 Series 10G Adapter 1924 800a SFN7x02F-R2 Flareon 7000 Series 10G Adapter 1924 800c SFN7x22F-R3 Flareon Ultra 7000 Series 10G Adapter 1924 800d SFN7x02F-R3 Flareon 7000 Series 10G Adapter 1924 8010 SFA7942Q-R1 QSFP+ AOE Adapter 1924 8015 SFA7942Q-A5-0-R1 QSFP+ AOE Adapter 0923 SFC9140 10/40G Ethernet Controller 1924 800b SFN7x42Q-R1 Flareon Ultra 7000 Series 10/40G Adapter 1924 800e SFN7x42Q-R2 Flareon Ultra 7000 Series 10/40G Adapter 1924 800f SFN7xx4F-R1 Flareon Ultra 7000 Series 10G Adapter 0a03 SFC9220 10/40G Ethernet Controller 1924 8011 SFN8022-R1 8000 Series 10G Adapter 1924 8012 SFN8522-R1 8000 Series 10G Adapter 1924 8013 SFN8042-R1 8000 Series 10/40G Adapter 1924 8014 SFN8542-R1 8000 Series 10/40G Adapter 1924 8016 SFN8022-R2 8000 Series 10G Adapter 1924 8017 SFN8522-R2 8000 Series 10G Adapter 1924 8018 SFN8042-R2 8000 Series 10/40G Adapter 1924 8019 SFN8542-R2 8000 Series 10/40G Adapter 1924 801a SFN8722-R1 8000 Series OCP 10G Adapter 1924 801b SFN8522-R3 8000 Series 10G Adapter 1924 801c SFN8042-R3 8000 Series 10/40G Adapter 1924 8021 SFN8041-R1 8000 Series 10/40G Adapter 0b03 XtremeScale SFC9250 10/25/40/50/100G Ethernet Controller 1924 801d x2522-R1 2000 Series 10/25G Adapter 1924 801e x2542-R1 2000 Series 40/100G Adapter 1924 8022 XtremeScale X2522 10G Network Adapter 1924 8024 XtremeScale X2562 OCP 3.0 Dual Port SFP28 1924 8027 XtremeScale X2541 PCIe Single Port QSFP28 1924 8028 XtremeScale X2522-25G Network Adapter 1924 802a XtremeScale X2542 PCIe Dual Port QSFP28 1924 802b XtremeScale X2552 OCP 2.0 Dual Port SFP28 1924 802c XtremeScale X2522-25G PCIe Dual Port SFP28 1924 802d XtremeScale X2562 OCP 3.0 Dual Port SFP28 0c03 NS9480 1/10/25/40/50/100Gb Ethernet Controller PLUS 1924 8031 X4522 Express and Enterprise Ethernet Adapter 1924 8032 X4542 Express and Enterprise Ethernet Adapter 1803 SFC9020 10G Ethernet Controller (Virtual Function) 1813 SFL9021 10GBASE-T Ethernet Controller (Virtual Function) 1903 SFC9120 10G Ethernet Controller (Virtual Function) 1923 SFC9140 10/40G Ethernet Controller (Virtual Function) 1a03 SFC9220 10/40G Ethernet Controller (Virtual Function) 1b03 XtremeScale SFC9250 10/25/40/50/100G Ethernet Controller (Virtual Function) 1c03 NS9480 1/10/25/40/50/100Gb Ethernet Controller PLUS (Virtual Function) 2c03 NS9480 1/10/25/40/50/100Gb Ethernet Controller 1924 8031 X4522 Enterprise Ethernet Adapter 1924 8032 X4542 Enterprise Ethernet Adapter 3c03 NS9480 1/10/25/40/50/100Gb Ethernet Controller (Virtual Function) 6703 SFC4000 rev A iSCSI/Onload [Solarstorm] 10b8 0102 SMC10GPCIe-10BT (A2) [TigerCard] 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] 1924 0101 SFE4001-A1 1924 0102 SFE4001-A2 1924 0103 SFE4001-A3 1924 0201 SFE4002-A1 1924 0301 SFE4003-A1 1924 0302 SFE4003-A2 1924 0303 SFE4003-A3 1924 0304 SFE4003-A4 1924 0500 SFE4005-A0 c101 EF1-21022T [EtherFabric] 192a BiTMICRO Networks Inc. 0008 RAMPART 192e TransDimension 1931 Option N.V. 000c Qualcomm MSM6275 UMTS chip 1932 DiBcom 193c MAXIM Integrated Products 193d New H3C Technologies Co., Ltd. 193f AHA Products Group 0001 AHA36x-PCIX 0360 AHA360-PCIe 0363 AHA363-PCIe 0364 AHA364-PCIe 0367 AHA367-PCIe 0370 AHA370-PCIe 0604 AHA604 0605 AHA605 3641 AHA3641 3642 AHA3642 6101 AHA6101 6102 AHA6102 1942 ClearSpeed Technology plc e511 Advance X620 accelerator card e521 Advance e620 accelerator card 1945 MERA 6200 PXI/PXIe measurement module 1947 C-guys, Inc. 4743 CG200 Dual SD/SDIO Host controller device 1948 Alpha Networks Inc. 194a DapTechnology B.V. 1111 FireSpy3850 1112 FireSpy450b 1113 FireSpy450bT 1114 FireSpy850 1115 FireSpy850bT 1200 FireTrac 3460bT 1201 FireTrac 3460bT (fallback firmware) 1202 FireTrac 3460bT 1203 FireTrac 3460bT (fallback firmware) # nee Curtis, Inc. 1954 One Stop Systems, Inc. 1957 Freescale Semiconductor Inc 0012 MPC8548E 0013 MPC8548 0014 MPC8543E 0015 MPC8543 0018 MPC8547E 0019 MPC8545E 001a MPC8545 0020 MPC8568E 0021 MPC8568 0022 MPC8567E 0023 MPC8567 0030 MPC8533E 0031 MPC8533 0032 MPC8544E 0033 MPC8544 0040 MPC8572E 0041 MPC8572 0050 MPC8536E 0051 MPC8536 0052 MPC8535E 0053 MPC8535 0060 MPC8569 0061 MPC8569E 0070 P2020E 0071 P2020 0078 P2010E 0079 P2010 0080 MPC8349E 0081 MPC8349 0082 MPC8347E TBGA 0083 MPC8347 TBGA 0084 MPC8347E PBGA 110a 4074 SIMATIC NET CP 1628 0085 MPC8347 PBGA 110a 4046 SIMATIC NET CP 1623 0086 MPC8343E 0087 MPC8343 00b4 MPC8315E 00b6 MPC8314E 1a56 1101 Bigfoot Killer Xeno Pro Gigabit Ethernet Controller 00c2 MPC8379E 00c3 MPC8379 00c4 MPC8378E 00c5 MPC8378 00c6 MPC8377E 00c7 MPC8377 0100 P1020E 0101 P1020 0102 P1021E 0103 P1021 0108 P1011E 0109 P1011 010a P1012E 010b P1012 0110 P1022E 0111 P1022 1c7f 5200 EB5200 0118 P1013E 0119 P1013 0128 P1010 0400 P4080E 0401 P4080 0408 P4040E 0409 P4040 041f P3041 0420 QorIQ P5020 Communications Processor with security engine 0421 QorIQ P5020 Communications Processor without security engine 0428 QorIQ P5010 Communications Processor with security engine 0429 QorIQ P5010 Communications Processor without security engine 0440 T4240 with security 0441 T4240 without security 0446 T4160 with security 0447 T4160 without security 0820 T1040 with security 0821 T1040 without security 0824 T1042 with security 0825 T1042 without security 0828 T1020 with security 0829 T1020 without security 082c T1022 with security 082d T1022 without security 0830 T2080 with security 0831 T2080 without security 0838 T2081 with security 0839 T2081 without security 580c MPC5121e 7010 MPC8641 PCI Host Bridge 7011 MPC8641D PCI Host Bridge 7018 MPC8610 81c0 LS1046A PCI Express Bridge c006 MPC8308 1a56 1201 Bigfoot Killer E2100 Gigabit Ethernet Controller # PCIe interface for emulator fc02 RedStone # CFI device over PCIe fc03 CFI 1958 Faster Technology, LLC. 1959 PA Semi, Inc a000 PA6T Core a001 PWRficient Host Bridge a002 PWRficient PCI-Express Port a003 PWRficient SMBus Controller a004 PWRficient 16550 UART a005 PWRficient Gigabit Ethernet a006 PWRficient 10-Gigabit Ethernet a007 PWRficient DMA Controller a008 PWRficient LPC/Localbus Interface a009 PWRficient L2 Cache a00a PWRficient DDR2 Memory Controller a00b PWRficient SERDES a00c PWRficient System/Debug Controller a00d PWRficient PCI-Express Internal Endpoint 1966 Orad Hi-Tec Systems 1975 DVG64 family 1977 DVG128 family 1979 3DVG/UHD3 1980 HDV2/UHD2 1234 3160 UHD2LC 1234 3300 Legacy UHD2 1234 3410 UHD2 # nee Atheros Communications, Inc. nee Attansic Technology Corp. 1969 Qualcomm Atheros 1026 AR8121/AR8113/AR8114 Gigabit or Fast Ethernet 1043 8304 P5KPL-CM Motherboard 1048 Attansic L1 Gigabit Ethernet 1043 8226 P5B-MX/WiFi-AP, P5KPL-VM Motherboard 1062 AR8132 Fast Ethernet 1063 AR8131 Gigabit Ethernet 1458 e000 GA-G31M-ES2L Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 1066 Attansic L2c Gigabit Ethernet 1067 Attansic L1c Gigabit Ethernet 1073 AR8151 v1.0 Gigabit Ethernet 1083 AR8151 v2.0 Gigabit Ethernet 1090 AR8162 Fast Ethernet 1043 108d VivoBook X202E, X202EV 1091 AR8161 Gigabit Ethernet 1043 1477 N56VZ 10a0 QCA8172 Fast Ethernet 10a1 QCA8171 Gigabit Ethernet 2010 QCA8175 card reader controller 2048 Attansic L2 Fast Ethernet 2060 AR8152 v1.1 Fast Ethernet 2062 AR8152 v2.0 Fast Ethernet 1043 8468 Eee PC 1015PX 3010 QCA8175 SD controller # E2200, E2201, E2205 e091 Killer E220x Gigabit Ethernet Controller e0a1 Killer E2400 Gigabit Ethernet Controller e0b1 Killer E2500 Gigabit Ethernet Controller 196a Sensory Networks Inc. 0101 NodalCore C-1000 Content Classification Accelerator 0102 NodalCore C-2000 Content Classification Accelerator 0105 NodalCore C-3000 Content Classification Accelerator 196d Club-3D BV 196e PNY 1971 AGEIA Technologies, Inc. 0000 Physics Processing Unit [PhysX] 100 Series PCI Express Card # The PCI and PCIe versions have a different PID 1011 Physics Processing Unit [PhysX] 100 Series PCI Card 1043 0001 PhysX P1 1021 Physics Processing Unit [PhysX] 200 Series PCI Express Card # nee Eberspaecher Electronics 1974 Star Electronics GmbH & Co. KG 0009 FlexCard PMC-II 0011 FlexCard PMC-II Ethernet 0018 FlexCard PXIe3 0019 FlexCard PCIe3 # IO card for std ethernet and automotive ethernet (ieee 1000Base-T1) 001a FlexCard PXIe Ethernet # IO card for std ethernet and automotive ethernet (ieee 1000Base-T1) 001b FlexCard PCIe Ethernet 1976 TRENDnet 1977 Parsec 197b JMicron Technology Corp. 0250 JMC250 PCI Express Gigabit Ethernet Controller 0260 JMC260 PCI Express Fast Ethernet Controller 0368 JMB368 IDE controller 0585 JMB58x AHCI SATA controller 2360 JMB360 AHCI Controller 2361 JMB361 AHCI/IDE 1462 7235 P965 Neo MS-7235 mainboard 2362 JMB362 SATA Controller 1043 8460 P8P67 Deluxe Motherboard 2363 JMB363 SATA/IDE Controller 1043 81e4 P5B [JMB363] 1458 b000 Motherboard 1849 2363 Motherboard (one of many) 2364 JMB364 AHCI Controller 2365 JMB365 AHCI/IDE 2366 JMB366 AHCI/IDE 2368 JMB368 IDE controller 2369 JMB369 Serial ATA Controller 2380 IEEE 1394 Host Controller 2381 Standard SD Host Controller 2382 SD/MMC Host Controller 2383 MS Host Controller 2384 xD Host Controller 2386 Standard SD Host Controller 2387 SD/MMC Host Controller 2388 MS Host Controller 2389 xD Host Controller 2391 Standard SD Host Controller 2392 SD/MMC Host Controller 2393 MS Host Controller 2394 xD Host Controller 1982 Distant Early Warning Communications Inc 1600 OX16C954 HOST-A 16ff OX16C954 HOST-B 1987 Phison Electronics Corporation 5007 E7 NVMe Controller 5008 E8 PCIe3 x2 NVMe Controller 5012 E12 NVMe Controller 5013 PS5013-E13 PCIe3 NVMe Controller (DRAM-less) 5015 PS5015-E15 PCIe3 NVMe Controller (DRAM-less) 5016 E16 PCIe4 NVMe Controller 5018 E18 PCIe4 NVMe Controller 5019 PS5019-E19 PCIe4 NVMe Controller (DRAM-less) 5020 PS5020-E20 (X1) PCIe4 NVMe Controller 5021 PS5021-E21 PCIe4 NVMe Controller (DRAM-less) 5026 PS5026-E26 PCIe5 NVMe Controller 5027 PS5027-E27T PCIe4 NVMe Controller (DRAM-less) 5031 PS5031-E31T PCIe5 NVMe Controller 5302 PS5302-X2 PCIe5 NVMe Controller 1989 Montilio Inc. 0001 RapidFile Bridge 8001 RapidFile 198a Nallatech Ltd. 1993 Innominate Security Technologies AG 1998 Toyou Feiji Electronics Co., Ltd. 1999 A-Logics a900 AM-7209 Video Processor 199a Pulse-LINK, Inc. 199d Xsigo Systems 8209 Virtual NIC Device 890a Virtual HBA Device 199f Auvitek 8501 AU85X1 PCI REV1.1 8521 AU8521 TV card # nee ServerEngines Corp. 19a2 Emulex Corporation 0120 x1 PCIe Gen2 Bridge[Pilot4] 0200 BladeEngine 10Gb PCI-E iSCSI adapter 0201 BladeEngine 10Gb PCIe Network Adapter 0211 BladeEngine2 10Gb Gen2 PCIe Network Adapter 0212 BladeEngine2 10Gb Gen2 PCIe iSCSI Adapter 0221 BladeEngine3 10Gb Gen2 PCIe Network Adapter 0222 BladeEngine3 10Gb Gen2 PCIe iSCSI Adapter 0700 OneConnect OCe10100/OCe10102 Series 10 GbE 103c 1747 NC550SFP DualPort 10GbE Server Adapter 103c 1749 NC550SFP Dual Port Server Adapter 103c 174a NC551m Dual Port FlexFabric 10Gb Adapter 103c 174b StorageWorks NC550 DualPort Converged Network Adapter 103c 3314 NC551i Dual Port FlexFabric 10Gb Adapter 0702 OneConnect 10Gb iSCSI Initiator 0704 OneConnect OCe10100/OCe10102 Series 10 GbE CNA 10df e602 OneConnect OCe10100 10Gb CNA 10df e630 OneConnect OCe10102-FM-E / OCe10102-FX-E for EMC VNX Symmetrix 0710 OneConnect 10Gb NIC (be3) # FC 5287 / FC 5284; CCIN 5287 1014 03d0 PCIe2 2-port 10GbE SR Adapter for POWER # FC 5288 / FC 5286; CCIN 5288 1014 03d1 PCIe2 2-port 10GbE SFP+ Copper Adapter for POWER 1014 0409 Integrated Multifunction Card with Dual 10GbE SR Optical + Dual 1GbE for Power 750/760 1014 040a Integrated Multifunction Card with Dual 10GbE SR Copper + Dual 1GbE for Power 750/760 103c 3315 NC553i 10Gb 2-port FlexFabric Converged Network Adapter 103c 3340 NC552SFP 2-port 10Gb Server Adapter 103c 3341 NC552m 10Gb 2-port FlexFabric Converged Network Adapter 103c 3345 NC553m 10Gb 2-port FlexFabric Converged Network Adapter 103c 337b NC554FLB 10Gb 2-port FlexFabric Converged Network Adapter 10df e733 Flex System EN4054 4-port 10Gb Ethernet Mezzanine Adapter 0712 OneConnect 10Gb iSCSI Initiator (be3) 0714 OneConnect 10Gb FCoE Initiator (be3) 103c 3315 NC553i 10Gb 2-port FlexFabric Converged Network Adapter 103c 337b NC554FLB 10Gb 2-port FlexFabric Converged Network Adapter 0800 ServerView iRMC HTI 19a4 Owl Cyber Defense Solutions 19a8 DAQDATA GmbH 19ac Kasten Chase Applied Research 0001 ACA2400 Crypto Accelerator 19ae Progeny Systems Corporation 0520 4135 HFT Interface Controller 0521 Decimator 19ba ZyXEL Communications Corp. 2330 ZyWALL Turbo Card 19c1 Exegy Inc. # nee NextNet Wireless 19d1 Motorola Expedience 19d4 Quixant Limited 19da ZOTAC International (MCO) Ltd. 19de Pico Computing 19e2 Vector Informatik GmbH 19e3 DDRdrive LLC 5801 DDRdrive X1 5808 DDRdrive X8 dd52 DDRdrive X1-30 19e5 Huawei Technologies Co., Ltd. 0123 ES3000 V3 NVMe PCIe SSD 19e5 3022 NVMe SSD ES3600P V3 800GB 2.5" U.2 19e5 3023 NVMe SSD ES3600P V3 1200GB 2.5" U.2 19e5 3024 NVMe SSD ES3600P V3 1600GB 2.5" U.2 19e5 3025 NVMe SSD ES3600P V3 2000GB 2.5" U.2 19e5 3026 NVMe SSD ES3600P V3 3200GB 2.5" U.2 19e5 3033 NVMe SSD ES3600C V3 1200GB HHHL AIC 19e5 3034 NVMe SSD ES3600C V3 1600GB HHHL AIC 19e5 3036 NVMe SSD ES3600C V3 3200GB HHHL AIC 0200 Hi1822 Family (2*100GE) 19e5 d139 Hi1822 SP572 (2*100GE) 19e5 d13d Hi1822 SC371 (2*100GE) 19e5 d147 Hi1822 SP573 (2*100GE) 0202 Hi1822 Family (2*32G FC) 19e5 d149 Hi1822 SP528 (2*32G FC) 19e5 d302 Hi1822 SP521 (2*32G FC) 19e5 d304 Hi1822 SP526 (2*32G FC) 0203 Hi1822 Family (2*16G FC) 19e5 d148 Hi1822 SP527 (2*16G FC) 19e5 d301 Hi1822 SP520 (2*16G FC) 19e5 d305 Hi1822 SP525 (2*16G FC) 0204 Hi1822 Family (4*10GE) 0205 Hi1822 Family (2*100GE) 19e5 df27 Hi1822 MZ731 MEZZ (2*100GE) 0206 Hi1822 Family (2*25GE) 19e5 d138 Hi1822 SP582 (2*25GE) 19e5 d13a Hi1822 SC381 (2*25GE) 19e5 d145 Hi1822 SP586 (2*25GE) 0208 Hi1822 Family (2*100GE) 020b Hi1822 Family (4*25GE) 020c Hi1822 Family (4*32G FC) 020d Hi1822 Family (2*40GE) 0210 Hi1822 Family (4*25GE) 19e5 df2e Hi1822 MZ532 MEZZ (4*25GE) 0211 Hi1822 Family (4*25GE) 19e5 d12f Hi1822 SP571 (4*25GE) 19e5 d137 Hi1822 SP581 (4*25GE) 19e5 d142 Hi1822 SP583 (4*25GE) 0212 Hi1822 Family (2*8G FC) 19e5 d303 Hi1822 SP522 (2*8G FC) 19e5 d306 Hi1822 SP523 (2*8G FC) 0222 Hi1822 Family 19e5 0051 Hi1822 SP681 (2*25/10GE) 19e5 0052 Hi1822 SP680 (4*25/10GE) 19e5 00a1 Hi1822 SP670 (2*100GE) 1710 iBMA Virtual Network Adapter 1711 Hi171x Series [iBMC Intelligent Management system chip w/VGA support] 1822 Hi1822 Family (4*25GE) 19e5 d129 Hi1822 SP570 (4*25GE) 19e5 d136 Hi1822 SP580 (4*25GE) 19e5 d141 Hi1822 SP583 (4*25GE) 19e5 d146 Hi1822 SP585 (4*25GE) 3714 ES3000 V5 NVMe PCIe SSD 19e5 5312 NVMe SSD ES3500P V5 2000GB 2.5" U.2 371e Hi1822 Family Virtual Bridge 3754 ES3000 V6 NVMe PCIe SSD 19e5 6122 NVMe SSD ES3600P V6 1600GB 2.5" U.2 19e5 6123 NVMe SSD ES3600P V6 3200GB 2.5" U.2 19e5 6124 NVMe SSD ES3600P V6 6400GB 2.5" U.2 19e5 6141 NVMe SSD ES3800P V6 800GB 2.5" U.2 19e5 6142 NVMe SSD ES3800P V6 1600GB 2.5" U.2 19e5 6212 NVMe SSD ES3500P V6 1920GB 2.5" U.2 19e5 6213 NVMe SSD ES3500P V6 3840GB 2.5" U.2 19e5 6214 NVMe SSD ES3500P V6 7680GB 2.5" U.2 19e5 6215 NVMe SSD ES3500P V6 15360GB 2.5" U.2 3758 SP686C RAID Controller Card 19e5 0185 RAID SP686C-M-16i 2G 19e5 01a1 RAID SP686C-M-40i 2G 19e5 01a4 RAID SP686C-M-16i 4G 19e5 01a8 RAID SP686C-MH-32i 4G 19e5 01ad RAID SP686C-M-40i 4G 375e Hi1822 Family Virtual Function 375f Hi1822 Family Virtual Function 379e Hi1822 Family Virtual Function 379f Hi1822 Family Virtual Function 3858 SP186 HBA Controller Card 19e5 0120 HBA SP186-M-32i 19e5 0125 HBA SP186-M-40i 19e5 0180 HBA SP186-M-16i 19e5 0188 HBA SP186-M-8i a120 HiSilicon PCIe Root Port with Gen4 a121 HiSilicon PCI-PCI Bridge a122 HiSilicon Embedded DMA Engine a124 HiSilicon Internal SDI Function Engine a125 HiSilicon SDI Network Controller a126 HiSilicon SDI NVMe Storage Controller a127 HiSilicon SDI Accelerator a12a HiSilicon Add-on PCI-PCI Bridge a12d HiSilicon Embedded PMU a12e HiSilicon Embedded PCIe PTT a220 HNS GE Network Controller a221 HNS GE/10GE/25GE Network Controller 19e5 0454 TM280 19e5 04cc TM210 19e5 d14a TM280 4*25G 19e5 d14b TM210 4*GE a222 HNS GE/10GE/25GE RDMA Network Controller a224 HNS GE/10GE/25GE/50GE RDMA Network Controller a226 HNS GE/10GE/25GE/50GE/100GE RDMA Network Controller a22a HiSilicon Network For SDI a22e HNS Network Controller (Virtual Function) a22f HNS RDMA Network Controller (Virtual Function) a230 HiSilicon SAS 3.0 HBA a235 HiSilicon AHCI HBA a238 HiSilicon USB 3.0 Host Controller a239 HiSilicon USB 2.0 2-port Host Controller a23a HiSilicon USB 2.0 Host Controller a23b HiSilicon USB 1.1 Host Controller a250 HiSilicon ZIP Engine a251 HiSilicon ZIP Engine(Virtual Function) a255 HiSilicon SEC Engine a256 HiSilicon SEC Engine(Virtual Function) a258 HiSilicon HPRE Engine a259 HiSilicon HPRE Engine(Virtual Function) a25a HiSilicon RDE Engine a25b HiSilicon RDE Engine(Virtual Function) 19e7 NET (Network Equipment Technologies) 1001 STIX DSP Card 1002 STIX - 1 Port T1/E1 Card 1003 STIX - 2 Port T1/E1 Card 1004 STIX - 4 Port T1/E1 Card 1005 STIX - 4 Port FXS Card 19ee Netronome Systems, Inc. 19f1 BFG Tech 19ff Eclipse Electronic Systems, Inc. 1a03 ASPEED Technology, Inc. 1150 AST1150 PCI-to-PCI Bridge 2000 ASPEED Graphics Family 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 15d9 1b95 H12SSL-i 1a05 deltaww 1a07 Kvaser AB 0006 CAN interface PC104+ HS/HS 0007 CAN interface PCIcanx II HS or HS/HS 0008 CAN interface PCIEcan HS or HS/HS 0009 CAN interface PCI104 HS/HS 1a08 Sierra semiconductor 0000 SC15064 1a0d SEAKR Engineering 1a0e DekTec Digital Video B.V. 083f DTA-2111 VHF/UHF Modulator 0860 DTA-2144(B) Quad ASI/SDI in+out 0861 DTA-2145 ASI/SDI in+out with bypass relay 087c DTA-2172 Dual 3G-SDI/ASI ports 087e DTA-2174 Quad 3G-SDI/ASI in+out 087f DTA-2175 3G-SDI/ASI input+output with bypass relay 0882 DTA-2178 Octal 12G-SDI/ASI ports with genlock a882 DTA-2178-ASI Octal ASI Ports b87e DTA-2174B Quad 3G-SDI/ASI ports (1x12G) with genlock 1a17 Force10 Networks, Inc. 8002 PB-10GE-2P 10GbE Security Card 1a1d GFaI e.V. 1a17 Meta Networks MTP-1G IDPS NIC 1a1e 3Leaf Systems, Inc. 1a22 Ambric Inc. 1a29 Fortinet, Inc. 4338 CP8 Content Processor ASIC 43a0 CP9 Content Processor ASIC 4e36 NP6 Network Processor 4e37 NP7 Network Processor 1a2b Ascom AG 0000 GESP v1.2 0001 GESP v1.3 0002 ECOMP v1.3 0005 ETP v1.4 000a ETP-104 v1.1 000e DSLP-104 v1.1 # nee Metalink Ltd. 1a30 Lantiq 0680 MtW8171 [Hyperion II] 0700 Wave300 PSB8224 [Hyperion III] 0710 Wave300 PSB8231 [Hyperion III] 1a32 Quanta Microsystems, Inc 1a3b AzureWave 1112 AR9285 Wireless Network Adapter (PCI-Express) 1a3e Micro-Research Finland Oy 132c MTCA Event Receiver 300 152c CompactPCI Event Receiver 300 172c PCI Express Event Receiver 300 192c CompactPCI Event Receiver TG 300 232c MTCA Event Master 300 252c CompactPCI Event Generator 300 1a41 Tilera Corp. 0001 TILE64 processor 0002 TILEPro processor 0200 TILE-Gx processor 0201 TILE-Gx Processor Virtual Function 2000 TILE-Gx PCI Express Root Port 1a4a SLAC National Accelerator Lab TID-AIR 1000 MCOR Power Supply Controller 1010 AMC EVR - Stockholm Timing Board 1020 PGPCard - Gen3 Cameralink Interface 1030 PGPCard - Gen3 GIGe Interface 2000 PGPCard - 4 Lane 2001 PGPCard - 8 Lane Plus EVR 2010 PCI-Express EVR 2011 PCI-Express EVR - TPR Version 2020 PGP-GEN3 PCIe - 8 Lane Plus EVR 2030 AXI Stream DAQ PCIe card 2040 EXO PCIe TEM 3000 COB DTM V1 3001 COB DTM V2 1a51 Hectronic AB 1a55 Rohde & Schwarz DVS GmbH 0010 SDStationOEM 0011 SDStationOEM II 0020 Centaurus 0021 Centaurus II 0022 Centaurus II LT 0030 CLIPSTER-VPU 1.x (Hugo) 0040 Hydra Cinema (JPEG) 0050 CLIPSTER-VPU 2.x (DigiLab) 0060 CLIPSTER-DCI 2.x (HydraX) 0061 Atomix 0062 Atomix LT 0063 Atomix HDMI 0064 Atomix STAN 0065 Atomix HDMI STAN 0070 RED Rocket 0090 CinePlay # nee Bigfoot Networks, now owned by Intel 1a56 Rivet Networks 1a57 Highly Reliable Systems 1a58 Razer USA Ltd. 1a5d Celoxica 1a5e Aprius Inc. 1a5f System TALKS Inc. 1a68 VirtenSys Limited 1a71 XenSource, Inc. 1a73 Violin Memory, Inc 0001 Mozart [Memory Appliance 1010] 1a76 Wavesat 1a77 Lightfleet Corporation 1a78 Virident Systems Inc. 0031 FlashMAX Drive 1a78 0034 FlashMAX PCIe SSD [rev 3] 1a78 0037 FlashMAX PCIe SSD [rev 3D] 1a78 0038 FlashMAX PCIe SSD [rev 4] 1a78 0039 FlashMAX PCIe SSD [rev 4D] 0040 FlashMAX II 0041 FlashMAX II 0042 FlashMAX II 0050 FlashMAX III 1a84 Commex Technologies 0001 Vulcan SP HT6210 10-Gigabit Ethernet (rev 02) # nee MEN Mikro Elektronik 1a88 Duagon AG 4d45 Multifunction IP core 1a8a StarBridge, Inc. 1a8c Verigy Pte. Ltd. 1100 E8001-66443 PCI Express CIC 1a8e DRS Technologies 2090 Model 2090 PCI Express 1aa8 Ciprico, Inc. 0009 RAIDCore Controller 000a RAIDCore Controller 1aa9 Schweitzer Engineering Laboratories 000d SEL-3390S8 Serial Adapter 000e SEL-3390E4 Ethernet Adapter 0014 SEL-3390T Time and Ethernet Adapter 0015 SEL-3350 Mainboard 0016 SEL-3350 Serial Expansion Board 0017 SEL-3350 GPIO Expansion Board 0018 SEL-3390E4 Ethernet Adapter 001c SEL-3390E4 Ethernet Adapter 1aab Silver Creations AG 7750 Sceye 10L 1aae Global Velocity, Inc. 1ab4 Distributed Management Task Force, Inc. (DMTF) 1ab6 CalDigit, Inc. 6201 RAID Card # Parallels VM virtual devices 1ab8 Parallels, Inc. 4000 Virtual Machine Communication Interface 4005 Accelerated Virtual Video Adapter 4006 Memory Ballooning Controller 1ab9 Espia Srl 1ac1 Global Unichip Corp. 089a Coral Edge TPU 1ac8 Aeroflex Gaisler 1acc Point of View BV 1ad7 Spectracom Corporation 8000 TSync-PCIe Time Code Processor 9100 TPRO-PCI-66U Timecode Reader/Generator a000 OCP-TAP [ARTCard] 1ade Spin Master Ltd. 1501 Swipetech barcode scanner 3038 PCIe Video Bridge 13c2 3016 TT-budget S2-4200 Twin 4254 0552 S952 v3 1ae0 Google, Inc. # NVMe drive in GCP 001f NVMe device 0042 Compute Engine Virtual Ethernet [gVNIC] abcd Airbrush Combined Paintbox IPU/Oscar Edge TPU [Pixel Neural Core] 1ae3 SANBlaze Technology, Inc. 1ae7 First Wise Media GmbH 0520 HFC-S PCI A [X-TENSIONS XC-520] # nee Silicon Software GmbH 1ae8 Basler AG # CameraLink frame grabber for Visual Applets 0751 mE5 marathon VCL # CameraLink HS frame grabber 0752 mE5 marathon AF2 # CoaXpress frame grabber 0753 mE5 marathon ACX QP # CameraLink frame grabber 0754 mE5 marathon ACL # CoaXpress frame grabber 0755 mE5 marathon ACX SP # CoaXpress frame grabber 0756 mE5 marathon ACX DP # CoaXpress frame grabber for Visual Applets 0757 mE5 marathon VCX QP # CameraLink HS frame grabber for Visual Applets 0758 mE5 marathon VF2 # CameraLink frame grabber for Visual Applets / AI applications 0759 mE5 marathon VCLx # CameraLink frame grabber 0a40 microEnable IV AD1-CL # CameraLink frame grabber for Visual Applets 0a41 microEnable IV VD1-CL # CameraLink frame grabber 0a42 microEnable IV AD4-CL # CameraLink frame grabber for Visual Applets 0a44 microEnable IV VD4-CL # CameraLink frame grabber 0a45 microEnable IV AS1-CL # CoaXpress frame grabber 0a53 microEnable 5 AQ8-CXP6B # CoaXpress frame grabber for Visual Applets 0a54 microEnable 5 VQ8-CXP6B # CoaXpress frame grabber for Visual Applets 0a56 microEnable 5 VQ8-CXP6D # CoaXpress frame grabber 0a57 microEnable 5 AQ8-CXP6D # CameraLink frame grabber for Visual Applets 0a58 microEnable 5 VD8-CL # CameraLink frame grabber 0a5a microEnable 5 AD8-CL # CoaXpress frame grabber 0a64 imaWorx CXP-12 Quad # OEM product 0b52 mE5 Abacus 4G Base # OEM product 0b53 mE5 Abacus 4G Base II # OEM product 0b61 mE6 Abacus 4TG # CoaXpress frame grabber 0b63 CXP-12 Interface Card 1C # CoaXpress frame grabber 0b64 CXP-12 Interface Card 4C # CoaXpress frame grabber 0b65 CXP-12 Interface Card 2C # CoaXpress Thunderbolt frame grabber 0b66 CXP-12 LightBridge 2C # GigE Vision frame grabber 0e42 microEnable IV AQ4-GE # GigE Vision frame grabber for Visual Applets 0e44 microEnable IV VQ4-GE 1ae9 Wilocity Ltd. 0101 Wil6200 PCI Express Upstream Port 0200 Wil6200 PCI Express Port 0201 Wil6200 Wireless PCI Express Port 0301 Wil6200 802.11ad Wireless Network Adapter 0302 Wil6200 802.11ad Wireless Network Adapter 0310 Wil6200 802.11ad Wireless Network Adapter 1aea Alcor Micro 6601 AU6601 PCI-E Flash card reader controller 6621 AU6621 PCI-E Flash card reader controller 6625 AU6625 PCI-E Flash card reader controller 1aec Wolfson Microelectronics # nee Fusion-io 1aed SanDisk 1003 ioDimm3 (v1.2) 1005 ioDimm3 1014 03c3 High IOPS SSD PCIe Adapter 103c 176f 1.28TB MLC PCIe ioDrive Duo 103c 1770 5.2TB MLC PCIe ioDrive Octal 103c 178b 160GB SLC PCIe ioDrive 103c 178c 320GB MLC PCIe ioDrive 103c 178d 320GB SLC PCIe ioDrive Duo 103c 178e 640GB MLC PCIe ioDrive Duo 1006 ioXtreme 1007 ioXtreme Pro 1008 ioXtreme-2 2001 ioDrive2 3001 ioMemory FHHL 3002 ioMemory HHHL 3003 ioMemory Mezzanine 1aee Caustic Graphics Inc. # nee Qumranet, Inc. 1af4 Red Hat, Inc. 1000 Virtio network device 01de fffb Propolis Virtio network device 1001 Virtio block device 01de fffa Propolis Virtio block device 1002 Virtio memory balloon 1003 Virtio console 1004 Virtio SCSI 1005 Virtio RNG 1009 Virtio filesystem 1041 Virtio 1.0 network device 1af4 1100 QEMU 1042 Virtio 1.0 block device 1af4 1100 QEMU 1043 Virtio 1.0 console 1af4 1100 QEMU 1044 Virtio 1.0 RNG 1af4 1100 QEMU 1045 Virtio 1.0 balloon 1af4 1100 QEMU 1046 Virtio 1.0 ioMemory 1af4 1100 QEMU 1047 Virtio 1.0 remote processor messaging 1af4 1100 QEMU 1048 Virtio 1.0 SCSI 1af4 1100 QEMU 1049 Virtio 9P transport 1af4 1100 QEMU 104a Virtio 1.0 WLAN MAC 1af4 1100 QEMU 104b Virtio 1.0 remoteproc serial link 1af4 1100 QEMU 104d Virtio 1.0 memory balloon 1af4 1100 QEMU 1050 Virtio 1.0 GPU 1af4 1100 QEMU 1051 Virtio 1.0 clock/timer 1af4 1100 QEMU 1052 Virtio 1.0 input 1af4 1100 QEMU 1053 Virtio 1.0 socket 1af4 1100 QEMU 1054 Virtio 1.0 crypto 1af4 1100 QEMU 1055 Virtio 1.0 signal distribution device 1af4 1100 QEMU 1056 Virtio 1.0 pstore device 1af4 1100 QEMU 1057 Virtio 1.0 IOMMU 1af4 1100 QEMU 1058 Virtio 1.0 mem 1af4 1100 QEMU 1059 Virtio 1.0 sound 1af4 1100 QEMU 105a Virtio 1.0 file system 1af4 1100 QEMU 105b Virtio 1.0 pmem 1af4 1100 QEMU 105c Virtio 1.0 rpmb 1af4 1100 QEMU 105d Virtio 1.0 mac80211-hwsim 1af4 1100 QEMU 105e Virtio 1.0 video encoder 1af4 1100 QEMU 105f Virtio 1.0 video decoder 1af4 1100 QEMU 1060 Virtio 1.0 SCMI 1af4 1100 QEMU 1061 Virtio 1.0 nitro secure module 1af4 1100 QEMU 1062 Virtio 1.0 I2C adapter 1af4 1100 QEMU 1063 Virtio 1.0 watchdog 1af4 1100 QEMU 1064 Virtio 1.0 can 1af4 1100 QEMU 1065 Virtio 1.0 dmabuf 1af4 1100 QEMU 1066 Virtio 1.0 parameter server 1af4 1100 QEMU 1067 Virtio 1.0 audio policy 1af4 1100 QEMU 1068 Virtio 1.0 Bluetooth 1af4 1100 QEMU 1069 Virtio 1.0 GPIO 1af4 1100 QEMU 1110 QEMU Inter-VM shared memory device 1af4 1100 QEMU 1af5 Netezza Corp. 1afa J & W Electronics Co., Ltd. 1b00 Montage Technology Co., Ltd. c001 CXL Memory Expander Controller M88MX5891 1ff9 00a2 CXL Memory Expander 1ff9 00a4 CXL Memory Expander 1b03 Magnum Semiconductor, Inc, 6100 DXT/DXTPro Multiformat Broadcast HD/SD Encoder/Decoder/Transcoder 7000 D7 Multiformat Broadcast HD/SD Encoder/Decoder/Transcoder 1b08 MSC Technologies GmbH 1b0a Pegatron 9602 RS780/RS880 PCI to PCI bridge (int gfx) 1b13 Jaton Corp 1b1a K&F Computing Research Co. 0e70 GRAPE 1b1c Corsair 1b21 ASMedia Technology Inc. 0611 ASM1061 Serial ATA Controller 0612 ASM1061/ASM1062 Serial ATA Controller 1849 0612 Motherboard 0622 ASM106x Serial ATA AHCI Controller 4c52 9661 LRST9661 2-port M.2 SATA3(6Gb/s) Raid Adapter 0624 ASM106x SATA/RAID Controller 0625 106x SATA/RAID Controller 1040 ASM1040 SuperSpeed USB Host Controller 1041 ASM1041 SuperSpeed USB Host Controller 1042 ASM1042 SuperSpeed USB Host Controller 1043 1059 K53SM motherboard 1043 8488 P8B WS Motherboard 1849 1042 Motherboard 1064 ASM1064 Serial ATA Controller 1080 ASM1083/1085 PCIe to PCI Bridge 1849 1080 Motherboard 1142 ASM1042A USB 3.0 Host Controller 1164 ASM1164 Serial ATA AHCI Controller 1166 ASM1166 Serial ATA Controller 1182 ASM1182e 2-Port PCIe x1 Gen2 Packet Switch 1b21 118f ASM1182e 2-Port PCIe x1 Gen2 Packet Switch 1184 ASM1184e 4-Port PCIe x1 Gen2 Packet Switch 1849 1184 ASM1184e 4-Port PCIe x1 Gen2 Packet Switch 1187 ASM1187e 7-Port PCIe x1 Gen2 Packet Switch 118f ASM1187e 7-Port PCIe x1 Gen2 Packet Switch 1242 ASM1142 USB 3.1 Host Controller 4c52 9a42 LRSU9A42 2-Port Type-A Exchange Adapter 1343 ASM1143 USB 3.1 Host Controller 1806 ASM1806 4-Port PCIe x2 Gen2 Packet Switch 1812 ASM1812 6-Port PCIe x4 Gen2 Packet Switch 1824 ASM1824 12-Port PCIe x8 Gen2 Packet Switch 2142 ASM2142/ASM3142 USB 3.1 Host Controller 1462 7a72 H270 PC MATE 2421 ASM4242 PCIe Switch Upstream Port 2423 ASM4242 PCIe Switch Downstream Port 2425 ASM4242 USB 4 / Thunderbolt 3 Host Router 2426 ASM4242 USB 3.2 xHCI Controller 2806 ASM2806 4-Port PCIe x2 Gen3 Packet Switch 2812 ASM2812 6-Port PCIe x4 Gen3 Packet Switch 2824 ASM2824 PCIe Gen3 Packet Switch 3042 ASM3042 USB 3.2 Gen 1 xHCI Controller 3142 ASM3142 USB 3.2 Gen 2x1 xHCI Controller 3241 ASM3241 USB 3.2 Gen 2 Host Controller 3242 ASM3242 USB 3.2 Host Controller 1b26 Netcope Technologies, a.s. c132 COMBO-LXT155 c1c0 NFB-100G1-e0 c1c1 NFB-100G1-e1 c250 NFB-200G2-master c251 NFB-200G2-slave c2c0 NFB-100G2-e0 c2c1 NFB-100G2-e1 cb20 COMBO-20G cb40 COMBO-40G cb80 NFB-40G2 1b2c Opal-RT Technologies Inc. 1b36 Red Hat, Inc. 0001 QEMU PCI-PCI bridge 0002 QEMU PCI 16550A Adapter 1af4 1100 QEMU Virtual Machine 0003 QEMU PCI Dual-port 16550A Adapter 1af4 1100 QEMU Virtual Machine 0004 QEMU PCI Quad-port 16550A Adapter 1af4 1100 QEMU Virtual Machine 0005 QEMU PCI Test Device 1af4 1100 QEMU Virtual Machine 0006 PCI Rocker Ethernet switch device 0007 PCI SD Card Host Controller Interface 0008 QEMU PCIe Host bridge 0009 QEMU PCI Expander bridge 000a PCI-PCI bridge (multiseat) 000b QEMU PCIe Expander bridge 000c QEMU PCIe Root port 000d QEMU XHCI Host Controller 000e QEMU PCIe-to-PCI bridge 0010 QEMU NVM Express Controller 0011 QEMU PVPanic device 0013 QEMU UFS Host Controller 0100 QXL paravirtual graphic card 1af4 1100 QEMU Virtual Machine 1b37 Signal Processing Devices Sweden AB 0001 ADQ214 0003 ADQ114 0005 ADQ112 000e ADQ108 000f ADQDSP 0014 ADQ412 0015 ADQ212 001b SDR14 001c ADQ1600 001e ADQ208 001f DSU 0020 ADQ14 0023 ADQ7 0026 ADQ8 0031 ADQ3 2014 TX320 2019 S6000 # now owned by HGST (a Western Digital subsidiary) 1b39 sTec, Inc. 0001 S1120 PCIe Accelerator SSD 1b3a Westar Display Technologies 7589 HRED J2000 - JPEG 2000 Video Codec Device 1b3e Teradata Corp. 1fa8 BYNET BIC2SE/X 1b3e 00a3 BYNET BIC2SX 1b3e 00c3 BYNET BIC2SE 1b40 Schooner Information Technology, Inc. # also used by some PROXIM (14b7) devices erroneously 1b47 Numascale AS 0601 NumaChip N601 0602 NumaChip N602 1b4b Marvell Technology Group Ltd. # device 1b4b:0100 reports incorrect vendor id due to hw erratum (correct is 11ab) 0100 88F3700 [Armada 3700 Family] ARM SoC 0640 88SE9128 SATA III 6Gb/s RAID Controller 2241 88NR2241 Non-Volatile memory controller 1028 2112 BOSS-N1 Monolithic 1028 2113 BOSS-N1 Modular 1028 2151 BOSS-N1 Modular ET 1028 2196 ROR-N1 1028 2286 BOSS-N1 DC-MHS 1028 2287 BOSS-N1 Modular DC-MHS 1028 23b0 eBOSS-N1 DC-MHS 1b4b 2241 Santa Cruz NVMe Host Adapter 1b96 4000 WD_BLACK AN1500 NVMe SSD 1d49 0306 ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit 1d49 0307 ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit 207d 0800 TrustRAID B310n 207d 0801 TrustRAID B260s 4c52 9541 LRNV9541 2-port M.2 NVMe Raid Adapter 2b42 88W8997 2.4/5 GHz Dual-Band 2x2 Wi-Fi® 5 (802.11ac) + Bluetooth® 5.3 Solution 2b43 NXP 88W9098 Wi-Fi 6 (ax) MAC #1 2b44 NXP 88W9098 Wi-Fi 6 (ax) MAC #2 2b45 NXP 88W9098 Bluetooth 5.3 9120 88SE9120 SATA 6Gb/s Controller 9122 88SE912x SATA 6Gb/s Controller [AHCI mode] 9123 88SE9123 PCIe SATA 6.0 Gb/s controller dc93 600e DC-6xxe series SATA 6G controller 9125 88SE9125 PCIe SATA 6.0 Gb/s controller 4c52 9615 LRST9615 4-port SATA3(6Gb/s) Exchange Adapter 9128 88SE9128 PCIe SATA 6 Gb/s RAID controller 9130 88SE9128 PCIe SATA 6 Gb/s RAID controller with HyperDuo 1043 8438 P8P67 Deluxe Motherboard 9170 88SE9170 PCIe 2.0 x1 2-port SATA 6 Gb/s Controller 9171 88SE9171 PCIe 2.0 x1 1-port SATA 6 Gb/s Controller 9172 88SE9172 SATA 6Gb/s Controller 9178 88SE9170 PCIe SATA 6Gb/s Controller 917a 88SE9172 SATA III 6Gb/s Controller [IDE mode] 9182 88SE9182 PCIe 2.0 x2 2-port SATA 6 Gb/s Controller 9183 88SS9183 PCIe SSD Controller 9186 88SE9186 6Gb/s SATA 6Gb/s Controller [AHCI mode] 918a 88SE9182 PCIe SATA 6 Gb/s controller [IDE mode] 9192 88SE9172 SATA III 6Gb/s RAID Controller 91a0 88SE912x SATA 6Gb/s Controller [IDE mode] 91a3 88SE9128 PCIe SATA 6 Gb/s controller [IDE mode] 91a4 88SE912x IDE Controller 91b0 88SE9172 SATA 6 Gb/s controller [IDE mode] 9215 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller 9220 88SE9220 PCIe 2.0 x2 2-port SATA 6 Gb/s RAID Controller 9230 88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller 1028 1fd6 BOSS-S1 Adapter 1028 1fdf BOSS-S1 Modular 1028 1fe2 BOSS-S1 Adapter 1028 2010 BOSS-S2 Adapter 1028 2260 BOSS-S1 Modular 1028 2261 BOSS-S2 Adapter 1bd4 0073 RS0200L6R2iM2 1d49 0300 ThinkSystem M.2 with Mirroring Enablement Kit 1d49 0301 ThinkSystem SR630 x16 PCIE with 4 SATA ports Riser 1d49 0302 ThinkSystem SE350 M.2 SATA 4-Bay Data RAID Mirroring Enablement Kit 1d49 0303 ThinkSystem SE350 M.2 SATA 4-Bay Data RAID Mirroring Enablement Kit 1d49 0304 ThinkSystem M.2 SATA 2-Bay RAID Enablement Kit 1d49 0305 ThinkSystem 7mm SATA 2-Bay Rear RAID Enablement Kit 4c52 9630 LRST9630 4-port SATA3(6Gb/s) Raid Adapter 9235 88SE9235 PCIe 2.0 x2 4-port SATA 6 Gb/s Controller 9445 88SE9445 PCIe 2.0 x4 4-Port SAS/SATA 6 Gbps RAID Controller 9480 88SE9480 SAS/SATA 6Gb/s RAID controller 9485 88SE9485 SAS/SATA 6Gb/s controller 1b4c GALAX 1b55 NetUP Inc. 18f6 Dual DVB Universal CI card 18f7 Dual DVB Universal CI card rev 1.4 2a2c Dual DVB-S2-CI card e2e4 Dual DVB-T/C-CI RF card # 2xHDMI and 2xHD-SDI inputs e5f4 MPEG2 and H264 Encoder-Transcoder f1c4 Dual ASI-RX/TX-CI card 1b5e STAR-Dundee Ltd. 0001 SpaceWire PCI Mk2 0002 SpaceWire PCIe Mk1 0003 SpaceWire cPCI Mk2 0004 SpaceWire PXI Recorder Mk1 0005 SpaceWire PXI Interface Mk1 0006 SpaceWire PXI Interface Mk1 with RMAP Target 0008 SpaceWire PXI Router Mk1 000b SpaceWire PXI Interface Mk2 000c SpaceWire PXI Interface Mk2 with RMAP Target 000d SpaceWire PXI Router Mk2 000e SpaceWire PXI Recorder Mk2 0100 STAR-Ultra PCIe 0102 STAR-Ultra Single-Lane Router 0200 SpaceWire PCIe Mk2 1b61 Byd Precision Manufacture Co.,Ltd 1b66 DELTACAST 0007 DELTA-3G-elp-d 1b6f Etron Technology, Inc. 7023 EJ168 USB 3.0 Host Controller 1458 5007 GA-880GMA-USB3 7052 EJ188/EJ198 USB 3.0 Host Controller 1849 7052 QC5000-ITX/PH 1b73 Fresco Logic 1000 FL1000G USB 3.0 Host Controller 1d5c 1000 Anker USB 3.0 Express Card 1009 FL1009 USB 3.0 Host Controller 1100 FL1100 USB 3.0 Host Controller 16b8 6e31 Allegro Pro USB 3.0 PCIe 1400 USB 3.0 Host Controller 1b74 OpenVox Communication Co. Ltd. 0115 D115P/D115E Single-port E1/T1 card d130 D130P/D130E Single-port E1/T1 card (3rd GEN) d210 D210P/D210E Dual-port E1/T1 card(2nd generation) d230 D230 Dual-port E1/T1 card (2nd generation) d410 D410/430 Quad-port E1/T1 card d430 D410/430 Quad-port E1/T1 card 1b79 Absolute Analysis 1b85 OCZ Technology Group, Inc. 1021 RevoDrive 3 X2 PCIe SSD 240 GB (Marvell SAS Controller) 1041 RevoDrive 3 X2 PCIe SSD 240 GB (Marvell SAS Controller) 4018 Z Drive 6000/6300 NVME SSD 6018 RD400/400A SSD 8788 RevoDrive Hybrid 1b94 Signatec / Dynamic Signals Corp e400 PX14400 Dual Xilinx Virtex5 based Digitizer 1b96 Western Digital 2200 Ultrastar DC SN630 NVMe SSD 2201 Ultrastar DC SN630 NVMe SSD 2300 Ultrastar DC SN840 NVMe SSD 2400 Ultrastar DC SN640 NVMe SSD 2401 Ultrastar DC SN640 NVMe SSD 2402 Ultrastar DC SN640 NVMe SSD 2404 Ultrastar DC SN640 NVMe SSD 2500 Ultrastar DC SN840 NVMe SSD 2600 Ultrastar DC ZN540 ZNS NVMe SSD 2700 Ultrastar DC SN650 NVMe SSD 2701 Ultrastar DC SN650 NVMe SSD 2702 Ultrastar DC SN650 NVMe SSD 2720 Ultrastar DC SN650 NVMe SSD 2721 Ultrastar DC SN650 NVMe SSD 2722 Ultrastar DC SN655 NVMe SSD 2751 Ultrastar DC SN861 NVMe SSD 3001 RapidFlex C2000 NVMe Initiator 3714 PC SN730 NVMe SSD 3734 PC SN730 NVMe SSD 1b9a XAVi Technologies Corp. 1baa QNAP Systems, Inc. 1bad ReFLEX CES c001 XpressGXA10-LP1150 c002 XpressGXA10-LP1151 1bb0 SimpliVity Corporation 0002 OmniCube Accelerator OA-3000 0010 OmniCube Accelerator OA-3000-2 1bb1 Seagate Technology PLC 005d Nytro PCIe Flash Storage 1bb1 6501 Nytro XP6500-8A1536 1.5TB # 2TB Nytro PCIe controller 1bb1 6502 Nytro XP6500-8A2048 # 4TB Nytro PCIe controller 1bb1 6503 Nytro XP6500-8A4096 # 2GB DRAM variant of Nytro card 1bb1 6511 Nytro XH6550-2GB DRAM # 8GB variant of Nytro PCIe controller 1bb1 6512 Nytro XH6550-8GB DRAM # 1.5 TB Nytro PCIe controller 1bb1 6521 Nytro XP6500-8A1536 1.5TB # 2TB Nytro PCIe controller 1bb1 6522 Nytro XP6500-8A2048 # 4TB Nytro PCIe controller 1bb1 6523 Nytro XP6500-8A4096 0100 Nytro Flash Storage 1bb1 0101 Nytro XF1440 1bb1 0103 Nytro 5000 1bb1 0105 Nytro 5020 1bb1 0106 Nytro 5020 TCG # Larkspur 2.5" 1bb1 0107 Nytro 5320 # Larkspur 2.5" TCG 1bb1 0108 Nytro 5320 TCG 1bb1 0121 Nytro XM1440 1bb1 0123 Nytro 5000 # Kiowa M.2 1bb1 0125 Nytro 5020 # Kiowa M.2 TCG 1bb1 0126 Nytro 5020 # Larkspur M.2 22110mm 1bb1 0127 Nytro 5320 M.2 # Larkspur M.2 22110mm TCG 1bb1 0128 Nytro 5320 M.2 TCG # Larkspur M.2 2280mm 1bb1 0131 Nytro 5320 M.2 # Larkspur M.2 2280mm TCG 1bb1 0132 Nytro 5320 M.2 TCG # Larkspur E1.S 1bb1 0141 Nytro 5320 E1.S # Larkspur E1.S TCG 1bb1 0142 Nytro 5320 E1.S TCG # Kersey 2.5" 1bb1 0151 Nytro 5520 # Kersey 2.5" TCG 1bb1 0152 Nytro 5520 TCG # Nytro 5050H (Ebonhawk - High Performance) 1bb1 0153 Nytro 5050H # Nytro 5050H TCG (Ebonhawk High Performance) 1bb1 0154 Nytro 5050H TCG # Nytro 5050M (Ebonhawk Mainstream Performance) 1bb1 0155 Nytro 5050M # Nytro 5050M TCG (Ebonhawk Mainstream Performance) 1bb1 0156 Nytro 5050M TCG # Nytro 5050M (Ebonhawk Mainstream Performance) - 7mm 1bb1 0157 Nytro 5050M 7mm # Nytro 5050M (Ebonhawk Mainstream Performance) TCG - 7mm 1bb1 0158 Nytro 5050M TCG 7mm # Nytro 5060M (Rocinante Mainstream Performance) - 15mm 1bb1 0159 Nytro 5060M # Nytro 5050M TCG (Rocinante Mainstream Performance) - 15mm 1bb1 0160 Nytro 5060M TCG # Nytro 5060M 7mm (Rocinante Mainstream Performance) 1bb1 0161 Nytro 5060M 7mm # Nytro 5060M TCG (Rocinante Mainstream Performance) - 7mm 1bb1 0162 Nytro 5060M TCG 7mm # Nytro 5060H (Rocinante High Performance) 1bb1 0163 Nytro 5060H # Nytro 5060H TCG (Rocinante High Performance) 1bb1 0164 Nytro 5060H TCG # Nytro 5060H (Rocinante - High Performance) - E3.S 1T 1bb1 0165 Nytro 5060H E3.S 1T # Nytro 5060H (Rocinante - High Performance) - E3.S 1T TCG 1bb1 0166 Nytro 5060H E3.S 1T TCG # Nytro 5060H (Rocinante - High Performance) - E3.L 1T 1bb1 0167 Nytro 5060H E3.L 1T # Nytro 5060H (Rocinante - High Performance) - E3.L 1T TCG 1bb1 0168 Nytro 5060H E3.L 1T TCG # Nytro 5060M (Rocinante Mainstream Performance) - E3.S 1T 1bb1 0169 Nytro 5060M E3.S 1T # Nytro 5060M (Rocinante Mainstream Performance) - E3.S 1T TCG 1bb1 0170 Nytro 5060M E3.S 1T TCG # Nytro 5060M (Rocinante Mainstream Performance) - E3.L 1T 1bb1 0171 Nytro 5060M E3.L 1T # Nytro 5060M (Rocinante Mainstream Performance) - E3.L 1T TCG 1bb1 0172 Nytro 5060M E3.L 1T TCG # Nytro 5060M (Rocinante Mainstream Performance) - E1.S 1bb1 0173 Nytro 5060M E1.S # Nytro 5060M (Rocinante Mainstream Performance) - E1.S TCG 1bb1 0174 Nytro 5060M E1.S TCG # Nytro 5350S (Ebonhawk Single Port) - 15mm 1bb1 0175 Nytro 5350S - 15mm # Nytro 5350S (Ebonhawk Single Port) TCG - 15mm 1bb1 0176 Nytro 5350S TCG - 15mm # Nytro 5360S (Rocinante Single Port) - 15mm 1bb1 0177 Nytro 5360S - 15mm # Nytro 5360S (Rocinante Single Port) TCG - 15mm 1bb1 0178 Nytro 5360S TCG - 15mm # Nytro 5360S (Rocinante Single Port) - E3.S 1bb1 0179 Nytro 5360S - E3.S # Nytro 5360S (Rocinante Single Port) TCG - E3.S 1bb1 0180 Nytro 5360S TCG - E3.S # Nytro 5060H (Rocinante High Performance) non-SED 1bb1 0181 Nytro 5060H 1bb1 01a1 Nytro XP7102 0155 Nytro 5x50 NVMe SSD 5012 FireCuda/IronWolf 510 SSD 5013 BarraCuda Q5 NVMe SSD (DRAM-less) 5016 FireCuda 520/IronWolf 525 SSD 5018 E18 PCIe SSD 5019 BarraCuda PCIe SSD (DRAM-less) # 2TB 5021 FireCuda 520 SSD # 1TB 5026 FireCuda 540 SSD 5027 LaCie Rugged SSD Pro5 5100 PCIe Gen3 SSD 5101 PCIe Gen5 SSD 1bb3 Bluecherry 4304 BC-04120A MPEG4 4 port video encoder / decoder 4309 BC-08240A MPEG4 4 port video encoder / decoder 4310 BC-16480A MPEG4 16 port video encoder / decoder 4e04 BC-04120A 4 port MPEG4 video encoder / decoder 4e09 BC-08240A 8 port MPEG4 video encoder / decoder 4e10 BC-16480A 16 port MPEG4 video encoder / decoder 5304 BC-H04120A 4 port H.264 video and audio encoder / decoder 5308 BC-H08240A 8 port H.264 video and audio encoder / decoder 5310 BC-H16480A 16 port H.264 video and audio encoder / decoder 1bb5 Quantenna Communications, Inc. 1bbf Maxeler Technologies Ltd. 0003 MAX3 0004 MAX4 1bc0 Innodisk Corporation 1001 PCIe 3TG6-P Controller 1002 PCIe 3TE6 Controller (DRAM-less) 1160 PCIe 3TE2 Controller 1321 PCIe 4TG-P Controller 1322 PCIe 4TE Controller 2262 PCIe 3TG3-P Controller 5208 PCIe 3TE7 Controller 5216 PCIe 3TE8 Controller 5236 PCIe 4TG2-P Controller 1bcd Apacer Technology 0120 NVMe SSD Drive 960GB 0180 PB4480 NVMe PCIe SSD (DRAM-less) 0310 NVMe SSD Drive 480GB 1bcf NEC Corporation 001c Vector Engine 1.0 1bd0 Astronics Corporation 1001 Mx5 PMC/XMC Databus Interface Card 1002 PM1553-5 (PC/104+ MIL-STD-1553 Interface Card) 1004 AB3000 Series Rugged Computer 1005 PE1000 (Multi-Protocol PCIe/104 Interface Card) 1006 webCS Wireless Aircraft Communications Server 1007 AB3000 Series Rugged Computer (Series N) 1008 ME1000 mPCIe Avionics Interface Card 100a NG1 Series Avionics Converter 100b LE5 429 Databus Interface Card 100c LE5 1553 Databus Interface Card 1101 OmniBus II PCIe Multi-Protocol Interface Card 1102 OmniBusBox II Multi-Protocol Interface Core 1103 OmniBus II cPCIe/PXIe Multi-Protocol Interface Card 1200 NG3 Series Mil-Std-1553 Interface 1201 NG3 Series ARINC 429 Interface 1202 NG3 Series Avionics Discrete & Serial Interface 1203 NG3 Series Avionics Discrete Interface 1bd4 IEIT SYSTEMS Co., Ltd 0911 Arria10_PCIe_F10A1150 1000 NS8600G1U160 NVME SSD 1001 NS8600G1U320 NVME SSD 1002 NS8600G1U640 NVME SSD 1003 NS8500G1U192 NVME SSD 1004 NS8500G1U384 NVME SSD 1005 NS8500G1U768 NVME SSD 1006 NS6610G1U160, NS6510G1U192 NVME SSD 1007 NS6610G1U320, NS6510G1U384 NVME SSD 100c NS8510G1Uxxx, NS8610G1Uxxx NVME SSD 100e NS8500G2Uxxxx, NS8600G2Uxxxx NVME SSD 100f NS6500G2UXXXX,NS6600G2UXXXX NVME SSD 2981 32G SFP28 EP2744 Apatter 1bd4 00b0 32G SFP28 EP2744 Apatter 1bee IXXAT Automation GmbH 0002 CAN-IB100/PCIe 0003 CAN-IB200/PCIe 0004 CAN-IB120/PCIe Mini 0005 CAN-IB130/PCIe 104 0006 CAN-IB230/PCIe 104 000e CAN-IB500/PCIe 000f CAN-IB600/PCIe 0010 CAN-IB300/PCI 0011 CAN-IB400/PCI 0012 CAN-IB520/PCIe Mini 0016 CAN-IB410/PMC 001c CAN-IB810/PMC 001e INpact PCIe 001f INpact PCIe Mini 0029 INpact M.2 002d CAN-IB630/PCIe 104 002e CAN-IB640/PCIe 1bef Lantiq 0011 MIPS SoC PCI Express Port 1bf4 VTI Instruments Corporation 0001 SentinelEX 7011 RX0xxx 1bf5 Greenliant 1000 G7200 series U.2 NVMe SSD 1bfc Duagon AG 1bfd EeeTOP 1c00 Nanjing Qinheng Microelectronics Co., Ltd. 2170 CH351 PCIe Parallel Port Adapter 2273 CH351 PCIe Dual Port Serial Adapter 3050 CH382L PCIe Parallel Port Adapter 3250 CH384 Dual Port Serial and Parallel Port Adapter 3252 CH382 PCIe Dual Port Serial Adapter # Device ID reused: CH352 is for PCI bus, CH382 for PCIe. 3253 CH352/CH382 PCI/PCIe Dual Port Serial Adapter 1c09 CSP, Inc. 4254 10G-PCIE3-8D-2S 4255 10G-PCIE3-8D-Q 4256 10G-PCIE3-8D-2S 4258 10G-PCIE3-8E-2S Network Adapter 4260 10G-PCIE3-8E-4S Network Adapter 4261 10G-PCIE3-8E-4S Network Adapter 4262 10G-PCIE3-8E-4S Network Adapter 4263 10G-PCIE3-8E-4S Network Adapter 4264 10G-PCIE3-8E-2S Network Adapter 4265 10G-PCIE3-8E-2S Network Adapter 5000 25G-PCIE3-8A-2S Security Intelligent Adapter 5001 25G-PCIE3-8B-2S Security Intelligent Adapter 1c1c Symphony 0001 82C101 1c1f SoftLab-NSK 0015 FD842 0019 FD722 001a FD788 001b FD720 001c FD922 001d Vega 001f FD940 0020 FD2110 0021 FD722 0022 FD788 0023 FD722-M2 0024 FD722 with bypass 0025 FD922 0026 FD788 0027 FD940 1c28 Lite-On IT Corp. / Plextor 0122 M6e PCI Express SSD [Marvell 88SS9183] # previously Fiberblaze 1c2c Silicom Denmark 000a Capture 000f SmartNIC 00a0 FBC4G Capture 4x1Gb [Herculaneum] 00a1 FBC4XG Capture 4x10Gb [Ancona] 00a2 FBC8XG Capture 8x10Gb [Livorno] 00a3 FBC2XG Capture 2x10Gb [Genoa] 00a4 FBC4XGG3 Capture 4x10Gb [Livigno] 00a5 FBC2XLG Capture 2x40Gb [Livorno] 00a6 FBC1CG Capture 1x100Gb 00a9 FBC2XGHH Capture 2x10Gb [Latina] 00ad FBC2CGG3HL Capture 2x100Gb [Padua] 00af Capture slave device 00e0 PacketMover 2x100Gb [Savona] 00e1 PacketMover 2x100Gb [Tivoli] 00e2 PacketMover 2x100Gb [Mango_04] 00e3 PacketMover 2x10Gb [Tivoli] 00e5 PacketMover 2x10Gb [Corfu] 1000 SmartNIC N5010 4x100Gb 1001 SmartNIC N5011 w/2xE810 4x100Gb 1002 SmartNIC N5013 4x100Gb 1003 SmartNIC N5014 w/2xE810 4x100Gb a000 FBC2CGG3 Capture 2x40Gb [Mango_02] a001 FBC2CGG3 Capture 2x100Gb [Mango_02] a003 FBC2CGG3 Capture 16x10Gb [Mango] a006 FBC2CGG3 Capture 2x100Gb [Mango] a007 FBC2CGG3 Capture 2x40Gb [Mango] a008 FBC2CGG3 Capture 2x25Gb [Mango] a009 FBC2CGG3 Capture 16x10Gb [Mango] a00a FBC2CGG3 Capture 8x10Gb [Mango] a00e FB2CG Capture 2x100Gb [Savona] a00f FB2CG Capture 2x40Gb [Savona] a010 FB2CGHH Capture 2x40Gb [Tivoli] a011 FB2CG Capture 2x25Gb [Savona] a012 FB2CG Capture 8x10Gb [Savona] a013 FB2CGHH Capture 2x25Gb [Tivoli] a014 FB2CGHH Capture 8x10Gb [Tivoli] a015 FB2CGHH Capture 2x100Gb [Tivoli] a016 FB2CG Capture 8x25Gb [Savona] a017 FB2CGHH Capture 8x25Gb [Tivoli] a017 # Used on V120 VME Crate Controller 1c32 Highland Technology, Inc. 1c33 Daktronics, Inc 1c36 Annapurna Labs Ltd. 0001 Gigabit Ethernet Adapter 0002 SFP+ 10G Ethernet Adapter 1c3b Accensus, LLC 0200 Telas2 # http://www.accensusllc.com/accensustelas2.html 0300 Telas 2.V 1c44 Enmotus Inc 1100 Fuzedrive NVMe SSD 8000 8000 Storage IO Controller # A Western Digital Subsidiary 1c58 HGST, Inc. 0003 Ultrastar SN100 Series NVMe SSD 1014 04f5 PCIe3 1.6TB NVMe Flash Adapter 1014 04f6 PCIe3 3.2TB NVMe Flash Adapter 1c58 0003 Ultrastar SN100/SN150 NVMe SSD 0023 Ultrastar SN200 Series NVMe SSD 1c58 8823 Ultrastar Memory (ME200) 1c5c SK hynix 1069 PCB01 NVMe Solid State Drive 1282 PC300 NVMe Solid State Drive 128GB 1283 PC300 NVMe Solid State Drive 256GB 1284 PC300 NVMe Solid State Drive 512GB 1285 PC300 NVMe Solid State Drive 1TB 1327 BC501 NVMe Solid State Drive 1339 BC511 NVMe SSD 1504 PC400 NVMe SSD 1527 PC401 NVMe Solid State Drive 256GB 1627 PC601 NVMe Solid State Drive 1639 PC611 NVMe Solid State Drive 1739 BC701 NVMe Solid State Drive 174a Gold P31/BC711/PC711 NVMe Solid State Drive 1959 Platinum P41/PC801 NVMe Solid State Drive 1969 PC811 NVMe Solid State Drive 1d59 BC901 NVMe Solid State Drive (DRAM-less) 1f69 PVC10 NVMe Solid State Drive (DRAM-less) 2204 960GB TLC PCIe Gen3 x4 NVMe M.2 22110 2427 PE6010 NVMe Solid State Drive 2429 PE6011 NVMe Solid State Drive 243b PE6110 NVMe Solid State Drive 1c5c 0100 PE6110 NVMe Solid State Drive 2527 PE4010 NVMe Solid State Drive 2839 PE8000 Series NVMe Solid State Drive 1028 2143 DC NVMe SED PE8010 RI U.2 960GB 1028 2144 DC NVMe PE8010 RI U.2 960GB 1028 2145 DC NVMe SED PE8010 RI U.2 1.92TB 1028 2146 DC NVMe PE8010 RI U.2 1.92TB 1028 2147 DC NVMe SED PE8010 RI U.2 3.84TB 1028 2148 DC NVMe PE8010 RI U.2 3.84TB 1028 2149 DC NVMe SED PE8010 RI U.2 7.68TB 1028 214a DC NVMe PE8010 RI U.2 7.68TB 1c5c 0100 PE8000 Series NVMe Solid State Drive 2849 PE81x0 U.2/3 NVMe Solid State Drive 1028 2262 DC NVMe OPAL PE8110 RI U.2 960GB 1028 2263 DC NVMe OPAL PE8110 RI U.2 1920GB 1028 2264 DC NVMe OPAL PE8110 RI U.2 3840GB 1028 2265 DC NVMe OPAL PE8110 RI U.2 7680GB 1028 2266 DC NVMe ISE PE8110 RI U.2 960GB 1028 2267 DC NVMe ISE PE8110 RI U.2 1920GB 1028 2268 DC NVMe ISE PE8110 RI U.2 3840GB 1028 2269 DC NVMe ISE PE8110 RI U.2 7680GB 1c5c 0101 PE81x0 U.2/3 NVMe Solid State Drive 284a PE8110 Series NVMe Solid State Drive 2a49 PE9110 Series NVMe Solid State Drive 2a59 PE9010 Series NVMe Solid State Drives 2b59 Px10x0 Series NVMe Solid State Drives 1028 2295 NVMe ISE PS1010 RI U.2 1.92TB 1028 2296 NVMe ISE PS1010 RI U.2 3.84TB 1028 2297 NVMe ISE PS1010 RI U.2 7.68TB 1028 2298 NVMe ISE PS1010 RI U.2 15.36TB 1028 2299 NVMe ISE PS1030 MU U.2 1.6TB 1028 229a NVMe ISE PS1030 MU U.2 3.2TB 1028 229b NVMe ISE PS1030 MU U.2 6.4TB 1028 229c NVMe ISE PS1030 MU U.2 12.8TB 1028 22a7 NVMe ISE PS1010 RI E3.S 1.92TB 1028 22a8 NVMe ISE PS1010 RI E3.S 3.84TB 1028 22a9 NVMe ISE PS1010 RI E3.S 7.68TB 1028 22aa NVMe ISE PS1010 RI E3.S 15.36TB 1028 22ab NVMe ISE PS1030 MU E3.S 1.6TB 1028 22ac NVMe ISE PS1030 MU E3.S 3.2TB 1028 22ad NVMe ISE PS1030 MU E3.S 6.4TB 1028 22ae NVMe ISE PS1030 MU E3.S 12.8TB 1028 22dc NVMe FIPS PS1010 RI E3.S 1.92TB 1028 22dd NVMe FIPS PS1010 RI E3.S 3.84TB 1028 22de NVMe FIPS PS1010 RI E3.S 7.68TB 1028 22df NVMe FIPS PS1010 RI E3.S 15.36TB 1028 22e0 NVMe FIPS PS1030 MU E3.S 1.6TB 1028 22e1 NVMe FIPS PS1030 MU E3.S 3.2TB 1028 22e2 NVMe FIPS PS1030 MU E3.S 6.4TB 1028 22e3 NVMe FIPS PS1030 MU E3.S 12.8TB 1028 22f8 NVMe ISE PE1010 RI E3.S 1.92TB 1028 22f9 NVMe ISE PE1010 RI E3.S 3.84TB 1028 22fa NVMe ISE PE1010 RI E3.S 7.68TB 1028 22fb NVMe ISE PE1010 RI E3.S 15.36TB 1028 22fc NVMe ISE PE1030 MU E3.S 1.6TB 1028 22fd NVMe ISE PE1030 MU E3.S 3.2TB 1028 22fe NVMe ISE PE1030 MU E3.S 6.4TB 1028 22ff NVMe ISE PE1030 MU E3.S 12.8TB 1c5f Beijing Memblaze Technology Co. Ltd. 000d PBlaze5 520/526 1c5f 0220 NVMe SSD PBlaze5 520 1920G AIC 1c5f 0221 NVMe SSD PBlaze5 520 1920G 2.5" U.2 1c5f 0230 NVMe SSD PBlaze5 520 3840G AIC 1c5f 0231 NVMe SSD PBlaze5 520 3840G 2.5" U.2 1c5f 4220 NVMe SSD PBlaze5 526 1600G AIC 1c5f 4221 NVMe SSD PBlaze5 526 1600G 2.5" U.2 1c5f 4230 NVMe SSD PBlaze5 526 3200G AIC 1c5f 4231 NVMe SSD PBlaze5 526 3200G 2.5" U.2 000e PBlaze6 6530/6531/6541/6630 1c5f 0b20 NVMe SSD PBlaze6 6530 1920G AIC 1c5f 0b21 NVMe SSD PBlaze6 6530 1920G 2.5" U.2 1c5f 0b25 NVMe SSD PBlaze6 6530 1920G E1.S 1c5f 0b27 NVMe SSD PBlaze6 6630 1920G 2.5" U.2 1c5f 0b30 NVMe SSD PBlaze6 6530 3840G AIC 1c5f 0b31 NVMe SSD PBlaze6 6530 3840G 2.5" U.2 1c5f 0b35 NVMe SSD PBlaze6 6530 3840G E1.S 1c5f 0b37 NVMe SSD PBlaze6 6630 3840G 2.5" U.2 1c5f 0b40 NVMe SSD PBlaze6 6530 7680G AIC 1c5f 0b41 NVMe SSD PBlaze6 6530 7680G 2.5" U.2 1c5f 0b47 NVMe SSD PBlaze6 6630 7680G 2.5" U.2 1c5f 1320 NVMe SSD PBlaze6 6531 1920G AIC 1c5f 1321 NVMe SSD PBlaze6 6531 1920G 2.5" U.2 1c5f 1330 NVMe SSD PBlaze6 6531 3840G AIC 1c5f 1331 NVMe SSD PBlaze6 6531 3840G 2.5" U.2 1c5f 1340 NVMe SSD PBlaze6 6531 7680G AIC 1c5f 1341 NVMe SSD PBlaze6 6531 7680G 2.5" U.2 1c5f 1421 NVMe SSD PBlaze6 6541 1920G 2.5" U.2 1c5f 1427 NVMe SSD PBlaze6 6641 1920G 2.5" U.2(dual port) 1c5f 1431 NVMe SSD PBlaze6 6541 3840G 2.5" U.2 1c5f 1437 NVMe SSD PBlaze6 6641 3840G 2.5" U.2(dual port) 1c5f 1441 NVMe SSD PBlaze6 6541 7680G 2.5" U.2 1c5f 1447 NVMe SSD PBlaze6 6641 7680G 2.5" U.2(dual port) 1c5f 4b20 NVMe SSD PBlaze6 6536 1600G AIC 1c5f 4b21 NVMe SSD PBlaze6 6536 1600G 2.5" U.2 1c5f 4b25 NVMe SSD PBlaze6 6536 1600G E1.S 1c5f 4b27 NVMe SSD PBlaze6 6636 1600G 2.5" U.2 1c5f 4b30 NVMe SSD PBlaze6 6536 3200G AIC 1c5f 4b31 NVMe SSD PBlaze6 6536 3200G 2.5" U.2 1c5f 4b35 NVMe SSD PBlaze6 6536 3200G E1.S 1c5f 4b37 NVMe SSD PBlaze6 6636 3200G 2.5" U.2 1c5f 4b40 NVMe SSD PBlaze6 6536 6400G AIC 1c5f 4b41 NVMe SSD PBlaze6 6536 6400G 2.5" U.2 1c5f 4b47 NVMe SSD PBlaze6 6636 6400G 2.5" U.2 1c5f 5320 NVMe SSD PBlaze6 6537 1600G AIC 1c5f 5321 NVMe SSD PBlaze6 6537 1600G 2.5" U.2 1c5f 5330 NVMe SSD PBlaze6 6537 3200G AIC 1c5f 5331 NVMe SSD PBlaze6 6537 3200G 2.5" U.2 1c5f 5340 NVMe SSD PBlaze6 6537 6400G AIC 1c5f 5341 NVMe SSD PBlaze6 6537 6400G 2.5" U.2 1c5f 5421 NVMe SSD PBlaze6 6547 1600G 2.5" U.2 1c5f 5427 NVMe SSD PBlaze6 6647 1600G 2.5" U.2(dual port) 1c5f 5431 NVMe SSD PBlaze6 6547 3200G 2.5" U.2 1c5f 5437 NVMe SSD PBlaze6 6647 3200G 2.5" U.2(dual port) 1c5f 5441 NVMe SSD PBlaze6 6547 6400G 2.5" U.2 1c5f 5447 NVMe SSD PBlaze6 6647 6400G 2.5" U.2(dual port) 0027 PBlaze7 7A40/7A46 NVMe SSD 1c5f 1421 NVMe SSD PBlaze7 7A40 1920G 2.5" U.2 1c5f 1431 NVMe SSD PBlaze7 7A40 3840G 2.5" U.2 1c5f 1441 NVMe SSD PBlaze7 7A40 7680G 2.5" U.2 1c5f 5431 NVMe SSD PBlaze7 7A46 3200G 2.5" U.2 1c5f 5441 NVMe SSD PBlaze7 7A46 6400G 2.5" U.2 003d PBlaze5 920/926 1c5f 0a30 NVMe SSD PBlaze5 920 3840G AIC 1c5f 0a31 NVMe SSD PBlaze5 920 3840G 2.5" U.2 1c5f 0a40 NVMe SSD PBlaze5 920 7680G AIC 1c5f 0a41 NVMe SSD PBlaze5 920 7680G 2.5" U.2 1c5f 4a30 NVMe SSD PBlaze5 926 3200G AIC 1c5f 4a31 NVMe SSD PBlaze5 926 3200G 2.5" U.2 1c5f 4a40 NVMe SSD PBlaze5 926 6400G AIC 1c5f 4a41 NVMe SSD PBlaze5 926 6400G 2.5" U.2 003e PBlaze6 6920/6930 1c5f 0a31 NVMe SSD PBlaze6 6920 3840GB 2.5" U.2 1c5f 0a41 NVMe SSD PBlaze6 6920 7680GB 2.5" U.2 1c5f 0b31 NVMe SSD PBlaze6 6930 3840GB 2.5" U.3 1c5f 0b41 NVMe SSD PBlaze6 6930 7680GB 2.5" U.3 1c5f 0b51 NVMe SSD PBlaze6 6930 15360GB 2.5" U.3 1c5f 0b61 NVMe SSD PBlaze6 6930 30720GB 2.5" U.3 1c5f 4a31 NVMe SSD PBlaze6 6920 3200GB 2.5" U.2 1c5f 4a41 NVMe SSD PBlaze6 6920 6400GB 2.5" U.2 1c5f 4b41 NVMe SSD PBlaze6 6936 6400GB 2.5" U.3 1c5f 4b51 NVMe SSD PBlaze6 6936 12800GB 2.5" U.3 1c5f 4b61 NVMe SSD PBlaze6 6936 25600GB 2.5" U.3 003f PBlaze7 7940/7946 NVMe SSD 1c5f 0431 NVMe SSD PBlaze7 7940 3840G 2.5" U.2 1c5f 0441 NVMe SSD PBlaze7 7940 7680G 2.5" U.2 1c5f 0451 NVMe SSD PBlaze7 7940 15360G 2.5" U.2 1c5f 0c31 NVMe SSD PBlaze7 7940 3840G 2.5" U.2 1c5f 0c41 NVMe SSD PBlaze7 7940 7680G 2.5" U.2 1c5f 0c51 NVMe SSD PBlaze7 7940 15360G 2.5" U.2 1c5f 0c61 NVMe SSD PBlaze7 7940 30720G 2.5" U.2 1c5f 1430 NVMe SSD PBlaze7 7940 3840G AIC 1c5f 1431 NVMe SSD PBlaze7 7940 3840G 2.5" U.2 1c5f 1435 NVMe SSD PBlaze7 7940 3840G E1.S 1c5f 1440 NVMe SSD PBlaze7 7940 7680G AIC 1c5f 1441 NVMe SSD PBlaze7 7940 7680G 2.5" U.2 1c5f 1445 NVMe SSD PBlaze7 7940 7680G E1.S 1c5f 1450 NVMe SSD PBlaze7 7940 15360G AIC 1c5f 1451 NVMe SSD PBlaze7 7940 15360G 2.5" U.2 1c5f 4431 NVMe SSD PBlaze7 7946 3200G 2.5" U.2 1c5f 4441 NVMe SSD PBlaze7 7946 6400G 2.5" U.2 1c5f 4451 NVMe SSD PBlaze7 7946 12800G 2.5" U.2 1c5f 4c31 NVMe SSD PBlaze7 7946 3200G 2.5" U.2 1c5f 4c41 NVMe SSD PBlaze7 7946 6400G 2.5" U.2 1c5f 4c51 NVMe SSD PBlaze7 7946 12800G 2.5" U.2 1c5f 5430 NVMe SSD PBlaze7 7946 3200G AIC 1c5f 5431 NVMe SSD PBlaze7 7946 3200G 2.5" U.2 1c5f 5435 NVMe SSD PBlaze7 7946 3200G E1.S 1c5f 5440 NVMe SSD PBlaze7 7946 6400G AIC 1c5f 5441 NVMe SSD PBlaze7 7946 6400G 2.5" U.2 1c5f 5445 NVMe SSD PBlaze7 7946 6400G E1.S 1c5f 5450 NVMe SSD PBlaze7 7946 12800G AIC 1c5f 5451 NVMe SSD PBlaze7 7946 12800G 2.5" U.2 1ea0 2100 TP2510 Series U.2 NVMe Datacenter SSD(3.84TB) 1ea0 2101 TP2511 Series U.2 NVMe Datacenter SSD(3.84TB) 1ea0 2110 TP2510 Series E3.S NVMe Datacenter SSD(3.84TB) 1ea0 2111 TP2511 Series E3.S NVMe Datacenter SSD(3.84TB) 1ea0 2200 TP2510 Series U.2 NVMe Datacenter SSD(7.68TB) 1ea0 2201 TP2511 Series U.2 NVMe Datacenter SSD(7.68TB) 1ea0 2202 TP2310 Series U.2 NVMe Datacenter SSD(7.68TB) 1ea0 2210 TP2510 Series E3.S NVMe Datacenter SSD(7.68TB) 1ea0 2211 TP2511 Series E3.S NVMe Datacenter SSD(7.68TB) 1ea0 2301 TP2511 Series U.2 NVMe Datacenter SSD (15.36TB) 0540 PBlaze4 NVMe SSD 0550 PBlaze5 700/900 0555 PBlaze5 510/516 0557 PBlaze5 910/916 1c63 Science and Research Centre of Computer Technology (JSC "NICEVT") 0008 K1927BB1Ya [EC8430] Angara Interconnection Network Adapter # Other World Computing 1c7a OWC 1c7e TTTech Computertechnik AG 0200 zFAS Debug Port 1c7f Elektrobit Austria GmbH 0300 EBX3 5100 EB5100 7200 EB 7200 Automotive logging and replay card # This is a EB7200 card compatibly with a EB PCIe driver 7201 EB7200 with EB PCIe Driver Interface 7211 EB7210 1c8a TSF5 Corporation 0001 Hunter PCI Express 1c8c Mobiveil, Inc. 1cb0 Shannon Systems 8266 SP4 Series SSD 1cb0 2021 SP4 Series OCS U.2 SSD 1cb0 2121 SP4 Series ZNS U.2 SSD 1cb0 2f21 SP4E Series NVMe U.2 SSD(1920/3840/7680GB) 1cb0 2f22 SP4X Series NVMe U.2 SSD(1600/3200/6400GB) d000 Venice NVMe SSD 1cb0 2010 Venice-E Series OCS U.2 1cb0 2011 Venice Series OCS U.2 1cb0 2012 Venice-X Series OCS U.2 # Venice-E Series NVMe U.2 SSD(1.92T/3.84T/7.68T) 1cb0 2f10 Venice-E Series NVMe U.2 # Venice Series NVMe U.2 SSD(2T/4T/8T) 1cb0 2f11 Venice Series NVMe U.2 # Venice-X Series NVMe U.2 SSD(1.6T/3.2T/6.4T) 1cb0 2f12 Venice-X Series NVMe U.2 1cb0 a010 Venice-E Series OCS AIC 1cb0 a012 Venice-X Series OCS AIC # Venice-E Series NVMe AIC SSD(1.92T/3.84T/7.68T) 1cb0 af10 Venice-E Series NVMe AIC # Venice-X Series NVMe AIC SSD(1.6T/3.2T/6.4T) 1cb0 af12 Venice-X Series NVMe AIC 1cb1 Collion UG & Co.KG 1cb5 Focusrite Audio Engineering Ltd 0002 Clarett 1cb8 Dawning Information Industry Co., Ltd. 1cc1 ADATA Technology Co., Ltd. 1202 IM2P32A8 NVMe SSD (DRAM-less) 1602 LEGEND 900 NVMe SSD (DRAM-less) # SX6000LNP 2263 XPG SX6000 Lite NVMe SSD (DRAM-less) 32a8 SM2P32A8 NVMe SSD (DRAM-less) 33f3 IM2P33F3 NVMe SSD (DRAM-less) 33f4 IM2P33F4 NVMe SSD (DRAM-less) 33f8 IM2P33F8 series NVMe SSD (DRAM-less) 41c3 SM2P41C3 NVMe SSD (DRAM-less) 41c8 SM2P41C8 NVMe SSD (DRAM-less) 5236 XPG GAMMIX S70 BLADE NVMe SSD 5350 XPG GAMMIX S50, S50 Lite NVMe SSD # PREMIUM NVMe SSD for PlayStation 5 5370 GAMMIX S70 BLADE, PS5 PREMIUM NVMe SSD 5762 FALCON, GAMMIX S41, SPECTRIX S40G NVMe SSD (DRAM-less) 5763 XPG GAMMIX S5 NVMe SSD (DRAM-less) 5766 XPG GAMMIXS1 1L, XPG GAMMIX S5, LEGEND 710 / 740, SWORDFISH NVMe SSD (DRAM-less) 5772 LEGEND 850 LITE NVMe SSD (DRAM-less) 612a LEGEND 750 NVMe SSD (DRAM-less) 613a ATOM 50, LEGEND 840 NVMe SSD (DRAM-less) 621a LEGEND 850 NVMe SSD (DRAM-less) 622a LEGEND 960 NVMe SSD 623a LEGEND 710 NVMe SSD (DRAM-less) 624a LEGEND 700, XPG GAMMIX S20 NVMe SSD (DRAM-less) 625a LEGEND 850 LITE NVMe SSD (DRAM-less) # 1TB 627a LEGEND 800 NVMe SSD (DRAM-less) # 500GB 628a LEGEND 800 NVMe SSD (DRAM-less) 631a LEGEND 970 NVMe SSD 633a LEGEND 900 NVMe SSD (DRAM-less) 634c LEGEND 820 NVMe SSD (DRAM-less) 635a XPG GAMMIX S60 NVMe SSD (DRAM-less) 642a XPG GAMMIX S50 CORE NVMe SSD (DRAM-less) 8201 XPG SX8200 Pro PCIe Gen3x4 M.2 2280 Solid State Drive 1cc4 Shenzhen Unionmemory Information System Ltd. 1203 NVMe SSD Controller UHXXXa series 1cc4 a121 NVMe SSD UHXXXa series U.2 960GB 1cc4 a122 NVMe SSD UHXXXa series U.2 1920GB 1cc4 a123 NVMe SSD UHXXXa series U.2 3840GB 1cc4 a124 NVMe SSD UHXXXa series U.2 7680GB 1cc4 a125 NVMe SSD UHXXXa series U.2 15360GB 1cc4 a211 NVMe SSD UHXXXa series U.2 800GB 1cc4 a212 NVMe SSD UHXXXa series U.2 1600GB 1cc4 a213 NVMe SSD UHXXXa series U.2 3200GB 1cc4 a214 NVMe SSD UHXXXa series U.2 6400GB 1cc4 e122 NVMe SSD UH711a series U.2 1920GB 1cc4 e123 NVMe SSD UH711a series U.2 3840GB 1cc4 e124 NVMe SSD UH711a series U.2 7680GB 17a9 RPITJ1TBVME2HWD NVMe SSD 1024GB 17aa AH631 PCIe 3.0 NVMe SSD 512GB 17ab AH631 PCIe 3.0 NVMe SSD 256GB 2263 AM611 PCIe 3.0 x2 NVMe SSD 256GB 5008 AM610 PCIe 3.0 x2 NVMe SSD 128GB, 256GB 5012 AH530 PCIe 3.0 NVMe SSD 512GB 5212 AM521 PCIe 3.0 NVMe SSD 256GB 6201 AM620 PCIe 3.0 NVMe SSD 128GB 6202 AM620 PCIe 3.0 NVMe SSD 256GB 6203 AM620 PCIe 3.0 NVMe SSD 512GB 6204 AM620 PCIe 3.0 NVMe SSD 1024GB 6302 AM630 PCIe 4.0 NVMe SSD 256GB 6303 AM630 PCIe 4.0 x4 NVMe SSD Controller 6304 AM630 PCIe 4.0 NVMe SSD 1024GB 634c LEGEND 820 NVMe SSD (DRAM-less) 635a GAMMIX S60 NVMe SSD (DRAM-less) 660c AH660 PCIe 4.0 NVMe SSD 6a01 AM620 PCIe 3.0 NVMe SSD 128GB 6a02 AM6A0 PCIe 4.0 NVMe SSD 256GB 6a03 RPETJ512MKP1QDQ PCIe 4.0 NVMe SSD 512GB (DRAM-less) 6a04 AM6A0 PCIe 4.0 NVMe SSD 1024GB (DRAM-less) 6a13 RPJYJ512MKN1QWQ PCIe 4.0 NVMe SSD 512GB (DRAM-less) 6a14 AM6A1 PCIe 4.0 NVMe SSD 1024GB (DRAM-less) 6b04 AM6B0 PCIe 4.0 NVMe SSD 6b13 AM6B1 PCIe 4.0 NVMe SSD 512GB (DRAM-less) 6b14 RPJYJ1T24MLR1HWY PCIe 4.0 NVMe SSD 1024GB (DRAM-less) 8030 NVMe SSD Controller UH8X2X/UH7X2X series 1cc4 1122 NVMe SSD UH812a U.2 1.92TB 1cc4 1123 NVMe SSD UH812a U.2 3.84TB 1cc4 1124 NVMe SSD UH812a U.2 7.68TB 1cc4 1125 NVMe SSD UH812a U.2 15.36TB 1cc4 1222 NVMe SSD UH812a E3.S 1.92TB 1cc4 1223 NVMe SSD UH812a E3.S 3.84TB 1cc4 1224 NVMe SSD UH812a E3.S 7.68TB 1cc4 1225 NVMe SSD UH812a E3.S 15.36TB 1cc4 2112 NVMe SSD UH832a U.2 1.6TB 1cc4 2113 NVMe SSD UH832a U.2 3.2TB 1cc4 2114 NVMe SSD UH832a U.2 6.4TB 1cc4 2115 NVMe SSD UH832a U.2 12.8TB 1cc4 2212 NVMe SSD UH832a E3.S 1.6TB 1cc4 2213 NVMe SSD UH832a E3.S 3.2TB 1cc4 2214 NVMe SSD UH832a E3.S 6.4TB 1cc4 2215 NVMe SSD UH832a E3.S 12.8TB 1cc4 3122 NVMe SSD UH712a U.2 1.92TB 1cc4 3123 NVMe SSD UH712a U.2 3.84TB 1cc4 3124 NVMe SSD UH712a U.2 7.68TB 1cc4 3125 NVMe SSD UH712a U.2 15.36TB 1ea0 4124 NVMe SSD TP3511 U.2 7.68TB 1ea0 4125 NVMe SSD TP3511 U.2 15.36TB 1ea0 4224 NVMe SSD TP3511 E3.S 7.68TB 1ea0 4225 NVMe SSD TP3511 E3.S 15.36TB 1cc5 Embedded Intelligence, Inc. 0100 PCIe-CAN-02 Dual CAN bus (9-pin male). PCI Express x1. 0101 PCIe-CAN-01 Single CAN bus (9-pin male). PCI Express x1. 1cc7 Radian Memory Systems Inc. 0200 RMS-200 PCIe NVMe SSD 0250 RMS-250 U.2 NVMe SSD 1ccf Zoom Corporation 0001 TAC-2 Thunderbolt Audio Converter 1cd2 Seskion GmbH 0301 Simulyzer-RT CompactPCI Serial DIO-1 card 0302 Simulyzer-RT CompactPCI Serial PSI5-ECU-1 card 0303 Simulyzer-RT CompactPCI Serial PSI5-SIM-1 card 0304 Simulyzer-RT CompactPCI Serial PWR-ANA-1 card 0305 Simulyzer-RT CompactPCI Serial CAN-1 card # supports 8x CAN (-FD) interfaces 0306 Simulyzer-RT CompactPCI Serial CAN-2 card (CAN-FD) 0307 Simulyzer-RT CompactPCI Serial DIO-2 card [Xilinx Zynq UltraScale+] 0308 Simulyzer-RT CompactPCI Serial SENT-DIO-2 card # 8-Channel ADC 0309 Simulyzer-RT CompactPCI Serial SN-ADC card 1cd7 Nanjing Magewell Electronics Co., Ltd. 0002 Pro Capture AIO 0010 Pro Capture Endpoint 0014 PRO CAPTURE AIO 4K PLUS 0015 Pro Capture HDMI 4K + 0017 PRO CAPTURE AIO 4K 0051 Eco Capture Dual HDMI M.2 0052 Eco Capture HDMI 4K M.2 0053 Eco Capture Dual SDI M.2 0054 Eco Capture Quad SDI M.2 1cdd secunet Security Networks AG 1ce4 Exablaze 0001 ExaNIC X4 0002 ExaNIC X2 0003 ExaNIC X10 0004 ExaNIC X10-GM 0005 ExaNIC X40 0006 ExaNIC X10-HPT 0007 ExaNIC X40 0008 ExaNIC V5P 0009 ExaNIC X25 000a ExaNIC X100 000b ExaNIC V9P 000c ExaNIC V9P-3 0100 ExaDISK FX1 1cf0 Akitio 1cf2 ZTE Corp. 8036 DH Switch 8040 NEO X510 SRIOV PF Ethernet Controller 8041 NEO X510 SRIOV VF Ethernet Controller Virtual Function 8042 NX I512 VDPA VF Ethernet Controller Virtual Function 8044 NEO X510 MPF Ethernet Controller 8045 NX I512 BOND PF Ethernet Controller 8046 NX I512 OVS PF Ethernet Controller 8047 NEO X510 BOND PF Ethernet Controller 8048 NEO X510 OVS PF Ethernet Controller 8049 NX E312 SRIOV RDMA PF Ethernet Controller 804a NEO X512 NOF PF Ethernet Controller 804b NEO X512 SRIOV PF Ethernet Controller 804c NEO X512 INITIATOR1 PF Ethernet Controller 804d NEO X512 INITIATOR2 PF Ethernet Controller 804e NX I512 UPF PF Ethernet Controller 804f NX I512 UPF VF Ethernet Controller Virtual Function 8060 NX E312 SRIOV RDMA VF Ethernet Controller Virtual Function 8061 NX E310 SRIOV PF Ethernet Controller 8062 NX E310 SRIOV VF Ethernet Controller Virtual Function 8063 NX I510 BOND PF Ethernet Controller 8064 NX I510 OVS PF Ethernet Controller 8065 NX I510 VDPA VF Ethernet Controller Virtual Function 8066 NX I511 SRIOV PF Ethernet Controller 8067 NX I511 OVS PF Ethernet Controller 8068 NX I511 VDPA VF Ethernet Controller Virtual Function 806b NEO X512 RDMA PF Ethernet Controller 806c NEO X512 RDMA VF Ethernet Controller Virtual Function 806d NX I512 RDMA PF Ethernet Controller 806e NX I512 RDMA VF Ethernet Controller Virtual Function 806f NX I512 UPF BOND PF Ethernet Controller 807d NX E312S SRIOV PF Ethernet Controller 807e NX E316 SRIOV PF Ethernet Controller 807f NX E316 SRIOV VF Ethernet Controller Virtual Function 8080 NX E311 SRIOV PF Ethernet Controller 8081 NX E311 SRIOV VF Ethernet Controller Virtual Function 8082 NX I511 SRIOV PF Ethernet Controller 8083 NX I511 SRIOV VF Ethernet Controller Virtual Function 8084 NX E310 RDMA PF Ethernet Controller 8085 NX E310 RDMA VF Ethernet Controller Virtual Function 8086 NX I510 SRIOV SEC PF Ethernet Controller 8087 NX I510 SRIOV SEC VF Ethernet Controller Virtual Function 8088 NX E312S SRIOV VF Ethernet Controller Virtual Function 8089 NEO X512 SRIOV PF Ethernet Controller 808a NEO X512 SRIOV PF Ethernet Controller 80a0 NX E312 PF Ethernet Controller 80a1 NX E312 VF Ethernet Controller Virtual Function 80a2 NX E312S_D SRIOV PF Ethernet Controller 80a3 NX E312S_D SRIOV VF Ethernet Controller Virtual Function 80a4 NX I512 OFFLOAD PF Ethernet Controller 1cf7 Subspace Dynamics 1cfa Corsair Memory, Inc 1cfd Mangstor 6300 MX6300 series PCIe x8 NVMe SSD 1d00 Pure Storage 1d05 AIstone Global Limited 6027 B760-N2D5 motherboard 7001 H610-N2 motherboard 1d0f Amazon.com, Inc. 7064 NeuronDevice (Inferentia) 7164 NeuronDevice (Trainium) 1d0f 0000 Trainium 7264 NeuronDevice (Inferentia2) 7364 NeuronDevice (Trainium2) 8061 NVMe EBS Controller cd01 NVMe SSD Controller ec20 Elastic Network Adapter (ENA) efa0 Elastic Fabric Adapter (EFA) efa1 Elastic Fabric Adapter (EFA) efa2 Elastic Fabric Adapter (EFA) efa3 Elastic Fabric Adapter (EFA) 1d17 Zhaoxin 070f ZX-100 PCI Express Root Port 0710 ZX-100/ZX-200 PCI Express Root Port 0711 ZX-100/ZX-200 PCI Express Root Port 0712 ZX-100/ZX-200 PCI Express Root Port 0713 ZX-100/ZX-200 PCI Express Root Port 0714 ZX-100/ZX-200 PCI Express Root Port 0715 ZX-100/ZX-200 PCI Express Root Port 0716 ZX-D PCI Express Root Port 0717 KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Express Root Port 0718 KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Express Root Port 0719 KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Express Root Port 071a KX-5000/KX-6000/KX-6000G/KH-40000 PCI Express Root Port 071b KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Express Root Port 071c KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Express Root Port 071d KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Express Root Port 071e KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Express Root Port 071f ZX-200 Upstream Port of PCI Express Switch 0720 ZX-200 PCIE RC6 controller 0721 ZX-200 Downstream Port of PCI Express Switch 0722 ZX-200 PCIE P2C bridge 0731 KH-40000 PCI Express Root Port 0732 KH-40000/KX-7000 PCI Express Root Port 0733 KX-7000 PCIE Express Root Port 0734 KX-7000 PCIE Express Root Port 0735 KX-7000 PCIE Express Root Port 0736 KX-7000 PCIE Express Root Port 0737 KX-7000 PCIE Express Root Port 0738 KX-7000 PCIE Express Root Port 0739 KX-7000 PCIE Express Root Port 073a KX-7000 PCIE Express Root Port 073b KX-7000 PCIE Express Root Port 1000 ZX-D Standard Host Bridge 1001 ZX-D/ZX-E/KH-40000/KX-7000 Miscellaneous Bus 1003 ZX-E Standard Host Bridge 1005 KH-40000 Standard Host Bridge 1006 KX-6000G Standard Host Bridge 1007 KX-7000 Standard Host Bridge 3001 ZX-100 Standard Host Bridge 300a ZX-100 Miscellaneous Bus 3038 ZX-100/ZX-200/KX-6000/KX-6000G/KH-40000/KX-7000 Standard Universal PCI to USB Host Controller 3104 ZX-100/ZX-200/KX-6000/KX-6000G/KH-40000/KX-7000 Standard Enhanced PCI to USB Host Controller 31b0 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 Standard Host Bridge 31b1 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 Standard Host Bridge 31b2 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 DRAM Controller 31b3 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 Power Management Controller 31b4 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 I/O APIC 31b5 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 Scratch Device 31b7 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 Standard Host Bridge 31b8 ZX-100/ZX-D PCI to PCI Bridge 3200 KX-7000 Host Bridge 3288 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 High Definition Audio Controller 345b ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000 Miscellaneous Bus 3a02 ZX-100 C-320 GPU 3a03 ZX-D C-860 GPU 3a04 KX-6000 C-960 GPU 3a05 KX-7000 C-1190 GPU 3b01 KH-40000 OPI Controller 3b02 KH-40000 OPI Controller 3b03 KH-40000 OPI Controller 3b04 KH-40000 OPI Controller 3c00 KH-40000/KX-7000 DRAM Controller 3c02 KX-6000G DRAM Controller 3d01 KX-6000G C-1080 GPU 9002 ZX-100/ZX-200/KH-40000/KX-7000 EIDE Controller 9003 ZX-100/KX-6000/KX-6000G EIDE Controller 9043 KX-6000G/KH-40000/KX-7000 RAID Controller 9045 ZX-100/ZX-D/ZX-E RAID Accelerator 0 9046 ZX-D/ZX-E RAID Accelerator 1 9083 ZX-100/ZX-200/KX-6000/KX-6000G/KH-40000/KX-7000 StorX AHCI Controller 9084 ZX-100 StorX AHCI Controller 9100 ZX-200 Cross bus 9101 ZX-200 Traffic Controller 9141 ZX-100 High Definition Audio Controller 9142 ZX-D High Definition Audio Controller 9144 ZX-E High Definition Audio Controller 9145 KX-6000G High Definition Audio Controller 9146 KX-7000 High Definition Audio Controller 9180 ZX-200 Networking Gigabit Ethernet Adapter 91c1 KH-40000 ZPI Controller 91c2 KH-40000 ZPI Controller 9202 ZX-100 USB eXtensible Host Controller 9203 ZX-200 USB eXtensible Host Controller 9204 KX-6000/KX-6000G/KX-7000 USB3 xHCI Host Controller 9205 KH-40000 USB eXtensible Host Controller 9206 KX-7000 USB4 Contoller 9286 ZX-D eMMC Host Controller 9300 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 eSPI Host Controller 9500 KX-7000 I2S Controller 9501 KX-7000 I2S Controller 95d0 ZX-100 Universal SD Host Controller f410 ZX-100/KX-5000/KX-6000/KX-6000G/KH-40000/KX-7000 PCI Com Port 1d18 RME 0001 Fireface UFX+ # acquired by Intel 1d1c Barefoot Networks, Inc. 0001 Tofino 1 0010 Tofino 1 0100 Tofino 2 0110 Tofino 2 1d1d CNEX Labs 1f1f QEMU NVM Express LightNVM Controller 2807 8800 series NVMe SSD # CEM Solutions Pvt. Ltd. 1d21 Allo 1d22 Baidu Technology 1380 Cloud Storage Device 3684 Kunlun AI Accelerator 3685 Kunlun2 AI Accelerator [VF] 1d26 Kalray Inc. 0040 Turbocard2 Accelerator 0080 Open Network Interface Card 80G 00c0 Turbocard3 Accelerator 0140 Open Network Interface Card 40G e004 AB01/EMB01 Development Board 1d2a KAYA Instruments 1000 Frame grabber 1d37 NovaSparks 0013 PM3 0014 PM4 0015 PM4edge 0016 PM4edge User Device 1d40 Techman Electronics (Changshu) Co., Ltd. 5501 XC100C55-xxxx NVME SSD 5c01 XC100C5C-xxxx, XC100E5C-xxxx NVME SSD b100 PV100C55-xxxx NVME SSD 1d44 DPT a400 PM2x24/PM3224 1d49 Lenovo 1d4c Diamanti, Inc. 1d5c Fantasia Trading LLC 1d61 Technobox, Inc. 1d62 Nebbiolo Technologies 1d65 Imagine Communications Corp. 04de Taurus/McKinley # nee Celeno Communications 1d69 Renesas Electronics Corp. 2432 CL2432 2440 CL2440 8000 CL80x0 Wireless Network Adapter 8046 CL8046 Wireless Network Adapter 1d6a Aquantia Corp. 0001 AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] 4c52 6880 LREC6880BT Single-port 10Gb Ethernet Network Adapter 00b1 AQtion AQC100 NBase-T/IEEE 802.3an Ethernet Controller [Atlantic 10G] 1043 874a XG-C100F 10GbE SFP+ Ethernet Adapter 00c0 Antigua NBase-T/IEEE 802.3an Ethernet Controller - Engineering Sample 04c0 AQtion AQC113 NBase-T/IEEE 802.3an Ethernet Controller [Antigua 10G] 4c52 1053 LRES1053PT Quad-port 10Gb Ethernet Network Adapter 4c52 2051 LRES2051PT Single-port 10Gb Ethernet Network Adapter 07b1 AQtion AQC107 NBase-T/IEEE 802.3an Ethernet Controller [Atlantic 10G] # Older revision of QNAP QM2 M.2 2280 PCIe SSD & 10GbE Expansion Card 1baa 07b1 QM2-2P10G1TA [QXG 10GbE Network Adapter] # Newer revision of QNAP QM2 M.2 2280 PCIe SSD & 10GbE Expansion Card 1baa 07b2 QM2-2P10G1TA [QM2 Expansion Adapter] 4c52 6880 LREC6880BT Single-port 10Gb Ethernet Network Adapter 08b1 AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] 11b1 AQC111 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] 12b1 AQC112 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] 12c0 AQtion AQC115C NBase-T/IEEE 802.3bz Ethernet Controller [Antigua 2.5G] 14c0 AQC113C NBase-T/IEEE 802.3an Ethernet Controller [Marvell Scalable mGig] 80b1 AQtion AQC100S NBase-T/IEEE 802.3an Ethernet Controller [Atlantic 10G] 87b1 AQtion AQC107S NBase-T/IEEE 802.3an Ethernet Controller [Atlantic 10G] 1c7a de2b Thunderbolt 10G Ethernet Adapter 93c0 AQtion AQC114CS NBase-T/IEEE 802.3bz Ethernet Controller [Antigua 5G] 94c0 AQtion AQC113CS NBase-T/IEEE 802.3an Ethernet Controller [Antigua 10G] 1043 87f5 ProArt X570-CREATOR WIFI 1043 8812 ASUS XG-C100C 10G PCI-E Network Adapter d107 AQtion AQC107 NBase-T/IEEE 802.3an Ethernet Controller [Atlantic 10G] 1043 8741 XG-C100C d108 AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] 1d6c Atomic Rules LLC 1001 A5PL-E1 1002 A5PL-E7 1003 S5PEDS-AB 1004 KC705-K325 1005 ZC706-Z045 1006 KCU105-KU040 1007 XUSP3S-VU095 [Jasper] 1008 XUSPL4-VU065 [Mustang UltraScale] 1009 XUSPL4-VU3P [Mustang UltraScale+] 100a A10PL4-A10GX115 100b K35-2SFP 100c K35-4SFP 100d AR-ARKA-FX0 [Arkville 32B DPDK Data Mover] 1d6c 2001 DPDK-Aware Virtual Function [Arkville VF] 100e AR-ARKA-FX1 [Arkville 64B DPDK Data Mover] 1d6c 2001 DPDK-Aware Virtual Function [Arkville VF] 100f AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Versal] 1010 AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex] 1011 AR-MAN-U50 [Manitou Class Accelerator for U50] 1012 AR-MAN-U200 [Manitou Class Accelerator for U200] 1013 AR-MAN-U250 [Manitou Class Accelerator for U250] 1014 AR-MAN-U280 [Manitou Class Accelerator for U280] 1015 AR-ARK-BBDEV-FX0 [Arkville 32B DPDK Baseband Device] 1016 AR-ARK-BBDEV-FX1 [Arkville 64B DPDK Baseband Device] 1017 AR-ARK-FX1 [Arkville 64B Multi-Homed Primary Endpoint] 1018 AR-ARK-FX1 [Arkville 64B Multi-Homed Secondary Endpoint] 1019 AR-ARK-FX1 [Arkville 64B Multi-Homed Tertiary Endpoint] 101a AR-ARK-SRIOV-FX0 [Arkville 32B Primary Physical Function] 101b AR-ARK-SRIOV-FX1 [Arkville 64B Primary Physical Function] 101c AR-ARK-SRIOV-VF [Arkville Virtual Function] 101d AR-ARK-NIC [Arkville ArkNIC Kernel Path Device] 101e AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile] 101f AR-TK242 [2x100GbE Packet Capture Device] 1020 AR-GP-PF [General-Purpose Physical Function] 1021 AR-MGMT-PF [Board-Generic Management Physical Function] 1022 AR-ARKA-FX2 [Arkville 128B DPDK Data Mover for Agilex] 1023 AR-BD-FX1 [BufferDirect Zero-Bounce Data Motion Endpoint] 1024 AR-TK242 [2x10GbE Packet Capture Device] 1025 AR-TK242-FX2 [2x100GbE Gen5 Packet Capture Device] 1026 AR-TK242-FX2 [1x200GbE Gen5 Packet Capture Device] 1027 AR-P2P-DBG [P2P Debug Function] 1028 AR-P2P-ATR [P2P Actor Function] 1029 AR-P2P-UTL [P2P Utility Function] 102a AR-TK242-FX2 [4x100GbE Gen5 Packet Capture-Replay Device] 102b AR-ARKV-FX1 [Arkville 128B DPDK Data Mover for Versal/CPM5] 102c AR-TK242-V80 [Gen5 PCAP Processor] 4200 A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument] 1d72 Xiaomi 1d78 DERA Storage 1512 TAI NVMe Controller 1d78 2004 D5437 HHHL 2TB NVMe SSD 1d78 2006 D5437 HHHL 4TB NVMe SSD 1d78 2008 D5437 HHHL 8TB NVMe SSD 1d78 2104 D5437 U.2 2TB NVMe SSD 1d78 2106 D5437 U.2 4TB NVMe SSD 1d78 2108 D5437 U.2 8TB NVMe SSD 1d78 3003 D5457 HHHL 1.6TB NVMe SSD 1d78 3005 D5457 HHHL 3.2TB NVMe SSD 1d78 3007 D5457 HHHL 6.4TB NVMe SSD 1d78 3103 D5457 U.2 1.6TB NVMe SSD 1d78 3105 D5457 U.2 3.2TB NVMe SSD 1d78 3107 D5457 U.2 6.4TB NVMe SSD 1d78 3108 D5437 U.2 7.68TB NVMe SSD 1d78 5003 D5447 HHHL 1.6TB NVMe SSD 1d78 5004 D5427 HHHL 1.92TB NVMe SSD 1d78 5005 D5447 HHHL 3.2TB NVMe SSD 1d78 5006 D5427 HHHL 3.84TB NVMe SSD 1d78 5007 D5447 HHHL 6.4TB NVMe SSD 1d78 5008 D5427 HHHL 7.68TB NVMe SSD 1d78 5103 D5447 U.2 1.6TB NVMe SSD 1d78 5105 D5447 U.2 3.2TB NVMe SSD 1d78 5106 AF3UP34DTCUN3T8B SSD 1d78 5107 D5447 U.2 6.4TB NVMe SSD 1d78 5114 D5427 U.2 1.92TB NVMe SSD 1d78 5116 D5427 U.2 3.84TB NVMe SSD 1d78 5118 D5427 U.2 7.68TB NVMe SSD 1d78 8107 D5457 U.2 6.4TB NVMe SSD 1513 DERA MENG NVMe Controller 1d78 6015 D6456 HHHL 3.2TB NVMe SSD 1d78 6016 D6436 HHHL 3.84TB NVMe SSD 1d78 6017 D6456 HHHL 6.4TB NVMe SSD 1d78 6018 D6436 HHHL 7.68TB NVMe SSD 1d78 6105 D6457 U.2 3.2TB NVMe SSD 1d78 6106 D6437 U.2 3.84TB NVMe SSD 1d78 6107 D6457 U.2 6.4TB NVMe SSD 1d78 6108 D6437 U.2 7.68TB NVMe SSD 1d78 6115 D6456 U.2 3.2TB NVMe SSD 1d78 6116 D6436 U.2 3.84TB NVMe SSD 1d78 6117 D6456 U.2 6.4TB NVMe SSD 1d78 6118 D6436 U.2 7.68TB NVMe SSD 1515 DERA EMEI NVMe Controller 1d78 7002 D7436 HHHL 1.92TB NVMe SSD 1d78 7003 D7456 HHHL 1.6TB NVMe SSD 1d78 7004 D7436 HHHL 3.84TB NVMe SSD 1d78 7005 D7456 HHHL 3.2TB NVMe SSD 1d78 7007 D7456 HHHL 6.4TB NVMe SSD 1d78 7008 D7436 HHHL 7.68TB NVMe SSD 1d78 7009 D7456 HHHL 12.8TB NVMe SSD 1d78 700a D7436 HHHL 15.36TB NVMe SSD 1d78 7102 D7436 U.2 15mm 1.92TB NVMe SSD 1d78 7103 D7456 U.2 15mm 1.6TB NVMe SSD 1d78 7104 D7436 U.2 15mm 3.84TB NVMe SSD 1d78 7105 D7456 U.2 15mm 3.2TB NVMe SSD 1d78 7107 D7456 U.2 15mm 6.4TB NVMe SSD 1d78 7108 D7436 U.2 15mm 7.68TB NVMe SSD 1d78 7109 D7456 U.2 15mm 12.8TB NVMe SSD 1d78 710a D7436 U.2 15mm 15.36TB NVMe SSD 1d78 7143 D7556 U.2 15mm 1.6TB dual port NVMe SSD 1d78 7144 D7536 U.2 15mm 1.92TB dual port NVMe SSD 1d78 7145 D7556 U.2 15mm 3.2TB dual port NVMe SSD 1d78 7146 D7536 U.2 15mm 3.84TB dual port NVMe SSD 1d78 7147 D7556 U.2 15mm 6.4TB dual port NVMe SSD 1d78 7148 D7536 U.2 15mm 7.68TB dual port NVMe SSD 1d78 7149 D7556 U.2 15mm 12.8TB dual port NVMe SSD 1d78 714a D7536 U.2 15mm 15.36TB dual port NVMe SSD 1d78 7202 Aliflash V2 U.2 15mm 1.92TB NVMe SSD 1d78 7204 Aliflash V2 U.2 15mm 3.84TB NVMe SSD 1d78 7208 Aliflash V2 U.2 15mm 7.68TB NVMe SSD 1516 DERA D8436/D8456 NVMe SSD 1d79 Transcend Information, Inc. 2262 NVMe PCIe SSD 220S/MTE662T2 2263 NVMe PCIe SSD 110S/112S/120S/MTE300S/MTE400S/MTE652T2 (DRAM-less) 2264 NVMe PCIe SSD 250H 2267 NVMe PCIe SSD 220S/240S/MTE710T 2269 NVMe PCIe SSD 410S (DRAM-less) 5766 NVMe PCIe SSD 110Q (DRAM-less) 1d7c Aerotech, Inc. # Fiber-optic HyperWire motion control bus from Aerotech. 0001 HyperWire Adapter 1d82 NETINT Technologies Inc. 0101 Codensity D400 SSD 0102 Codensity D408 PCIe Gen4 NVMe SSD 0202 Codensity T408 Video Encoding-Decoding Accelerator 0401 Quadra Video Processing Unit (VPU) 0411 Quadra Video Processing Unit (VPU) Virtual Function # nee Fuzhou Rockchip Electronics Co., Ltd 1d87 Rockchip Electronics Co., Ltd 0100 RK3399 PCI Express Root Port 1808 RK1808 Neural Network Processor Card 3528 RK3528 PCI Express Root Port 3562 RK3562 PCI Express Root Port 3566 RK3568 Remote Signal Processor 3588 RK3588 1d89 YEESTOR Microelectronics Co., Ltd 0280 PCIe NVMe SSD 1d8f Exegy 1d92 Abaco Systems Inc. 1d93 YADRO 1d94 Chengdu Haiguang IC Design Co., Ltd. 1450 Root Complex 1451 I/O Memory Management Unit 1452 PCIe Dummy Host Bridge 1453 PCIE GPP Bridge 1454 Internal PCIe GPP Bridge 0 to Bus B 1455 PCIe Dummy Function 1456 PSPCCP Command DMA Processor 1458 10 Gb Ethernet Controller Port 0/Port1 1459 10 Gb Ethernet Controller Port 2/Port3 145a PCIe Dummy Function 145b PCIE Non-Transparent Bridge 145c USB3 XHCI 145d Switch upstream in PCIe 145e Switch downstream in PCIe 145f USB 3.0 Host controller 1460 Data Fabric: Device 18h; Function 0 1461 Data Fabric: Device 18h; Function 1 1462 Data Fabric: Device 18h; Function 2 1463 Data Fabric: Device 18h; Function 3 1464 Data Fabric: Device 18h; Function 4 1465 Data Fabric: Device 18h; Function 5 1466 Data Fabric: Device 18h; Function 6 1467 Data Fabric: Device 18h; Function 7 1468 NTBCCP 7901 FCH SATA Controller [AHCI mode] 7904 FCH SATA Controller [AHCI mode] 7906 FCH SD Flash Controller 790b FCH SMBus Controller 790e FCH LPC Bridge 1d95 Graphcore Ltd 0001 Colossus GC2 [C2] 0002 Colossus GC1 [S1] 1d97 Shenzhen Longsys Electronics Co., Ltd. 1062 Lexar NM710 NVME SSD 1160 FORESEE P900 BGA NVMe SSD (DRAM-less) 1202 Lexar NM610 PRO NVME SSD (DRAM-less) 12e4 ORCA 4836 Series eSSD 1602 Lexar NM790 NVME SSD (DRAM-less) 1d97 Lexar NM620 NVME SSD (DRAM-less) 2263 SM2263EN/SM2263XT-based OEM NVME SSD (DRAM-less) 2269 FORESEE XP2000, Lexar NM760 NVME SSD (DRAM-less) 5216 FORESEE XP1000 / Lexar Professional CFexpress Type B Gold series, NM620 PCIe NVME SSD (DRAM-less) 5220 FORESEE XP2100 NVMe SSD (DRAM-less) 5236 Lexar NM800 PRO NVME SSD 5772 Lexar NQ700 NVME SSD (DRAM-less) # nee Facebook, Inc. 1d9b Meta Platforms, Inc. 0010 Networking DOM Engine 0011 IO Bridge 0013 Host Network Interface 0400 Time Card 1da1 Teko Telecom S.r.l. 1da2 Sapphire Technology Limited 475d Radeon RX 7800 XT [PULSE] e26a Radeon R7 250 e445 Sapphire Radeon RX 6700 1da3 Habana Labs Ltd. 0001 HL-1000 AI Inference Accelerator [Goya] # PCIe accelerator card for Deep Learning inference tasks 0030 Greco AI Inference Accelerator # PCIe accelerator card for Deep Learning training tasks 1000 HL-2000 AI Training Accelerator [Gaudi] # PCIe accelerator card for Deep Learning training tasks with secured firmware 1010 HL-2000 AI Training Accelerator [Gaudi secured] # PCIe accelerator card for Deep Learning training tasks 1020 Gaudi2 AI Training Accelerator 1060 Gaudi3 AI Training Accelerator 1063 Gaudi3 AI Training Accelerator Add-In Family 1da3 1063 HL-338 Gaudi3 AI Accelerator PCIe Add-In Card 1da8 Corigine, Inc. 3800 Network Flow Processor 3800 3803 Network Flow Processor 3800 Virtual Function 1dad Fungible 0108 FC50, FC100, FC200 DPU NVMeoF Adapters 1db2 ATP ELECTRONICS INC 1db7 Phytium Technology Co., Ltd. dc20 [X100 Series] dc21 VPU Controller [X100 Series] dc22 DC Controller [X100 Series] dc23 I2S/DMA Controller [X100 Series] dc24 NPU Controller [X100 Series] dc26 SATA Controller [X100 Series] dc27 USB Controller [X100 Series] dc29 NANDFLASH Controller [X100 Series] dc2b I2S Controller [X100 Series] dc2c SPIM Controller [X100 Series] dc2d CAN Controller [X100 Series] dc2e UART Controller [X100 Series] dc2f PWM Controller [X100 Series] dc30 MIO Controller [X100 Series] dc31 GPIO Controller [X100 Series] dc32 SMBUS Controller [X100 Series] dc34 PS2 Controller [X100 Series] dc35 LPC Controller [X100 Series] dc36 LDMA Controller [X100 Series] dc38 LSD_CFG Controller [X100 Series] dc3a SWITCH Controller [X100 Series] dc3b MAC Controller [D3000M Series] dc3c GPU_DMA Controller [X100 Series] dc3e DCController [E2000 Series] dc3f SATA Controller [D3000M Series] 1dbb NGD Systems, Inc. 1dbe INNOGRIT Corporation 5208 NVMe SSD Controller IG5208 [Shasta] (DRAM-less) 5216 NVMe SSD Controller IG5216 [Shasta+] (DRAM-less) 5220 NVMe SSD Controller IG5220 [RainierQX] (DRAM-less) 5222 NVMe SSD Controller IG5222 [RainierX] (DRAM-less) 5236 NVMe SSD Controller IG5236 [RainierPC] 1dbe 4001 Dongting-B1 DC SSD M.2 480GB 1dbe 4002 Dongting-B1 DC SSD M.2 960GB 5636 NVMe DC SSD IG5636 1dbe 0001 Dongting-N1 DC SSD U.2 1600GB 1dbe 0002 Dongting-N1 DC SSD U.2 1920GB 1dbe 0003 Dongting-N1 DC SSD U.2 3200GB 1dbe 0004 Dongting-N1 DC SSD U.2 3840GB 1dbe 0005 Dongting-N1 DC SSD U.2 6400GB 1dbe 0006 Dongting-N1 DC SSD U.2 7680GB 1dbe 1001 Donghu-Z1 DC ZNS SSD U.2 4000GB 1dbe 1002 Donghu-Z1 DC ZNS SSD U.2 8000GB 5638 NVMe DC SSD IG5638 1dbe 2001 Dongting-N2 DC SSD U.2 1600GB 1dbe 2002 Dongting-N2 DC SSD U.2 1920GB 1dbe 2003 Dongting-N2 DC SSD U.2 3200GB 1dbe 2004 Dongting-N2 DC SSD U.2 3840GB 1dbe 2005 Dongting-N2 DC SSD U.2 6400GB 1dbe 2006 Dongting-N2 DC SSD U.2 7680GB 1dbe 2118 Dongting-N2Q DC QLC SSD U.2 15360GB 1dbe 2190 Dongting-N2Q DC QLC SSD U.2 30720GB 1dbe 2201 Dongting-N2 2000 DC SSD U.2 1600GB 1dbe 2202 Dongting-N2 2000 DC SSD U.2 1920GB 1dbe 2203 Dongting-N2 2000 DC SSD U.2 3200GB 1dbe 2204 Dongting-N2 2000 DC SSD U.2 3840GB 1dbe 2205 Dongting-N2 2000 DC SSD U.2 6400GB 1dbe 2206 Dongting-N2 2000 DC SSD U.2 7680GB 1dbe 3001 Donghu-Z2 DC ZNS SSD U.2 4000GB 1dbe 3002 Donghu-Z2 DC ZNS SSD U.2 8000GB 5666 NVMe SSD Controller IG5666 5668 NVMe PCIe 5.0 DC SSD 1dbe 5003 Dongting-N3 DC SSD U.2 3200GB 1dbe 5004 Dongting-N3 DC SSD U.2 3840GB 1dbe 5005 Dongting-N3 DC SSD U.2 6400GB 1dbe 5006 Dongting-N3 DC SSD U.2 7680GB 1dbe 5007 Dongting-N3 DC SSD U.2 12800GB 1dbe 5008 Dongting-N3 DC SSD U.2 15360GB 1dbe 5009 Dongting-N3 DC SSD U.2 25600GB 1dbe 5080 Dongting-N3 DC SSD U.2 30720GB 1dbe 5118 Dongting-N3Q DC QLC SSD U.2 15360GB 1dbe 5190 Dongting-N3Q DC QLC SSD U.2 30720GB 1dbe 5192 Dongting-N3Q DC QLC SSD U.2 61440GB 1dbe 5803 Dongting-N3 DC SSD E3.S 3200GB 1dbe 5804 Dongting-N3 DC SSD E3.S 3840GB 1dbe 5805 Dongting-N3 DC SSD E3.S 6400GB 1dbe 5806 Dongting-N3 DC SSD E3.S 7680GB 1dbe 5807 Dongting-N3 DC SSD E3.S 12800GB 1dbe 5808 Dongting-N3 DC SSD E3.S 15360GB 1dbe 5809 Dongting-N3 DC SSD E3.S 25600GB 1dbe 5880 Dongting-N3 DC SSD E3.S 30720GB 1dbe 6116 Dongting-Z3Q DC ZNS SSD U.2 7680GB 5669 NVMe SSD Controller IG5669 [Tacoma] 1dbf Guizhou Huaxintong Semiconductor Technology Co., Ltd 0401 StarDragon4800 PCI Express Root Port 1dc2 Alco Digital Devices Limited 1dc5 FADU Inc. 4081 FC4121 PCIe 4.0 NVMe controller [DELTA] 6150 FC3081 PCIe 3.0 NVMe controller [BRAVO] 1dcd Liqid Inc. 1dcf Beijing Sinead Technology Co., Ltd. 1dd3 Sage Microelectronics Corp. 1dd4 Swissbit AG 0010 N-10m2 NVMe SSD 0016 N-16 0020 EN-20 BGA NVMe SSD (DRAM-less) 0030 N-30m2 NVMe SSD 0036 N-36m2 NVMe SSD 1200 D1200 NVMe SSD 3000 N3000 NVMe SSD 3002 N3002 NVMe SSD 3602 N3602 NVMe SSD 4131 A1x NVMe SSD Series 4432 D2x NVMe SSD Series 5200 N5200 NVMe SSD 1dd5 Manli Technology Group Limited 1dd8 AMD Pensando Systems 0002 DSC2 Elba Upstream Port 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 0008 DSC3 Salina Upstream Port 1dd8 100e Distributed Services Card 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 1000 DSC Capri Upstream Port 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB 1dd8 4002 Naples 25Gb 2-port SFP28 x8 4GB 1dd8 4007 DSP DSC-25 Ent 10/25G OCP3 Card 1dd8 4008 DSP DSC-25 10/25G 2p SFP28 Card 1dd8 400a DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1001 DSC Virtual Downstream Port 1dd8 100e Distributed Services Card 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB 1dd8 4002 Naples 25Gb 2-port SFP28 x8 4GB 1dd8 4007 DSP DSC-25 Ent 10/25G OCP3 Card 1dd8 4008 DSP DSC-25 10/25G 2p SFP28 Card 1dd8 400a DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 1002 DSC Ethernet Controller 1dd8 100e Distributed Services Card 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB 1dd8 4002 Naples 25Gb 2-port SFP28 x8 4GB 1dd8 4007 DSP DSC-25 Ent 10/25G OCP3 Card 1dd8 4008 DSP DSC-25 10/25G 2p SFP28 Card 1dd8 400a DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 1003 DSC Ethernet Controller VF 1dd8 100e Distributed Services Card 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB 1dd8 4002 Naples 25Gb 2-port SFP28 x8 4GB 1dd8 4007 DSP DSC-25 Ent 10/25G OCP3 Card 1dd8 4008 DSP DSC-25 10/25G 2p SFP28 Card 1dd8 400a DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 1004 DSC Management Controller 1dd8 100e Distributed Services Card 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB 1dd8 4002 Naples 25Gb 2-port SFP28 x8 4GB 1dd8 4007 DSP DSC-25 Ent 10/25G OCP3 Card 1dd8 4008 DSP DSC-25 10/25G 2p SFP28 Card 1dd8 400a DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 1005 DSC NVMe Controller 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1006 DSC NVMe Controller VF 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1007 DSC Storage Accelerator 1dd8 100e Distributed Services Card 1dd8 4000 Naples 100Gb 2-port QSFP28 x16 8GB 1dd8 4001 Naples 100Gb 2-port QSFP28 x16 4GB 1dd8 4002 Naples 25Gb 2-port SFP28 x8 4GB 1dd8 4007 DSP DSC-25 Ent 10/25G OCP3 Card 1dd8 4008 DSP DSC-25 10/25G 2p SFP28 Card 1dd8 400a DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 400c DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 400d DSP DSC-100 Ent 100Gb Card 1dd8 400e DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card 1dd8 4014 DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1009 DSC Ethernet Controller UPT 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 100a DSC Serial Port Controller 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 100b DSC vDPA Network Device VF 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 100c DSC PDS Core Management 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 100d DSC Virtio Network Device VF 1dd8 100e Distributed Services Card 1dd8 5001 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5003 DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 Services Card 1dd8 5008 DSC25v2 10/25G 2p 32GB Spl Card 1dd8 5009 DSC2-25 10/25G 2p SFP56 DPU 1dd8 500a DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R2 1dd8 500b DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU 1dd8 500c DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R3 1dd8 500d DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4 1dd8 500e DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R5 1dd8 500f DSC2-200 50/100/200G 2-port 32G RAM 64G eMMC G2 DPU R4-T 1dd8 5200 DSC3-2Q400 100/200/400G 2-port DDR5 128G eMMC G3 Services Card 100f Register/Memory Resource Device 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 1012 TAWK IPC Device 1dd8 5201 POLLARA-1Q400 100/200/400G 1-port Card 1ddd Thorlabs 1de0 Groq 0000 TSP [GroqChip] 1de0 0000 GC1-010X-ES [GroqCard] 1de0 c005 GC1-010B [GroqCard] 1de0 c006 GC1-0109 [GroqCard] 1de0 c007 GC1-0100 [GroqCard] 1de1 Tekram Technology Co.,Ltd. 0391 TRM-S1040 [DC-315 / DC-395 series] 2020 DC-390 Series SCSI Adapter [AMD Am53C974] 690c 690c dc29 DC290 1de4 Raspberry Pi Ltd 0001 RP1 PCIe 2.0 South Bridge 1de5 Eideticom, Inc 1000 IO Memory Controller 2000 NoLoad Hardware Development Kit 3000 eBPF-based PCIe Accelerator 1ded Alibaba (China) Co., Ltd. 107f Elastic RDMA Adapter 5007 Elastic RDMA Adapter 8000 M1 Root Port 8001 ACC-RCiEP 8002 RCiEP VF 8003 RCEC PF 8004 RCEC VF 1dee Biwin Storage Technology Co., Ltd. 1202 HP EX900 Plus NVMe SSD (DRAM-less) 1602 HP FX700 NVMe SSD (DRAM-less) 2262 HP EX950 NVMe SSD 2263 HP EX900 NVMe SSD (DRAM-less) 2500 XCG 2500 Enterprise Gen 4 SSD 4121 PCIe 4.0 SP406/416 NVMe SSD 1dee 0000 NVMe SSD SP416 800G 2.5" U.2 1dee 0001 NVMe SSD SP416 1.6T 2.5" U.2 1dee 0002 NVMe SSD SP416 3.2T 2.5" U.2 1dee 0003 NVMe SSD SP416 6.4T 2.5" U.2 1dee 0010 NVMe SSD SP406 960G 2.5" U.2 1dee 0011 NVMe SSD SP406 1.92T 2.5" U.2 1dee 0012 NVMe SSD SP406 3.84T 2.5" U.2 1dee 0013 NVMe SSD SP406 7.68T 2.5" U.2 5161 BIWIN NVMe SSD SP506/SP516 1dee 0001 NVMe SSD SP516 1.6T 2.5" U.2 1dee 0002 NVMe SSD SP516 3.2T 2.5" U.2 1dee 0003 NVMe SSD SP516 6.4T 2.5" U.2 1dee 0004 NVMe SSD SP516 12.8T 2.5" U.2 1dee 0011 NVMe SSD SP506 1.92T 2.5" U.2 1dee 0012 NVMe SSD SP506 3.84T 2.5" U.2 1dee 0013 NVMe SSD SP506 7.68T 2.5" U.2 1dee 0014 NVMe SSD SP506 15.36T 2.5" U.2 5216 KingSpec NX series NVMe SSD (DRAM-less) 7700 BIWIN NVMe SSD SP50Y/SP51Y 1def Ampere Computing, LLC e005 eMAG PCI Express Root Port 0 e006 eMAG PCI Express Root Port 1 e007 eMAG PCI Express Root Port 2 e008 eMAG PCI Express Root Port 3 e009 eMAG PCI Express Root Port 4 e00a eMAG PCI Express Root Port 5 e00b eMAG PCI Express Root Port 6 e00c eMAG PCI Express Root Port 7 # Root Complex A (RCA) e100 Altra PCI Express Root Complex A # RCA port 0 e101 Altra PCI Express Root Port a0 # RCA port 1 e102 Altra PCI Express Root Port a1 # RCA port 2 e103 Altra PCI Express Root Port a2 # RAC port 3 e104 Altra PCI Express Root Port a3 # RCA port 4 e105 Altra PCI Express Root Port a4 # RCA port 5 e106 Altra PCI Express Root Port a5 # RCA port 6 e107 Altra PCI Express Root Port a6 # RCA port 7 e108 Altra PCI Express Root Port a7 # Root Complex B (RCB) e110 Altra PCI Express Root Complex B # RCB port 0 e111 Altra PCI Express Root Port b0 # RCB port 1 e112 Altra PCI Express Root Port b1 # RCB port 2 e113 Altra PCI Express Root Port b2 # RCB port 3 e114 Altra PCI Express Root Port b3 # RCB port 4 e115 Altra PCI Express Root Port b4 # RCB port 5 e116 Altra PCI Express Root Port b5 # RCB port 6 e117 Altra PCI Express Root Port b6 # RCB port 7 e118 Altra PCI Express Root Port b7 1df3 Ethernity Networks 0201 ACE-NIC40 Programmable Network Accelerator 1df3 0001 ENA1040 1df3 0002 ENA1044 1df3 0003 ENA1044S 0202 ACE-NIC50 Programmable Network Accelerator 1df3 0001 ENA2050F 1df3 0002 ENA2050FS 0203 ACE-NIC100 Programmable Network Accelerator 1df3 0000 Maintenance Mode 1df3 0001 ENA2080F 1df3 0002 ENA2080FS 1df3 0003 ENA2100F 1df3 0004 ENA2040F 0204 ACE-NIC-NID Programmable Network Accelerator 1df3 0001 ENA1020Z 1df3 0002 ENA1020ZS 0205 ACE-NIC250 Programmable Network Accelerator 1df3 0000 Maintenance Mode 1df3 0001 ENA2250F 0206 ACE-NIC200 Programmable Network Accelerator 1df3 0000 Maintenance Mode 1df3 0001 ENA2200F 0207 ACE-NIC50RN Programmable Network Accelerator 1df3 0000 Maintenance Mode 1df3 0001 ENA2050RN 0208 ACE-NIC100RN Programmable Network Accelerator 1df3 0000 Maintenance Mode 1df3 0001 ENA2100RN 1df5 Shenzhen TIGO Semiconductor 1202 kimtigo NVMe SSD (DRAM-less) 2263 kimtigo MG931K NVMe SSD (DRAM-less) 1df7 opencpi.org 0001 ml605 0002 alst4 0003 alst4x 1df8 V&G Information System Co.,Ltd 3000 PC NVMe SSD 1df8 3100 M.2 NVMe Gen3*4 SSD c000 DC NVMe SSD 1df8 c600 Enterprise U.2 NVMe SSD d000 PC NVMe SSD 1df8 d100 M.2 NVMe SSD 1df8 d201 M.2 NVMe SSD 1df8 d600 M.2 NVMe SSD 1dfa Astera Labs, Inc. 1dfc JSC NT-COM 1181 TDM 8 Port E1/T1/J1 Adapter 1e0d SambaNova Systems, Inc 1e0f KIOXIA Corporation 0001 NVMe SSD Controller BG4 (DRAM-less) 0007 NVMe SSD Controller Cx6 1028 2078 DC NVMe CD6 RI 960GB 1028 2079 DC NVMe CD6 RI 1.92TB 1028 207a DC NVMe CD6 RI 3.84TB 1028 207b DC NVMe CD6 RI 7.68TB 1028 207c DC NVMe CD6 RI 15.36TB 1028 207e Dell Ent NVMe CM6 RI 1.92TB 1028 207f Dell Ent NVMe CM6 RI 3.84TB 1028 2080 Dell Ent NVMe CM6 RI 7.68TB 1028 2081 Dell Ent NVMe CM6 RI 15.36TB 1028 2084 Dell Ent NVMe CM6 MU 1.6TB 1028 2085 Dell Ent NVMe CM6 MU 3.2TB 1028 2086 Dell Ent NVMe CM6 MU 6.4TB 1028 210a Dell Ent NVMe FIPS CM6 RI 1.92TB 1028 210b Dell Ent NVMe FIPS CM6 RI 3.84TB 1028 210c Dell Ent NVMe FIPS CM6 RI 7.68TB 1028 210d Dell Ent NVMe FIPS CM6 RI15.36TB 1028 210e Dell Ent NVMe FIPS CM6 MU 1.6TB 1028 210f Dell Ent NVMe FIPS CM6 MU 3.2TB 1028 2110 Dell Ent NVMe FIPS CM6 MU 6.4TB 1e0f 0001 Generic NVMe CM6 0008 RD500/Exceria Plus/Exceria Plus G2 NVMe SSD 0009 NVMe SSD 1e0f 0001 Toshiba RC500 Series NVMe SSD 1e0f 0032 KIOXIA EXCERIA RC10 Series NVMe SSD 000c NVMe SSD Controller BG5 (DRAM-less) 000d NVMe SSD Controller XG7 0010 NVMe SSD Controller XG8 0011 NVMe SSD Controller CD7 1028 2189 DC NVMe SED CD7 RI 960GB 1028 218a DC NVMe CD7 RI 960GB 1028 218b DC NVMe SED CD7 RI 1.92TB 1028 218c DC NVMe CD7 RI 1.92TB 1028 218d DC NVMe SED CD7 RI 3.84TB 1028 218e DC NVMe CD7 RI 3.84TB 1028 218f DC NVMe SED CD7 RI 7.68TB 1028 2190 DC NVMe CD7 RI 7.68TB 1028 2191 DC NVMe SED CD7 RI 15.36TB 1028 2192 DC NVMe CD7 RI 15.36TB 1028 2193 NVMe CD7 E3.S 1.92TB 1028 2194 NVMe CD7 E3.S 3.84TB 1028 2195 NVMe CD7 E3.S 7.68TB 0013 VMe SSD Controller CM7 1028 222d Ent NVMe CM7 FIPS U.2 RI 30.72TB 1028 222e Ent NVMe CM7 FIPS U.2 RI 15.36TB 1028 222f Ent NVMe CM7 FIPS U.2 RI 7.68TB 1028 2230 Ent NVMe CM7 FIPS U.2 RI 3.84TB 1028 2231 Ent NVMe CM7 FIPS U.2 RI 1.92TB 1028 2232 Ent NVMe CM7 U.2 RI 30.72TB 1028 2233 Ent NVMe CM7 U.2 RI 15.36TB 1028 2234 Ent NVMe CM7 U.2 RI 7.68TB 1028 2235 Ent NVMe CM7 U.2 RI 3.84TB 1028 2236 Ent NVMe CM7 U.2 RI 1.92TB 1028 2237 Ent NVMe CM7 FIPS U.2 MU 12.8TB 1028 2238 Ent NVMe CM7 FIPS U.2 MU 6.4TB 1028 2239 Ent NVMe CM7 FIPS U.2 MU 3.2TB 1028 223a Ent NVMe CM7 FIPS U.2 MU 1.6TB 1028 223b Ent NVMe CM7 U.2 MU 12.8TB 1028 223c Ent NVMe CM7 U.2 MU 6.4TB 1028 223d Ent NVMe CM7 U.2 MU 3.2TB 1028 223e Ent NVMe CM7 U.2 MU 1.6TB 1028 228c Ent NVMe CM7 U.2 MU 6.4TB 0014 NVMe SSD Controller CM7 EDSFF 1028 223f Ent NVMe CM7 FIPS E3.S RI 15.36TB 1028 2240 Ent NVMe CM7 FIPS E3.S RI 7.68TB 1028 2241 Ent NVMe CM7 FIPS E3.S RI 3.84TB 1028 2242 Ent NVMe CM7 E3.S RI 15.36TB 1028 2243 Ent NVMe CM7 E3.S RI 7.68TB 1028 2244 Ent NVMe CM7 E3.S RI 3.84TB 1028 2245 Ent NVMe CM7 E3.S RI 1.92TB 1028 2246 Ent NVMe CM7 E3.S MU 12.8TB 1028 2247 Ent NVMe CM7 E3.S MU 6.4TB 1028 2248 Ent NVMe CM7 E3.S MU 3.2TB 1028 2249 Ent NVMe CM7 E3.S MU 1.6TB 1028 22b7 Ent NVMe CM7 FIPS E3.S MU 1.6TB 1028 22b8 Ent NVMe CM7 FIPS E3.S MU 3.2TB 1028 22b9 Ent NVMe CM7 FIPS E3.S MU 6.4TB 1028 22ba Ent NVMe CM7 FIPS E3.S MU 12.8TB 0018 Exceria Pro NVMe SSD 001a NVMe SSD Controller BG6 (DRAM-less) 001b NVMe SSD Controller EG6 (DRAM-less) 001f NVMe SSD Controller CD8 1028 2223 DC NVMe CD8 U.2 SED 15.36TB 1028 2224 DC NVMe CD8 U.2 SED 7.68TB 1028 2225 DC NVMe CD8 U.2 SED 3.84TB 1028 2226 DC NVMe CD8 U.2 SED 1.92TB 1028 2227 DC NVMe CD8 U.2 SED 960GB 1028 2228 DC NVMe CD8 U.2 15.36TB 1028 2229 DC NVMe CD8 U.2 7.68TB 1028 222a DC NVMe CD8 U.2 3.84TB 1028 222b DC NVMe CD8 U.2 1.92TB 1028 222c DC NVMe CD8 U.2 960GB 0025 NVMe SSD Controller CM7 2.5" 1028 222d Ent NVMe CM7 FIPS U.2 RI 30.72TB 1028 222e Ent NVMe CM7 FIPS U.2 RI 15.36TB 1028 222f Ent NVMe CM7 FIPS U.2 RI 7.68TB 1028 2230 Ent NVMe CM7 FIPS U.2 RI 3.84TB 1028 2231 Ent NVMe CM7 FIPS U.2 RI 1.92TB 1028 2232 Ent NVMe CM7 U.2 RI 30.72TB 1028 2233 Ent NVMe CM7 U.2 RI 15.36TB 1028 2234 Ent NVMe CM7 U.2 RI 7.68TB 1028 2235 Ent NVMe CM7 U.2 RI 3.84TB 1028 2236 Ent NVMe CM7 U.2 RI 1.92TB 1028 2237 Ent NVMe CM7 FIPS U.2 MU 12.8TB 1028 2238 Ent NVMe CM7 FIPS U.2 MU 6.4TB 1028 2239 Ent NVMe CM7 FIPS U.2 MU 3.2TB 1028 223a Ent NVMe CM7 FIPS U.2 MU 1.6TB 1028 223b Ent NVMe CM7 U.2 MU 12.8TB 1028 223c Ent NVMe CM7 U.2 MU 6.4TB 1028 223d Ent NVMe CM7 U.2 MU 3.2TB 1028 223e Ent NVMe CM7 U.2 MU 1.6TB 002a Exceria Plus G3 NVMe SSD (DRAM-less) 002b NVMe SSD Controller CD8P 002c NVMe SSD Controller CD8P EDSFF 1028 22bf DC NVMe CD8P E3.S 15.36TB 1028 22c0 DC NVMe CD8P E3.S 7.68TB 1028 22c1 DC NVMe CD8P E3.S 3.84TB 1028 22c2 DC NVMe CD8P E3.S 1.92TB 1028 22c7 DC NVMe CD8P E3.S MU 12.8TB 1028 22c8 DC NVMe CD8P E3.S MU 6.4TB 1028 22c9 DC NVMe CD8P E3.S MU 3.2TB 1028 22ca DC NVMe CD8P E3.S MU 1.6TB 002e NVMe SSD Controller XD8 002f NVMe SSD Controller BG7 (DRAM-less) 0030 NVMe SSD Controller EG7 0031 PCIe 5.0 NVMe SSD Controller XG10 0032 PCIe 4.0 NVMe SSD Controller XG10d 0033 Exceria Plus G4 NVMe SSD (DRAM-less) 1e17 Arnold & Richter Cine Technik GmbH & Co. Betriebs KG 1e18 Beijing GuangRunTong Technology Development Co.,Ltd 1e24 Squirrels Research Labs 0101 Acorn CLE-101 0215 Acorn CLE-215 021f Acorn CLE-215+ 1525 Xilinx BCU-1525 # VU33P FPGA Accelerator 1533 ForestKitten 33 # JungleCat VU33P Module 1633 JCM33 # JungleCat VU35P Module 1635 JCM35 1e26 Fujitsu Client Computing Limited # nee Bitmain Technologies Ltd. 1e30 Sophgo 1684 BM1684 [Sophon Series Deep Learning Accelerator] 2042 SG2042 Root Complex 1e36 Shanghai Enflame Technology Co. Ltd 0001 T10 [CloudBlazer] 0002 T11 [CloudBlazer] 0003 T10(QSFP-DD) [CloudBlazer] 0021 T20(32GB) [CloudBlazer] 0022 T20(64GB) [CloudBlazer] 0023 T21(32GB) [CloudBlazer] 0024 T21(64GB) [CloudBlazer] 8001 I20 [CloudBlazer] 8011 I10 [CloudBlazer] 8012 I10L [CloudBlazer] # HHHL PCIe card, single slot, 3rd generation from Enflame 8031 S6 [Enflame] # HHHL PCIe card, single slot, 3rd generation from Enflame, 24GB device memory 8032 S6 [Enflame] # FHFL PCIe card, single slot, 3rd generation from Enflame c031 S30 [Enflame] # FHFL PCIe card, dual slot, 3rd generation from Enflame, 48GB device memory c032 S90 [Enflame] # FHFL PCIe card, dual slot, 3rd generation from Enflame, 48GB device memory c033 S60G [Enflame] # FHFL PCIe card, dual slot, 3rd generation from Enflame, 48GB device memory c035 S60 [Enflame] c041 L300 [Enflame] c042 L600 [Enflame] # nee Thinci, Inc 1e38 Blaize, Inc 0102 Xplorer X1600 1e39 MEDION AG 1e3a Cactus Technologies Limited 2263 270PM6, 270PM7 series NVMe SSD 1e3b DapuStor Corporation 0600 NVMe SSD Controller DP600 1e3b 0006 Enterprise NVMe SSD U.2 7.68TB (J5000) 1e3b 000c Enterprise NVMe SSD U.2 30.72TB (J5060) 1e3b 000d Enterprise NVMe SSD U.2 61.44TB (J5060) 1e3b 000e Enterprise NVMe SSD U.2 30.72TB (J5060D) 1e3b 000f Enterprise NVMe SSD U.2 61.44TB (J5060D) 1e3b 0010 Enterprise NVMe SSD U.2 3.84TB (R5102) 1e3b 0013 Enterprise NVMe SSD U.2 3.20TB (R5302) 1e3b 0027 Enterprise NVMe SSD U.2 61.44TB (J5060) 1e3b 0028 Enterprise NVMe SSD U.2 61.44TB (J5060D) 1e3b 0030 Enterprise NVMe SSD U.2 3.84TB (J5100) 1e3b 0031 Enterprise NVMe SSD U.2 7.68TB (J5100) 1e3b 0032 Enterprise NVMe SSD U.2 15.36TB (J5100) 1e3b 0033 Enterprise NVMe SSD U.2 3.20TB (J5300) 1e3b 0034 Enterprise NVMe SSD U.2 6.40TB (J5300) 1e3b 0035 Enterprise NVMe SSD U.2 12.80TB (J5300) 1e3b 0036 Enterprise NVMe SSD AIC 7.68TB (J5110) 1e3b 0037 Enterprise NVMe SSD AIC 6.40TB (J5310) 1e3b 0038 Enterprise NVMe SSD U.2 3.84TB (J5100D) 1e3b 0039 Enterprise NVMe SSD U.2 7.68TB (J5100D) 1e3b 003b Enterprise NVMe SSD U.2 3.20TB (J5300D) 1e3b 003c Enterprise NVMe SSD U.2 6.40TB (J5300D) 1e3b 003e Enterprise NVMe SSD AIC 3.84TB (J5110) 1e3b 003f Enterprise NVMe SSD AIC 3.20TB (J5310) 1e3b 004c Enterprise NVMe SSD U.2 QDP 1.92TB (J5100) 1e3b 004d Enterprise NVMe SSD U.2 QDP 1.60TB (J5300) 1e3b 0050 Enterprise NVMe SSD U.2 3.84TB (R5100) 1e3b 0051 Enterprise NVMe SSD U.2 7.68TB (R5100) 1e3b 0052 Enterprise NVMe SSD U.2 15.36TB (R5100) 1e3b 0053 Enterprise NVMe SSD U.2 3.20TB (R5300) 1e3b 0054 Enterprise NVMe SSD U.2 6.40TB (R5300) 1e3b 0055 Enterprise NVMe SSD U.2 12.80TB (R5300) 1e3b 0056 Enterprise NVMe SSD U.2 3.84TB (R5101) 1e3b 0059 Enterprise NVMe SSD U.2 3.20TB (R5301) 1e3b 0060 Enterprise NVMe SSD U.2 3.84TB (R5100D) 1e3b 0061 Enterprise NVMe SSD U.2 7.68TB (R5100D) 1e3b 0063 Enterprise NVMe SSD U.2 3.20TB (R5300D) 1e3b 0064 Enterprise NVMe SSD U.2 6.40TB (R5300D) 1e3b 0066 Enterprise NVMe SSD U.2 3.84TB (R5101D) 1e3b 0069 Enterprise NVMe SSD U.2 3.20TB (R5301D) 1e3b 006c Enterprise NVMe SSD U.2 1.92TB (R5101) 1e3b 006d Enterprise NVMe SSD U.2 1.60TB (J5301) 1e3b 00b9 Enterprise NVMe SSD U.2 25.60TB 1e3b 00be Enterprise NVMe SSD U.2 30.72TB 1e3b 00c1 Enterprise NVMe SSD U.2 25.60TB 1e3b 00c4 Enterprise NVMe SSD U.2 30.72TB 1e3b 00c7 Enterprise NVMe SSD U.2 25.60TB (J5301) 1e3b 00c8 Enterprise NVMe SSD U.2 30.72TB (J5000) 1e3b 00c9 Enterprise NVMe SSD U.2 15.36TB (J5000) 1e3b 00ca Enterprise NVMe SSD U.2 3.84TB (J5102) 1e3b 00cb Enterprise NVMe SSD U.2 7.68TB (J5102) 1e3b 00cc Enterprise NVMe SSD U.2 3.84TB (J5101) 1e3b 00cd Enterprise NVMe SSD U.2 7.68TB (J5101) 1e3b 00ce Enterprise NVMe SSD U.2 3.84TB (J5101D) 1e3b 00cf Enterprise NVMe SSD U.2 7.68TB (J5101D) 1e3b 00dc Enterprise NVMe SSD U.2 30.72TB (J5000) 1e3b 00dd Enterprise NVMe SSD U.2 30.72TB(J5000) 1e3b 00de Enterprise NVMe SSD U.2 15.36TB (J5000D) 1e3b 00df Enterprise NVMe SSD U.2 30.72TB (J5000) 1e3b 00e7 Enterprise NVMe SSD U.2 30.72TB (J5000D) 1e3b 00e8 Enterprise NVMe SSD U.2 3.20TB (J5301) 1e3b 00e9 Enterprise NVMe SSD U.2 6.40TB (J5301) 1e3b 00ea Enterprise NVMe SSD U.2 3.20TB (J5301D) 1e3b 00eb Enterprise NVMe SSD U.2 6.40TB (J5301D) 1e3b 00ec Enterprise NVMe SSD U.2 30.72TB (J5101) 1e3b 00ed Enterprise NVMe SSD U.2 30.72TB (R5101) 1e3b 00ee Enterprise NVMe SSD U.2 15.36B (J5101) 1e3b 00ef Enterprise NVMe SSD U.2 12.80TB (J5301) 1e3b 00f0 Enterprise NVMe SSD U.2 0.40TB (X2900) 1e3b 00f1 Enterprise NVMe SSD U.2 0.80TB (X2900) 1e3b 00f2 Enterprise NVMe SSD U.2 1.60TB (X2900) 1e3b 00f3 Enterprise NVMe SSD U.2 3.20TB (X2900) 1e3b 00f5 Enterprise NVMe SSD U.2 0.40TB (X2900P) 1e3b 00f6 Enterprise NVMe SSD U.2 0.80TB (X2900P) 0800 NVMe SSD Controller DP800 1e3b 0001 Enterprise NVMe SSD U.2 3.84TB(R6100) 1e3b 0007 Enterprise NVMe SSD U.2 15.36TB (R6100) 1e3b 000a Enterprise NVMe SSD U.2 3.20TB (R6300) 1e3b 000d Enterprise NVMe SSD U.2 6.40TB (R6300) 1e3b 0010 Enterprise NVMe SSD U.2 12.80TB (R6300) 1e3b 0018 Enterprise NVMe SSD U.2 3.84TB (R6100C) 1e3b 0019 Enterprise NVMe SSD U.2 7.68TB (R6100C) 1e3b 001a Enterprise NVMe SSD U.2 3.20TB (R6300C) 1e3b 001b Enterprise NVMe SSD U.2 6.40TB (R6300C) 1e3b 001c Enterprise NVMe SSD U.2 7.68TB (R6100) 1e3b 001d Enterprise NVMe SSD U.2 3.84TB (R6101) 1098 Haishen3 NVMe SSD 1e3b 0001 Enterprise NVMe SSD U.2 0.8TB (H2100) 1e3b 0002 Enterprise NVMe SSD U.2 0.96TB (H2200) 1e3b 0004 Enterprise NVMe SSD U.2 1.6TB (H2100) 1e3b 0005 Enterprise NVMe SSD U.2 1.92TB (H2200) 1e3b 0009 Enterprise NVMe SSD U.2 0.8TB (H3100) 1e3b 000a Enterprise NVMe SSD U.2 0.96TB (H3200) 1e3b 000c Enterprise NVMe SSD U.2 1.6TB (H3100) 1e3b 000d Enterprise NVMe SSD U.2 1.92TB (H3200) 1e3b 0014 Enterprise NVMe SSD U.2 3.2TB (H3100) 1e3b 0015 Enterprise NVMe SSD U.2 3.84TB (H3200) 1e3b 0021 Enterprise NVMe SSD U.2 6.4TB (H3100) 1e3b 0022 Enterprise NVMe SSD U.2 7.68TB (H3200) 1e3b 0052 Enterprise NVMe SSD U.2 0.8TB (H3900) 1e3b 0053 Enterprise NVMe SSD U.2 1.6TB (H3900) 1e3b 0059 Enterprise NVMe SSD U.2 0.75TB (H3900) 1e3b 0061 Enterprise NVMe SSD HHHL 0.8TB (H2100) 1e3b 0062 Enterprise NVMe SSD HHHL 0.96TB (H2200) 1e3b 0064 Enterprise NVMe SSD HHHL 1.6TB (H2100) 1e3b 0065 Enterprise NVMe SSD HHHL 1.92TB (H2200) 1e3b 006c Enterprise NVMe SSD HHHL 0.8TB (H3100) 1e3b 006d Enterprise NVMe SSD HHHL 0.96TB (H3200) 1e3b 006f Enterprise NVMe SSD HHHL 1.6TB (H3100) 1e3b 0070 Enterprise NVMe SSD HHHL 1.92TB (H3200) 1e3b 007c Enterprise NVMe SSD HHHL 3.2TB (H3100) 1e3b 007d Enterprise NVMe SSD HHHL 3.84TB (H3200) 1e3b 007f Enterprise NVMe SSD HHHL 6.4TB (H3100) 1e3b 0080 Enterprise NVMe SSD HHHL 7.68TB (H3200) 1e3b 008a Enterprise NVMe SSD HHHL 0.8TB (H3900) 1e3b 008b Enterprise NVMe SSD HHHL 1.6TB (H3900) 1e3b 0091 Enterprise NVMe SSD HHHL 0.75TB (H3900) 1321 AdgeStor NVMe SSD 1e3b 4000 AdgeStor NVMe SSD M.2 0.48TB 1e3b 4001 AdgeStor NVMe SSD M.2 0.96TB 1e3b 4002 AdgeStor NVMe SSD M.2 1.92TB 1e3b 4100 AdgeStor NVMe SSD M.2 0.48TB 1e3b 4101 AdgeStor NVMe SSD M.2 0.96TB 1e3b 4102 AdgeStor NVMe SSD M.2 1.92TB 1333 Haishen5 NVMe SSD 1e3b 001a Enterprise NVMe SSD E3.S 1T 3.84TB (H5100) 1e3b 001b Enterprise NVMe SSD E3.S 1T 7.68TB (H5100) 1e3b 001d Enterprise NVMe SSD E3.S 1T 3.2TB (H5300) 1e3b 001e Enterprise NVMe SSD E3.S 1T 6.4TB (H5300) 1e3b 0031 Enterprise NVMe SSD U2 3.84TB (H5100) 1e3b 0032 Enterprise NVMe SSD U2 7.68TB (H5100) 1e3b 0033 Enterprise NVMe SSD U2 15.36TB (H5100) 1e3b 0034 Enterprise NVMe SSD U2 3.2TB (H5300) 1e3b 0035 Enterprise NVMe SSD U2 6.4TB (H5300) 1e3b 0036 Enterprise NVMe SSD U2 12.8TB (H5300) 1e3b 004a Enterprise NVMe SSD E3.S 1T 7.68TB (H5100) 1e3b 004b Enterprise NVMe SSD E3.S 1T 15.36TB (H5100) 1e3b 004c Enterprise NVMe SSD E3.S 1T 6.4TB (H5300) 1e3b 004d Enterprise NVMe SSD E3.S 1T 12.8TB (H5300) 1e3b 0081 Enterprise NVMe SSD U.2 3.84TB (H5100) 1e3b 0082 Enterprise NVMe SSD U.2 7.68TB (H5100) 1e3b 0084 Enterprise NVMe SSD U.2 3.2TB (H5300) 1e3b 0085 Enterprise NVMe SSD U.2 6.4TB (H5300) 1e3b 008a Enterprise NVMe SSD U.2 7.68TB (H5100) 1e3b 008b Enterprise NVMe SSD U.2 15.36TB (H5100) 1e3b 008c Enterprise NVMe SSD U.2 30.72TB (H5100) 1e3b 008d Enterprise NVMe SSD U.2 6.4TB (H5300) 1e3b 008e Enterprise NVMe SSD U.2 12.8TB (H5300) 1e3b 008f Enterprise NVMe SSD U.2 25.6TB (H5300) 1e3b 0090 Enterprise NVMe SSD E1.S 9.5mm 3.84TB (H5100) 1e3b 0091 Enterprise NVMe SSD E1.S 9.5mm 7.68TB (H5100) 1e3b 0092 Enterprise NVMe SSD E1.S 9.5mm 3.2TB (H5300) 1e3b 0093 Enterprise NVMe SSD E1.S 9.5mm 6.4TB (H5300) 1e3b 0094 Enterprise NVMe SSD E1.S 9.5mm 3.84TB (H5100) 1e3b 0096 Enterprise NVMe SSD E1.S 9.5mm 3.2TB (H5300) 1e3b 0098 Enterprise NVMe SSD E1.S 9.5mm 7.68TB (H5100) 1e3b 0099 Enterprise NVMe SSD E1.S 9.5mm 6.4TB (H5300) 1e3b 00f0 Enterprise NVMe SSD U2 Mold 3001 Ethernet Controller DN200 for 10GbE SFP+ 1e3b 3001 Ethernet Network Adapter DN200-X1V for 10GbE SFP+ 2-port 3002 Ethernet Controller DN200 Series Virtual Function 300c Ethernet RAID Combo Controller DN200C for 1GbE 1e3b 300c Ethernet RAID Combo Adapter DN200C-G2V for 1GbE 4-port 300d Ethernet RAID Combo Controller DN200C Series Virtual Function 5001 RAID Controller DP808A 5002 RAID Controller DP808AL 50b0 Flexraid6 BootRaid - Type I 50b1 Flexraid6 BootRaid - Type II 1e3b 0001 Flexraid6 BootRAID F6100 50c1 Combo Card of BootRaid and Ethernet - Type I 50c2 Combo Card of BootRaid and Ethernet - Type II 50d0 NVME RAID Card DP800 50d1 Flexraid6 NVMeRAID 1e3d Burlywood, Inc 1e43 MaxLinear Inc 8904 MxL8904 8906 MxL8906 8908 MxL8908 1e44 Valve Software # the actual PCI-SIG member is Elektrobit, a daughter company of Continental 1e48 Continental 1e49 Yangtze Memory Technologies Co.,Ltd 0001 ZHITAI PC005 NVMe SSD 0021 ZHITAI TiPro5000 NVMe SSD 0041 ZHITAI TiPro7000 0071 ZHITAI TiPlus7100 0081 ZHITAI Ti600 NVMe SSD # YMTC 1001 PC005 NVMe SSD 1011 PC210 M.2 2280 NVMe SSD 1013 PC210 M.2 2242 NVMe SSD 1031 PC300 M.2 2280 NVMe SSD (DRAM-less) 1033 PC300 M.2 2242 NVMe SSD (DRAM-less) 1071 PC411 M.2 2280 NVMe SSD (DRAM-less) 1073 PC411 M.2 2242 NVMe SSD (DRAM-less) 1081 PC41Q M.2 2280 NVMe SSD (DRAM-less) 1e4b MAXIO Technology (Hangzhou) Ltd. 1001 NVMe SSD Controller MAP1001 1002 NVMe SSD Controller MAP1002 (DRAM-less) 1003 NVMe SSD Controller MAP1003 1201 NVMe SSD Controller MAP1201 1202 NVMe SSD Controller MAP1202 (DRAM-less) 1601 NVMe SSD Controller MAP1601 1602 NVMe SSD Controller MAP1602 (DRAM-less) 1608 NVMe SSD Controller MAP1608 (DRAM-less) 1e4c GSI Technology 0010 Associative Processing Unit [Leda] 1e4c 0120 SE120 0020 Associative Processing Unit [Leda-2] 1e50 IP3 Tech (HK) Limited 1e52 Tenstorrent Inc 401e Wormhole 1e52 0014 n300 1e52 0018 n150 b140 Blackhole faca Grayskull 1e52 0003 e150 1e52 0007 e75 1e52 000a e300 1e57 Beijing Panyi Technology Co., Ltd 0100 The device has already been deleted. 0000 0100 PY8800 64GB Accelerator 1e59 Oxford Nanopore Technologies 0001 MinION Mk1C 1e5d ASR Microelectronics 7000 AI controller A7000 7010 AI controller A7010 1e60 Hailo Technologies Ltd. 2864 Hailo-8 AI Processor 45c4 Hailo-10H AI Processor 1e67 Untether AI 0002 runAI200 AI Inference Accelerator 0004 speedAI240 AI Inference Accelerator 1e68 Jiangsu Xinsheng Intelligent Technology Co., Ltd 8111 EP2000Pro PCIe 3 NVMe SSD (DRAM-less) 1e6b Axiado Corp. 1e6c Xsight Labs Ltd. 0001 XLX1A256A Switch ASIC 0002 XLX2B128A Switch ASIC 1e7b Dataland 1e7c Brainchip Inc bca1 AKD1000 Neural Network Coprocessor [Akida] 1e7e Pliops 0200 XDP [Extreme Data Processor PRO 1.0] 9034 XDP [Extreme Data Processor FLEX 1.0] 1e7f Jiangsu Huacun Elec. Tech. Co., Ltd. 6002 MMY MMSP350 PCIe 3 NVMe SSD (DRAM-less) 6003 MMY HC512GP3KH2T PCIe 3 NVMe SSD (DRAM-less) 1e81 Ramaxel Technology(Shenzhen) Limited 1203 NVMe SSD Controller UHXXXa series 1e81 a121 NVMe SSD UHXXXa series U.2 960GB 1e81 a122 NVMe SSD UHXXXa series U.2 1920GB 1e81 a123 NVMe SSD UHXXXa series U.2 3840GB 1e81 a124 NVMe SSD UHXXXa series U.2 7680GB 1e81 a125 NVMe SSD UHXXXa series U.2 15360GB 1e81 a211 NVMe SSD UHXXXa series U.2 800GB 1e81 a212 NVMe SSD UHXXXa series U.2 1600GB 1e81 a213 NVMe SSD UHXXXa series U.2 3200GB 1e81 a214 NVMe SSD UHXXXa series U.2 6400GB 1e81 f123 NVMe SSD TP6500 series U.2 3840GB 6206 AM620 NVMe SSD 1e83 Huaqin Technology Co.Ltd 1e85 Heitec AG 1e89 ID Quantique SA 0002 Quantis-PCIe-40M 0003 Quantis-PCIe-240M 1e93 Beijing Bytedance Network Technology Co., Ltd. # aka SED Systems 1e94 Calian SED 1e95 Solid State Storage Technology Corporation 1000 XA1-311024 NVMe SSD M.2 1001 CA6-8D512 NVMe SSD M.2 1002 NVMe SSD [3DNAND] 2.5" U.2 (LJ1) 1e95 1101 NVMe SSD [3DNAND] 2.5" U.2 (LJ1) 1ea0 5636 TP1500 Series U.2 NVMe Datacenter SSD 1003 CLR-8W512 NVMe SSD M.2 (DRAM-less) 1005 PLEXTOR M10P(GN) NVMe SSD M.2 1007 CL4-8D512 NVMe SSD M.2 (DRAM-less) 1008 CL5-8D512 NVMe SSD M.2 (DRAM-less) 100c CL6 Series NVMe SSD M.2 (DRAM-less) 1010 CX3 Series NVMe SSD 1e95 0000 M.2 2280 480 GB 1e95 0001 M.2 2280 960 GB 1e95 0002 M.2 2280 1,920 GB 1e95 0003 M.2 2280 3,840 GB 3500 CA5-8D256 NVMe SSD M.2 35f1 PLEXTOR M9PGN Plus NVMe SSD M.2 9100 CL1-3D256-Q11 NVMe SSD M.2 1e96 Drut Technologies Inc. 1e9f Lynxi Technologies Co., Ltd. 1ea0 Tencent Technology (Shenzhen) Company Limited 2a16 Cloud Intelligent Inference Controller 2a18 Video Transcode Controller 2a20 Cloud Intelligent Inference and Training Controller 2a22 Cloud Intelligent Inference Controller 2a24 Cloud Intelligent Inference Controller 2a26 Cloud Intelligent Inference Controller 2a30 Cloud Video Transcode Controller 1ea7 Intelliprop, Inc 223a Typhon+ PCIe to Gen-Z Bridge 224a IPA-PE224A CXL to Gen-Z Bridge [Sphinx] 1eab Hefei DATANG Storage Technology Co.,LTD. 300a NVMe SSD Controller 300A 300b NVMe SSD Controller 300B (DRAM-less) 1eac Quectel Wireless Solutions Co., Ltd. 1001 EM120R-GL LTE Modem 1002 EM160R-GL LTE Modem 2001 EM120R-GL 1eae XFX Limited 1eb0 Shenzhen Electrical Appliances CO. 1901 NVMe SSD Controller (DRAM-less) 1eb1 VeriSilicon Inc 1001 Video Accelerator 1eb4 Quantum Nebula Microelectronics Technology Co.,Ltd. 3401 SSD Contoller 1eb6 Wuxi Stars Microsystem Technology Co., Ltd 1eb9 Senscomm Semiconductor, Inc 2020 SCM2625 Wi-Fi6 Network Adapter 1ebd EMERGETECH Company Ltd. 0101 Seirios 2063 Video Codec 1ec6 Vastai Technologies 0100 SV100 1ec6 0010 VA1V 1ec6 0011 VA1A 1ec6 0012 VA1-16G 1ec6 0013 VA1E 1ec6 0014 VA1L 1ec6 0015 VA1-32G 1ec6 0020 VA10-32G 1ec6 0021 VA12-32G 1ec6 0022 VA16 1ec6 0023 VA10-64G 1ec6 0024 VA10L 1ec6 0025 VA12-64G 1ec6 0026 VA12-128G 1ec6 0030 VE1P 1ec6 0031 VE1S 1ec6 0032 VE1V 1ec6 0033 VE1M 1ec6 0034 VE1E 1ec6 0035 VE1C 1ec6 0036 VE1MT 1ec6 003a VR1S-8G 1ec6 003b VR1S-16G 1ec6 003c VR1M-8G 1ec6 003d VR1M-16G 1ec6 003e VR1MT-8G 1ec6 003f VR1MT-16G 1ec6 0040 VA1M 1ec6 0041 VA1U 1ec6 0050 VAM 0200 SG100 1ec6 0060 VG1200 1ec6 0061 VG1600 1ec6 0062 VG1800 1ec6 0063 VG1000-32G 1ec6 0064 VG600 1ec6 0065 VG800 1ec6 0066 VG1000-64G 1ec6 0067 VG1000-24G 1ec6 0068 VG1000c-24G 1ec6 0069 VG1000c-32G 1ec6 006a VG1000c-64G 1ec6 006b VG1000c-16G 1ec6 006c VG1000c-48G 1ec6 006d VG600c 1ec6 006e VG800c 020f SG100 vGPU 0300 SR100 # nee Innosilicon Co Ltd 1ec8 Beijing Fantasy Technology Co., Ltd. 8800 Fantasy I 1ec8 12a2 Fantasy I Device 8810 Fantasy I 1ec8 12a2 Fantasy I Device 8900 GR308 8902 GR3 Audio 9800 Fantasy II 1ec8 12a2 Fantasy II Device 9802 Fantasy II 1ec8 12a2 Fantasy II Device 9804 Fantasy II 1ec8 12a2 Fantasy II Device 9810 Fantasy II-M 1ec8 12a2 Fantasy II Device 9a00 GR316 1ec9 Wingtech Group(HongKong)Limited 1eca Lightmatter 0000 Envise-B 1ed0 Hosin Global Electronics 2283 Patriot P300 NVMe SSD (DRAM-less) 1ed2 FuriosaAI, Inc. 0000 Warboy 0001 RNGD 2222 RNGD-S 1ed3 Yeston 1ed5 Moore Threads Technology Co.,Ltd 0100 MTT S10 0101 MTT S10 0102 MTT S30 0105 MTT S50 0106 MTT S60 0111 MTT S100 0121 MTT S1000M 0122 MTT S1000 0123 MTT S2000 01ff MTT HDMI/DP Audio 0200 MTT S80 Engineering Sample 0201 MTT S80 0202 MTT S70 0203 MTT S60 0211 MTT X300 0221 G2S80 0222 MTT S3000 1ed5 0001 C3150 0223 G2S4 0225 MTT S3000E 1ed5 0001 C3150 0251 G2N10 02ff MTT HDMI/DP Audio 0300 MTT S90 Engineering Sample 0301 MTT S90 0313 MTT X500 0323 MTT S4000 0327 MTT S4000 0328 MTT S4000 03ff MTT HDMI/DP Audio 1ed8 Digiteq Automotive 0101 FG4 PCIe Frame Grabber (T100) 0201 FG4 PCIe Frame Grabber (T200) 1ed9 Myrtle.ai 1ee1 Suzhou Kuhan Information Technologies 0050 Aurora NVMe SSD Controller 1ee1 0009 Airglow A430 NVMe SSD U.2 1.6TB 1ee1 000a Airglow A430 NVMe SSD U.2 3.2TB 1ee1 000b Airglow A430 NVMe SSD U.2 4.8TB 1ee1 0012 Airglow Z400 NVMe ZNS SSD U.2 5.76TB 1ee4 PETAIO INC 1180 PETA8118 NVMe SSD Series 1ee4 0015 NVMe SSD U.2 1.92TB (P8118E) 1ee4 0016 NVMe SSD U.2 3.84TB (P8118E) 1ee4 0017 NVMe SSD U.2 7.68TB (P8118E) 1ee4 0025 NVMe SSD U.2 1.6TB (P8118E) 1ee4 0026 NVMe SSD U.2 3.2TB (P8118E) 1ee4 0027 NVMe SSD U.2 6.4TB (P8118E) 1ee4 0115 NVMe SSD U.2 1.92TB (P8118Z) 1ee4 0116 NVMe SSD U.2 3.84TB (P8118Z) 1ee4 0117 NVMe SSD U.2 7.68TB (P8118Z) 1ee4 0125 NVMe SSD U.2 1.6TB (P8118Z) 1ee4 0126 NVMe SSD U.2 3.2TB (P8118Z) 1ee4 0127 NVMe SSD U.2 6.4TB (P8118Z) 1ee4 0215 NVMe SSD U.2 1.92TB (P8118X) 1ee4 0216 NVMe SSD U.2 3.84TB (P8118X) 1ee4 0217 NVMe SSD U.2 7.68TB (P8118X) 1ee4 0225 NVMe SSD U.2 1.6TB (P8118X) 1ee4 0226 NVMe SSD U.2 3.2TB (P8118X) 1ee4 0227 NVMe SSD U.2 6.4TB (P8118X) 1ee4 0315 NVMe SSD U.2 1.92TB (P8118E4) 1ee4 0316 NVMe SSD U.2 3.84TB (P8118E4) 1ee4 0317 NVMe SSD U.2 7.68TB (P8118E4) 1ee4 0325 NVMe SSD U.2 1.6TB (P8118E4) 1ee4 0326 NVMe SSD U.2 3.2TB (P8118E4) 1ee4 0327 NVMe SSD U.2 6.4TB (P8118E4) 1ee4 0415 NVMe SSD U.2 1.92TB (P8118Z3) 1ee4 0416 NVMe SSD U.2 3.84TB (P8118Z3) 1ee4 0417 NVMe SSD U.2 7.68TB (P8118Z3) 1ee4 0425 NVMe SSD U.2 1.6TB (P8118Z3) 1ee4 0426 NVMe SSD U.2 3.2TB (P8118Z3) 1ee4 0427 NVMe SSD U.2 6.4TB (P8118Z3) 1ee4 0515 NVMe SSD U.2 1.92TB (P8118Z4) 1ee4 0516 NVMe SSD U.2 3.84TB (P8118Z4) 1ee4 0517 NVMe SSD U.2 7.68TB (P8118Z4) 1ee4 0525 NVMe SSD U.2 1.6TB (P8118Z4) 1ee4 0526 NVMe SSD U.2 3.2TB (P8118Z4) 1ee4 0527 NVMe SSD U.2 6.4TB (P8118Z4) 1ee4 0615 NVMe SSD U.2 1.92TB (P8128Z3) 1ee4 0616 NVMe SSD U.2 3.84TB (P8128Z3) 1ee4 0617 NVMe SSD U.2 7.68TB (P8128Z3) 1ee4 0625 NVMe SSD U.2 1.6TB (P8128Z3) 1ee4 0626 NVMe SSD U.2 3.2TB (P8128Z3) 1ee4 0627 NVMe SSD U.2 6.4TB (P8128Z3) 1ee4 3013 NVMe SSD AIC 480GB (P8118E) 1ee4 3014 NVMe SSD AIC 960GB (P8118E) 1ee4 3015 NVMe SSD AIC 1.92TB (P8118E) 1ee4 3016 NVMe SSD AIC 3.84TB (P8118E) 1ee4 3017 NVMe SSD AIC 7.68TB (P8118E) 1ee4 3025 NVMe SSD AIC 1.6TB (P8118E) 1ee4 3026 NVMe SSD AIC 3.2TB (P8118E) 1ee4 3027 NVMe SSD AIC 6.4TB (P8118E) 1ee4 3113 NVMe SSD AIC 480GB (P8118Z) 1ee4 3114 NVMe SSD AIC 960GB (P8118Z) 1ee4 3115 NVMe SSD AIC 1.92TB (P8118Z) 1ee4 3116 NVMe SSD AIC 3.84TB (P8118Z) 1ee4 3117 NVMe SSD AIC 7.68TB (P8118Z) 1ee4 3125 NVMe SSD AIC 1.6TB (P8118Z) 1ee4 3126 NVMe SSD AIC 3.2TB (P8118Z) 1ee4 3127 NVMe SSD AIC 6.4TB (P8118Z) 1ee4 3213 NVMe SSD AIC 480GB (P8118X) 1ee4 3214 NVMe SSD AIC 960GB (P8118X) 1ee4 3215 NVMe SSD AIC 1.92TB (P8118X) 1ee4 3216 NVMe SSD AIC 3.84TB (P8118X) 1ee4 3217 NVMe SSD AIC 7.68TB (P8118X) 1ee4 3225 NVMe SSD AIC 1.6TB (P8118X) 1ee4 3226 NVMe SSD AIC 3.2TB (P8118X) 1ee4 3227 NVMe SSD AIC 6.4TB (P8118X) 1ee4 3315 NVMe SSD AIC 1.92TB (P8118E4) 1ee4 3316 NVMe SSD AIC 3.84TB (P8118E4) 1ee4 3317 NVMe SSD AIC 7.68TB (P8118E4) 1ee4 3325 NVMe SSD AIC 1.6TB (P8118E4) 1ee4 3326 NVMe SSD AIC 3.2TB (P8118E4) 1ee4 3327 NVMe SSD AIC 6.4TB (P8118E4) 1ee4 3415 NVMe SSD AIC 1.92TB (P8118Z3) 1ee4 3416 NVMe SSD AIC 3.84TB (P8118Z3) 1ee4 3417 NVMe SSD AIC 7.68TB (P8118Z3) 1ee4 3425 NVMe SSD AIC 1.6TB (P8118Z3) 1ee4 3426 NVMe SSD AIC 3.2TB (P8118Z3) 1ee4 3427 NVMe SSD AIC 6.4TB (P8118Z3) 1ee4 3515 NVMe SSD AIC 1.92TB (P8118Z4) 1ee4 3516 NVMe SSD AIC 3.84TB (P8118Z4) 1ee4 3517 NVMe SSD AIC 7.68TB (P8118Z4) 1ee4 3525 NVMe SSD AIC 1.6TB (P8118Z4) 1ee4 3526 NVMe SSD AIC 3.2TB (P8118Z4) 1ee4 3527 NVMe SSD AIC 6.4TB (P8118Z4) 1ee4 3615 NVMe SSD AIC 1.92TB (P8128Z3) 1ee4 3616 NVMe SSD AIC 3.84TB (P8128Z3) 1ee4 3617 NVMe SSD AIC 7.68TB (P8128Z3) 1ee4 3625 NVMe SSD AIC 1.6TB (P8128Z3) 1ee4 3626 NVMe SSD AIC 3.2TB (P8128Z3) 1ee4 3627 NVMe SSD AIC 6.4TB (P8128Z3) 1ee4 abcd NVMe SSD U.2 1181 PETA8118 NVMe E1S Series 1ee4 2015 NVMe SSD E1.S 1.92TB (P8118E) 1ee4 2016 NVMe SSD E1.S 3.84TB (P8118E) 1ee4 2017 NVMe SSD E1.S 7.68TB (P8118E) 1ee4 2025 NVMe SSD E1.S 1.6TB (P8118E) 1ee4 2026 NVMe SSD E1.S 3.2TB (P8118E) 1ee4 2027 NVMe SSD E1.S 6.4TB (P8118E) 1ee4 2115 NVMe SSD E1.S 1.92TB (P8118Z) 1ee4 2116 NVMe SSD E1.S 3.84TB (P8118Z) 1ee4 2117 NVMe SSD E1.S 7.68TB (P8118Z) 1ee4 2125 NVMe SSD E1.S 1.6TB (P8118Z) 1ee4 2126 NVMe SSD E1.S 3.2TB (P8118Z) 1ee4 2127 NVMe SSD E1.S 6.4TB (P8118Z) 1ee4 2215 NVMe SSD E1.S 1.92TB (P8118X) 1ee4 2216 NVMe SSD E1.S 3.84TB (P8118X) 1ee4 2217 NVMe SSD E1.S 7.68TB (P8118X) 1ee4 2225 NVMe SSD E1.S 1.6TB (P8118X) 1ee4 2226 NVMe SSD E1.S 3.2TB (P8118X) 1ee4 2227 NVMe SSD E1.S 6.4TB (P8118X) 1ee4 2315 NVMe SSD E1.S 1.92TB (P8118E4) 1ee4 2316 NVMe SSD E1.S 3.84TB (P8118E4) 1ee4 2317 NVMe SSD E1.S 7.68TB (P8118E4) 1ee4 2325 NVMe SSD E1.S 1.6TB (P8118E4) 1ee4 2326 NVMe SSD E1.S 3.2TB (P8118E4) 1ee4 2327 NVMe SSD E1.S 6.4TB (P8118E4) 1ee4 2415 NVMe SSD E1.S 1.92TB (P8118Z3) 1ee4 2416 NVMe SSD E1.S 3.84TB (P8118Z3) 1ee4 2417 NVMe SSD E1.S 7.68TB (P8118Z3) 1ee4 2425 NVMe SSD E1.S 1.6TB (P8118Z3) 1ee4 2426 NVMe SSD E1.S 3.2TB (P8118Z3) 1ee4 2427 NVMe SSD E1.S 6.4TB (P8118Z3) 1ee4 2515 NVMe SSD E1.S 1.92TB (P8118Z4) 1ee4 2516 NVMe SSD E1.S 3.84TB (P8118Z4) 1ee4 2517 NVMe SSD E1.S 7.68TB (P8118Z4) 1ee4 2525 NVMe SSD E1.S 1.6TB (P8118Z4) 1ee4 2526 NVMe SSD E1.S 3.2TB (P8118Z4) 1ee4 2527 NVMe SSD E1.S 6.4TB (P8118Z4) 1ee4 2615 NVMe SSD E1.S 1.92TB (P8128Z3) 1ee4 2616 NVMe SSD E1.S 3.84TB (P8128Z3) 1ee4 2617 NVMe SSD E1.S 7.68TB (P8128Z3) 1ee4 2625 NVMe SSD E1.S 1.6TB (P8128Z3) 1ee4 2626 NVMe SSD E1.S 3.2TB (P8128Z3) 1ee4 2627 NVMe SSD E1.S 6.4TB (P8128Z3) 1182 PETA8118 NVMe M2 Series 1ee4 1013 NVMe SSD M.2 480GB (P8118E) 1ee4 1014 NVMe SSD M.2 960GB (P8118E) 1ee4 1015 NVMe SSD M.2 1.92TB (P8118E) 1ee4 1016 NVMe SSD M.2 3.84TB (P8118E) 1ee4 1023 NVMe SSD M.2 400GB (P8118E) 1ee4 1024 NVMe SSD M.2 800GB (P8118E) 1ee4 1025 NVMe SSD M.2 1.6TB (P8118E) 1ee4 1026 NVMe SSD M.2 3.2TB (P8118E) 1ee4 1113 NVMe SSD M.2 480GB (P8118Z) 1ee4 1114 NVMe SSD M.2 960GB (P8118Z) 1ee4 1115 NVMe SSD M.2 1.92TB (P8118Z) 1ee4 1116 NVMe SSD M.2 3.84TB (P8118Z) 1ee4 1123 NVMe SSD M.2 400GB (P8118Z) 1ee4 1124 NVMe SSD M.2 800GB (P8118Z) 1ee4 1125 NVMe SSD M.2 1.6TB (P8118Z) 1ee4 1126 NVMe SSD M.2 3.2TB (P8118Z) 1ee4 1213 NVMe SSD M.2 480GB (P8118X) 1ee4 1214 NVMe SSD M.2 960GB (P8118X) 1ee4 1215 NVMe SSD M.2 1.92TB (P8118X) 1ee4 1216 NVMe SSD M.2 3.84TB (P8118X) 1ee4 1223 NVMe SSD M.2 400GB (P8118X) 1ee4 1224 NVMe SSD M.2 800GB (P8118X) 1ee4 1225 NVMe SSD M.2 1.6TB (P8118X) 1ee4 1226 NVMe SSD M.2 3.2TB (P8118X) 1ee4 1313 NVMe SSD M.2 480GB (P8118E4) 1ee4 1314 NVMe SSD M.2 960GB (P8118E4) 1ee4 1315 NVMe SSD M.2 1.92TB (P8118E4) 1ee4 1316 NVMe SSD M.2 3.84TB (P8118E4) 1ee4 1317 NVMe SSD M.2 7.68TB (P8118E4) 1ee4 1323 NVMe SSD M.2 400GB (P8118E4) 1ee4 1324 NVMe SSD M.2 800GB (P8118E4) 1ee4 1325 NVMe SSD M.2 1.6TB (P8118E4) 1ee4 1326 NVMe SSD M.2 3.2TB (P8118E4) 1ee4 1327 NVMe SSD M.2 6.4TB (P8118E4) 1ee4 1413 NVMe SSD M.2 480GB (P8118Z3) 1ee4 1414 NVMe SSD M.2 960GB (P8118Z3) 1ee4 1415 NVMe SSD M.2 1.92TB (P8118Z3) 1ee4 1416 NVMe SSD M.2 3.84TB (P8118Z3) 1ee4 1417 NVMe SSD M.2 7.68TB (P8118Z3) 1ee4 1423 NVMe SSD M.2 400GB(P8118Z3) 1ee4 1424 NVMe SSD M.2 800GB (P8118Z3) 1ee4 1425 NVMe SSD M.2 1.6TB (P8118Z3) 1ee4 1426 NVMe SSD M.2 3.2TB (P8118Z3) 1ee4 1427 NVMe SSD M.2 6.4TB (P8118Z3) 1ee4 1513 NVMe SSD M.2 480GB (P8118Z4) 1ee4 1514 NVMe SSD M.2 960GB (P8118Z4) 1ee4 1515 NVMe SSD M.2 1.92TB (P8118Z4) 1ee4 1516 NVMe SSD M.2 3.84TB (P8118Z4) 1ee4 1517 NVMe SSD M.2 7.68TB (P8118Z4) 1ee4 1523 NVMe SSD M.2 400GB (P8118Z4) 1ee4 1524 NVMe SSD M.2 800GB (P8118Z4) 1ee4 1525 NVMe SSD M.2 1.6TB (P8118Z4) 1ee4 1526 NVMe SSD M.2 3.2TB (P8118Z4) 1ee4 1527 NVMe SSD M.2 6.4TB (P8118Z4) 1ee4 1613 NVMe SSD M.2 480GB (P8128Z3) 1ee4 1614 NVMe SSD M.2 960GB (P8128Z3) 1ee4 1615 NVMe SSD M.2 1.92TB (P8128Z3) 1ee4 1616 NVMe SSD M.2 3.84TB (P8128Z3) 1ee4 1617 NVMe SSD M.2 7.68TB (P8128Z3) 1ee4 1623 NVMe SSD M.2 400GB (P8128Z3) 1ee4 1624 NVMe SSD M.2 800GB (P8128Z3) 1ee4 1625 NVMe SSD M.2 1.6TB (P8128Z3) 1ee4 1626 NVMe SSD M.2 3.2TB (P8128Z3) 1ee4 1627 NVMe SSD M.2 6.4TB (P8128Z3) 1ee9 SUSE LLC 1eec Viscore Technologies Ltd 0102 VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe 1eec VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe 1eed XDX Computing Technology Ltd. 10a0 XDX110 Graphic/VGA Controller 10a1 XDX110 Audio Controller 10a2 XDX110M 10a4 XDX E1100 1140 XDX120 1142 XDX120M 1144 XDX E1200 1150 XDX120S 1160 XDX121 1170 XDX121S 11e0 XDX130 11e4 XDX E1300 1320 XDX150 1323 XDX R1500 1324 XDX X1500 1330 XDX150S 1333 XDX R1510 1340 XDX151 1350 XDX151S 1360 XDX151T 13c0 XDX160T 13d0 XDX160S 13d3 XDX R1610 1500 XDX180 1503 XDX R1800 1504 XDX X1800 1510 XDX180S 15a0 XDX190 15a3 XDX R1900 15a4 XDX X1900 15a5 XDX X1900D 15b0 XDX190S 1810 XDX TJ01 Audio 1820 XDX TJ02 Audio 1830 XDX TJ03 Audio 1ef6 GrAI Matter Labs 1ef7 Shenzhen Gunnir Technology Development Co., Ltd 1efb Flexxon Pte Ltd 1eff Rebellions Inc. 1020 RBLN-CA2 (PF) 1021 RBLN-CA2 (VF) 1110 RBLN-CA11 (PF) 1111 RBLN-CA11 (VF) 1120 RBLN-CA12 (PF) 1121 RBLN-CA12 (VF) 1210 RBLN-CA21 (PF) 1211 RBLN-CA21 (VF) 1220 RBLN-CA22 (PF) 1221 RBLN-CA22 (VF) 1250 RBLN-CA25 (PF) 1251 RBLN-CA25 (VF) 1f02 Beijing Dayu Technology 1f03 Shenzhen Shichuangyi Electronics Co., Ltd 1202 MAP1202-Based NVMe SSD (DRAM-less) 2262 SM2262EN-based OEM SSD 2263 SM2263XT-Base NVMe SSD 5216 IG5216-based NVMe SSD (DRAM-less) 5220 IG5220-Based NVMe SSD 5236 IG5236-Based NVMe SSD 5636 IG5636-Based NVMe SSD 1f0a Motorcomm Microelectronics. 6801 YT6801 Gigabit Ethernet Controller 1f0d DeGirum Corp. 0100 AI Accelerator [ORCA] 1f0f NebulaMatrix Technology 1041 D1055AS vDPA Ethernet Controller 1f0f 0001 D1055AS vDPA Ethernet Controller 1042 D1055AS vDPA Storage Controller 1f0f 0001 D1055AS vDPA Storage Controller 1220 D1055AS Ethernet Controller 1221 D1055AS Ethernet Controller 1222 D1055AS Ethernet Controller 1223 D1055AS Ethernet Controller 1600 M16104 Family 1f0f 0001 M16104 Family 1601 M16104 Family Virtual Function 1f0f 0001 M16104 Family Virtual Function 1a00 M16104 Family 1f0f 0001 M16104 Family 1a01 M16104 Family Virtual Function 1f0f 0001 M16104 Family Virtual Function 2022 D1055AS PCI Express Switch Upstream Port 3403 M18110 Family 3404 M18110 Lx Family 3405 M18110 Family BASE-T 3406 M18110 Lx Family BASE-T 3407 M18110 Family OCP 3408 M18110 Lx Family OCP 3409 M18110 Family BASE-T OCP 340a M18110 Lx Family BASE-T OCP 340b M18000 Family 340c M18000 Lx Family 340d M18000 Family BASE-T 340e M18000 Lx Family BASE-T 340f M18000 Family OCP 3410 M18000 Lx Family OCP 3411 M18000 Family BASE-T OCP 3412 M18000 Lx Family BASE-T OCP 3413 M18000 Family Virtual Function 9088 D1055AS PCI Express Switch Downstream Port 1f16 XConn Technologies # XConn XC50256 CXL2.0/PCIe5.0 switch c500 XC50256 1f17 Zettastone Technology 1f18 c-payne GmbH 0001 PCIe gen4 Switch Backplane 5x x16 - 4W 0002 PCIe gen4 Switch Backplane 4x x16 - 5W 0101 PCIe gen5 MCIO Switch 100-Lane 0102 PCIe gen5 MCIO Switch 52-Lane 1f1c Sophgo Technologies Inc. 1686 BM1684X [Sophon Series Deep Learning Accelerator] 1f24 xFusion Digital Technologies Co., Ltd. 1058 EP500/EP600 NVMe SSD 1f24 1114 EP500 NVMe SSD(RI) 1f24 1115 EP600 NVMe SSD(MU) 1f2e AzurEngine Technologies 00a1 [AE] AzureBlade Accelerator 00b1 [AE] AzureBlade Accelerator 00c1 [AE] AzureBlade Accelerator 1f2f China Mobile (Hangzhou) Information Technology Co.Ltd. 1513 DERA MENG NVMe Controller 1f2f 6113 KM660 U.2 1.6TB NVMe SSD 1f2f 6114 KM560 U.2 1.92TB NVMe SSD 1f2f 6115 KM660 U.2 3.2TB NVMe SSD 1f2f 6116 KM560 U.2 3.84TB NVMe SSD 1f2f 6118 KM560 U.2 7.68TB NVMe SSD 1f31 Nextorage 4512 Nextorage NE1N NVMe SSD 1f3f 3SNIC Ltd 2100 SSSHBA SAS/SATA HBA 1f3f 0120 HBA 32 Ports 1f3f 0125 HBA 40 Ports 1f3f 0180 HBA 16 Ports 1f3f 0185 HBA 8 Ports 2200 SSSRAID RAID controller 1f3f 0185 RAID Controller 16 Ports with 2G Cache 1f3f 01a1 RAID Controller 40 Ports with 2G Cache 1f3f 01a4 RAID Controller 16 Ports with 4G Cache 1f3f 01a8 RAID Controller 32 Ports with 4G Cache 1f3f 01ad RAID Controller 40 Ports with 4G Cache 9001 SSSNIC Ethernet VF 1f3f 1000 Ethernet VF 9002 SSSNIC Ethernet VF Hyper-V 1f3f 1000 Ethernet VF Hyper-V 9003 SSSNIC Ethernet SDI VF 1f3f 1000 Ethernet SDI VF 9004 SSSNIC Ethernet SDI VF Hyper-V 1f3f 1000 Ethernet SDI VF Hyper-V 9008 SSSFC VF 1f3f 1000 3SFC VF 9009 SSSFC VF Hyper-V 1f3f 1000 3SFC VF Hyper-V 9010 SSSFC FC Controller 1f3f 0041 Dual Port 16GE FC to PCIe Gen4 x16 Adapter 1f3f 0061 Dual Port 32GE FC to PCIe Gen4 x16 Adapter 9020 SSSNIC Ethernet Network Adapter 1f3f 0051 Dual Port 25GE Ethernet Network Adapter 1f3f 0052 Quad Port 25GE Ethernet Network Adapter 1f3f 00a1 Dual Port 100GE Ethernet Network Adapter 9030 SSSNIC IPU 1f3f 0051 Dual Port 25GE IPU 9031 SSSNIC SDI5.0 1f3f 0051 Dual Port 25GE SDI5.0lite 1f3f 00a1 Dual Port 100GE SDI5.0 9032 SSSNIC SDI5.1 1f3f 00a1 Dual Port 100GE SDI5.1 1f40 Netac Technology Co.,Ltd 0001 PCIe 4 NVMe SSD (DRAM-less) 1202 PCIe 3 NVMe SSD (DRAM-less) 1602 PCIe 4 NVMe SSD (DRAM-less) 1f40 PCIe 4 NVMe SSD (DRAM-less) 2263 PCIe 3 SM based NVMe SSD (DRAM-less) 5216 PCIe 3 NVMe SSD (DRAM-less) 5236 PCIe 4 INNOGRIT based NVMe SSD 5765 PCIe 3 NVMe SSD (DRAM-less) 1f44 VVDN Technologies Private Limited 1f47 YUSUR Technology Co., Ltd. 1001 FLEXFLOW-2200T Ethernet Controller 1f47 0001 Ethernet 10G 2P FLEXFLOW-2200T 1f47 0002 Ethernet 25G 2P FLEXFLOW-2200T 1f47 0003 Ethernet 40G 2P FLEXFLOW-2200T 1f47 0004 Ethernet 100G 1P FLEXFLOW-2200T 1f47 0005 Ethernet 100G 2P FLEXFLOW-2200T 1f47 0006 Ethernet 10G 2P FLEXFLOW-2200T 1f47 0007 Ethernet 25G 2P FLEXFLOW-2200T 1f47 0008 Ethernet 40G 2P FLEXFLOW-2200T 1f47 0009 Ethernet 100G 1P FLEXFLOW-2200T 1f47 000a Ethernet 100G 2P FLEXFLOW-2200T 1002 FLEXFLOW-2200T Ethernet Controller [Virtual Function] 1003 FLEXFLOW-2200T Ethernet Controller [MGMT Function] 1004 FLEXFLOW-2200T DATA Offload Engine 1005 CONFLUX-2200P NVMe Controller 1011 FLEXFLOW-2200T Ethernet Controller 1f47 0001 Ethernet 10G 2P FLEXFLOW-2200T 1f47 0002 Ethernet 25G 2P FLEXFLOW-2200T 1f47 0003 Ethernet 40G 2P FLEXFLOW-2200T 1f47 0004 Ethernet 100G 1P FLEXFLOW-2200T 1f47 0005 Ethernet 100G 2P FLEXFLOW-2200T 1f47 0006 Ethernet 10G 2P FLEXFLOW-2200T 1f47 0007 Ethernet 25G 2P FLEXFLOW-2200T 1f47 0008 Ethernet 40G 2P FLEXFLOW-2200T 1f47 0009 Ethernet 100G 1P FLEXFLOW-2200T 1f47 000a Ethernet 100G 2P FLEXFLOW-2200T # RDMA-PF 1203 FLEXFLOW-2200T RoCEv2 Network Controller # Network Accelerating Card 2018 DPU Card # Network Accelerating Card 2020 DPU 3101 FLEXFLOW-2100R Ethernet Controller 1f47 0001 Ethernet 10G 2P FLEXFLOW-2100R 1f47 0002 Ethernet 25G 2P FLEXFLOW-2100R 1f47 0003 Ethernet 50G 2P FLEXFLOW-2100R 1f47 0004 Ethernet 100G 2P FLEXFLOW-2100R 1f47 0005 Ethernet 10G 2P FLEXFLOW-2100R 1f47 0006 Ethernet 25G 2P FLEXFLOW-2100R 1f47 0007 Ethernet 50G 2P FLEXFLOW-2100R 1f47 0008 Ethernet 100G 2P FLEXFLOW-2100R 3201 FLEXFLOW-2200R Ethernet Controller 1f47 0001 Ethernet 10G 2P FLEXFLOW-2200R 1f47 0002 Ethernet 25G 2P FLEXFLOW-2200R 1f47 0003 Ethernet 50G 2P FLEXFLOW-2200R 1f47 0004 Ethernet 100G 2P FLEXFLOW-2200R 1f47 0005 Ethernet 10G 2P FLEXFLOW-2200R 1f47 0006 Ethernet 25G 2P FLEXFLOW-2200R 1f47 0007 Ethernet 50G 2P FLEXFLOW-2200R 1f47 0008 Ethernet 100G 2P FLEXFLOW-2200R 3211 FLEXFLOW-2200R Ethernet Controller 1f47 0001 Ethernet 10G 2P FLEXFLOW-2200R 1f47 0002 Ethernet 25G 2P FLEXFLOW-2200R 1f47 0003 Ethernet 50G 2P FLEXFLOW-2200R 1f47 0004 Ethernet 100G 2P FLEXFLOW-2200R 1f47 0005 Ethernet 10G 2P FLEXFLOW-2200R 1f47 0006 Ethernet 25G 2P FLEXFLOW-2200R 1f47 0007 Ethernet 50G 2P FLEXFLOW-2200R 1f47 0008 Ethernet 100G 2P FLEXFLOW-2200R 4001 CONFLUX-2200E Ethernet Controller 1f47 0001 Ethernet 25G 2P CONFLUX-2200E 1f47 0002 Ethernet 40G 2P CONFLUX-2200E 1f47 0003 Ethernet 100G 1P CONFLUX-2200E 1f47 0004 Ethernet 100G 2P CONFLUX-2200E 1f47 0005 Ethernet 25G 2P CONFLUX-2200E 1f47 0006 Ethernet 40G 2P CONFLUX-2200E 1f47 0007 Ethernet 100G 1P CONFLUX-2200E 1f47 0008 Ethernet 100G 2P CONFLUX-2200E 4002 CONFLUX-2200E Ethernet Controller [Virtual Function] 4003 CONFLUX-2200E Ethernet Controller [MGMT Function] 4004 CONFLUX-2200E DATA Offload Engine 4203 CONFLUX-2200E RoCEv2 Network Controller 5001 CONFLUX-2200P Ethernet Controller 1f47 0001 Ethernet 25G 2P CONFLUX-2200P 1f47 0003 Ethernet 100G 2P CONFLUX-2200P 1f47 0004 Ethernet 25G 2P CONFLUX-2200P 1f47 0006 Ethernet 100G 2P CONFLUX-2200P 1f47 0007 Ethernet 25G 2P CONFLUX-2200P 1f47 0009 Ethernet 100G 2P CONFLUX-2200P 1f47 000a Ethernet 25G 2P CONFLUX-2200P 1f47 000c Ethernet 100G 2P CONFLUX-2200P 5002 CONFLUX-2200P Ethernet Controller [Virtual Function] 5003 CONFLUX-2200P NVMe Controller 1f47 0001 Ethernet 25G 2P CONFLUX-2200P 1f47 0003 Ethernet 100G 2P CONFLUX-2200P 1f47 0004 Ethernet 25G 2P CONFLUX-2200P 1f47 0006 Ethernet 100G 2P CONFLUX-2200P 1f47 0007 Ethernet 25G 2P CONFLUX-2200P 1f47 0009 Ethernet 100G 2P CONFLUX-2200P 1f47 000a Ethernet 25G 2P CONFLUX-2200P 1f47 000c Ethernet 100G 2P CONFLUX-2200P 5004 CONFLUX-2200P NVMe Controller [Virtual Function] 5005 CONFLUX-2200P Ethernet Controller [MGMT Function] 1f47 0001 CONFLUX-2200P Ethernet Controller [MGMT Function] 1f47 0002 CONFLUX-2200P Ethernet Controller [MGMT Function] DPU 5006 CONFLUX-2200P Ethernet Controller [YDMI Function] 1f47 0001 CONFLUX-2200P Ethernet Controller [YDMI Function] 1f47 0002 CONFLUX-2200P Ethernet Controller [YDMI Function] DPU 5007 CONFLUX-2200P DATA OFFLOAD ENGINE 5011 CONFLUX-2200P Ethernet Controller 1f47 0004 Ethernet 25G 2P CONFLUX-2200P 1f47 0006 Ethernet 100G 2P CONFLUX-2200P 1f47 000a Ethernet 25G 2P CONFLUX-2200P 1f47 000c Ethernet 100G 2P CONFLUX-2200P 5015 CONFLUX-2200P Ethernet Controller [MGMT Function] 1f47 0001 CONFLUX-2200P Ethernet Controller [MGMT Function] 1f47 0002 CONFLUX-2200P Ethernet Controller [MGMT Function] DPU 5016 CONFLUX-2200P Ethernet Controller [YDMI Function] 1f47 0001 CONFLUX-2200P Ethernet Controller [YDMI Function] 1f47 0002 CONFLUX-2200P Ethernet Controller [YDMI Function] DPU 1f4b Axera Semiconductor Co., Ltd 1f52 MangoBoost Inc. 1008 Mango GPUBoost - RDMA 1020 Mango NetworkBoost - TCP 1022 Mango StorageBoost - NTI 1023 Mango StorageBoost - NTT 1f56 SAPEON Inc. 1f60 Accelecom 0001 XELE-NIC 25K5 0054 XELE-NIC 25K5 1f67 Yunsilicon Technology 1011 metaConnect SmartNIC Physical Function 1012 metaConnect SmartNIC Virtual Function 1051 metaFusion DPU Physical Function 1052 metaFusion DPU Virtual Function 1059 metaFusion DPU SoC Network Interface 1111 YSA-100 RDMA Ethernet Network Controller 1bd4 00b2 O1E2YYSA100 1bd4 00b9 O2E1YYSA100 1ff9 00b1 ENFY1102-QP2 1ff9 00b8 ENFY1202-QP1 1ff9 00ba ENFY1251-SP4 1ff9 00bb ENFY1251-SP4 (Roce) 1112 metaScale SmartNIC Virtual Function 1151 metaVisor DPU Physical Function 1152 metaVisor DPU Virtual Function 1f6c CIX Technology Group Co., Ltd. 0001 CIX P1 CD8180 PCI Express Root Port 1f73 Shenzhen Quanxing Tech Co., Ltd. 1f7a Efinix, Inc. 0100 Default ID for Titanium FPGA PCIe Interface (AXI) 1f82 d-Matrix 0011 Corsair [DMX 1000 Series] 00f1 Jetstream [DMX F1 Transparent NIC] 1f90 Quside Technologies 7024 QRNG PCIe Device 7025 QRNG PCIe Device 1f99 Shenzhen Techwinsemi Technology Co., Ltd. 1202 TWSC TE3420 series 1608 PCIe Gen4 x4 M.2 2280 1f88 TE3420 PCIe Gen3 x4 M.2 2280 3420 PCIe Gen3 x4 M.2 2280 1f9d Axelera AI 1100 Metis AIPU (rev 02) 11aa Metis AIPU (rev 01) 1faa Hexaflake (Shanghai) Information Technology Co., Ltd. 0c10 Compass C10 PF 0c11 Compass C10 VF 0c80 Compass2 C80 PF 0c81 Compass2 C80 VF 1fab Unifabrix Ltd. 0000 Nexus Alpha IVPU 0100 NoX Gamma 01fd Smart Memory Node Generic CXL Port (T1) # UnifabriX Smart Memory Node Generic CXL Port 01fe Smart Memory Node Generic CXL Port (T2) # UnifabriX Smart Memory Node Generic CXL Port 01ff Smart Memory Node Generic CXL Port (T3) 1b00 MAX Host Device 1fb0 ICube Corporation Limited 1000 NF1000 Series GPU 1fb0 1001 NF1001 1fb0 1002 NF1002 1fb0 1003 NF1003 # NF1000 Series GPU 1001 NF1001 1fb0 1001 NF1001 1fb0 1002 NF1002 1fb0 1003 NF1003 2000 NF2000 Series GPU 1fb0 2001 NF2001 1fb0 2002 NF 2002 1fb0 2003 NF 2003 3000 NF3000 Series GPU 1fb0 3001 NF3001 1fb0 3002 NF3002 1fb0 3003 NF3003 4000 NF4000 Series GPU 1fb0 4001 NF4001 1fb0 4002 NF4002 1fb0 4003 NF4003 5000 NF5000 Series GPU 1fb0 5001 NF 5001 1fb0 5002 NF 5002 1fb0 5003 NF5003 # nee Tumsan Oy 1fc0 Ascom (Finland) Oy 0300 E2200 Dual E1/Rawpipe Card 0301 C5400 SHDSL/E1 Card # nee PathScale, Inc 1fc1 QLogic, Corp. 000d IBA6110 InfiniBand HCA 0010 IBA6120 InfiniBand HCA 1fc9 Tehuti Networks Ltd. 3009 10-Giga TOE SmartNIC 3010 10-Giga TOE SmartNIC 0000 3002 10-Giga TOE Single Port XFP SmartNIC 0000 3004 10-Giga TOE Single Port SFP+ SmartNIC 0000 3008 10-Giga TOE Single Port CX4 SmartNIC 3014 10-Giga TOE SmartNIC 2-Port 0000 3003 10-Giga TOE Dual Port XFP Low Profile SmartNIC 0000 3005 10-Giga TOE Dual Port SFP+ Low Profile SmartNIC 0000 3014 10-Giga TOE Dual Port CX4 Low Profile SmartNIC 3110 10-Giga TOE Single Port SmartNIC 0000 3004 10-Giga TOE Single Port SFP+ SmartNIC 3114 10-Giga TOE Dual Port Low Profile SmartNIC 0000 3005 10-Giga TOE Dual Port SFP+ Low Profile SmartNIC 0000 3011 10-Giga TOE Dual Port SFP+/CX4 Low Profile SmartNIC 0000 3012 10-Giga TOE Dual Port CX4/SFP+ Low Profile SmartNIC 0000 3014 10-Giga TOE Dual Port CX4 Low Profile SmartNIC 3310 10-Giga TOE SFP+ Single Port SmartNIC 0000 3004 10-Giga TOE Single Port SFP+ SmartNIC 3314 10-Giga TOE Dual Port Low Profile SmartNIC 0000 3005 10-Giga TOE Dual Port SFP+ Low Profile SmartNIC 0000 3011 10-Giga TOE Dual Port SFP+/CX4 Low Profile SmartNIC 0000 3012 10-Giga TOE Dual Port CX4/SFP+ Low Profile SmartNIC 0000 3014 10-Giga TOE Dual Port CX4 Low Profile SmartNIC 4010 TN4010 Clean SROM 4020 TN9030 10GbE CX4 Ethernet Adapter 180c 2040 Mustang-200 10GbE Ethernet Adapter 4022 TN9310 10GbE SFP+ Ethernet Adapter 1043 8709 XG-C100F 10GbE SFP+ Ethernet Adapter 1186 4d00 DXE-810S 10GbE SFP+ Ethernet Adapter 1432 8103 10 Gigabit Ethernet SFP+ PCI Express Adapter 1fc9 3015 Ethernet Adapter 4024 TN9210 10GBase-T Ethernet Adapter 4025 TN9510 10GBase-T/NBASE-T Ethernet Adapter 105a 7203 SANLink3 NBase-T1 1186 2900 DXE-810T 10GBase-T Ethernet Adapter 1432 8102 10 Gigabit Ethernet PCI Express Adapter 1fc9 3015 Ethernet Adapter 4026 TN9610 10GbE SFP+ Ethernet Adapter 4c52 1000 LREC6860AF 10 Gigabit Ethernet Adapter 4027 TN9710P 10GBase-T/NBASE-T Ethernet Adapter 1154 0368 LGY-PCIE-MG 1432 8104 10 Gigabit Ethernet PCI Express Adapter 1546 4027 GE10-PCIE4XG202P 10Gbase-T/NBASE-T Ethernet Adapter 1baa 3310 PCIe Expansion Card 1fc9 3015 Ethernet Adapter 4c52 1001 LREC6860BT 10 Gigabit Ethernet Adapter 4527 TN9710Q 5GBase-T/NBASE-T Ethernet Adapter 1fcc StreamLabs f416 MS416 fb01 MH4LM 1fce Cognio Inc. 0001 Spectrum Analyzer PC Card (SAgE) 1fd4 SUNIX Co., Ltd. 0001 Matrix multiport serial adapter 1999 Multiport serial controller 1fdd Wuqi Microelectronics Co., Ltd. 0001 WQ9201 802.11ax PCIe Wireless Network Adapter 1001 WQ9301 802.11ax PCIe Wireless Access Points 1fde Kratos Defense & Security Solutions, Inc. 1125 OpenEdge 1125P 2500 OpenEdge 2500P 1fe0 Allwinmeta Co., Ltd. 1010 AWM 1 2000 AWM 2 2010 AWM 2-M 1fe1 Beijing ESWIN Computing Technology Co., Ltd. 2030 EIC7700 Root Complex 1fe4 HippStor Technology 1600 HP600 Series NVMe SSD 1fe4 0001 Enterprise NVMe SSD U.2 15.36TB (HP600) 1fe4 0003 Enterprise NVMe SSD U.2 12.80TB (HP630) 1fe4 0011 Enterprise NVMe SSD U.2 30.72TB (HP620) 1fe4 0013 Enterprise NVMe SSD U.2 61.44TB (HP620) 1fe4 0075 Enterprise NVMe SSD U.2 3.84TB(HP610) 1fe4 0076 Enterprise NVMe SSD U.2 7.68TB(HP610) 1fe4 0078 Enterprise NVMe SSD U.2 3.20TB(HP630) 1fe4 0079 Enterprise NVMe SSD U.2 6.40TB (HP630) 1fe9 MemryX 0100 MX3 # Linkdata Technology (Tianjin) Co., LTD 1ff2 Linkdata 10a1 NIC1160 Ethernet Controller Family 1ff2 0c11 10GE Ethernet Adapter 1160-2X 10a2 NIC1160 Ethernet Controller Virtual Function Family 20a1 IOC2110 Storage Controller 1ff2 0a11 2120-16i SATA3/SAS3 HBA Adapter 1ff2 0a12 2120-8i SATA3/SAS3 HBA Adapter 20a2 IOC2250 Storage Controller 1ff2 0a21 2230-18i Tri-mode HBA Adapter 1ff2 0a22 2230-10i Tri-mode HBA Adapter 1ff2 0a23 2230-16i Tri-mode HBA Adapter 1ff2 0a24 2230-8i Tri-mode HBA Adapter 1ff2 0a28 2233-16i Tri-mode HBA Adapter 30a2 ROC3250 Storage Controller 1ff2 0b21 3260-18i Tri-mode RAID Adapter 1ff2 0b22 3260-10i Tri-mode RAID Adapter 1ff2 0b23 3260-16i Tri-mode RAID Adapter 1ff2 0b24 3260-8i Tri-mode RAID Adapter 1ff4 DEEPX Co., Ltd. 0000 DX_M1 0001 DX_M1A 1000 DX_H1 1ff8 Beijing Gengtu Technology Co.Ltd 2000 GT6910 2010 GT6908 1ff9 Inagile Electronic Technology Co., LTD 2000 Smart Link Ltd. 2800 SmartPCI2800 V.92 PCI Soft DFT 2001 Temporal Research Ltd 2003 Smart Link Ltd. 8800 LM-I56N 2004 Smart Link Ltd. 202c CAEN S.p.A. 5818 A5818 2036 Netforward Microelectronics Co., Ltd. 1618 NF1618 PCI Express Ethernet Controller 2036 0860 NF1618 Family NX860 (2*25GE) 2036 0861 NF1618 Family NX861 (4*25GE) 2036 0862 NF1618 Family NX862 (2*50GE) 2036 0863 NF1618 Family NX863 (2*100GE) 2036 0864 NF1618 Family NX864 (1*200GE) 1619 NF1618 Family Virtual Function 203b XTX Markets Technologies Ltd. 2046 GXMICRO Technology (Shanghai) Co., Ltd. 2048 Beijing SpaceControl Technology Co.Ltd 2058 Lime Microsystems Ltd. 205c Zhejiang VMing Semiconductor Co., Ltd. 1514 EP9410 U.2 1.92TB NVME SSD 1515 EP9410 U.2 3.84TB NVME SSD 1534 EP9430 U.2 1.6TB NVME SSD 1535 EP9430 U.2 3.2TB NVME SSD 1536 EP9430 U.2 6.4TB NVME SSD 2061 Unis Flash Memory 4000 E4000 controller 4100 E4100 controller 4200 E4200 NVMe Controller 2061 2021 E4200 NVMe SSD 1.6TB PCIe 4.0 U.2 2061 2022 E4200 NVMe SSD 1.92TB PCIe 4.0 U.2 2061 2023 E4200 NVMe SSD 3.2TB PCIe 4.0 U.2 2061 2024 E4200 NVMe SSD 3.84TB PCIe 4.0 U.2 2061 2025 E4200 NVMe SSD 6.4TB PCIe 4.0 U.2 2061 2026 E4200 NVMe SSD 7.68TB PCIe 4.0 U.2 5100 E5100 NVMe Controller 2061 2031 E5100 NVMe SSD 3.2TB PCIe 5.0 U.2 2061 2032 E5100 NVMe SSD 3.84TB PCIe 5.0 U.2 2061 2033 E5100 NVMe SSD 6.4TB PCIe 5.0 U.2 2061 2034 E5100 NVMe SSD 7.68TB PCIe 5.0 U.2 2061 2035 E5100 NVMe SSD 12.8TB PCIe 5.0 U.2 2061 2036 E5100 NVMe SSD 15.36TB PCIe 5.0 U.2 2061 2051 E510Q NVMe SSD 30.72TB PCIe 5.0 U.2 2061 2052 E510Q NVMe SSD 61.44TB PCIe 5.0 U.2 2061 2053 E510Q NVMe SSD 122.88TB PCIe 5.0 U.2 5200 E5200 NVMe Controller 2061 2041 E5200 NVMe SSD 3.2TB PCIe 5.0 U.2 2061 2042 E5200 NVMe SSD 3.84TB PCIe 5.0 U.2 2061 2043 E5200 NVMe SSD 6.4TB PCIe 5.0 U.2 2061 2044 E5200 NVMe SSD 7.68TB PCIe 5.0 U.2 2061 2045 E5200 NVMe SSD 12.8TB PCIe 5.0 U.2 2061 2046 E5200 NVMe SSD 15.36TB PCIe 5.0 U.2 2061 2061 E520Q NVMe SSD 30.72TB PCIe 5.0 U.2 2061 2062 E520Q NVMe SSD 61.44TB PCIe 5.0 U.2 2061 2063 E520Q NVMe SSD 122.88TB PCIe 5.0 U.2 2063 Hubei Yangtze Mason Semiconductor Technology Co., Ltd. 1406 ME7000 NVMe SSD 206d GigaIO Networks, Inc. 207d HRDT 0612 SATA BootRAID Controller 208a MICIUS Laboratory 2094 Shenzhen Wodposit Electronics Co., Ltd. 1281 WPBSNM8-256GTP 1282 WPSBNM8-512GTP 1283 WPBSNM8-1TTP 1284 WPBSNM8-256GMP 1285 WPBSNM8-512GMP 1286 WPBSNM8-2TMP 1287 WPBSNM8-1TMP 1661 WPBSN4M8-512GMP 1662 WPBSN4M8-1TMP 1663 WPBSN4M8-2TMP 2096 Kaitian Information Technology Co., Ltd. 5401 KCP54(01) 2280 PCIe G4 x4 TLCKCP54(01) 2280 PCIe G4 x4 TLC 5402 KCP54(02) 2280 PCIe G4 x4 TLC 5403 KCP54(03) 2280 PCIe G4 x4 TLC 5404 KCP54(04) 2280 PCIe G4 x4 TLC 2099 Rolling Wireless S.a.r.l. 209b BitIntelligence Technology 1000 TCU Family - TCU-1 1001 TCU Family - TCU-1 Virtual Function 209f Mobilint, Inc. 20a7 EEVengers Inc. 20a8 Rayson HI-TECH(SZ) Co., Ltd. 20a9 LDA Technologies Ltd. 1008 NEOTAPX FPGA Accelerator Card 1104 NEOTAPX FPGA Timing Synchronization Card 20ba Hangzhou Hikstorage Technology Co., Ltd. 1202 NAND memory controller 20ba 1202 NVMe SSD V2000 (DRAM-less) 20bb Quantum Machines 0111 OPNIC 20bc Xinsheng Technology Co., Ltd. 1001 Smart Network Adapter 20bc 1082 Ethernet Network Adapter XS-N1082-2X for 10GbE SFP+ Dual-port 20bc 2083 Ethernet Network Adapter XS-N2083-2X for 25GbE SFP28 SFP+ Dual-port ROCEv2 20bc 2084 Ethernet Network Adapter XS-N2084-2X for 25GbE SFP28 SFP+ Dual-port ROCEv2 20bc 4084 Ethernet Network Adapter XS-N4084-2X for 100GbE QSFP28/56 Dual-port 2001 Solid State Storage 20d0 Telin Semiconductor (Wuhan) Co., Ltd. 2001 PACIFIC-S1 NVMe SSD 20d2 Awide Labs LTD. 0200 XRaid [Extreme Performance Compression RAID Accelerator] 20f4 TRENDnet 2116 ZyDAS Technology Corp. 21b4 Hunan Goke Microelectronics Co., Ltd 21c3 21st Century Computer Corp. 22b8 Flex-Logix Technologies 22a0 Flex Logix InferX X1 Inference Accelerator 22db Missing Link Electronics, Inc. 1200 NVMe Streamer EP ERD 2304 Colorgraphic Communications Corp. 2321 Bruker AXS Inc. 0002 Hi-Star PCI Interface 2348 Racore 2010 8142 100VG/AnyLAN 256c Graphics Technology (HK) Co., Ltd. 006d HS610 2646 Kingston Technology Company, Inc. 0010 HyperX Predator PCIe AHCI SSD 2262 KC2000/KC2500 NVMe SSD [SM2262EN] 2263 A2000 NVMe SSD [SM2263EN] 5008 A1000/U-SNS8154P3 x2 NVMe SSD [E8] 500a DC1000B NVMe SSD [E12DC] 500b DC1000M NVMe SSD [SM2270] 500c OM8PCP Design-In PCIe 3 NVMe SSD (DRAM-less) 500d OM3PDP3 NVMe SSD 500e NV1 NVMe SSD [E13T] (DRAM-less) 500f NV1 NVMe SSD [SM2263XT] (DRAM-less) 5010 OM8SBP NVMe PCIe SSD (DRAM-less) 5012 DC1500M NVMe SSD [SM2270] 5013 KC3000/FURY Renegade NVMe SSD [E18] 5014 OM8SEP4 Design-In PCIe 4 NVMe SSD (TLC) (DRAM-less) 5016 OM3PGP4 NVMe SSD (DRAM-less) 5017 NV2 NVMe SSD [SM2267XT] (DRAM-less) 5018 OM8SFP4 PCIe 4 NVMe SSD (DRAM-less) 5019 NV2 NVMe SSD [E21T] (DRAM-less) # 128GB 501a OM8PGP4 Design-In PCIe 4 NVMe SSD (TLC) (DRAM-less) 501b OM8PGP4 NVMe PCIe SSD (DRAM-less) 501c NV2 NVMe SSD [E19T] (DRAM-less) 501d NV2 NVMe SSD [TC2200] (DRAM-less) 501e OM3PGP4 NVMe SSD (DRAM-less) 501f FURY Renegade NVMe SSD [E18] (Heatsink) 5021 OM8SEP4 Design-In PCIe 4 NVMe SSD (QLC) (DRAM-less) 5022 OM8PGP4 Design-In PCIe 4 NVMe SSD (QLC) (DRAM-less) 5023 NV2 NVMe SSD [SM2269XT] (DRAM-less) 5024 DC2000B NVMe SSD [E18DC] 5025 NV3 NVMe SSD [TC2201] (DRAM-less) 5026 NV3 NVMe SSD [E21T] (DRAM-less) 5027 NV3 NVMe SSD [E27T] (DRAM-less) 5028 NV3 NVMe SSD [SM2268XT2] (DRAM-less) 502a FURY Renegade G5 NVMe SSD [SM2508] 502b NV3 NVMe SSD [E29T] (DRAM-less) 502c DC3000ME NVMe SSD [SC5] 502d OM8TAP4 PCIe 4 NVMe SSD (QLC) (DRAM-less) 5030 NV3 2230 NVMe SSD [SM2268XT2] (DRAM-less) 270b Xantel Corporation 270f Chaintech Computer Co. Ltd 2711 AVID Technology Inc. 2782 Emdoor Digital Technology Co., Ltd 2955 Connectix Virtual PC 6e61 OHCI USB 1.1 controller 2a15 3D Vision(???) 2a18 Video Transcode Controller 2a22 Video Transcode Controller 2bd8 ROPEX Industrie-Elektronik GmbH 3000 Hansol Electronics Inc. 30c9 Luxvisions Innovation Technology Ltd. 3100 Dynabook Inc. 3112 Satelco Ingenieria S.A. 3130 AUDIOTRAK 3142 Post Impression Systems. 31ab Zonet 1faa ZEW1602 802.11b/g Wireless Adapter 328f Shenzhen EMEET Technology Co., Ltd. 004c OfficeCore M1A 2019 REC 600 HD Webcam 3388 Hint Corp 0013 HiNT HC4 PCI to ISDN bridge, Multimedia audio controller 0014 HiNT HC4 PCI to ISDN bridge, Network controller 0020 HB6 Universal PCI-PCI bridge (transparent mode) 0021 HB6 Universal PCI-PCI bridge (non-transparent mode) 1775 c200 C2K CompactPCI interface bridge 1775 ce90 CE9 4c53 1050 CT7 mainboard 4c53 1080 CT8 mainboard 4c53 1090 Cx9 mainboard 4c53 10a0 CA3/CR3 mainboard 4c53 3010 PPCI mezzanine (32-bit PMC) 4c53 3011 PPCI mezzanine (64-bit PMC) 4c53 4000 PMCCARR1 carrier board 0022 HiNT HB4 PCI-PCI Bridge (PCI6150) 0026 HB2 PCI-PCI Bridge 1014 AudioTrak Maya 1018 Audiotrak INCA88 1019 Miditrak 2120 101a E.Band [AudioTrak Inca88] 101b E.Band [AudioTrak Inca88] 8011 VXPro II Chipset 3388 8011 VXPro II Chipset CPU to PCI Bridge 8012 VXPro II Chipset 3388 8012 VXPro II Chipset PCI to ISA Bridge 8013 VXPro II IDE 3388 8013 VXPro II Chipset EIDE Controller a103 Blackmagic Design DeckLink HD Pro 3411 Quantum Designs (H.K.) Inc 3442 Bihl+Wiedemann GmbH 1783 AS-i 3.0 cPCI Master 1922 AS-i 3.0 PCI Master 3475 Arista Networks, Inc. 34ba Ice Lake-LP PCI Express Root Port #3 3513 ARCOM Control Systems Ltd 3633 DeepCool 0001 AK400 DIGITAL CPU Air Cooler 0002 AK620 DIGITAL CPU Air Cooler 0003 AK500 DIGITAL CPU Air Cooler 0004 AK500S DIGITAL CPU Air Cooler 0005 CH560 DIGITAL PC Case 0006 LS Series (LS520 / LS720 SE DIGITAL) CPU Liquid Cooler 0007 MORPHEUS PC Case 369a HighSecLabs, Ltd. 37d9 ITD Firm ltd. 1138 SCHD-PH-8 Phase detector 1140 VR-12-PCI 12-ch Relay Actuator Card 1141 PCI-485(422) Multi-port Serial Board 1142 PCI-CAN2 3842 eVga.com. Corp. 38ef 4Links # Wrong ID in board programmed sub-did in place of sub-vid 393e Lenovo (wrong ID) 3d3d 3DLabs 0001 GLINT 300SX 0002 GLINT 500TX 0000 0000 GLoria L 0003 GLINT Delta 0000 0000 GLoria XL 0004 Permedia 0005 Permedia 0006 GLINT MX 0000 0000 GLoria XL 1048 0a42 GLoria XXL 0007 3D Extreme 0008 GLINT Gamma G1 1048 0a42 GLoria XXL 0009 Permedia II 2D+3D 1040 0011 AccelStar II 1048 0a42 GLoria XXL 13e9 1000 6221L-4U 3d3d 0100 AccelStar II 3D Accelerator 3d3d 0111 Permedia 3:16 3d3d 0114 Santa Ana 3d3d 0116 Oxygen GVX1 3d3d 0119 Scirocco 3d3d 0120 Santa Ana PCL 3d3d 0125 Oxygen VX1 3d3d 0127 Permedia3 Create! 000a GLINT R3 3d3d 0121 Oxygen VX1 000c GLINT R3 [Oxygen VX1] 3d3d 0144 Oxygen VX1-4X AGP [Permedia 4] 000d GLint R4 rev A 000e GLINT Gamma G2 0011 GLint R4 rev B 0012 GLint R5 rev A 0013 GLint R5 rev B 0020 VP10 visual processor 0022 VP10 visual processor 0024 VP9 visual processor 002c Wildcat Realizm 100/200 0030 Wildcat Realizm 800 0032 Wildcat Realizm 500 0100 Permedia II 2D+3D 07a1 Wildcat III 6210 07a2 Sun XVR-500 Graphics Accelerator 3d3d 1047 Sun XVR-600 Graphics Accelerator 07a3 Wildcat IV 7210 1004 Permedia 3d04 Permedia ffff Glint VGA 3e08 Sinead Tech Co., Ltd 4005 Avance Logic Inc. 0300 ALS300 PCI Audio Device 0308 ALS300+ PCI Audio Device 0309 PCI Input Controller 1064 ALG-2064 2064 ALG-2064i 2128 ALG-2364A GUI Accelerator 2301 ALG-2301 2302 ALG-2302 2303 AVG-2302 GUI Accelerator 2364 ALG-2364A 2464 ALG-2464 2501 ALG-2564A/25128A 4000 ALS4000 Audio Chipset 4005 4000 ALS4000 Audio Chipset 4710 ALC200/200P 4033 Addtron Technology Co, Inc. 1360 RTL8139 Ethernet 4040 NetXen Incorporated 0001 NXB-10GXSR 10-Gigabit Ethernet PCIe Adapter with SR-XFP optical interface 103c 7047 NC510F PCIe 10-Gigabit Server Adapter 0002 NXB-10GCX4 10-Gigabit Ethernet PCIe Adapter with CX4 copper interface 103c 7048 NC510c PCIe 10-Gigabit Server Adapter 0003 NXB-4GCU Quad Gigabit Ethernet PCIe Adapter with 1000-BASE-T interface 0004 BladeCenter-H 10-Gigabit Ethernet High Speed Daughter Card 0005 NetXen Dual Port 10GbE Multifunction Adapter for c-Class 103c 170e NC512m Dual Port 10GbE Multifunction BL-C Adapter 0024 XG Mgmt 0025 XG Mgmt 0100 NX3031 Multifunction 1/10-Gigabit Server Adapter 103c 171b NC522m Dual Port 10GbE Multifunction BL-c Adapter 103c 1740 NC375T PCI Express Quad Port Gigabit Server Adapter 103c 3251 NC375i 1G w/NC524SFP 10G Module 103c 705a NC375i Integrated Quad Port Multifunction Gigabit Server Adapter 103c 705b NC522SFP Dual Port 10GbE Server Adapter 152d 896b TG20 Dual Port 10GbE Server/Storage Adapter 4040 0124 NX3031 Quad Port Gigabit Server Adapter 4040 0126 Dual Port SFP+ 10GbE Server Adapter 4143 Digital Equipment Corp 4144 Alpha Data 0044 ADM-XRCIIPro 4149 AIMOTIVE Kft. d011 HIL camera injector board 4150 ONA Electroerosion 0001 PCI32TLITE FILSTRUP1 PCI to VME Bridge Controller 0006 PCI32TLITE UART 16550 Opencores 0007 PCI32TLITE CAN Controller Opencores 415a Auzentech, Inc. 416c Aladdin Knowledge Systems 0100 AladdinCARD 0200 CPC 4242 Universall Answer Generators 4254 DVBSky 4321 Tata Power Strategic Electronics Division 4348 WCH.CN 2273 CH351 PCI Dual Serial Port Controller 3253 CH352 PCI Dual Serial Port Controller 3453 CH353 PCI Quad Serial Port Controller 5053 CH352 PCI Serial and Parallel Port Controller 7053 CH353 PCI Dual Serial and Parallel Ports Controller 7073 CH356 PCI Quad Serial and Parallel Ports Controller 7173 CH355 PCI Quad Serial Port Controller 434e Cornelis Networks 0001 CN5000 HFI Silicon, Dual Port, BGA [discrete] 434e 0001 CN5000 HFI Adapter, Single Port, QSFP, x16 PCIe Gen 5, Air-Cooled 434e 0002 CN5000 HFI Adapter, Dual Port, QSFP-DD, x16 PCIe Gen 5, Air-Cooled 434e 0003 CN5000 HFI Adapter, Single Port, QSFP, x16 PCIe Gen 5, Air-Cooled, Thermally Enhanced 434e 0004 CN5000 HFI Adapter, Single Port, QSFP, x16 PCIe Gen 5, Conduction-Cooled 0002 CN6000 HFI Silicon, Dual Port, BGA [discrete] 8001 CN5000 Switch Silicon, 48 Port, BGA 4444 Internext Compression Inc 0016 iTVC16 (CX23416) Video Decoder 0070 0003 WinTV PVR 250 0070 0009 WinTV PVR 150 0070 0801 WinTV PVR 150 0070 0807 WinTV PVR 150 0070 4001 WinTV PVR 250 0070 4009 WinTV PVR 250 0070 4801 WinTV PVR 250 0070 4803 WinTV PVR 250 0070 8003 WinTV PVR 150 0070 8801 WinTV PVR 150 0070 c801 WinTV PVR 150 0070 e807 WinTV PVR 500 (1st unit) 0070 e817 WinTV PVR 500 (2nd unit) 0070 ff92 WiNTV PVR-550 0270 0801 WinTV PVR 150 104d 013d ENX-26 TV Encoder 10fc d038 GV-MVP/RX2W (1st unit) 10fc d039 GV-MVP/RX2W (2nd unit) 12ab fff3 MPG600 12ab ffff MPG600 1461 c00a M113 PCI Analog TV (PAL/SECAM, Philips FQ1216MK3 tuner) 1461 c00b M113 PCI Analog TV (PAL/SECAM+FM, Philips FM1216MK3 tuner) 1461 c00c M113 PCI Analog TV (NTSC, JAPAN version, Philips FI1286MK2 tuner) 1461 c010 M113 PCI Analog TV (NTSC, Philips FI1236MK3 tuner) 1461 c011 M113 PCI Analog TV (NTSC+FM, Philips FM1236MK3 tuner) 1461 c018 M113 PCI Analog TV (NTSC, Philips FQ1236MK5 tuner) 1461 c019 UltraTV 1500 MCE, a.k.a. M113 PCI Analog TV (NTSC+FM, Philips FQ1236MK5 tuner) 1461 c01a M113 PCI Analog TV (PAL/SECAM, Philips FQ1216MK5 tuner) 1461 c01b M113 PCI Analog TV (PAL/SECAM+FM, Philips FM1216MK5 tuner) 1461 c030 M113 PCI Analog TV (NTSC-J, Partsnic tuner) 1461 c031 M113 PCI Analog TV (NTSC-J+FM, Partsnic tuner) 1461 c032 M113 PCI Analog TV (PAL/SECAM, Partsnic tuner) 1461 c033 M113 PCI Analog TV (PAL/SECAM+FM, Partsnic tuner) 1461 c034 M113 PCI Analog TV (NTSC, Partsnic tuner) 1461 c035 M113 PCI Analog TV (NTSC+FM, Partsnic tuner) 1461 c03f C115 PCI video capture card (no tuner) 1461 c136 M104 mini-PCI Analog TV 1461 c20a M755 AVerTV Video Capture (PAL/SECAM, Philips FQ1216MK3 tuner) 1461 c218 M755 AVerTV Video Capture (NTSC, Philips FQ1236MK5 tuner) 1461 c219 M755 AVerTV Video Capture (NTSC+FM, Philips FQ1236MK5 tuner) 1461 c21a M755 AVerTV Video Capture (PAL/SECAM, Philips FQ1216MK5 tuner) 1461 c21b M755 AVerTV Video Capture (PAL/SECAM+FM, Philips FM1216MK5 tuner) 1461 c230 M755 AVerTV Video Capture (NTSC-J, Partsnic tuner) 1461 c231 M755 AVerTV Video Capture (NTSC-J+FM, Partsnic tuner) 1461 c232 M755 AVerTV Video Capture (PAL/SECAM, Partsnic tuner) 1461 c233 M755 AVerTV Video Capture (PAL/SECAM+FM, Partsnic tuner) 1461 c234 M755 AVerTV Video Capture (NTSC, Partsnic tuner) 1461 c235 M755 AVerTV Video Capture (NTSC+FM, Partsnic tuner) 1461 c337 E106 AVerMedia AVerTV Video Capture 1461 c439 M116 AVerMedia AVerTV MCE 116 Plus (NTSC/PAL/SECAM+FM+REMOTE, Xceive 2028 tuner) 1461 c5ff C755 AVerTV Video Capture card (no tuner) 1461 c6ff C115 PCI video capture card (no tuner) 1461 c739 M785 AVerMedia PCI Analog TV (NTSC/PAL/SECAM+FM, Xceive 2028 tuner) 9005 0092 VideOh! AVC-2010 9005 0093 VideOh! AVC-2410 0803 iTVC15 (CX23415) Video Decoder 0070 4000 WinTV PVR-350 0070 4001 WinTV PVR-250 0070 4800 WinTV PVR-350 (V1) 12ab 0000 MPG160 1461 a3ce M179 1461 a3cf M179 4468 Bridgeport machines 4594 Cogetec Informatique Inc 45fb Baldor Electric Company 4624 Budker Institute of Nuclear Physics adc1 ADC200ME High speed ADC de01 DL200ME High resolution delay line PCI based card de02 DL200ME Middle resolution delay line PCI based card 4651 TXIC 4680 Umax Computer Corp 4843 Hercules Computer Technology Inc 4916 RedCreek Communications Inc 1960 RedCreek PCI adapter 4943 Growth Networks 494f ACCES I/O Products, Inc. 0508 PCI-IDO-16A FET Output Card 0518 PCI-IDO-32A FET Output Card 0520 PCI-IDO-48 FET Output Card 0521 PCI-IDO-48A FET Output Card 0703 PCIe-RO-4 Electromechanical Relay Output Card 07d0 PCIe-IDO-24 FET Output Card 0920 PCI-IDI-48 Isolated Digital Input Card 0bd0 PCIe-IDI-24 Isolated Digital Input Card 0c50 PCI-DIO-24H 1x 8255 Digital Input / Output Card 0c51 PCI-DIO-24D 1x 8255 Digital Input / Output Card 0c52 PCIe-DIO-24 1x 8255 Digital Input / Output Card 0c53 PCIe-DIO-24H 8255 Digital Input / Output Card 0c57 mPCIe-DIO-24 8255 Digital Input / Output Card 0c60 PCI-DIO-48H 8255 Digital Input / Output Card 0c61 PCIe-DIO-48 8255 Digital Input / Output Card 0c62 P104-DIO-48 8255 Digital Input / Output Card 0c68 PCI-DIO-72 8255 Digital Input / Output Card 0c69 P104-DIO-96 8255 Digital Input / Output Card 0c70 PCI-DIO-96 8255 Digital Input / Output Card 0c78 PCI-DIO-120 8255 Digital Input / Output Card 0dc8 PCI-IDIO-16 Isolated Digital Input / FET Output Card 0e50 PCI-DIO-24S 8255 Digital Input / Output Card 0e51 PCI-DIO-24H(C) 8255 Digital Input / Output Card 0e52 PCI-DIO-24D(C) 8255 Digital Input / Output Card 0e53 PCIe-DIO-24S 8255 Digital Input / Output Card 0e54 PCIe-DIO-24HS 8255 Digital Input / Output Card 0e55 PCIe-DIO-24DC 8255 Digital Input / Output Card 0e56 PCIe-DIO-24DCS 8255 Digital Input / Output Card 0e57 mPCIe-DIO-24S 8255 Digital Input / Output Card 0e60 PCI-DIO-48S 2x 8255 Digital Input / Output Card 0e61 PCIe-DIO-48S 2x 8255 Digital Input / Output Card 0e62 P104-DIO-48S 2x 8255 Digital Input / Output Card 0f00 PCI-IIRO-8 Isolated Digital / Relay Output Card 0f01 LPCI-IIRO-8 Isolated Digital / Relay Output Card 0f02 PCIe-IIRO-8 Isolated Digital / Relay Output Card 0f08 PCI-IIRO-16 Isolated Digital / Relay Output Card 0f09 PCIe-IIRO-16 Isolated Digital / Relay Output Card 0fc0 PCIe-IDIO-12 Isolated Digital Input / FET Output Card 0fc1 PCIe-IDI-12 Isolated Digital Input Card 0fc2 PCIe-IDO-12 FET Output Card 0fd0 PCIe-IDIO-24 Isolated Digital Input / FET Output Card 1050 PCI-422/485-2 2x RS422/RS484 Card 1051 PCIe-COM-2SRJ 2x RS422/RS484 Card w/RJ45 Connectors 1052 104I-COM-2S 2x RS422/RS484 PCI/104 Board 1053 mPCIe-COM-2S 2x RS422/RS484 PCI Express Mini Card 1058 PCI-COM422/4 4x RS422 Card 1059 PCI-COM485/4 4x RS485 Card 105a PCIe-COM422-4 4x RS422 Card 105b PCIe-COM485-4 4x RS485 Card 105c PCIe-COM-4SRJ 4x RS422/RS485 Card w/RJ45 Connectors 105d 104I-COM-4S 4x RS422/RS484 PCI/104 Board 105e mPCIe-COM-4S 4x RS422/RS484 PCI Express Mini Card 1068 PCI-COM422/8 8x RS422 Card 1069 PCI-COM485/8 8x RS485 Card 106a PCIe-COM422-8 8x RS422 Card 106b PCIe-COM485-8 8x RS485 Card 106c 104I-COM-8S 8x RS422/RS485 PCI/104 Board 1088 PCI-COM232/1 1x RS232 Card 1090 PCI-COM232/2 2x RS232 Card 1091 PCIe-COM232-2RJ 2x RS232 Card w/RJ45 Connectors 1093 mPCIe-COM232-2 2x RS232 PCI Express Mini Card 1098 PCIe-COM232-4 4x RS232 Card 1099 PCIe-COM232-4RJ 4x RS232 Card w/RJ45 Connectors 109b mPCIe-COM232-4 4x RS232 PCI Express Mini Card 10a8 P104-COM232-8 8x RS232 PC-104+ Board 10a9 PCIe-COM232-8 8x RS232 Card 10c9 PCI-COM-1S 1x RS422/RS485 Card 10d0 PCI-COM2S 2x RS422/RS485 Card 10d1 PCIe-COM-2SMRJ 2x RS232/RS422/RS485 Card w/RJ45 Connectors 10d2 104I-COM-2SM 2x RS232/RS422/RS485 PCI/104 Board 10d3 mPCIe-COM-2SM 2x RS232/RS422/RS485 PCI Express Mini Card 10d8 PCI-COM-4SM 4x RS232/RS422/RS485 Card 10d9 PCIe-COM-4SM 4x RS232/RS422/RS485 Card 10da PCIe-COM-4SMRJ 4x RS232/RS422/RS485 Card w/RJ45 Connectors 10db 104I-COM-4SM 4x RS232/RS422/RS485 PCI/104 Board 10dc mPCIe-COM-4SM 4x RS232/RS422/RS485 PCI Express Mini Card 10e8 PCI-COM-8SM 8x RS232/RS422/RS485 Card 10e9 PCIe-COM-8SM 8x RS232/RS422/RS485 Card 10ea 104I-COM-8SM 8x RS232/RS422/RS485 PCI-104 Board 1108 mPCIe-ICM485-1 1x Isolated RS485 PCI Express Mini Card 1110 mPCIe-ICM422-2 2x Isolated RS422 PCI Express Mini Card 1111 mPCIe-ICM485-2 2x Isolated RS485 PCI Express Mini Card 1118 mPCIe-ICM422-4 4x Isolated RS422 PCI Express Mini Card 1119 mPCIe-ICM485-4 4x Isolated RS485 PCI Express Mini Card 1148 PCI-ICM-1S 1x Isolated RS422/RS485 Card 1150 PCI-ICM-2S 2x Isolated RS422/RS485 Card 1152 PCIe-ICM-2S 2x Isolated RS422/RS485 Card 1158 PCI-ICM422/4 4x Isolated RS422 Card 1159 PCI-ICM485/4 4x Isolated RS485 Card 115a PCIe-ICM-4S 4x Isolated RS422/RS485 Card 1190 PCIe-ICM232-2 2x Isolated RS232 Card 1191 mPCIe-ICM232-2 2x Isolated RS232 PCI Express Mini Card 1198 PCIe-ICM232-4 4x Isolated RS232 Card 1199 mPCIe-ICM232-4 4x Isolated RS422 PCI Express Mini Card 11d0 PCIe-ICM-2SM 2x Isolated RS232/RS422/RS485 Card 11d8 PCIe-ICM-4SM 4x Isolated RS232/RS422/RS485 Card 1250 PCI-WDG-2S Watchdog and 2x Serial Card 12d0 PCI-WDG-IMPAC 2230 PCI-QUAD-8 8x Quadrature Input Card 2231 PCI-QUAD-4 4x Quadrature Input Card 22c0 PCI-WDG-CSM Watchdog Card 25c0 P104-WDG-E Watchdog PC/104+ Board 2c50 PCI-DIO-96CT 96x Digital Input / Output Card 2c58 PCI-DIO-96C3 96x Digital Input / Output Card w/3x 8254 Counter Card 2ee0 PCIe-DIO24S-CTR12 24x Digital Input / Output Card w/4x 8254 Counter Card 2fc0 P104-WDG-CSM Watchdog PC/104+ Board 2fc1 P104-WDG-CSMA Advanced Watchdog PC/104+ Board 5ed0 PCI-DAC 6c90 PCI-DA12-2 2x 12-bit Analog Output Card 6c98 PCI-DA12-4 4x 12-bit Analog Output Card 6ca0 PCI-DA12-6 6x 12-bit Analog Output Card 6ca8 PCI-DA12-8 8x 12-bit Analog Output Card 6ca9 PCI-DA12-8V 6cb0 PCI-DA12-16 16x 12-bit Analog Output Card 6cb1 PCI-DA12-16V 8ef0 P104-FAS16-16 aca8 PCI-AI12-16 12-bit 100kHz Analog Input Card aca9 PCI-AI12-16A 12-bit 100kHz Analog Input w/FIFO Card eca8 PCI-AIO12-16 12-bit 100kHz Analog Input w/2x Analog Output and FIFO Card ecaa PCI-A12-16A 12-bit 100kHz Analog Input w/2x Analog Output and FIFO Card ece8 LPCI-A16-16A 16-bit 500kHz Analog Input low-profile Card ece9 LPCI-AIO16A 16-bit 500kHz Analog Input low-profile Card 4978 Axil Computer Inc 4a14 NetVin 5000 NV5000SC 4a14 5000 RT8029-Based Ethernet Adapter 4b10 Buslogic Inc. 4b43 KonteX Inc. 4c48 LUNG HWA Electronics 4c4d Liquid-Markets GmbH # Dev versions of TaSR, not for production. 9998 TaSR # First versions of UberNIC, not for production. 9999 UberNIC PoC/testing/dev 4c52 LR-LINK 1001 Smart Network Adapter 4c52 a008 LREG1008PT Single-port 1Gb Smart Ethernet Network Adapter 1002 Smart Network Adapter 4c52 a006 LREG1006PT Single-port 1.2Gb Network Security Isolation Adapter 1003 Smart Network Adapter 1004 Smart Network Adapter 4c52 b010 LREG1010PF Single-port 10Gb FPGA Network Security Isolation Adapter 4c52 b011 LREG1011PF Dual-port 10Gb FPGA Network Security Isolation Adapter 4c53 SBS Technologies 0000 PLUSTEST device 4c53 3000 PLUSTEST card (PC104+) 4c53 3001 PLUSTEST card (PMC) 0001 PLUSTEST-MM device 4c53 3002 PLUSTEST-MM card (PMC) 4ca1 Seanix Technology Inc 4d51 MediaQ Inc. 0200 MQ-200 4d54 Microtechnica Co Ltd 4d56 Balluff MV GmbH 0000 [mvHYPERION-CLe/CLb] CameraLink PCI Express x1 Frame Grabber 0001 [mvHYPERION-CLf/CLm] CameraLink PCI Express x4 Frame Grabber 0010 [mvHYPERION-16R16/-32R16] 16 Video Channel PCI Express x4 Frame Grabber 0020 [mvHYPERION-HD-SDI] HD-SDI PCI Express x4 Frame Grabber 0030 [mvHYPERION-HD-SDI-Merger] HD-SDI PCI Express x4 Frame Grabber 7012 [mvBlueNAOS BVS CA-BN] PCIe Gen1 x2 Camera 7014 [mvBlueNAOS BVS CA-BN] PCIe Gen1 x4 Camera 7022 [mvBlueNAOS BVS CA-BN] PCIe Gen2 x2 Camera 7024 [mvBlueNAOS BVS CA-BN] PCIe Gen2 x4 Camera 4ddc ILC Data Device Corp 0100 DD-42924I5-300 (ARINC 429 Data Bus) 0300 SB-3620 Motion Feedback Device 0340 SB-3623 Motion Feedback Device 0400 SB-3622 Motion Feedback Device 0500 SB-3621 Motion Feedback Device 0510 SB-3624 Motion Feedback Device 0801 BU-65570I1 MIL-STD-1553 Test and Simulation 0802 BU-65570I2 MIL-STD-1553 Test and Simulation 0811 BU-65572I1 MIL-STD-1553 Test and Simulation 0812 BU-65572I2 MIL-STD-1553 Test and Simulation 0881 BU-65570T1 MIL-STD-1553 Test and Simulation 0882 BU-65570T2 MIL-STD-1553 Test and Simulation 0891 BU-65572T1 MIL-STD-1553 Test and Simulation 0892 BU-65572T2 MIL-STD-1553 Test and Simulation 0901 BU-65565C1 MIL-STD-1553 Data Bus 0902 BU-65565C2 MIL-STD-1553 Data Bus 0903 BU-65565C3 MIL-STD-1553 Data Bus 0904 BU-65565C4 MIL-STD-1553 Data Bus 0b01 BU-65569I1 MIL-STD-1553 Data Bus 0b02 BU-65569I2 MIL-STD-1553 Data Bus 0b03 BU-65569I3 MIL-STD-1553 Data Bus 0b04 BU-65569I4 MIL-STD-1553 Data Bus 0d01 SB-3641 Motion Feedback Device 0d10 SB-365x Motion Feedback Device 2f00 SB-3642 Motion Feedback Device 3000 SB-3644 Motion Feedback Device 4e4c NieL TechSolution 4e58 Nutanix, Inc. 0001 Virtual NVMe Controller 5045 University of Toronto 4243 BLASTbus PCI Interface Card v1 5046 GemTek Technology Corporation 1001 PCI Radio 5053 Voyetra Technologies 2010 Daytona Audio Adapter 50b2 TerraTec Electronic GmbH 50ce System-on-Chip Engineering S.L. 0001 RELY-MIL-XMC-TSN-SWITCH 0100 XMC_AV-Dual-ETH 0101 XMC_AV-ETSN 0102 XMC_AV-AFDX 5136 S S Technologies 5143 Qualcomm Inc 5145 Ensoniq (Old) 3031 Concert AudioPCI 5168 Animation Technologies Inc. 0300 FlyDVB-S 0301 FlyDVB-T 5301 Alliance Semiconductor Corp. 0001 ProMotion aT3D 5333 S3 Graphics Ltd. 0551 Plato/PX (system) 5631 86c325 [ViRGE] 8800 86c866 [Vision 866] 8801 86c964 [Vision 964] 8810 86c764_0 [Trio 32 vers 0] 8811 86c764/765 [Trio32/64/64V+] 8812 86cM65 [Aurora64V+] 8813 86c764_3 [Trio 32/64 vers 3] 8814 86c767 [Trio 64UV+] 8815 86cM65 [Aurora 128] 883d 86c988 [ViRGE/VX] 8870 FireGL 8880 86c868 [Vision 868 VRAM] vers 0 8881 86c868 [Vision 868 VRAM] vers 1 8882 86c868 [Vision 868 VRAM] vers 2 8883 86c868 [Vision 868 VRAM] vers 3 88b0 86c928 [Vision 928 VRAM] vers 0 88b1 86c928 [Vision 928 VRAM] vers 1 88b2 86c928 [Vision 928 VRAM] vers 2 88b3 86c928 [Vision 928 VRAM] vers 3 88c0 86c864 [Vision 864 DRAM] vers 0 88c1 86c864 [Vision 864 DRAM] vers 1 88c2 86c864 [Vision 864-P DRAM] vers 2 88c3 86c864 [Vision 864-P DRAM] vers 3 88d0 86c964 [Vision 964 VRAM] vers 0 88d1 86c964 [Vision 964 VRAM] vers 1 88d2 86c964 [Vision 964-P VRAM] vers 2 88d3 86c964 [Vision 964-P VRAM] vers 3 88f0 86c968 [Vision 968 VRAM] rev 0 88f1 86c968 [Vision 968 VRAM] rev 1 88f2 86c968 [Vision 968 VRAM] rev 2 88f3 86c968 [Vision 968 VRAM] rev 3 8900 86c755 [Trio 64V2/DX] 5333 8900 86C775 Trio64V2/DX 8901 86c775/86c785 [Trio 64V2/DX or /GX] 5333 8901 86C775 Trio64V2/DX, 86C785 Trio64V2/GX 8902 Plato/PX 8903 Trio 3D business multimedia 8904 86c365, 86c366 [Trio 3D] 1014 00db Integrated Trio3D 4843 314a Terminator 128/3D GLH 5333 8904 86C365 Trio3D AGP 8905 Trio 64V+ family 8906 Trio 64V+ family 8907 Trio 64V+ family 8908 Trio 64V+ family 8909 Trio 64V+ family 890a Trio 64V+ family 890b Trio 64V+ family 890c Trio 64V+ family 890d Trio 64V+ family 890e Trio 64V+ family 890f Trio 64V+ family 8a01 86c375 [ViRGE/DX] or 86c385 [ViRGE/GX] 0e11 b032 ViRGE/GX 10b4 1617 Nitro 3D 10b4 1717 Nitro 3D 5333 8a01 ViRGE/DX 8a10 ViRGE/GX2 1092 8a10 Stealth 3D 4000 8a13 86c360 [Trio 3D/1X], 86c362, 86c368 [Trio 3D/2X] 5333 8a13 Trio3D/2X 8a20 86c794 [Savage 3D] 5333 8a20 86C391 Savage3D 8a21 86c390 [Savage 3D/MV] 5333 8a21 86C390 Savage3D/MV 8a22 Savage 4 1033 8068 Savage 4 1033 8069 Savage 4 1033 8110 Savage 4 LT 105d 0018 SR9 8Mb SDRAM 105d 002a SR9 Pro 16Mb SDRAM 105d 003a SR9 Pro 32Mb SDRAM 105d 092f SR9 Pro+ 16Mb SGRAM 1092 4207 Stealth III S540 1092 4800 Stealth III S540 1092 4807 SpeedStar A90 1092 4808 Stealth III S540 1092 4809 Stealth III S540 1092 480e Stealth III S540 1092 4904 Stealth III S520 1092 4905 SpeedStar A200 1092 4a09 Stealth III S540 1092 4a0b Stealth III S540 Xtreme 1092 4a0f Stealth III S540 1092 4e01 Stealth III S540 1102 101d 3d Blaster Savage 4 1102 101e 3d Blaster Savage 4 5333 8100 86C394-397 Savage4 SDRAM 100 5333 8110 86C394-397 Savage4 SDRAM 110 5333 8125 86C394-397 Savage4 SDRAM 125 5333 8143 86C394-397 Savage4 SDRAM 143 5333 8a22 86C394-397 Savage4 5333 8a2e 86C394-397 Savage4 32bit 5333 9125 86C394-397 Savage4 SGRAM 125 5333 9143 86C394-397 Savage4 SGRAM 143 8a23 Savage 4 8a25 ProSavage PM133 0303 0303 D9840-60001 [Brio BA410 Motherboard] 8a26 ProSavage KM133 8c00 ViRGE/M3 8c01 ViRGE/MX 1179 0001 ViRGE/MX 8c02 ViRGE/MX+ 8c03 ViRGE/MX+MV 8c10 86C270-294 [SavageMX-MV] 8c11 82C270-294 [SavageMX] 8c12 86C270-294 [SavageIX-MV] 1014 017f ThinkPad T20/T22 1179 0001 86C584 SuperSavage/IXC Toshiba 8c13 86C270-294 [SavageIX] 1179 0001 Magnia Z310 8c22 SuperSavage MX/128 8c24 SuperSavage MX/64 8c26 SuperSavage MX/64C 8c2a SuperSavage IX/128 SDR 8c2b SuperSavage IX/128 DDR 8c2c SuperSavage IX/64 SDR 8c2d SuperSavage IX/64 DDR 8c2e SuperSavage IX/C SDR 1014 01fc ThinkPad T23 8c2f SuperSavage IX/C DDR 8d01 86C380 [ProSavageDDR K4M266] 8d02 VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK) 8d03 VT8751 [ProSavageDDR P4M266] 8d04 VT8375 [ProSavage8 KM266/KL266] 8e00 DeltaChrome 8e26 ProSavage 8e40 2300E Graphics Processor 8e48 Matrix [Chrome S25 / S27] 5333 0130 Chrome S27 256M DDR2 9020 86C920 [Chrome 460 ESV] 9043 Chrome 430 GT 9045 Chrome 430 ULP / 435 ULP / 440 GTX 9060 Chrome 530 GT / 5400E # Found in VIA Embedded uH4 graphics card 9070 Chrome 5400EW 9102 86C410 [Savage 2000] 1092 5932 Viper II Z200 1092 5934 Viper II Z200 1092 5952 Viper II Z200 1092 5954 Viper II Z200 1092 5a35 Viper II Z200 1092 5a37 Viper II Z200 1092 5a55 Viper II Z200 1092 5a57 Viper II Z200 ca00 SonicVibes 5431 AuzenTech, Inc. 544c Teralogic Inc 0350 TL880-based HDTV/ATSC tuner 544d TBS Technologies 6178 DVB Tuner PCIe Card 544d 6904 TBS6904 DVB-S2 Quad Tuner PCIe Card 544d 6905 TBS6905 DVB-S2 Quad Tuner PCIe Card 6205 0001 TBS6205 DVB-T2/T/C Quad TV Tuner PCIe Card 6209 0001 TBS6209 DVB-T2/C2/T/C/ISDB-T OctaTV Tuner 6590 0001 TBS6590 DVB-S/S2/S2X/T/T2/C/C2/ISDB-T + 2xCI 6590 0002 TBS6590SE DVB-S/S2/S2X/T/T2/C/C2 + 2xCI 6704 ffff TBS6704 (Quad ATSC/QAMB) 6903 0020 TBS6903x (Dual DVB-S/S2/S2X) 6903 0021 TBS6903x (Dual DVB-S/S2/S2X) 6903 8888 TBS6903x (Dual DVB-S/S2/S2X) 6909 0009 TBS6909x (Octa DVB-S/S2/S2X) 6909 0010 TBS6909x (Octa DVB-S/S2/S2X) 6909 0019 TBS6909x (Octa DVB-S/S2/S2X) 6910 0001 TBS6910 DVB-S/S2 + 2xCI 6910 0002 TBS6910SE DVB-S/S2/S2x + 2xCI 5452 SCANLAB AG 3443 RTC4 5455 Technische Universitaet Berlin 4458 S5933 5456 GoTView 5519 Cnet Technologies, Inc. 5544 Dunord Technologies 0001 I-30xx Scanner Interface 5555 Genroco, Inc 0003 TURBOstor HFP-832 [HiPPI NIC] 0004 Torrent QN16e [16-128 Channel MPEG QAM Modulator for DVB-C] 3b00 Epiphan DVI2PCIe video capture card 5646 Vector Fabrics BV 5654 VoiceTronix Pty Ltd 5678 Dawicontrol Computersysteme GmbH 5700 Netpower # alternately Extreme Engineering Solutions, Inc. 5845 X-ES, Inc. 584d AuzenTech Co., Ltd. 5851 Exacq Technologies 8008 tDVR8008 8-port video capture card 8016 tDVR8016 16-chan video capture card 8032 tDVR8032 32-chan video capture card 5853 XenSource, Inc. 0001 Xen Platform Device c000 Citrix XenServer PCI Device for Windows Update c110 Virtualized HID c147 Virtualized Graphics Device c200 XCP-ng Project PCI Device for Windows Update 5854 GoTView 5ace Beholder International Ltd. 6205 TBS Technologies (wrong ID) 6209 TBS Technologies (wrong ID) 631c SmartInfra Ltd 1652 PXI-1652 Signal Generator 2504 PXI-2504 Signal Interrogator 6356 UltraStor 6374 c't Magazin fuer Computertechnik 6773 GPPCI 6409 Logitec Corp. 6549 Teradici Corp. 1200 TERA1200 PC-over-IP Host 6590 TBS Technologies (wrong ID) 6666 Decision Computer International Co. 0001 PCCOM4 0002 PCCOM8 0004 PCCOM2 0101 PCI 8255/8254 I/O Card 0200 12-bit AD/DA Card 0201 14-bit AD/DA Card 1011 Industrial Card 1021 8 photo couple 8 relay Card 1022 4 photo couple 4 relay Card 1025 16 photo couple 16 relay Card 4000 WatchDog Card 6688 Zycoo Co., Ltd 1200 CooVox TDM Analog Module 1400 CooVOX TDM GSM Module 1600 CooVOX TDM E1/T1 Module 1800 CooVOX TDM BRI Module 6704 TBS Technologies (wrong ID) 6766 Glenfly Tech Co., Ltd. 3d00 Arise-GT-10C0 3d02 Arise1020 3d03 Arise-GT-1040 3d04 Arise1010 3d06 Arise-GT-10C0t 3d07 Arise2030 3d08 Arise2020 3d0e Arise10D0 3d40 GLF HDMI/DP Audio 3d41 GLF HDMI/DP Audio 3d43 GLF HDMI/DP Audio 6899 ZT Systems # nee Qumranet 6900 Red Hat, Inc. 6903 TBS Technologies (wrong ID) 6909 TBS Technologies (wrong ID) 6910 TBS Technologies (wrong ID) 6f67 NOVAIUM Technology 7063 pcHDTV 2000 HD-2000 3000 HD-3000 5500 HD5500 HDTV 7284 HT OMEGA Inc. 7357 IOxOS Technologies SA 7910 7910 [Althea] 7377 Shenzhen Colorful Yugong Technology and Development Co. 7401 EndRun Technologies e100 PTP3100 PCIe PTP Slave Clock 7470 TP-LINK Technologies Co., Ltd. 7526 HongQin (Beijing) Technology Co., Ltd. 0082 HQ SSD M.2 0083 HQ SSD 2TB M.2 NVMe 7604 O.N. Electronic Co Ltd. 78c0 Herrick Technology Laboratories, Inc. [HTL] 0000 HTLv-1 / HTLv-2 / HTLv-13 / HTLv-23 0011 HTLv-53 7bde MIDAC Corporation 7f70 Arrow Lake-S PCH CNVi WiFi 0094 WiFi 6E AX211 160MHz 7fed PowerTV 8008 Quancom Electronic GmbH 0010 WDOG1 [PCI-Watchdog 1] 0011 PWDOG2 [PCI-Watchdog 2] 0015 Clock77/PCI & Clock77/PCIe (DCF-77 receiver) # Wrong ID used in subsystem ID of AsusTek PCI-USB2 PCI card. 807d Asustek Computer, Inc. 8080 Chengdu Storeswift Technology Co., Ltd. 4016 CX4016A NVMe SSD Controller 8086 Intel Corporation 0007 82379AB 0008 Extended Express System Support Controller 0039 21145 Fast Ethernet 0040 Core Processor DRAM Controller 0041 Core Processor PCI Express x16 Root Port 0042 Core Processor Integrated Graphics Controller 0043 Core Processor Secondary PCI Express Root Port 0044 Core Processor DRAM Controller 1025 0347 Aspire 7740G 1025 0487 TravelMate 5742 1028 040a Latitude E6410 144d c06a R730 Laptop 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 0045 Core Processor PCI Express x16 Root Port 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 0046 Core Processor Integrated Graphics Controller 1028 040a Latitude E6410 144d c06a R730 Laptop 17c0 10d9 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 0047 Core Processor Secondary PCI Express Root Port 0048 Core Processor DRAM Controller 0049 Core Processor PCI Express x16 Root Port 004a Core Processor Integrated Graphics Controller 004b Core Processor Secondary PCI Express Root Port 0050 Core Processor Thermal Management Controller 0069 Core Processor DRAM Controller 0082 Centrino Advanced-N 6205 [Taylor Peak] 8086 1301 Centrino Advanced-N 6205 AGN 8086 1306 Centrino Advanced-N 6205 ABG 8086 1307 Centrino Advanced-N 6205 BG 8086 1321 Centrino Advanced-N 6205 AGN 8086 1326 Centrino Advanced-N 6205 ABG 0083 Centrino Wireless-N 1000 [Condor Peak] 8086 1205 Centrino Wireless-N 1000 BGN 8086 1206 Centrino Wireless-N 1000 BG 8086 1225 Centrino Wireless-N 1000 BGN 8086 1226 Centrino Wireless-N 1000 BG 8086 1305 Centrino Wireless-N 1000 BGN 8086 1306 Centrino Wireless-N 1000 BG 8086 1325 Centrino Wireless-N 1000 BGN 8086 1326 Centrino Wireless-N 1000 BG 0084 Centrino Wireless-N 1000 [Condor Peak] 8086 1215 Centrino Wireless-N 1000 BGN 8086 1216 Centrino Wireless-N 1000 BG 8086 1315 Centrino Wireless-N 1000 BGN 8086 1316 Centrino Wireless-N 1000 BG 0085 Centrino Advanced-N 6205 [Taylor Peak] 8086 1311 Centrino Advanced-N 6205 (802.11a/b/g/n) 8086 1316 Centrino Advanced-N 6205 ABG 0087 Centrino Advanced-N + WiMAX 6250 [Kilmer Peak] 8086 1301 Centrino Advanced-N + WiMAX 6250 2x2 AGN 8086 1306 Centrino Advanced-N + WiMAX 6250 2x2 ABG 8086 1321 Centrino Advanced-N + WiMAX 6250 2x2 AGN 8086 1326 Centrino Advanced-N + WiMAX 6250 2x2 ABG 0089 Centrino Advanced-N + WiMAX 6250 [Kilmer Peak] 8086 1311 Centrino Advanced-N + WiMAX 6250 2x2 AGN 8086 1316 Centrino Advanced-N + WiMAX 6250 2x2 ABG 008a Centrino Wireless-N 1030 [Rainbow Peak] 8086 5305 Centrino Wireless-N 1030 BGN 8086 5307 Centrino Wireless-N 1030 BG 8086 5325 Centrino Wireless-N 1030 BGN 8086 5327 Centrino Wireless-N 1030 BG 008b Centrino Wireless-N 1030 [Rainbow Peak] 8086 5315 Centrino Wireless-N 1030 BGN 8086 5317 Centrino Wireless-N 1030 BG 0090 Centrino Advanced-N 6230 [Rainbow Peak] 8086 5211 Centrino Advanced-N 6230 AGN 8086 5215 Centrino Advanced-N 6230 BGN 8086 5216 Centrino Advanced-N 6230 ABG 0091 Centrino Advanced-N 6230 [Rainbow Peak] 8086 5201 Centrino Advanced-N 6230 AGN 8086 5205 Centrino Advanced-N 6230 BGN 8086 5206 Centrino Advanced-N 6230 ABG 8086 5207 Centrino Advanced-N 6230 BG 8086 5221 Centrino Advanced-N 6230 AGN 8086 5225 Centrino Advanced-N 6230 BGN 8086 5226 Centrino Advanced-N 6230 ABG 0100 2nd Generation Core Processor Family DRAM Controller 1028 04aa XPS 8300 1043 844d P8P67/P8H67 Series Motherboard 1734 11b9 Esprimo P510 D3171 motherboard 17aa 3070 ThinkCentre M91p 8086 200d DH61CR motherboard 0101 Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port 1028 04b2 Vostro 3350 106b 00dc MacBookPro8,2 [Core i7, 15", 2011] 144d c652 NP300E5C series laptop 0102 2nd Generation Core Processor Family Integrated Graphics Controller 1028 04aa XPS 8300 1043 0102 P8H67 Series Motherboard 1734 11b9 G640 [Sandy Bridge, HD Graphics] on Esprimo P510 D3171 motherboard 17aa 3070 ThinkCentre M91p 0104 2nd Generation Core Processor Family DRAM Controller 1028 04a3 Precision M4600 1028 04b2 Vostro 3350 1028 04da Vostro 3750 106b 00dc MacBookPro8,2 [Core i7, 15", 2011] 144d c652 NP300E5C series laptop 17aa 21cf ThinkPad T520 0105 Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port 106b 00dc MacBookPro8,2 [Core i7, 15", 2011] 0106 2nd Generation Core Processor Family Integrated Graphics Controller 0108 Xeon E3-1200 Processor Family DRAM Controller 0109 Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port 010a Xeon E3-1200 Processor Family Integrated Graphics Controller 010b Xeon E3-1200/2nd Generation Core Processor Family Integrated Graphics Controller 010c Xeon E3-1200/2nd Generation Core Processor Family DRAM Controller 010d Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port 010e Xeon E3-1200/2nd Generation Core Processor Family Integrated Graphics Controller 0112 2nd Generation Core Processor Family Integrated Graphics Controller 0116 2nd Generation Core Processor Family Integrated Graphics Controller 1028 04da Vostro 3750 144d c652 integrated HD 3000 graphics controller on NP300E5C series laptop 0122 2nd Generation Core Processor Family Integrated Graphics Controller 0126 2nd Generation Core Processor Family Integrated Graphics Controller 1028 04cc Vostro 3350 17aa 21ce ThinkPad T420 17aa 21cf ThinkPad T520 0150 Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller 1043 84ca P8 series motherboard 1458 d000 Ivy Bridge GT1 [HD Graphics] 15d9 0624 X9SCM-F Motherboard 1849 0150 Motherboard 0151 Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port 1043 1477 N56VZ 1043 844d P8 series motherboard 1043 84ca P8H77-I Motherboard 8086 2010 Server Board S1200BTS 0152 Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller 1043 84ca P8H77-I Motherboard 0153 3rd Gen Core Processor Thermal Subsystem 1043 1517 Zenbook Prime UX31A 0154 3rd Gen Core processor DRAM Controller 1025 0806 Aspire E1-470G 1025 0813 Aspire R7-571 103c 17f6 ProBook 4540s 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 10cf 16bf LIFEBOOK E752 0155 Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port 8086 2010 Server Board S1200BTS 0156 3rd Gen Core processor Graphics Controller 1043 108d VivoBook X202EV 0158 Xeon E3-1200 v2/Ivy Bridge DRAM Controller 1043 844d P8 series motherboard 8086 2010 Server Board S1200BT Family 0159 Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port 015a Xeon E3-1200 v2/Ivy Bridge Graphics Controller 015c Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller 015d Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port 1043 844d P8 series motherboard 015e Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller 0162 IvyBridge GT2 [HD Graphics 4000] 1043 84ca P8 series motherboard 1849 0162 Motherboard 0166 3rd Gen Core processor Graphics Controller 1043 1517 Zenbook Prime UX31A 1043 2103 N56VZ 10cf 16c1 LIFEBOOK E752 016a Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller 1043 844d P8B WS Motherboard 0172 Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller 0176 3rd Gen Core processor Graphics Controller 0201 Arctic Sound 0284 Comet Lake PCH-LP LPC Premium Controller/eSPI Controller 1028 09be Latitude 7410 02a3 Comet Lake PCH-LP SMBus Host Controller 1028 09be Latitude 7410 02a4 Comet Lake SPI (flash) Controller 1028 09be Latitude 7410 02a6 Comet Lake North Peak 02b0 Comet Lake PCI Express Root Port #9 02b1 Comet Lake PCI Express Root Port #10 02b3 Comet Lake PCI Express Root Port #12 02b4 Comet Lake PCI Express Root Port #13 02b5 Comet Lake PCI Express Root Port #14 02b8 Comet Lake PCI Express Root Port #1 02bc Comet Lake PCI Express Root Port #5 02bf Comet Lake PCI Express Root Port #8 02c5 Comet Lake Serial IO I2C Host Controller 1028 09be Latitude 7410 02c8 Comet Lake PCH-LP cAVS 1028 09be Latitude 7410 02d3 Comet Lake SATA AHCI Controller 02d7 Comet Lake RAID Controller 02e0 Comet Lake Management Engine Interface 1028 09be Latitude 7410 02e3 Comet Lake AMT SOL Redirection 02e8 Serial IO I2C Host Controller 1028 09be Latitude 7410 02e9 Comet Lake Serial IO I2C Host Controller 1028 09be Latitude 7410 02ea Comet Lake PCH-LP LPSS: I2C Controller #2 02ed Comet Lake PCH-LP USB 3.1 xHCI Host Controller 1028 09be Latitude 7410 02ef Comet Lake PCH-LP Shared SRAM 1028 09be Latitude 7410 02f0 Comet Lake PCH-LP CNVi WiFi 8086 0034 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9560 160MHz 2x2 [Jefferson Peak] 8086 0070 Dual Band Wi-Fi 6(802.11ax) AX201 160MHz 2x2 [Harrison Peak] 8086 0074 Dual Band Wi-Fi 6(802.11ax) AX201 160MHz 2x2 [Harrison Peak] 8086 0234 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9560 80MHz 2x2 [Jefferson Peak] 8086 0264 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9461 80MHz 1x1 [Jefferson Peak] 8086 02a4 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9462 80MHz 1x1 [Jefferson Peak] 8086 4070 Dual Band Wi-Fi 6(802.11ax) AX201 160MHz 2x2 [Harrison Peak] 02f5 Comet Lake PCH-LP SCS3 02f9 Comet Lake Thermal Subsytem 1028 09be Latitude 7410 02fc Comet Lake Integrated Sensor Solution 1028 09be Latitude 7410 0309 80303 I/O Processor PCI-to-PCI Bridge 030d 80312 I/O Companion Chip PCI-to-PCI Bridge 0326 6700/6702PXH I/OxAPIC Interrupt Controller A 103c 3208 ProLiant DL140 G2 1775 1100 CR11/VR11 Single Board Computer 0327 6700PXH I/OxAPIC Interrupt Controller B 103c 3208 ProLiant DL140 G2 1775 1100 CR11/VR11 Single Board Computer 0329 6700PXH PCI Express-to-PCI Bridge A 032a 6700PXH PCI Express-to-PCI Bridge B 032c 6702PXH PCI Express-to-PCI Bridge A 0330 80332 [Dobson] I/O processor (A-Segment Bridge) 0331 80332 [Dobson] I/O processor (A-Segment IOAPIC) 0332 80332 [Dobson] I/O processor (B-Segment Bridge) 0333 80332 [Dobson] I/O processor (B-Segment IOAPIC) 0334 80332 [Dobson] I/O processor (ATU) 0335 80331 [Lindsay] I/O processor (PCI-X Bridge) 0336 80331 [Lindsay] I/O processor (ATU) 0340 41210 [Lanai] Serial to Parallel PCI Bridge (A-Segment Bridge) 0341 41210 [Lanai] Serial to Parallel PCI Bridge (B-Segment Bridge) 0370 80333 Segment-A PCIe Express to PCI-X bridge 0371 80333 A-Bus IOAPIC 0372 80333 Segment-B PCIe Express to PCI-X bridge 0373 80333 B-Bus IOAPIC 0374 80333 Address Translation Unit 0402 Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller 0406 Haswell Integrated Graphics Controller 040a Xeon E3-1200 v3 Processor Integrated Graphics Controller 0412 Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller 1028 05d7 Alienware X51 R2 103c 1998 EliteDesk 800 G1 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 0416 4th Gen Core Processor Integrated Graphics Controller 17aa 220e ThinkPad T440p 041a Xeon E3-1200 v3 Processor Integrated Graphics Controller 041e 4th Generation Core Processor Family Integrated Graphics Controller 0434 DH89XXCC Series QAT 0435 DH895XCC Series QAT 0436 DH8900CC Null Device 0438 DH8900CC Series Gigabit Network Connection 043a DH8900CC Series Gigabit Fiber Network Connection 043c DH8900CC Series Gigabit Backplane Network Connection 0440 DH8900CC Series Gigabit SFP Network Connection 0442 DH89XXCC Series QAT Virtual Function 0443 DH895XCC Series QAT Virtual Function 0482 82375EB/SB PCI to EISA Bridge 0483 82424TX/ZX [Saturn] CPU to PCI bridge 0484 82378ZB/IB, 82379AB (SIO, SIO.A) PCI to ISA Bridge 0486 82425EX/ZX [Aries] PCIset with ISA bridge 04a3 82434LX/NX [Mercury/Neptune] Processor to PCI bridge 04d0 82437FX [Triton FX] 0500 E8870 Processor bus control 0501 E8870 Memory controller # and registers common to both SPs 0502 E8870 Scalability Port 0 # and global performance monitoring 0503 E8870 Scalability Port 1 0510 E8870IO Hub Interface Port 0 registers (8-bit compatibility port) 0511 E8870IO Hub Interface Port 1 registers 0512 E8870IO Hub Interface Port 2 registers 0513 E8870IO Hub Interface Port 3 registers 0514 E8870IO Hub Interface Port 4 registers 0515 E8870IO General SIOH registers 0516 E8870IO RAS registers 0530 E8870SP Scalability Port 0 registers 0531 E8870SP Scalability Port 1 registers 0532 E8870SP Scalability Port 2 registers 0533 E8870SP Scalability Port 3 registers 0534 E8870SP Scalability Port 4 registers 0535 E8870SP Scalability Port 5 registers # (bi-interleave 0) and global registers that are neither per-port nor per-interleave 0536 E8870SP Interleave registers 0 and 1 # (bi-interleave 1) 0537 E8870SP Interleave registers 2 and 3 0600 RAID Controller 8086 0136 SRCU31L 8086 01af SRCZCR 8086 01c1 ICP Vortex GDT8546RZ 8086 01f7 SCRU32 # uninitialized SRCU32 RAID Controller 061f 80303 I/O Processor 0684 H470 Chipset LPC/eSPI Controller 0685 Z490 Chipset LPC/eSPI Controller 0687 Q470 Chipset LPC/eSPI Controller 068d Comet Lake LPC Controller 068e WM490 Chipset LPC/eSPI Controller 06a3 Comet Lake PCH SMBus Controller 06a4 Comet Lake PCH SPI Controller 06a8 Comet Lake PCH Serial IO UART Host Controller #0 06a9 Comet Lake PCH Serial IO UART Host Controller #1 06aa Comet Lake PCH Serial IO SPI Controller #0 06ab Comet Lake PCH Serial IO SPI Controller #1 06ac Comet Lake PCI Express Root Port #21 06b0 Comet Lake PCI Express Root Port #9 06b8 Comet Lake PCIe Root Port #1 06ba Comet Lake PCI Express Root Port #1 06bb Comet Lake PCI Express Root Port #4 06bd Comet Lake PCIe Port #6 06be Comet Lake PCIe Root Port #7 06bf Comet Lake PCIe Port #8 06c0 Comet Lake PCI Express Root Port #17 06c8 Comet Lake PCH cAVS 06d2 Comet Lake SATA AHCI Controller 06d6 Comet Lake PCH-H RAID 06d7 Comet Lake PCH-H RAID 06e0 Comet Lake HECI Controller 06e3 Comet Lake Keyboard and Text (KT) Redirection 06e8 Comet Lake PCH Serial IO I2C Controller #0 06e9 Comet Lake PCH Serial IO I2C Controller #1 06ea Comet Lake PCH Serial IO I2C Controller #2 06eb Comet Lake PCH Serial IO I2C Controller #3 06ed Comet Lake USB 3.1 xHCI Host Controller 06ef Comet Lake PCH Shared SRAM 06f0 Comet Lake PCH CNVi WiFi 1a56 1651 Dual Band Wi-Fi 6(802.11ax) Killer AX1650s 160MHz 2x2 [Cyclone Peak] 1a56 1652 Dual Band Wi-Fi 6(802.11ax) Killer AX1650i 160MHz 2x2 [Cyclone Peak] 8086 0034 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9560 160MHz 2x2 [Jefferson Peak] 8086 0074 Dual Band Wi-Fi 6(802.11ax) AX201 160MHz 2x2 [Harrison Peak] 8086 02a4 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9462 80MHz 1x1 [Jefferson Peak] 8086 42a4 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9462 80MHz 1x1 [Jefferson Peak] 06f9 Comet Lake PCH Thermal Controller 06fb Comet Lake PCH Serial IO SPI Controller #2 06fc Comet Lake PCH Integrated Sensor Solution 0700 CE Media Processor A/V Bridge 0701 CE Media Processor NAND Flash Controller 0703 CE Media Processor Media Control Unit 1 0704 CE Media Processor Video Capture Interface 0707 CE Media Processor SPI Slave 0708 Atom Processor CE 4100 0709 Atom Processor CE 4200 0800 Moorestown SPI Ctrl 0 0801 Moorestown SPI Ctrl 1 0802 Moorestown I2C 0 0803 Moorestown I2C 1 0804 Moorestown I2C 2 0805 Moorestown Keyboard Ctrl 0806 Moorestown USB Ctrl 0807 Moorestown SD Host Ctrl 0 0808 Moorestown SD Host Ctrl 1 0809 Moorestown NAND Ctrl 080a Moorestown Audio Ctrl 080b Moorestown ISP 080c Moorestown Security Controller 080d Moorestown External Displays 080e Moorestown SCU IPC 080f Moorestown GPIO Controller 0810 Moorestown Power Management Unit 0811 Moorestown OTG Ctrl 0812 Moorestown SPI Ctrl 2 0813 Moorestown SC DMA 0814 Moorestown LPE DMA 0815 Moorestown SSP0 0817 Medfield Serial IO I2C Controller #3 0818 Medfield Serial IO I2C Controller #4 0819 Medfield Serial IO I2C Controller #5 081a Medfield GPIO Controller [Core] 081b Medfield Serial IO HSUART Controller #1 081c Medfield Serial IO HSUART Controller #2 081d Medfield Serial IO HSUART Controller #3 081e Medfield Serial IO HSUART DMA Controller 081f Medfield GPIO Controller [AON] 0820 Medfield SD Host Controller 0821 Medfield SDIO Controller #1 0822 Medfield SDIO Controller #2 0823 Medfield eMMC Controller #0 0824 Medfield eMMC Controller #1 0827 Medfield Serial IO DMA Controller 0828 Medfield Power Management Unit 0829 Medfield USB Device Controller (OTG) 082a Medfield SCU IPC 082c Medfield Serial IO I2C Controller #0 082d Medfield Serial IO I2C Controller #1 082e Medfield Serial IO I2C Controller #2 0885 Centrino Wireless-N + WiMAX 6150 8086 1305 Centrino Wireless-N + WiMAX 6150 BGN 8086 1307 Centrino Wireless-N + WiMAX 6150 BG 8086 1325 Centrino Wireless-N + WiMAX 6150 BGN 8086 1327 Centrino Wireless-N + WiMAX 6150 BG 0886 Centrino Wireless-N + WiMAX 6150 8086 1315 Centrino Wireless-N + WiMAX 6150 BGN 8086 1317 Centrino Wireless-N + WiMAX 6150 BG 0887 Centrino Wireless-N 2230 8086 4062 Centrino Wireless-N 2230 BGN 8086 4462 Centrino Wireless-N 2230 BGN 0888 Centrino Wireless-N 2230 8086 4262 Centrino Wireless-N 2230 BGN 088e Centrino Advanced-N 6235 8086 4060 Centrino Advanced-N 6235 AGN 8086 4460 Centrino Advanced-N 6235 AGN 088f Centrino Advanced-N 6235 8086 4260 Centrino Advanced-N 6235 AGN 0890 Centrino Wireless-N 2200 8086 4022 Centrino Wireless-N 2200 BGN 8086 4422 Centrino Wireless-N 2200 BGN 8086 4822 Centrino Wireless-N 2200 BGN 0891 Centrino Wireless-N 2200 8086 4222 Centrino Wireless-N 2200 BGN 0892 Centrino Wireless-N 135 8086 0062 Centrino Wireless-N 135 BGN 8086 0462 Centrino Wireless-N 135 BGN 0893 Centrino Wireless-N 135 8086 0262 Centrino Wireless-N 135 BGN 0894 Centrino Wireless-N 105 8086 0022 Centrino Wireless-N 105 BGN 8086 0422 Centrino Wireless-N 105 BGN 8086 0822 Centrino Wireless-N 105 BGN 0895 Centrino Wireless-N 105 8086 0222 Centrino Wireless-N 105 BGN 0896 Centrino Wireless-N 130 8086 5005 Centrino Wireless-N 130 BGN 8086 5007 Centrino Wireless-N 130 BG 8086 5025 Centrino Wireless-N 130 BGN 8086 5027 Centrino Wireless-N 130 BG 0897 Centrino Wireless-N 130 8086 5015 Centrino Wireless-N 130 BGN 8086 5017 Centrino Wireless-N 130 BG 08a7 Quark SoC X1000 SDIO / eMMC Controller 08ae Centrino Wireless-N 100 8086 1005 Centrino Wireless-N 100 BGN 8086 1007 Centrino Wireless-N 100 BG 8086 1025 Centrino Wireless-N 100 BGN 8086 1027 Centrino Wireless-N 100 BG 08af Centrino Wireless-N 100 8086 1015 Centrino Wireless-N 100 BGN 8086 1017 Centrino Wireless-N 100 BG 08b1 Wireless 7260 8086 4020 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 402a Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4060 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4062 Wireless-N 7260 [Wilkins Peak 2] 8086 406a Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4070 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4072 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4160 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4162 Wireless-N 7260 [Wilkins Peak 2] 8086 4170 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4420 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4460 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4462 Wireless-N 7260 [Wilkins Peak 2] 8086 446a Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4470 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4472 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4560 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4570 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 486e Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4870 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4a6c Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4a6e Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4a70 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4c60 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4c70 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 5070 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 5072 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 5170 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 5770 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c020 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c02a Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c060 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c062 Wireless-N 7260 [Wilkins Peak 2] 8086 c06a Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c070 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c072 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c160 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c162 Wireless-N 7260 [Wilkins Peak 2] 8086 c170 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c360 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c420 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c460 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c462 Wireless-N 7260 [Wilkins Peak 2] 8086 c470 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c472 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c560 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c570 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c760 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c770 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 cc60 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 cc70 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 08b2 Wireless 7260 8086 4220 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4260 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4262 Wireless-N 7260 [Wilkins Peak 2] 8086 426a Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4270 Wireless-N 7260 [Wilkins Peak 2] 8086 4272 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 4360 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 4370 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c220 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c260 Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c262 Wireless-N 7260 [Wilkins Peak 2] 8086 c26a Dual Band Wireless-N 7260 [Wilkins Peak 2] 8086 c270 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c272 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 8086 c370 Dual Band Wireless-AC 7260 [Wilkins Peak 2] 08b3 Wireless 3160 8086 0060 Dual Band Wireless-N 3160 [Wilkins Peak 1] 8086 0062 Wireless-N 3160 [Wilkins Peak 1] 8086 0070 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 0072 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 0170 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 0172 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 0260 Dual Band Wireless-N 3160 [Wilkins Peak 1] 8086 0470 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 0472 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 1070 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 1170 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 8060 Dual Band Wireless N-3160 [Wilkins Peak 1] 8086 8062 Wireless N-3160 [Wilkins Peak 1] 8086 8070 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8072 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8170 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8172 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8470 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8570 Dual Band Wireless AC 3160 [Wilkins Peak 1] 08b4 Wireless 3160 8086 0270 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 0272 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 0370 Dual Band Wireless-AC 3160 [Wilkins Peak 1] 8086 8260 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8270 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8272 Dual Band Wireless AC 3160 [Wilkins Peak 1] 8086 8370 Dual Band Wireless AC 3160 [Wilkins Peak 1] # PowerVR SGX 545 08cf Atom Processor Z2760 Integrated Graphics Controller 0931 Atom Processor CE 2600 [Puma 6] 0934 Quark SoC X1000 I2C Controller and GPIO Controller 0935 Quark SoC X1000 SPI Controller 0936 Quark SoC X1000 HS-UART 0937 Quark SoC X1000 10/100 Ethernet MAC 0939 Quark SoC X1000 USB EHCI Host Controller / USB 2.0 Device 093a Quark SoC X1000 USB OHCI Host Controller 0953 PCIe Data Center SSD 8086 3702 DC P3700 SSD 8086 3703 DC P3700 SSD [2.5" SFF] 8086 3704 DC P3500 SSD [Add-in Card] 8086 3705 DC P3500 SSD [2.5" SFF] 8086 3709 DC P3600 SSD [Add-in Card] 8086 370a DC P3600 SSD [2.5" SFF] 8086 370d SSD 750 Series [Add-in Card] 8086 370e SSD 750 Series [2.5" SFF] 0958 Quark SoC X1000 Host Bridge 095a Wireless 7265 8086 1010 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5000 Dual Band Wireless-N 7265 [Stone Peak 2 AGN] 8086 5002 Wireless-N 7265 [Stone Peak 2 BGN] 8086 500a Dual Band Wireless-N 7265 [Stone Peak 2 AGN] 8086 5010 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5012 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5020 Dual Band Wireless-N 7265 [Stone Peak 2 AGN] 8086 502a Dual Band Wireless-N 7265 [Stone Peak 2 AGN] 8086 5090 Dual Band Wireless-AC 7265 [Maple Peak AC] 8086 5100 Dual Band Wireless-AC 7265 [Stone Peak 2 AGN] 8086 5102 Wireless-N 7265 [Stone Peak 2 BGN] 8086 510a Dual Band Wireless-AC 7265 [Stone Peak 2 AGN] 8086 5110 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5112 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5190 Dual Band Wireless-AC 7265 [Maple Peak AC] 8086 5400 Dual Band Wireless-AC 7265 [Stone Peak 2 AGN] 8086 5410 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5412 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5420 Dual Band Wireless-N 7265 [Stone Peak 2 AGN] 8086 5490 Dual Band Wireless-AC 7265 [Maple Peak AC] 8086 5510 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5590 Dual Band Wireless-AC 7265 [Maple Peak AC] 8086 9000 Dual Band Wireless-AC 7265 [Stone Peak 2 AGN] 8086 900a Dual Band Wireless-AC 7265 [Stone Peak 2 AGN] 8086 9010 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9012 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9110 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9112 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9210 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9310 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9400 Dual Band Wireless-AC 7265 [Stone Peak 2 AGN] 8086 9410 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9510 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 095b Wireless 7265 8086 5200 Dual Band Wireless-N 7265 [Stone Peak 2 AGN] 8086 5202 Wireless-N 7265 [Stone Peak 2 BGN] 8086 520a Dual Band Wireless-N 7265 [Stone Peak 2 AGN] 8086 5210 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5212 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 5290 Dual Band Wireless-AC 7265 [Maple Peak AC] 8086 5302 Wireless-N 7265 [Stone Peak 2 BGN] 8086 5310 Dual Band Wireless-AC 7265 [Stone Peak 2 AC] 8086 9200 Dual Band Wireless-AC 7265 [Stone Peak 2 AGN] 095e Quark SoC X1000 Legacy Bridge 0960 80960RP (i960RP) Microprocessor/Bridge 0962 80960RM (i960RM) Bridge 0964 80960RP (i960RP) Microprocessor/Bridge 0975 Optane NVME SSD H10 with Solid State Storage [Teton Glacier] 0998 Ice Lake IEH 09a2 Ice Lake Memory Map/VT-d 09a3 Ice Lake RAS 09a4 Ice Lake Mesh 2 PCIe 09a6 Ice Lake MSM 09a7 Ice Lake PMON MSM 09ab RST VMD Managed Controller 09ad Optane NVME SSD H20 with Solid State Storage [Pyramid Glacier] 09c4 PAC with Intel Arria 10 GX FPGA 0a03 Haswell-ULT Thermal Subsystem 0a04 Haswell-ULT DRAM Controller 17aa 2214 ThinkPad X240 0a06 Haswell-ULT Integrated Graphics Controller 0a0c Haswell-ULT HD Audio Controller 17aa 2214 ThinkPad X240 0a16 Haswell-ULT Integrated Graphics Controller 17aa 2214 ThinkPad X240 0a22 Haswell-ULT Integrated Graphics Controller 0a26 Haswell-ULT Integrated Graphics Controller 0a2a Haswell-ULT Integrated Graphics Controller 0a2e Haswell-ULT Integrated Graphics Controller 0a53 DC P3520 SSD 0a54 NVMe Datacenter SSD [3DNAND, Beta Rock Controller] 1028 1fe1 Express Flash NVMe 1TB 2.5" U.2 (P4500) 1028 1fe2 Express Flash NVMe 2TB 2.5" U.2 (P4500) 1028 1fe3 Express Flash NVMe 4TB 2.5" U.2 (P4500) 1028 1fe4 Express Flash NVMe 4TB HHHL AIC (P4500) 1028 1fee Express Flash NVMe 1.6TB 2.5" U.2 (P4610) 1028 1fef Express Flash NVMe 3.2TB 2.5" U.2 (P4610) 1028 1ff0 Express Flash NVMe 6.4TB 2.5" U.2 (P4610) 1028 1fff Express Flash NVMe 8.0TB 2.5" U.2 (P4510) 1028 2003 Express Flash NVMe 1.0 TB 2.5" U.2 (P4510) 1028 2004 Express Flash NVMe 2.0TB 2.5" U.2 (P4510) 1028 2005 Express Flash NVMe 4.0TB 2.5" U.2 (P4510) 108e 4870 NVMe PCIe 3.0 SSD 6.4TB AIC (P4608) 108e 4871 NVMe PCIe 3.0 SSD 6.4TB 2.5-inch (P4600) 108e 4879 NVMe PCIe 3.0 SSD v2 6.4TB AIC (P4618) 108e 487a NVMe PCIe 3.0 SSD v2 6.4TB 2.5-inch (P4610) 1137 0227 NVMe Datacenter SSD [3DNAND] 1.6TB 2.5" U.2 (P4600) 1137 0228 NVMe Datacenter SSD [3DNAND] 2.0TB 2.5" U.2 (P4600) 1137 0229 NVMe Datacenter SSD [3DNAND] 3.2TB 2.5" U.2 (P4600) 1137 022b NVMe Datacenter SSD [3DNAND] 1.0TB 2.5" U.2 (P4500) 1137 022c NVMe Datacenter SSD [3DNAND] 2.0TB 2.5" U.2 (P4500) 1137 022d NVMe Datacenter SSD [3DNAND] 4.0TB 2.5" U.2 (P4500) 1137 0231 NVMe Datacenter SSD [3DNAND] 0.5TB 2.5" U.2 (P4501) 1137 0232 NVMe Datacenter SSD [3DNAND] 1.0TB 2.5" U.2 (P4501) 1137 0233 NVMe Datacenter SSD [3DNAND] 2.0TB 2.5" U.2 (P4501) 1137 0258 NVMe Datacenter SSD [3DNAND] 1.6TB 2.5" U.2 (P4610) 1137 025a NVMe Datacenter SSD [3DNAND] 3.2TB 2.5" U.2 (P4610) 1137 025b NVMe Datacenter SSD [3DNAND] 1.0TB 2.5" U.2 (P4510) 1137 025c NVMe Datacenter SSD [3DNAND] 2.0TB 2.5" U.2 (P4510) 1137 025d NVMe Datacenter SSD [3DNAND] 4.0TB 2.5" U.2 (P4510) 1137 025e NVMe Datacenter SSD [3DNAND] 8.0TB 2.5" U.2 (P4510) 1590 025d NVMe Datacenter SSD [3DNAND] 1.0TB 2.5" U.2 (P4500) 1590 025e NVMe Datacenter SSD [3DNAND] 2.0TB 2.5" U.2 (P4500) 1590 025f NVMe Datacenter SSD [3DNAND] 4.0TB 2.5" U.2 (P4500) 1590 0262 NVMe Datacenter SSD [3DNAND] 1.6TB 2.5" U.2 (P4600) 1590 0264 NVMe Datacenter SSD [3DNAND] 3.2TB 2.5" U.2 (P4600) 1590 0265 NVMe Datacenter SSD [3DNAND] 6.4TB 2.5" U.2 (P4600) 1590 026c NVMe Datacenter SSD [3DNAND] 4.0TB AIC (P4500) 1d49 4702 Thinksystem Intel P4500 NVMe U.2 1d49 4704 Thinksystem Intel P4500 NVMe AIC 1d49 4712 Thinksystem Intel P4600 NVMe U.2 1d49 4714 Thinksystem Intel P4600 NVMe AIC 1d49 4802 Thinksystem U.2 P4510 NVMe SSD 1d49 4812 Thinksystem U.2 P4610 NVMe SSD 8086 4308 SSD D5-P4320 and D5-P4326 8086 4702 NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P4500) 8086 4704 NVMe Datacenter SSD [3DNAND] SE AIC (P4500) 8086 4712 NVMe Datacenter SSD [3DNAND] ME 2.5" U.2 (P4600) 8086 4714 NVMe Datacenter SSD [3DNAND] ME AIC (P4600) 8086 4802 NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P4510) 8086 4804 NVMe Datacenter SSD [3DNAND] SE AIC (P4510) 8086 4805 NVMe Datacenter SSD [3DNAND] SE M.2 (P4511) 8086 4812 NVMe Datacenter SSD [3DNAND] ME 2.5" U.2 (P4610) 8086 4814 NVMe Datacenter SSD [3DNAND] ME AIC (P4610) 0a55 NVMe DC SSD [3DNAND, Beta Rock Controller] 1028 1fe5 Express Flash NVMe 1.6TB 2.5" U.2 (P4600) 1028 1fe6 Express Flash NVMe 2TB 2.5" U.2 (P4600) 1028 1fe7 Express Flash NVMe 3.2TB 2.5" U.2 (P4600) 1028 1fe8 Express Flash NVMe 2.0TB HHHL AIC (P4600) 1028 1fe9 Express Flash NVMe 4.0TB HHHL AIC (P4600) 0b00 Ice Lake CBDMA [QuickData Technology] 0b26 Thunderbolt 4 Bridge [Goshen Ridge 2020] 0b27 Thunderbolt 4 USB Controller [Goshen Ridge 2020] 0b2b PAC with Intel Stratix 10 SX FPGA [FPGA PAC D5005] 0b60 NVMe DC SSD [3DNAND, Sentinel Rock Controller] 1028 2060 NVMe SED MU U.2 1.6TB (P5600) 1028 2061 NVMe SED MU U.2 3.2TB (P5600) 1028 2062 NVMe SED MU U.2 6.4TB (P5600) 1028 2064 NVMe SED RI U.2 1.92TB (P5500) 1028 2065 NVMe SED RI U.2 3.84TB (P5500) 1028 2066 NVMe SED RI U.2 7.68TB (P5500) 1028 209e NVMe MU U.2 1.6TB (P5600) 1028 209f NVMe MU U.2 3.2TB (P5600) 1028 2100 NVMe MU U.2 6.4TB (P5600) 1028 2102 NVMe RI U.2 1.92TB (P5500) 1028 2103 NVMe RI U.2 3.84TB (P5500) 1028 2104 NVMe RI U.2 7.68TB (P5500) 1028 219a NVMe P5316 RI 15.36TB 1028 219b NVMe P5316 RI 30.72TB 1028 219c NVMe SED P5316 RI 15.36 1028 219d NVMe SED P5316 RI 30.72 1028 219e NVMe FIPS P5316 RI 15.36TB 1028 219f NVMe FIPS P5316 RI 30.72 8086 8008 NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510) 8086 8d08 NVMe Datacenter SSD [3DNAND] VE 2.5" U.2 (P5316) 8086 8d1d NVMe Datacenter SSD [3DNAND] VE E1.L 9.5/18mm (P5316) 8086 c008 NVMe Datacenter SSD [3DNAND] SE U.2 15mm (P5530) 0b69 Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1450] 0b6e Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100C] 0bd0 Ponte Vecchio XL (2 Tile) 0bd4 Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1550VG] 0bd5 Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1550] 0bd6 Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1550] 0bd7 Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1350] 0bd8 Ponte Vecchio XT (2 Tile) [Data Center GPU Max 1350] 0bd9 Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100] 0bda Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100] 0bdb Ponte Vecchio XT (1 Tile) [Data Center GPU Max 1100] 0be0 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be1 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 105b 0d7c D270S/D250S Motherboard 0be2 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be3 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be4 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be5 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be6 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be7 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be8 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0be9 Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0bea Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0beb Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0bec Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0bed Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0bee Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0bef Atom Processor D2xxx/N2xxx Integrated Graphics Controller 0bf0 Atom Processor D2xxx/N2xxx DRAM Controller 0bf1 Atom Processor D2xxx/N2xxx DRAM Controller 0bf2 Atom Processor D2xxx/N2xxx DRAM Controller 0bf3 Atom Processor D2xxx/N2xxx DRAM Controller 0bf4 Atom Processor D2xxx/N2xxx DRAM Controller 0bf5 Atom Processor D2xxx/N2xxx DRAM Controller 105b 0d7c D270S/D250S Motherboard 0bf6 Atom Processor D2xxx/N2xxx DRAM Controller 0bf7 Atom Processor D2xxx/N2xxx DRAM Controller 0c00 4th Gen Core Processor DRAM Controller 1028 05d7 Alienware X51 R2 103c 1998 EliteDesk 800 G1 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 0c01 Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller 0c04 Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller 103c 1909 ZBook 15 17aa 220e ThinkPad T440p 0c05 Xeon E3-1200 v3/4th Gen Core Processor PCI Express x8 Controller 0c08 Xeon E3-1200 v3 Processor DRAM Controller 0c09 Xeon E3-1200 v3/4th Gen Core Processor PCI Express x4 Controller 0c0c Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 309f ThinkCentre M83 0c40 Atom Processor CE 5300 0c46 Atom Processor S1200 PCI Express Root Port 1 0c47 Atom Processor S1200 PCI Express Root Port 2 0c48 Atom Processor S1200 PCI Express Root Port 3 0c49 Atom Processor S1200 PCI Express Root Port 4 0c4e Atom Processor S1200 NTB Primary 0c50 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QuickData Technology Device 0c51 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QuickData Technology Device 0c52 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QuickData Technology Device 0c53 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QuickData Technology Device 0c54 Atom Processor S1200 Internal 0c55 Atom Processor S1200 DFX 1 0c56 Atom Processor S1200 DFX 2 0c59 Atom Processor S1200 SMBus 2.0 Controller 0 0c5a Atom Processor S1200 SMBus 2.0 Controller 1 0c5b Atom Processor S1200 SMBus Controller 2 0c5c Atom Processor S1200 SMBus Controller 3 0c5d Atom Processor S1200 SMBus Controller 4 0c5e Atom Processor S1200 SMBus Controller 5 0c5f Atom Processor S1200 UART 0c60 Atom Processor S1200 Integrated Legacy Bus 0c70 Atom Processor S1200 Internal 0c71 Atom Processor S1200 Internal 0c72 Atom Processor S1200 Internal 0c73 Atom Processor S1200 Internal 0c74 Atom Processor S1200 Internal 0c75 Atom Processor S1200 Internal 0c76 Atom Processor S1200 Internal 0c77 Atom Processor S1200 Internal 0c78 Atom Processor S1200 Internal 0c79 Atom Processor S1200 Internal 0c7a Atom Processor S1200 Internal 0c7b Atom Processor S1200 Internal 0c7c Atom Processor S1200 Internal 0c7d Atom Processor S1200 Internal 0c7e Atom Processor S1200 Internal 0c7f Atom Processor S1200 Internal 0cf8 Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking 8086 0000 Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking 8086 0001 Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking 0d00 Crystal Well DRAM Controller 0d01 Crystal Well PCI Express x16 Controller 0d03 Crystal Well Dynamic Platform and Thermal Framework Processor Participant 0d04 Crystal Well DRAM Controller 0d05 Crystal Well PCI Express x8 Controller 0d09 Crystal Well PCI Express x4 Controller 0d0c Crystal Well HD Audio Controller 0d12 Crystal Well Integrated Graphics Controller 0d16 Crystal Well Integrated Graphics Controller 0d22 Crystal Well Integrated Iris Pro Graphics 5200 0d26 Crystal Well Integrated Graphics Controller 0d36 Crystal Well Integrated Graphics Controller 0d4c Ethernet Connection (11) I219-LM 0d4d Ethernet Connection (11) I219-V 8086 0d4d Ethernet Connection (11) I219-V 0d4e Ethernet Connection (10) I219-LM 0d4f Ethernet Connection (10) I219-V 0d53 Ethernet Connection (12) I219-LM 0d55 Ethernet Connection (12) I219-V 0d58 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking 8086 0000 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking 8086 0001 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking 0d9f Ethernet Controller I225-IT 0dc5 Ethernet Connection (23) I219-LM 1028 0c06 Precision 3580 0dc6 Ethernet Connection (23) I219-V 0dcd Ethernet Connection C825-X 0dd2 Ethernet Network Adapter I710 1137 0000 I710T4LG 4x1 GbE RJ45 PCIe NIC 1137 02e3 I710T4LG 4x1 GbE RJ45 PCIe NIC 8086 0000 Ethernet Network Adapter I710-T4L 8086 000d Ethernet Network Adapter I710-T4L 8086 0010 Ethernet Network Adapter I710-T4L for OCP 3.0 8086 401a Ethernet Network Adapter I710-T4L 8086 401b Ethernet Network Adapter I710-T4L for OCP 3.0 0dd5 Ethernet Adaptive Virtual Function 0dda Ethernet Connection X722 for 10GbE SFP+ 1bd4 0076 Ethernet Connection F102IX722 for 10GbE SFP 1bd4 0082 Ethernet Connection F102IX722 for 10GbE SFP 0e00 Xeon E7 v2/Xeon E5 v2/Core i7 DMI2 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e01 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port in DMI2 Mode 0e02 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 1a 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 0e03 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 1b 0e04 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 2a 0e05 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 2b 0e06 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 2c 0e07 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 2d 0e08 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 3a 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 0e09 Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 3b 0e0a Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 3c 0e0b Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 3d 0e10 Xeon E7 v2/Xeon E5 v2/Core i7 IIO Configuration Registers 0e13 Xeon E7 v2/Xeon E5 v2/Core i7 IIO Configuration Registers 0e17 Xeon E7 v2/Xeon E5 v2/Core i7 IIO Configuration Registers 0e18 Xeon E7 v2/Xeon E5 v2/Core i7 IIO Configuration Registers 0e1c Xeon E7 v2/Xeon E5 v2/Core i7 IIO Configuration Registers 0e1d Xeon E7 v2/Xeon E5 v2/Core i7 R2PCIe 0e1e Xeon E7 v2/Xeon E5 v2/Core i7 UBOX Registers 0e1f Xeon E7 v2/Xeon E5 v2/Core i7 UBOX Registers 0e20 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 0 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e21 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 1 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e22 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 2 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e23 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 3 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e24 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 4 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e25 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 5 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e26 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 6 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e27 Xeon E7 v2/Xeon E5 v2/Core i7 Crystal Beach DMA Channel 7 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e28 Xeon E7 v2/Xeon E5 v2/Core i7 VTd/Memory Map/Misc 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e29 Xeon E7 v2/Xeon E5 v2/Core i7 Memory Hotplug 0e2a Xeon E7 v2/Xeon E5 v2/Core i7 IIO RAS 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 15d9 066b X9SRL-F 0e2c Xeon E7 v2/Xeon E5 v2/Core i7 IOAPIC 15d9 066b X9SRL-F 0e2e Xeon E7 v2/Xeon E5 v2/Core i7 CBDMA 0e2f Xeon E7 v2/Xeon E5 v2/Core i7 CBDMA 0e30 Xeon E7 v2/Xeon E5 v2/Core i7 Home Agent 0 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 0e32 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link 0 0e33 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link 1 0e34 Xeon E7 v2/Xeon E5 v2/Core i7 R2PCIe 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 0e36 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 0e37 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring 0e38 Xeon E7 v2/Xeon E5 v2/Core i7 Home Agent 1 0e3a Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link 2 0e3e Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring 0e3f Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Performance Ring Monitoring 0e40 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link 2 0e41 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Registers 0e43 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Reut 2 0e44 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Reut 2 0e45 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Agent Register 0e47 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Agent Register 0e60 Xeon E7 v2/Xeon E5 v2/Core i7 Home Agent 1 0e68 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Target Address/Thermal Registers 0e6a Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers 0e6b Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers 0e6c Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers 0e6d Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder Registers 0e71 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 RAS Registers 0e74 Xeon E7 v2/Xeon E5 v2/Core i7 R2PCIe 0e75 Xeon E7 v2/Xeon E5 v2/Core i7 R2PCIe 0e77 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Registers 0e79 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 RAS Registers 0e7d Xeon E7 v2/Xeon E5 v2/Core i7 UBOX Registers 0e7f Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Registers 0e80 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link 0 0e81 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Ring Registers 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 0e83 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Reut 0 0e84 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Reut 0 0e85 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Agent Register 0e87 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Registers 0e90 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link 1 0e93 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link 1 0e94 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Reut 1 0e95 Xeon E7 v2/Xeon E5 v2/Core i7 QPI Link Agent Register 0ea0 Xeon E7 v2/Xeon E5 v2/Core i7 Home Agent 0 1028 04f7 Xeon E5 v2 on PowerEdge R320 server 0ea8 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Target Address/Thermal Registers 0eaa Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers 0eab Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers 0eac Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers 0ead Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder Registers 0eae Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO Registers 0eaf Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO Registers 0eb0 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 0 0eb1 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 1 0eb2 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 0 0eb3 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 1 0eb4 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 2 0eb5 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 Thermal Control 3 0eb6 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 2 0eb7 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 1 Channel 0-3 ERROR Registers 3 0ebc Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO Registers 0ebe Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO Registers 0ebf Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO Registers 0ec0 Xeon E7 v2/Xeon E5 v2/Core i7 Power Control Unit 0 0ec1 Xeon E7 v2/Xeon E5 v2/Core i7 Power Control Unit 1 0ec2 Xeon E7 v2/Xeon E5 v2/Core i7 Power Control Unit 2 0ec3 Xeon E7 v2/Xeon E5 v2/Core i7 Power Control Unit 3 0ec4 Xeon E7 v2/Xeon E5 v2/Core i7 Power Control Unit 4 0ec8 Xeon E7 v2/Xeon E5 v2/Core i7 System Address Decoder 0ec9 Xeon E7 v2/Xeon E5 v2/Core i7 Broadcast Registers 0eca Xeon E7 v2/Xeon E5 v2/Core i7 Broadcast Registers 0ed8 Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0ed9 Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0edc Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0edd Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0ede Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0edf Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0ee0 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee1 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee2 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee3 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee4 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee5 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee6 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee7 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee8 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ee9 Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0eea Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0eeb Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0eec Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0eed Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0eee Xeon E7 v2/Xeon E5 v2/Core i7 Unicast Registers 0ef0 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 0 0ef1 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 1 0ef2 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 0 0ef3 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 1 0ef4 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 2 0ef5 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 Thermal Control 3 0ef6 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 2 0ef7 Xeon E7 v2/Xeon E5 v2/Core i7 Integrated Memory Controller 0 Channel 0-3 ERROR Registers 3 0ef8 Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0ef9 Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0efa Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0efb Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0efc Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0efd Xeon E7 v2/Xeon E5 v2/Core i7 DDRIO 0f00 Atom Processor Z36xxx/Z37xxx Series SoC Transaction Register 0f04 Atom Processor Z36xxx/Z37xxx Series High Definition Audio Controller 0f06 Atom Processor Z36xxx/Z37xxx Series LPIO1 DMA Controller 0f08 Atom Processor Z36xxx/Z37xxx Series LPIO1 PWM Controller 0f09 Atom Processor Z36xxx/Z37xxx Series LPIO1 PWM Controller 0f0a Atom Processor Z36xxx/Z37xxx Series LPIO1 HSUART Controller #1 0f0c Atom Processor Z36xxx/Z37xxx Series LPIO1 HSUART Controller #2 0f0e Atom Processor Z36xxx/Z37xxx Series LPIO1 SPI Controller 0f12 Atom Processor E3800/CE2700 Series SMBus Controller 0f14 Atom Processor Z36xxx/Z37xxx Series SDIO Controller 0f15 Atom Processor Z36xxx/Z37xxx Series SDIO Controller 0f16 Atom Processor Z36xxx/Z37xxx Series SDIO Controller 0f18 Atom Processor Z36xxx/Z37xxx Series Trusted Execution Engine 0f1c Atom Processor Z36xxx/Z37xxx Series Power Control Unit 0f20 Atom Processor E3800 Series SATA IDE Controller 0f21 Atom Processor E3800 Series SATA IDE Controller 0f22 Atom Processor E3800 Series SATA AHCI Controller 0f23 Atom Processor E3800 Series SATA AHCI Controller 0f28 Atom Processor Z36xxx/Z37xxx Series LPE Audio Controller 0f31 Atom Processor Z36xxx/Z37xxx Series Graphics & Display 0f34 Atom Processor Z36xxx/Z37xxx Series USB EHCI 0f35 Atom Processor Z36xxx/Z37xxx, Celeron N2000 Series USB xHCI 1025 0936 Aspire ES1 0f37 Atom Processor Z36xxx/Z37xxx Series OTG USB Device 0f38 Atom Processor Z36xxx/Z37xxx Series Camera ISP 0f40 Atom Processor Z36xxx/Z37xxx Series LPIO2 DMA Controller 0f41 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #1 0f42 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #2 0f43 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #3 0f44 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #4 0f45 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #5 0f46 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #6 0f47 Atom Processor Z36xxx/Z37xxx Series LPIO2 I2C Controller #7 0f48 Atom Processor E3800 Series PCI Express Root Port 1 0f4a Atom Processor E3800 Series PCI Express Root Port 2 0f4c Atom Processor E3800 Series PCI Express Root Port 3 0f4e Atom Processor E3800 Series PCI Express Root Port 4 0f50 Atom Processor E3800 Series eMMC 4.5 Controller 1000 82542 Gigabit Ethernet Controller (Fiber) 0e11 b0df NC6132 Gigabit Ethernet Adapter (1000-SX) 0e11 b0e0 NC6133 Gigabit Ethernet Adapter (1000-LX) 0e11 b123 NC6134 Gigabit Ethernet Adapter (1000-LX) 1014 0119 Netfinity Gigabit Ethernet SX Adapter 8086 1000 PRO/1000 Gigabit Server Adapter 1001 82543GC Gigabit Ethernet Controller (Fiber) 0e11 004a NC6136 Gigabit Server Adapter 1014 01ea Netfinity Gigabit Ethernet SX Adapter 8086 1002 PRO/1000 F Server Adapter 8086 1003 PRO/1000 F Server Adapter 1002 Pro 100 LAN+Modem 56 Cardbus II 8086 200e Pro 100 LAN+Modem 56 Cardbus II 8086 2013 Pro 100 SR Mobile Combo Adapter 8086 2017 Pro 100 S Combo Mobile Adapter 1004 82543GC Gigabit Ethernet Controller (Copper) 0e11 0049 NC7132 Gigabit Upgrade Module 0e11 b1a4 NC7131 Gigabit Server Adapter 1014 10f2 Gigabit Ethernet Server Adapter 8086 1004 PRO/1000 T Server Adapter 8086 2004 PRO/1000 T Server Adapter 1008 82544EI Gigabit Ethernet Controller (Copper) 1014 0269 iSeries 1000/100/10 Ethernet Adapter 1028 011b PowerEdge 1650/2550 1028 011c PRO/1000 XT Network Connection 8086 1107 PRO/1000 XT Server Adapter 8086 2107 PRO/1000 XT Server Adapter 8086 2110 PRO/1000 XT Desktop Adapter 8086 3108 PRO/1000 XT Network Connection 1009 82544EI Gigabit Ethernet Controller (Fiber) 1014 0268 iSeries Gigabit Ethernet Adapter 8086 1109 PRO/1000 XF Server Adapter 8086 2109 PRO/1000 XF Server Adapter 100a 82540EM Gigabit Ethernet Controller 100c 82544GC Gigabit Ethernet Controller (Copper) 8086 1112 PRO/1000 T Desktop Adapter 8086 2112 PRO/1000 T Desktop Adapter 100d 82544GC Gigabit Ethernet Controller (LOM) 1028 0123 PRO/1000 XT Network Connection 1079 891f 82544GC Based Network Connection 4c53 1080 CT8 mainboard 8086 110d 82544GC Based Network Connection 100e 82540EM Gigabit Ethernet Controller 1014 0265 PRO/1000 MT Network Connection 1014 0267 PRO/1000 MT Network Connection 1014 026a PRO/1000 MT Network Connection 1028 002e Optiplex GX260 1028 0134 PowerEdge 600SC 1028 0151 Optiplex GX270 107b 8920 PRO/1000 MT Desktop Adapter 1af4 1100 QEMU Virtual Machine 8086 001e PRO/1000 MT Desktop Adapter 8086 002e PRO/1000 MT Desktop Adapter 8086 1376 PRO/1000 GT Desktop Adapter 8086 1476 PRO/1000 GT Desktop Adapter 100f 82545EM Gigabit Ethernet Controller (Copper) 1014 0269 iSeries 1000/100/10 Ethernet Adapter 1014 028e PRO/1000 MT Network Connection 15ad 0750 PRO/1000 MT Single Port Adapter 8086 1000 PRO/1000 MT Network Connection 8086 1001 PRO/1000 MT Server Adapter 1010 82546EB Gigabit Ethernet Controller (Copper) 0e11 00db NC7170 Gigabit Server Adapter 1014 027c PRO/1000 MT Dual Port Network Adapter 15ad 0760 PRO/1000 MT Dual Port Adapter 18fb 7872 RESlink-X 1fc1 0026 Niagara 2260 Bypass Card 4c53 1080 CT8 mainboard 4c53 10a0 CA3/CR3 mainboard 8086 1011 PRO/1000 MT Dual Port Server Adapter 8086 1012 PRO/1000 MT Dual Port Server Adapter 8086 101a PRO/1000 MT Dual Port Network Connection 8086 3424 SE7501HG2 Mainboard 1011 82545EM Gigabit Ethernet Controller (Fiber) 1014 0268 iSeries Gigabit Ethernet Adapter 8086 1002 PRO/1000 MF Server Adapter 8086 1003 PRO/1000 MF Server Adapter (LX) 1012 82546EB Gigabit Ethernet Controller (Fiber) 0e11 00dc NC6170 Gigabit Server Adapter 8086 1012 PRO/1000 MF Dual Port Server Adapter 1013 82541EI Gigabit Ethernet Controller 8086 0013 PRO/1000 MT Network Connection 8086 1013 PRO/1000 MT Network Connection 8086 1113 PRO/1000 MT Desktop Adapter 1014 82541ER Gigabit Ethernet Controller 8086 0014 PRO/1000 MT Desktop Connection 8086 1014 PRO/1000 MT Network Connection 1015 82540EM Gigabit Ethernet Controller (LOM) 8086 1015 PRO/1000 MT Mobile Connection 1016 82540EP Gigabit Ethernet Controller (Mobile) 1014 052c PRO/1000 MT Mobile Connection 1179 0001 PRO/1000 MT Mobile Connection 8086 1016 PRO/1000 MT Mobile Connection 1017 82540EP Gigabit Ethernet Controller 8086 1017 PR0/1000 MT Desktop Connection 1018 82541EI Gigabit Ethernet Controller 8086 1018 PRO/1000 MT Mobile Connection 1019 82547EI Gigabit Ethernet Controller 1458 1019 GA-8IPE1000 Pro2 motherboard (865PE) 1458 e000 Intel Gigabit Ethernet (Kenai II) 8086 1019 PRO/1000 CT Desktop Connection 8086 301f D865PERL mainboard 8086 3025 D875PBZ motherboard 8086 302c D865GBF Mainboard 8086 3427 S875WP1-E mainboard 101a 82547EI Gigabit Ethernet Controller (Mobile) 8086 101a PRO/1000 CT Mobile Connection 101d 82546EB Gigabit Ethernet Controller 8086 1000 PRO/1000 MT Quad Port Server Adapter 101e 82540EP Gigabit Ethernet Controller (Mobile) 1014 0549 Thinkpad 1179 0001 PRO/1000 MT Mobile Connection 8086 101e PRO/1000 MT Mobile Connection 101f Ethernet Controller V710 for 5GBASE-T 1026 82545GM Gigabit Ethernet Controller 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 8086 1000 PRO/1000 MT Server Connection 8086 1001 PRO/1000 MT Server Adapter 8086 1002 PRO/1000 MT Server Adapter 8086 1003 PRO/1000 GT Server Adapter 8086 1026 PRO/1000 MT Server Connection 1027 82545GM Gigabit Ethernet Controller 103c 3103 NC310F PCI-X Gigabit Server Adapter 8086 1001 PRO/1000 MF Server Adapter(LX) 8086 1002 PRO/1000 MF Server Adapter(LX) 8086 1003 PRO/1000 MF Server Adapter(LX) 8086 1027 PRO/1000 MF Server Adapter 1028 82545GM Gigabit Ethernet Controller 8086 1028 PRO/1000 MB Server Connection 1029 82559 Ethernet Controller 1030 82559 InBusiness 10/100 1031 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller 1014 0209 ThinkPad A/T/X Series 104d 80e7 Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 104d 813c Vaio PCG-GRV616G 107b 5350 EtherExpress PRO/100 VE 1179 0001 EtherExpress PRO/100 VE 144d c000 EtherExpress PRO/100 VE 144d c001 EtherExpress PRO/100 VE 144d c003 EtherExpress PRO/100 VE 144d c006 vpr Matrix 170B4 1032 82801CAM (ICH3) PRO/100 VE Ethernet Controller 1033 82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller 1034 82801CAM (ICH3) PRO/100 VM Ethernet Controller 1035 82801CAM (ICH3)/82562EH (LOM) Ethernet Controller 1036 82801CAM (ICH3) 82562EH Ethernet Controller 1037 82801CAM (ICH3) Chipset Ethernet Controller 1038 82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller 0e11 0098 Evo N600c 1039 82801DB PRO/100 VE (LOM) Ethernet Controller 1014 0267 NetVista A30p 114a 0582 PC8 onboard ethernet ETH1 103a 82801DB PRO/100 VE (CNR) Ethernet Controller 103b 82801DB PRO/100 VM (LOM) Ethernet Controller 103c 82801DB PRO/100 VM (CNR) Ethernet Controller 103d 82801DB PRO/100 VE (MOB) Ethernet Controller 1014 0522 ThinkPad R40 1028 2002 Latitude D500 8086 103d 82562EZ 10/100 Ethernet Controller 103e 82801DB PRO/100 VM (MOB) Ethernet Controller 1040 536EP Data Fax Modem 16be 1040 V.9X DSP Data Fax Modem 1043 PRO/Wireless LAN 2100 3B Mini PCI Adapter 103c 08b0 tc1100 tablet 8086 2522 Samsung X10/P30 integrated WLAN 8086 2527 MIM2000/Centrino 8086 2561 Dell Latitude D800 8086 2581 Toshiba Satellite M10 1048 82597EX 10GbE Ethernet Controller 8086 a01f PRO/10GbE LR Server Adapter 8086 a11f PRO/10GbE LR Server Adapter 1049 82566MM Gigabit Network Connection 103c 30c1 Compaq 6910p 17aa 20b9 ThinkPad T61/R61 104a 82566DM Gigabit Network Connection 104b 82566DC Gigabit Network Connection 104c 82562V 10/100 Network Connection 104d 82566MC Gigabit Network Connection 104e Ethernet Controller X710 for 10 Gigabit SFP+ 104f Ethernet Controller X710 for 10 Gigabit backplane 1050 82562EZ 10/100 Ethernet Controller 1014 0287 ThinkCentre S50 1028 019d Dimension 3000 1462 728c 865PE Neo2 (MS-6728) 1462 758c MS-6758 (875P Neo) 8086 3020 D865PERL mainboard 8086 302f Desktop Board D865GBF 8086 3427 S875WP1-E mainboard 1051 82801EB/ER (ICH5/ICH5R) integrated LAN Controller 1052 PRO/100 VM Network Connection 1053 PRO/100 VM Network Connection 1054 PRO/100 VE Network Connection 1055 PRO/100 VM Network Connection 1056 PRO/100 VE Network Connection 1057 PRO/100 VE Network Connection 1059 82551QM Ethernet Controller 105b 82546GB Gigabit Ethernet Controller (Copper) 105e 82571EB/82571GB Gigabit Ethernet Controller D0/D1 (copper applications) 103c 7044 NC360T PCI Express Dual Port Gigabit Server Adapter 103c 704e Dual Port 1000Base-T (PCIe) [AD337A] 1775 1100 CR11/VR11 Single Board Computer 1775 6003 Telum GE-QT 18df 1214 2x 1GbE, PCIe x1, dual Intel 82571EB chips 8086 005e PRO/1000 PT Dual Port Server Connection 8086 105e PRO/1000 PT Dual Port Network Connection 8086 10d5 82571PT Gigabit PT Quad Port Server ExpressModule 8086 115e PRO/1000 PT Dual Port Server Adapter 8086 125e PRO/1000 PT Dual Port Server Adapter 8086 135e PRO/1000 PT Dual Port Server Adapter 105f 82571EB Gigabit Ethernet Controller 103c 704f Dual Port 1000Base-SX (PCIe) [AD338A] 8086 005a PRO/1000 PF Dual Port Server Adapter 8086 115f PRO/1000 PF Dual Port Server Adapter 8086 125f PRO/1000 PF Dual Port Server Adapter 8086 135f PRO/1000 PF Dual Port Server Adapter 1060 82571EB Gigabit Ethernet Controller 8086 0060 PRO/1000 PB Dual Port Server Connection 8086 1060 PRO/1000 PB Dual Port Server Connection 1064 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller 1043 80f8 P5GD1-VW Mainboard 1065 82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller 1066 82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller 1067 82562 EM/EX/GX - PRO/100 VM Ethernet Controller 1068 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile 103c 30d5 530 Laptop 1069 82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile 106a 82562G - PRO/100 VE (LOM) Ethernet Controller 106b 82562G - PRO/100 VE Ethernet Controller Mobile 1075 82547GI Gigabit Ethernet Controller 1028 0165 PowerEdge 750 8086 0075 PRO/1000 CT Network Connection 8086 1075 PRO/1000 CT Network Connection 1076 82541GI Gigabit Ethernet Controller 1028 0165 PRO/1000 MT Network Connection 1028 016d PRO/1000 MT Network Connection 1028 019a PRO/1000 MT Network Connection 1028 106d PRO/1000 MT Network Connection 8086 0076 PRO/1000 MT Network Connection 8086 1076 PRO/1000 MT Network Connection 8086 1176 PRO/1000 MT Desktop Adapter 8086 1276 PRO/1000 MT Network Adapter 1077 82541GI Gigabit Ethernet Controller 1179 0001 PRO/1000 MT Mobile Connection 8086 0077 PRO/1000 MT Mobile Connection 8086 1077 PRO/1000 MT Mobile Connection 1078 82541ER Gigabit Ethernet Controller 8086 1078 82541ER-based Network Connection 1079 82546GB Gigabit Ethernet Controller 103c 12a6 Dual Port 1000Base-T [A9900A] 103c 12cf Core Dual Port 1000Base-T [AB352A] 1775 10d0 V5D Single Board Computer Gigabit Ethernet 1775 ce90 CE9 1fc1 0027 Niagara 2261 Failover NIC 4c53 1090 Cx9 / Vx9 mainboard 4c53 10b0 CL9 mainboard 8086 0079 PRO/1000 MT Dual Port Network Connection 8086 1079 PRO/1000 MT Dual Port Network Connection 8086 1179 PRO/1000 MT Dual Port Server Adapter 8086 117a PRO/1000 MT Dual Port Server Adapter 107a 82546GB Gigabit Ethernet Controller 103c 12a8 Dual Port 1000base-SX [A9899A] 8086 107a PRO/1000 MF Dual Port Server Adapter 8086 127a PRO/1000 MF Dual Port Server Adapter 107b 82546GB Gigabit Ethernet Controller 8086 007b PRO/1000 MB Dual Port Server Connection 8086 107b PRO/1000 MB Dual Port Server Connection 107c 82541PI Gigabit Ethernet Controller 8086 1376 PRO/1000 GT Desktop Adapter 8086 1476 PRO/1000 GT Desktop Adapter 107d 82572EI Gigabit Ethernet Controller (Copper) 8086 1082 PRO/1000 PT Server Adapter 8086 1084 PRO/1000 PT Server Adapter 8086 1092 PRO/1000 PT Server Adapter 107e 82572EI Gigabit Ethernet Controller (Fiber) 8086 1084 PRO/1000 PF Server Adapter 8086 1085 PRO/1000 PF Server Adapter 8086 1094 PRO/1000 PF Server Adapter 107f 82572EI Gigabit Ethernet Controller 1080 FA82537EP 56K V.92 Data/Fax Modem PCI 1081 631xESB/632xESB LAN Controller Copper 1082 631xESB/632xESB LAN Controller fiber 1083 631xESB/632xESB LAN Controller SERDES 1084 631xESB/632xESB IDE Redirection 1085 631xESB/632xESB Serial Port Redirection 1086 631xESB/632xESB IPMI/KCS0 1087 631xESB/632xESB UHCI Redirection 1089 631xESB/632xESB BT 108a 82546GB Gigabit Ethernet Controller 8086 108a PRO/1000 P Dual Port Server Adapter 8086 118a PRO/1000 P Dual Port Server Adapter 108b 82573V Gigabit Ethernet Controller (Copper) 1462 176c on board on MSI 945P - NEO (MS-7176) 108c 82573E Gigabit Ethernet Controller (Copper) 108e 82573E KCS (Active Management) 108f Active Management Technology - SOL 1091 PRO/100 VM Network Connection 1092 PRO/100 VE Network Connection 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 1093 PRO/100 VM Network Connection 1094 PRO/100 VE Network Connection 1095 PRO/100 VE Network Connection 1096 80003ES2LAN Gigabit Ethernet Controller (Copper) 15d9 1096 Motherboard 15d9 8680 X7DVL-E-O motherboard 8086 3476 S5000PSLSATA Server Board 1097 631xESB/632xESB DPT LAN Controller (Fiber) 1098 80003ES2LAN Gigabit Ethernet Controller (Serdes) 1099 82546GB Gigabit Ethernet Controller (Copper) 8086 1099 PRO/1000 GT Quad Port Server Adapter 109a 82573L Gigabit Ethernet Controller 1179 ff10 PRO/1000 PL 17aa 2001 ThinkPad T60 17aa 207e ThinkPad X60/X60s 8086 109a PRO/1000 PL Network Connection 8086 309c Desktop Board D945GTP 8086 30a5 Desktop Board D975XBX 109b 82546GB PRO/1000 GF Quad Port Server Adapter 109e 82597EX 10GbE Ethernet Controller 8086 a01f PRO/10GbE CX4 Server Adapter 8086 a11f PRO/10GbE CX4 Server Adapter 10a0 82571EB PRO/1000 AT Quad Port Bypass Adapter 10a1 82571EB PRO/1000 AF Quad Port Bypass Adapter 10a4 82571EB Gigabit Ethernet Controller 8086 10a4 PRO/1000 PT Quad Port Server Adapter 8086 11a4 PRO/1000 PT Quad Port Server Adapter 10a5 82571EB Gigabit Ethernet Controller (Fiber) 8086 10a5 PRO/1000 PF Quad Port Server Adapter 8086 10a6 PRO/1000 PF Quad Port Server Adapter 10a6 82599EB 10-Gigabit Dummy Function 10a7 82575EB Gigabit Network Connection 15d9 10a7 X10DRW-i 8086 10a8 82575EB Gigabit Riser Card 10a9 82575EB Gigabit Backplane Connection 10b0 82573L PRO/1000 PL Network Connection 10b2 82573V PRO/1000 PM Network Connection 10b3 82573E PRO/1000 PM Network Connection 10b4 82573L PRO/1000 PL Network Connection 10b5 82546GB Gigabit Ethernet Controller (Copper) 103c 3109 NC340T PCI-X Quad-port Gigabit Server Adapter 8086 1099 PRO/1000 GT Quad Port Server Adapter 8086 1199 PRO/1000 GT Quad Port Server Adapter 10b6 82598 10GbE PCI-Express Ethernet Controller 10b9 82572EI Gigabit Ethernet Controller (Copper) 103c 704a 110T PCIe Gigabit Server Adapter 8086 1083 PRO/1000 PT Desktop Adapter 8086 1093 PRO/1000 PT Desktop Adapter 10ba 80003ES2LAN Gigabit Ethernet Controller (Copper) 10bb 80003ES2LAN Gigabit Ethernet Controller (Serdes) 10bc 82571EB/82571GB Gigabit Ethernet Controller (Copper) 1014 0368 4-Port 10/100/1000 Base-TX PCI Express Adapter for POWER 103c 704b NC364T PCI Express Quad Port Gigabit Server Adapter # 375-3481-01 REV:50 108e 11bc Quad Port Adapter 8086 10bc PRO/1000 PT Quad Port LP Server Adapter 8086 11bc PRO/1000 PT Quad Port LP Server Adapter (Kirkwood Low Profile) 10bd 82566DM-2 Gigabit Network Connection 1028 0211 OptiPlex 755 10bf 82567LF Gigabit Network Connection 10c0 82562V-2 10/100 Network Connection 1028 020d Inspiron 530 10c2 82562G-2 10/100 Network Connection 10c3 82562GT-2 10/100 Network Connection 10c4 82562GT 10/100 Network Connection 10c5 82562G 10/100 Network Connection 10c6 82598EB 10-Gigabit AF Dual Port Network Connection 8086 a05f 10-Gigabit XF SR Dual Port Server Adapter 8086 a15f 10-Gigabit XF SR Dual Port Server Adapter 10c7 82598EB 10-Gigabit AF Network Connection 1014 037f 10-Gigabit XF SR Server Adapter 1014 0380 10-Gigabit XF LR Server Adapter 8086 a05f 10-Gigabit XF SR Server Adapter 8086 a15f 10-Gigabit XF SR Server Adapter 8086 a16f 10-Gigabit XF SR Server Adapter 10c8 82598EB 10-Gigabit AT Network Connection 8086 a10c 10-Gigabit AT Server Adapter 8086 a11c 10-Gigabit AT Server Adapter 8086 a12c 10-Gigabit AT Server Adapter 10c9 82576 Gigabit Network Connection 103c 31ef NC362i Integrated Dual port Gigabit Server Adapter 103c 323f NC362i Integrated Dual port Gigabit Server Adapter 10a9 8028 UV-BaseIO dual-port GbE 13a3 0037 DS4100 Secure Multi-Gigabit Server Adapter with Compression 15d9 a811 H8DGU 4c52 9212 LREC9212PT Dual-port 10Gb Ethernet Network Adapter 8086 a01c Gigabit ET Dual Port Server Adapter 8086 a03c Gigabit ET Dual Port Server Adapter 8086 a04c Gigabit ET Dual Port Server Adapter 10ca 82576 Virtual Function 10cb 82567V Gigabit Network Connection 10cc 82567LM-2 Gigabit Network Connection 10cd 82567LF-2 Gigabit Network Connection 10ce 82567V-2 Gigabit Network Connection 10d3 82574L Gigabit Network Connection 103c 1785 NC112i 1-port Ethernet Server Adapter 103c 3250 NC112T PCI Express single Port Gigabit Server Adapter 1043 8369 Motherboard 1093 76e9 PCIe-8233 Ethernet Adapter 10a9 8029 Prism XL Single Port Gigabit Ethernet 15d9 0605 X8SIL 15d9 060a X7SPA-H/X7SPA-HF Motherboard 15d9 060d C7SIM-Q Motherboard 4c52 2201 LRES2201PT Single-port 1Gb Ethernet Network Adapter 8086 0001 Gigabit CT2 Desktop Adapter 8086 3578 Server Board S1200BTLR 8086 357a Server Board S1200BTS 8086 a01f Gigabit CT Desktop Adapter e4bf 50c1 PC1-GROOVE e4bf 50c2 PC2-LIMBO 10d4 Matrox Concord GE (customized Intel 82574) 10d5 82571PT Gigabit PT Quad Port Server ExpressModule 10d6 82575GB Gigabit Network Connection 8086 10d6 Gigabit VT Quad Port Server Adapter 8086 145a Gigabit VT Quad Port Server Adapter 8086 147a Gigabit VT Quad Port Server Adapter 10d8 82599EB 10 Gigabit Unprogrammed 10d9 82571EB Dual Port Gigabit Mezzanine Adapter 103c 1716 NC360m Dual Port 1GbE BL-c Adapter 10da 82571EB Quad Port Gigabit Mezzanine Adapter 103c 1717 NC364m Quad Port 1GbE BL-c Adapter 10db 82598EB 10-Gigabit Dual Port Network Connection 10dd 82598EB 10-Gigabit AT CX4 Network Connection 10de 82567LM-3 Gigabit Network Connection 10df 82567LF-3 Gigabit Network Connection 10e1 82598EB 10-Gigabit AF Dual Port Network Connection 8086 a15f 10-Gigabit SR Dual Port Express Module 10e2 82575GB Gigabit Network Connection 8086 10e2 Gigabit VT Quad Port Server Adapter 10e5 82567LM-4 Gigabit Network Connection 10e6 82576 Gigabit Network Connection 8086 a01f Gigabit EF Dual Port Server Adapter 8086 a02f Gigabit EF Dual Port Server Adapter 10e7 82576 Gigabit Network Connection 103c 31ff NC362i Integrated Dual Port BL-c Gigabit Server Adapter 4c52 9701 LREC9701EF Single-port 1Gb Ethernet Network Adapter 10e8 82576 Gigabit Network Connection 8086 a02b Gigabit ET Quad Port Server Adapter 8086 a02c Gigabit ET Quad Port Server Adapter 10ea 82577LM Gigabit Network Connection 1028 040a Latitude E6410 1028 040b Latitude E6510 e4bf 50c1 PC1-GROOVE 10eb 82577LC Gigabit Network Connection 10ec 82598EB 10-Gigabit AT CX4 Network Connection 8086 a01f 10-Gigabit CX4 Dual Port Server Adapter 8086 a11f 10-Gigabit CX4 Dual Port Server Adapter 10ed 82599 Ethernet Controller Virtual Function 10ef 82578DM Gigabit Network Connection 1028 02da OptiPlex 980 15d9 060d C7SIM-Q Motherboard 10f0 82578DC Gigabit Network Connection 10f1 82598EB 10-Gigabit AF Dual Port Network Connection 8086 a20f 10-Gigabit AF DA Dual Port Server Adapter 8086 a21f 10-Gigabit AF DA Dual Port Server Adapter 10f4 82598EB 10-Gigabit AF Network Connection 8086 106f 10-Gigabit XF LR Server Adapter 8086 a06f 10-Gigabit XF LR Server Adapter 10f5 82567LM Gigabit Network Connection 17aa 20ee ThinkPad T400 10f6 82574L Gigabit Network Connection 10f7 10 Gigabit BR KX4 Dual Port Network Connection 108e 7b12 Sun Dual 10GbE PCIe 2.0 FEM 8086 000d Ethernet Mezzanine Adapter X520-KX4-2 10f8 82599 10 Gigabit Dual Port Backplane Connection 1028 1f63 10GbE 2P X520k bNDC 103c 17d2 Ethernet 10Gb 2-port 560M Adapter 103c 18d0 Ethernet 10Gb 2-port 560FLB Adapter 1059 0111 T4007 10GbE interface 1059 0130 T4009 10GbE interface 8086 000c Ethernet X520 10GbE Dual Port KX4-KR Mezz 10f9 82599 10 Gigabit Dual Port Network Connection 10fb 82599ES 10-Gigabit SFI/SFP+ Network Connection 1028 1f72 Ethernet 10G 4P X520/I350 rNDC 103c 17d0 Ethernet 10Gb 2-port 560FLR-SFP+ Adapter 103c 17d2 Ethernet 10Gb 2-port 560M Adapter 103c 17d3 Ethernet 10Gb 2-port 560SFP+ Adapter 103c 211b Ethernet 10Gb 1-port P560FLR-SFP+ Adapter 103c 2147 Ethernet 10Gb 1-port 561i Adapter 103c 2159 Ethernet 10Gb 2-port 562i Adapter 108e 7b11 Ethernet Server Adapter X520-2 1170 004c 82599 DP 10G Mezzanine Adapter 1374 1a08 PE310G4SPI9/PE310G4SPI9L/PE310G4SPI9LA Quad Port Fiber 10 Gigabit Ethernet PCI Express Server Adapter 15d9 0611 AOC-STGN-i2S 1734 11a9 10 Gigabit Dual Port Network Connection 17aa 1071 ThinkServer X520-2 AnyFabric 17aa 4007 82599ES 10-Gigabit SFI/SFP+ Network Connection 17aa 402b 82599ES 10Gb 2-port Server Adapter X520-DA2 17aa 402f FPGA Card XC7VX690T-3FFG1157E 18d4 0c09 82599ES 10Gb 2-port SFP+ OCP Mezz Card MOP81-I-10GS2 193d 1004 560F-B 1bd4 001b 10G SFP+ DP ER102Fi4 Rack Adapter 1bd4 002f 10G SFP+ DP EP102Fi4A Adapter 1bd4 0032 10G SFP+ DP EP102Fi4 Adapter 1bd4 0067 F102I82599 1f3f 0a00 Dual-port 10-Gigabit SFI/SFP+ Network Connection 4c52 1022 LRES1022PF Dual-port 10Gb Ethernet Bypass Network Adapter 4c52 1024 LR-LINK LRES9804BF Quad-port 10Gb Ethernet Server Adapter 4c52 3002 LRES3002PF Dual-port 10Gb Ethernet Server Adapter for OCP 4c52 3012 LRES3012PF Dual-port 10Gb Ethernet Server Adapter for OCP 4c52 9801 LREC9801BF Single-port 10Gb Ethernet Server Adapter 4c52 9802 LREC9802BF Dual-port 10Gb Ethernet Server Adapter 8086 0002 Ethernet Server Adapter X520-DA2 8086 0003 Ethernet Server Adapter X520-2 8086 0006 Ethernet Server Adapter X520-1 8086 0008 Ethernet OCP Server Adapter X520-2 8086 000a Ethernet Server Adapter X520-1 8086 000c Ethernet Server Adapter X520-2 8086 10a6 82599ES 10Gb 2 port Server Adapter X520-DA2 8086 7a11 Ethernet Server Adapter X520-2 8086 7a12 Ethernet Server Adapter X520-2 10fc 82599 10 Gigabit Dual Port Network Connection 10fe 82552 10/100 Network Connection 1107 PRO/1000 MF Server Adapter (LX) 1130 82815 815 Chipset Host Bridge and Memory Controller Hub 1025 1016 Travelmate 612 TX 1043 8027 CUSL2-C/TUSL2-C Mainboard 104d 80df Vaio PCG-FX403 8086 4532 Desktop Board D815EEA2/D815EFV 8086 4557 D815EGEW Mainboard 1131 82815 815 Chipset AGP Bridge 1132 82815 Chipset Graphics Controller (CGC) 1025 1016 Travelmate 612 TX 103c 2001 e-pc 40 104d 80df Vaio PCG-FX403 8086 4532 Desktop Board D815EEA2/D815EFV 8086 4541 D815EEA Motherboard 8086 4557 D815EGEW Mainboard 1133 Thunderbolt 4 Bridge [Maple Ridge 2C 2020] 1134 Thunderbolt 4 NHI [Maple Ridge 2C 2020] 1135 Thunderbolt 4 USB Controller [Maple Ridge 2C 2020] 1136 Thunderbolt 4 Bridge [Maple Ridge 4C 2020] 1137 Thunderbolt 4 NHI [Maple Ridge 4C 2020] 1138 Thunderbolt 4 USB Controller [Maple Ridge 4C 2020] 1161 82806AA PCI64 Hub Advanced Programmable Interrupt Controller 8086 1161 82806AA PCI64 Hub APIC 1162 Xscale 80200 Big Endian Companion Chip 1190 Merrifield SD/SDIO/eMMC Controller 1191 Merrifield Serial IO HSUART Controller 1192 Merrifield Serial IO HSUART DMA Controller 1194 Merrifield Serial IO SPI Controller 1195 Merrifield Serial IO I2C Controller 1196 Merrifield Serial IO I2C Controller 1199 Merrifield GPIO Controller 119e Merrifield USB Device Controller (OTG) 11a0 Merrifield SCU IPC 11a1 Merrifield Power Management Unit 11a2 Merrifield Serial IO DMA Controller 11a5 Merrifield Serial IO PWM Controller 11c3 Quark SoC X1000 PCIe Root Port 0 11c4 Quark SoC X1000 PCIe Root Port 1 11eb Simics NVMe Controller 1200 IXP1200 Network Processor 172a 0000 AEP SSL Accelerator 1209 8255xER/82551IT Fast Ethernet Controller 140b 0610 PMC610 quad Ethernet board 1af4 1100 QEMU Virtual Machine 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard 4c53 1070 PC6 mainboard 1221 82092AA PCI to PCMCIA Bridge 1222 82092AA IDE Controller 1223 SAA7116 1225 82452KX/GX [Orion] 1226 82596 PRO/10 PCI 1227 82865 EtherExpress PRO/100A 1228 82556 EtherExpress PRO/100 Smart 1229 82557/8/9/0/1 Ethernet Pro 100 0e11 3001 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3002 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3003 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3004 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3005 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3006 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3007 82559 Fast Ethernet LOM with Alert on LAN* 0e11 b01e NC3120 Fast Ethernet NIC 0e11 b01f NC3122 Fast Ethernet NIC (dual port) 0e11 b02f NC1120 Ethernet NIC 0e11 b04a Netelligent 10/100TX NIC with Wake on LAN 0e11 b0c6 NC3161 Fast Ethernet NIC (embedded, WOL) 0e11 b0c7 NC3160 Fast Ethernet NIC (embedded) 0e11 b0d7 NC3121 Fast Ethernet NIC (WOL) 0e11 b0dd NC3131 Fast Ethernet NIC (dual port) 0e11 b0de NC3132 Fast Ethernet Module (dual port) 0e11 b0e1 NC3133 Fast Ethernet Module (100-FX) 0e11 b134 NC3163 Fast Ethernet NIC (embedded, WOL) 0e11 b13c NC3162 Fast Ethernet NIC (embedded) 0e11 b144 NC3123 Fast Ethernet NIC (WOL) 0e11 b163 NC3134 Fast Ethernet NIC (dual port) 0e11 b164 NC3135 Fast Ethernet Upgrade Module (dual port) 0e11 b1a4 NC7131 Gigabit Server Adapter 1014 005c 82558B Ethernet Pro 10/100 1014 01bc 82559 Fast Ethernet LAN On Motherboard 1014 01f1 10/100 Ethernet Server Adapter 1014 01f2 10/100 Ethernet Server Adapter 1014 0207 Ethernet Pro/100 S 1014 0232 10/100 Dual Port Server Adapter 1014 023a ThinkPad R30 1014 105c Netfinity 10/100 1014 2205 ThinkPad A22p 1014 305c 10/100 EtherJet Management Adapter 1014 405c 10/100 EtherJet Adapter with Alert on LAN 1014 505c 10/100 EtherJet Secure Management Adapter 1014 605c 10/100 EtherJet Secure Management Adapter 1014 705c 10/100 Netfinity 10/100 Ethernet Security Adapter 1014 805c 10/100 Netfinity 10/100 Ethernet Security Adapter 1028 009b 10/100 Ethernet Server Adapter 1028 00ce 10/100 Ethernet Server Adapter 1033 8000 PC-9821X-B06 1033 8016 PK-UG-X006 1033 801f PK-UG-X006 1033 8026 PK-UG-X006 1033 8063 82559-based Fast Ethernet Adapter 1033 8064 82559-based Fast Ethernet Adapter 103c 10c0 NetServer 10/100TX 103c 10c3 NetServer 10/100TX 103c 10ca NetServer 10/100TX 103c 10cb NetServer 10/100TX 103c 10e3 NetServer 10/100TX 103c 10e4 NetServer 10/100TX 103c 1200 NetServer 10/100TX 108e 10cf EtherExpress PRO/100(B) 10c3 1100 SmartEther100 SC1100 10cf 1115 8255x-based Ethernet Adapter (10/100) 10cf 1143 8255x-based Ethernet Adapter (10/100) 110a 008b 82551QM Fast Ethernet Multifuction PCI/CardBus Controller 114a 0582 PC8 onboard ethernet ETH2 1179 0001 8255x-based Ethernet Adapter (10/100) 1179 0002 PCI FastEther LAN on Docker 1179 0003 8255x-based Fast Ethernet 1259 2560 AT-2560 100 1259 2561 AT-2560 100 FX Ethernet Adapter 1266 0001 NE10/100 Adapter 13e9 1000 6221L-4U 144d 2501 SEM-2000 MiniPCI LAN Adapter 144d 2502 SEM-2100IL MiniPCI LAN Adapter 1668 1100 EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem) 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 1af4 1100 QEMU Virtual Machine 4c53 1080 CT8 mainboard 4c53 10e0 PSL09 PrPMC 8086 0001 EtherExpress PRO/100B (TX) 8086 0002 EtherExpress PRO/100B (T4) 8086 0003 EtherExpress PRO/10+ 8086 0004 EtherExpress PRO/100 WfM 8086 0005 82557 10/100 8086 0006 82557 10/100 with Wake on LAN 8086 0007 82558 10/100 Adapter 8086 0008 82558 10/100 with Wake on LAN 8086 0009 82558B PRO/100+ PCI (TP) 8086 000a EtherExpress PRO/100+ Management Adapter 8086 000b EtherExpress PRO/100+ 8086 000c EtherExpress PRO/100+ Management Adapter 8086 000d EtherExpress PRO/100+ Alert On LAN II* Adapter 8086 000e EtherExpress PRO/100+ Management Adapter with Alert On LAN* 8086 000f EtherExpress PRO/100 Desktop Adapter 8086 0010 EtherExpress PRO/100 S Management Adapter 8086 0011 EtherExpress PRO/100 S Management Adapter 8086 0012 EtherExpress PRO/100 S Advanced Management Adapter (D) 8086 0013 EtherExpress PRO/100 S Advanced Management Adapter (E) 8086 0030 EtherExpress PRO/100 Management Adapter with Alert On LAN* GC 8086 0031 EtherExpress PRO/100 Desktop Adapter 8086 0040 EtherExpress PRO/100 S Desktop Adapter 8086 0041 EtherExpress PRO/100 S Desktop Adapter 8086 0042 EtherExpress PRO/100 Desktop Adapter 8086 0050 EtherExpress PRO/100 S Desktop Adapter 8086 1009 EtherExpress PRO/100+ Server Adapter 8086 100c EtherExpress PRO/100+ Server Adapter (PILA8470B) 8086 1012 EtherExpress PRO/100 S Server Adapter (D) 8086 1013 EtherExpress PRO/100 S Server Adapter (E) 8086 1015 EtherExpress PRO/100 S Dual Port Server Adapter 8086 1017 EtherExpress PRO/100+ Dual Port Server Adapter 8086 1030 EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server 8086 1040 EtherExpress PRO/100 S Server Adapter 8086 1041 EtherExpress PRO/100 S Server Adapter 8086 1042 EtherExpress PRO/100 Server Adapter 8086 1050 EtherExpress PRO/100 S Server Adapter 8086 1051 EtherExpress PRO/100 Server Adapter 8086 1052 EtherExpress PRO/100 Server Adapter 8086 10f0 EtherExpress PRO/100+ Dual Port Adapter 8086 1229 82557/8/9 [Ethernet Pro 100] 8086 2009 EtherExpress PRO/100 S Mobile Adapter 8086 200d EtherExpress PRO/100 Cardbus 8086 200e EtherExpress PRO/100 LAN+V90 Cardbus Modem 8086 200f EtherExpress PRO/100 SR Mobile Adapter 8086 2010 EtherExpress PRO/100 S Mobile Combo Adapter 8086 2013 EtherExpress PRO/100 SR Mobile Combo Adapter 8086 2016 EtherExpress PRO/100 S Mobile Adapter 8086 2017 EtherExpress PRO/100 S Combo Mobile Adapter 8086 2018 EtherExpress PRO/100 SR Mobile Adapter 8086 2019 EtherExpress PRO/100 SR Combo Mobile Adapter 8086 2101 EtherExpress PRO/100 P Mobile Adapter 8086 2102 EtherExpress PRO/100 SP Mobile Adapter 8086 2103 EtherExpress PRO/100 SP Mobile Adapter 8086 2104 EtherExpress PRO/100 SP Mobile Adapter 8086 2105 EtherExpress PRO/100 SP Mobile Adapter 8086 2106 EtherExpress PRO/100 P Mobile Adapter 8086 2107 EtherExpress PRO/100 Network Connection 8086 2108 EtherExpress PRO/100 Network Connection 8086 2200 EtherExpress PRO/100 P Mobile Combo Adapter 8086 2201 EtherExpress PRO/100 P Mobile Combo Adapter 8086 2202 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2203 EtherExpress PRO/100+ MiniPCI 8086 2204 EtherExpress PRO/100+ MiniPCI 8086 2205 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2206 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2207 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2208 EtherExpress PRO/100 P Mobile Combo Adapter 8086 2402 EtherExpress PRO/100+ MiniPCI 8086 2407 EtherExpress PRO/100+ MiniPCI 8086 2408 EtherExpress PRO/100+ MiniPCI 8086 2409 EtherExpress PRO/100+ MiniPCI 8086 240f EtherExpress PRO/100+ MiniPCI 8086 2410 EtherExpress PRO/100+ MiniPCI 8086 2411 EtherExpress PRO/100+ MiniPCI 8086 2412 EtherExpress PRO/100+ MiniPCI 8086 2413 EtherExpress PRO/100+ MiniPCI 8086 3000 82559 Fast Ethernet LAN on Motherboard 8086 3001 82559 Fast Ethernet LOM with Basic Alert on LAN* 8086 3002 82559 Fast Ethernet LOM with Alert on LAN II* 8086 3006 EtherExpress PRO/100 S Network Connection 8086 3007 EtherExpress PRO/100 S Network Connection 8086 3008 EtherExpress PRO/100 Network Connection 8086 3010 EtherExpress PRO/100 S Network Connection 8086 3011 EtherExpress PRO/100 S Network Connection 8086 3012 EtherExpress PRO/100 Network Connection 8086 301a S845WD1-E mainboard 8086 3411 SDS2 Mainboard 122d 430FX - 82437FX TSC [Triton I] 122e 82371FB PIIX ISA [Triton I] 1230 82371FB PIIX IDE [Triton I] 1231 DSVD Modem 1234 430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX) 1235 430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP) 1237 440FX - 82441FX PMC [Natoma] 01de fffe Propolis Virtual 440FX 1af4 1100 Qemu virtual machine 1239 82371FB PIIX IDE Interface 123b 82380PB PCI to PCI Docking Bridge 123c 82380AB (MISA) Mobile PCI-to-ISA Bridge 123d 683053 Programmable Interrupt Device 123e 82466GX (IHPC) Integrated Hot-Plug Controller (hidden mode) 123f 82466GX Integrated Hot-Plug Controller (IHPC) 1240 82752 (752) AGP Graphics Accelerator 124b 82380FB (MPCI2) Mobile Docking Controller 124c Ethernet Connection E823-L for backplane 124d Ethernet Connection E823-L for SFP 124e Ethernet Connection E823-L/X557-AT 10GBASE-T 124f Ethernet Connection E823-L 1GbE 1250 430HX - 82439HX TXC [Triton II] 125b Ethernet Controller I226-LM 125c Ethernet Controller I226-V 125d Ethernet Controller I226-IT 12d1 Ethernet Controller E830-CC for backplane 12d2 Ethernet Controller E830-CC for QSFP 8086 0001 Ethernet Network Adapter E830-C-Q2 8086 0002 Ethernet Network Adapter E830-C-Q2 for OCP 3.0 8086 0003 Ethernet Network Adapter E830-CC-Q1 8086 0004 Ethernet Network Adapter E830-CC-Q1 for OCP 3.0 12d3 Ethernet Controller E830-CC for SFP 8086 0001 Ethernet Network Adapter E830-XXV-2 for OCP 3.0 8086 0003 Ethernet Network Adapter E830-XXV-2 8086 0004 Ethernet Network Adapter E830-XXV-4 for OCP 3.0 8086 0005 Ethernet Network Adapter E830-XXV-8F for OCP 3.0 8086 0006 Ethernet Network Adapter E830-XXV-8F 8086 0007 Ethernet Network Adapter E830-XXV-4F 12d4 Ethernet Controller E830-CC for SFP-DD 12d5 Ethernet Controller E830-C for backplane 12d8 Ethernet Controller E830-C for QSFP 12da Ethernet Controller E830-C for SFP 12dc Ethernet Controller E830-L for backplane 12dd Ethernet Controller E830-L for QSFP 12de Ethernet Controller E830-L for SFP 8086 0001 Ethernet Network Adapter E830-XXV-2 for OCP 3.0 8086 0003 Ethernet Network Adapter E830-XXV-2 1360 82806AA PCI64 Hub PCI Bridge 1361 82806AA PCI64 Hub Controller (HRes) 8086 1361 82806AA PCI64 Hub Controller (HRes) 8086 8000 82806AA PCI64 Hub Controller (HRes) 1452 Infrastructure Data Path Function 1457 NVMe Data Path Function 145c Infrastructure Data Path Function 1460 82870P2 P64H2 Hub PCI Bridge 1461 82870P2 P64H2 I/OxAPIC 15d9 3480 P4DP6 4c53 1090 Cx9/Vx9 mainboard 1462 82870P2 P64H2 Hot Plug Controller 1501 82567V-3 Gigabit Network Connection 1502 82579LM Gigabit Network Connection (Lewisville) 1028 04a3 Precision M4600 17aa 21ce ThinkPad T520 17aa 3070 ThinkCentre M91p 8086 3578 Server Board S1200BTLR 8086 357a Server Board S1200BTS 1503 82579V Gigabit Network Connection 1043 849c P8P67 Deluxe Motherboard 10cf 161c LIFEBOOK E752 8086 200d DH61CR motherboard 1507 Ethernet Express Module X520-P2 1508 82598EB Gigabit BX Network Connection 1509 82580 Gigabit Network Connection 150a 82576NS Gigabit Network Connection 150b 82598EB 10-Gigabit AT2 Server Adapter 8086 a10c 82598EB 10-Gigabit AT2 Server Adapter 8086 a11c 82598EB 10-Gigabit AT2 Server Adapter 8086 a12c 82598EB 10-Gigabit AT2 Server Adapter 150c 82583V Gigabit Network Connection 150d 82576 Gigabit Backplane Connection 8086 a10c Gigabit ET Quad Port Mezzanine Card 150e 82580 Gigabit Network Connection 103c 1780 NC365T 4-port Ethernet Server Adapter 8086 12a1 Ethernet Server Adapter I340-T4 8086 12a2 Ethernet Server Adapter I340-T4 150f 82580 Gigabit Fiber Network Connection 1510 82580 Gigabit Backplane Connection 1511 82580 Gigabit SFP Connection 1513 CV82524 Thunderbolt Controller [Light Ridge 4C 2010] 1514 Ethernet X520 10GbE Dual Port KX4 Mezz 8086 000b Ethernet X520 10GbE Dual Port KX4 Mezz 1515 X540 Ethernet Controller Virtual Function 1516 82580 Gigabit Network Connection 8086 12b1 Ethernet Server Adapter I340-T2 8086 12b2 Ethernet Server Adapter I340-T2 1517 82599ES 10 Gigabit Network Connection 1137 006a UCS CNA M61KR-I Intel Converged Network Adapter 1518 82576NS SerDes Gigabit Network Connection 151a DSL2310 Thunderbolt Controller [Eagle Ridge 2C 2011] 151b CVL2510 Thunderbolt Controller [Light Peak 2C 2010] 151c 82599 10 Gigabit TN Network Connection 108e 7b13 Dual 10GBASE-T LP 151d Ethernet Connection E823-L for QSFP 1520 I350 Ethernet Controller Virtual Function 1521 I350 Gigabit Network Connection 1028 0602 Gigabit 2P I350-t LOM 1028 0693 Gigabit 2P I350-t LOM 1028 06e2 Gigabit 2P I350-t LOM 1028 0757 Gigabit I350-t LOM 1028 075a Gigabit I350-t LOM 1028 1f60 Gigabit 4P I350-t rNDC 1028 1f62 Gigabit 4P X540/I350 rNDC 1028 1fa8 Ethernet 10G 4P X550/I350 rNDC 1028 1fa9 Ethernet 10G 4P X550 rNDC 1028 1faa Gigabit 4P X550/I350 rNDC 1028 ff9a Gigabit 4P X710/I350 rNDC 103c 17d1 Ethernet 1Gb 4-port 366FLR Adapter 103c 2003 Ethernet 1Gb 2-port 367i Adapter 103c 2226 Ethernet 1Gb 1-port 364i Adapter 103c 337f Ethernet 1Gb 2-port 361i Adapter 103c 3380 Ethernet 1Gb 4-port 366i Adapter 103c 339e Ethernet 1Gb 2-port 361T Adapter 103c 8157 Ethernet 1Gb 4-port 366T Adapter 108e 7b16 Quad Port GbE PCIe 2.0 ExpressModule, UTP 108e 7b18 Quad Port GbE PCIe 2.0 Low Profile Adapter, UTP 1093 7648 PCIe-8237R Ethernet Adapter 1093 7649 PCIe-8236 Ethernet Adapter 1093 76b1 PCIe-8237R-S Ethernet Adapter 1093 775b PCIe-8237 Ethernet Adapter 10a9 802a UV2-BaseIO dual-port GbE 1137 023e 1GigE I350 LOM 15d9 0000 AOC-SGP-i4 15d9 0652 Dual Port i350 GbE MicroLP [AOC-CGP-i2] 15d9 1521 X10DRW-i 17aa 1074 ThinkServer I350-T4 AnyFabric 17aa 4005 I350 Gigabit Network Connection 18d4 0c07 I350 1Gb 2-port RJ45 OCP Mezz Card MOP41-I-1GT2 193d 1005 360T-B 193d 1007 360T-L # NIC-ETH360T-3S-4P OCP3.0 4x1G Base-T Card 193d 1080 NIC-ETH360T-3S-4P 1bd4 001d 1G base-T QP EP014Ti1 Adapter 1bd4 0035 1G base-T QP EP014Ti1 Adapter 1bd4 0066 F014I350 1bd4 008a F012I350 1bd4 008d ENFI1100-T4 4c52 0350 I350 1Gb 2-port Ethernet Network Adapter 4c52 1350 LREC9222HT Dual-port 1Gb Ethernet Network Adapter 4c52 2003 LRES2003PT Dual-port 1Gb Ethernet Network Adapter 4c52 2005 LRES2005PT Quad-port 1Gb Ethernet Network Adapter 4c52 2006 LRES2006PT Six-port 1Gb Ethernet Network Adapter 4c52 2008 LRES2008PT Eight-port 1Gb Ethernet Network Adapter 4c52 2018 LRES2018PT Twelve-port 1Gb Ethernet Network Adapter 4c52 2202 LRES2202PT Dual-port 1Gb Ethernet Network Adapter 4c52 2217 LRES2217PT Dual-port 1Gb Ethernet Network Adapter 4c52 3010 LRES3010PF Dual-port 1Gb Ethernet Server Adapter for OCP 4c52 3023 LRES3023PT Quad-port 1Gb Ethernet Server Adapter for OCP 4c52 3041 LRES3041PT Dual-port 1Gb Ethernet Server Adapter for OCP 4c52 4006 LRES4006MT Quad-port 1Gb Ethernet Netwaork Adapter 4c52 8001 LRES8001PT Quad-port 1Gb Ethernet Bypass Network Adapter 4c52 9712 LREC9712HT Dual-port 1Gb Ethernet Bypass Network Adapter 8086 0001 Ethernet Server Adapter I350-T4 8086 0002 Ethernet Server Adapter I350-T2 8086 0003 Ethernet Network Adapter I350-T4 for OCP NIC 3.0 8086 00a1 Ethernet Server Adapter I350-T4 8086 00a2 Ethernet Server Adapter I350-T2 8086 00a3 Ethernet Network Adapter I350-T4 for OCP NIC 3.0 8086 00aa Ethernet Network Adapter I350-T4 for OCP NIC 3.0 8086 4017 Ethernet Network Adapter I350-T4 for OCP NIC 3.0 8086 5001 Ethernet Server Adapter I350-T4 8086 5002 Ethernet Server Adapter I350-T2 8086 5003 Ethernet 1G 4P I350-t OCP 1522 I350 Gigabit Fiber Network Connection 108e 7b17 Quad Port GbE PCIe 2.0 ExpressModule, MMF 108e 7b19 Dual Port GbE PCIe 2.0 Low Profile Adapter, MMF 4c52 1006 LRES1006PF Six-port 1Gb Ethernet Network Adapter 4c52 2203 LRES2203PF Dual-port 1Gb Ethernet Network Adapter 4c52 8030 LRES8030PF Dual-port 1Gb Ethernet Bypass Network Adapter 4c52 9710 LREC9710HF Single-port 1Gb Ethernet Network Adapter 4c52 9712 LREC9712HF Dual-port 1Gb Ethernet Network Adapter 4c52 9714 LREC9714HF Quad-port 1Gb Ethernet Network Adapter 8086 0002 Ethernet Server Adapter I350-T2 8086 0003 Ethernet Server Adapter I350-F4 8086 0004 Ethernet Server Adapter I350-F2 8086 0005 Ethernet Server Adapter I350-F1 8086 00a2 Ethernet Server Adapter I350-T2 8086 00a3 Ethernet Server Adapter I350-F4 8086 00a4 Ethernet Server Adapter I350-F2 1523 I350 Gigabit Backplane Connection 1028 0060 Gigabit 2P I350 LOM 1028 1f9b Gigabit 4P I350-t bNDC 103c 1784 Ethernet 1Gb 2-port 361FLB Adapter 103c 18d1 Ethernet 1Gb 2-port 361FLB Adapter 103c 1989 Ethernet 1Gb 2-port 363i Adapter 103c 339f Ethernet 1Gb 4-port 366M Adapter 4c52 9714 LREC9714HT Quad-port 10Gb Ethernet Network Adapter 8086 1f52 1GbE 4P I350 Mezz 1524 I350 Gigabit Connection 1525 82567V-4 Gigabit Network Connection 1526 82576 Gigabit Network Connection 8086 a05c Gigabit ET2 Quad Port Server Adapter 8086 a06c Gigabit ET2 Quad Port Server Adapter 1527 82580 Gigabit Fiber Network Connection 8086 0001 Ethernet Server Adapter I340-F4 8086 0002 Ethernet Server Adapter I340-F4 1528 Ethernet Controller 10-Gigabit X540-AT2 1028 1f61 Ethernet 10G 4P X540/I350 rNDC 103c 192d 561FLR-T 2-port 10Gb Ethernet Adapter 103c 2004 Ethernet 10Gb 2-port 561i Adapter 103c 211a Ethernet 10Gb 2-port 561T Adapter 108e 4853 Ethernet Controller 10-Gigabit X540-AT2 108e 7b14 Sun Dual Port 10 GbE PCIe 2.0 ExpressModule, Base-T 108e 7b15 Sun Dual Port 10 GbE PCIe 2.0 Low Profile Adapter, Base-T 1137 00bf Ethernet Converged Network Adapter X540-T2 1170 0052 Ethernet Controller 10-Gigabit X540-AT2 15d9 0734 AOC-STG-I2T 17aa 1073 ThinkServer X540-T2 AnyFabric 17aa 4006 Ethernet Controller 10-Gigabit X540-AT2 1bd4 001a 10G base-T DP ER102Ti3 Rack Adapter 1bd4 0033 10G base-T DP EP102Ti3 Adapter 1bd4 0034 10G base-T DP EP102Ti3A Adapter 4c52 9802 LREC9802BT Dual-port 10Gb Ethernet Network Adapter 8086 0001 Ethernet Converged Network Adapter X540-T2 8086 0002 Ethernet Converged Network Adapter X540-T1 8086 001a Ethernet Converged Network Adapter X540-T2 8086 00a2 Ethernet Converged Network Adapter X540-T1 8086 1f61 Ethernet 10G 4P X540/I350 rNDC 8086 5003 Ethernet 10G 2P X540-t Adapter 8086 5004 Ethernet 10G 2P X540-t Adapter 1529 82599 10 Gigabit Dual Port Network Connection with FCoE 152a 82599 10 Gigabit Dual Port Backplane Connection with FCoE 152e 82599 Virtual Function 152f I350 Virtual Function 1530 X540 Virtual Function 1531 I210 Gigabit Unprogrammed 1533 I210 Gigabit Network Connection 1028 0758 I210 PCIe 1Gb 1-Port RJ45 LOM 1028 0759 I210 PCIe 1Gb 1-Port RJ45 LOM 1028 0b35 I210 Gigabit Network Connection 103c 0003 Ethernet I210-T1 GbE NIC 1059 0180 RD10019 1GbE interface 1093 7706 Compact Vision System Ethernet Adapter 10a9 802c UV300 BaseIO single-port GbE 10a9 802d UV3000 BaseIO GbE Network 17aa 1059 I210 Gigabit Network Connection 17aa 1100 ThinkServer Ethernet Server Adapter 17aa 1509 I210 Gigabit Network Connection 17aa 404d I210 PCIe 1Gb 1-Port RJ45 LOM 17aa 407a I210 PCIe 1Gb 1-Port RJ45 LOM 4c52 1051 LRES1051PT Dual-port 1Gb Ethernet Network Adapter 4c52 1210 LREC9204CT Single-port 1Gb Ethernet Network Adapter 4c52 2057 LRES2057PT Dual-port 1Gb Ethernet Network Adapter 4c52 2206 LRES2206PT Single-port 1Gb Ethernet Network Adapter 4c52 2210 LRES2210PT Single-port 1Gb Ethernet Network Adapter 4c52 2211 LRES2211PT Single-port 1Gb Ethernet Network Adapter 4c52 2214 LRES2214PT Single-port 1Gb Ethernet Network Adapter 4c52 3002 LRES3002PT Dual-port 1Gb Ethernet Network Adapter 4c52 3004 LRES3004PT Quad-port 1Gb Ethernet Network Adapter 8086 0001 Ethernet Server Adapter I210-T1 8086 0002 Ethernet Server Adapter I210-T1 1536 I210 Gigabit Fiber Network Connection 4c52 2204 LRES2204PT Single-port 1Gb Ethernet Network Adapter 4c52 2212 LRES2212PF Single-port 1Gb Ethernet Network Adapter 4c52 2213 LRES2213PF Single-port 1Gb Ethernet Network Adapter 4c52 6230 LREC6230PF Single-port 1Gb Ethernet Network Adapter 1537 I210 Gigabit Backplane Connection 1059 0110 T4005 1GbE interface 1059 0111 T4007 1GbE interface 1059 0120 T4008 1GbE interface 1059 0130 T4009 1GbE interface 1059 0140 T2035 1GbE interface 1059 0150 RD-01068 1GbE interface 1059 0170 RD-01213 10GbE interface 1538 I210 Gigabit Network Connection 1059 0190 RD20057 M.2 Dual 1GbE-T1 15m 1539 I211 Gigabit Network Connection 153a Ethernet Connection I217-LM 1028 0617 Precision T5810 103c 1909 ZBook 15 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 309f ThinkCentre M83 153b Ethernet Connection I217-V 1547 DSL3510 Thunderbolt Controller [Cactus Ridge 4C 2012] 1548 DSL3310 Thunderbolt Controller [Cactus Ridge 2C 2012] 1549 DSL2210 Thunderbolt Controller [Port Ridge 1C 2011] 154a Ethernet Server Adapter X520-4 8086 011a Ethernet Converged Network Adapter X520-4 8086 011b Ethernet Converged Network Adapter X520-4 8086 011c Ethernet Converged Network Adapter X520-4 154c Ethernet Virtual Function 700 Series 154d Ethernet 10G 2P X520 Adapter 8086 7b11 10GbE 2P X520 Adapter 1557 82599 10 Gigabit Network Connection 17aa 4008 82599EN 10 Gigabit Network Connection 1bd4 001c 10G SFP+ SP ER101Fi4 Rack Adapter 1bd4 0030 10G SFP+ SP EP101Fi4A Adapter 8086 0001 Ethernet OCP Server Adapter X520-1 1558 Ethernet Converged Network Adapter X520-Q1 8086 011a Ethernet Converged Network Adapter X520-Q1 8086 011b Ethernet Converged Network Adapter X520-Q1 1559 Ethernet Connection I218-V 155a Ethernet Connection I218-LM 17aa 2214 ThinkPad X240 155c Ethernet Server Bypass Adapter 8086 0001 Ethernet Server Bypass Adapter X540-T2 155d Ethernet Server Bypass Adapter 8086 0001 Ethernet Server Bypass Adapter X520-SR2 8086 0002 Ethernet Server Bypass Adapter X520-LR2 1560 Ethernet Controller X540 4c52 9801 LREC9801BT Single-port 10Gb Ethernet Network Adapter 1563 Ethernet Controller X550 1028 1fa8 Ethernet 10G 4P X550/I350 rNDC 1028 1fa9 Ethernet 10G 4P X550 rNDC 1137 02b2 X550-TX 10 Gig LOM 1137 02b3 X550-TX 10 Gig LOM 1170 0001 Intel Ethernet Controller X550-T2 OCP card 14c0 1201 X550 10Gb 2P RJ45 OCP Mezz 1590 00d1 Ethernet 10Gb 2-port 562T Adapter 1590 00d2 Ethernet 10Gb 2-port 562FLR-T Adapter 16b8 7217 Twin10G Thunderbolt 3 Edition 18d4 0c08 X550 10Gb 2-port RJ45 OCP Mezz Card MOP81-I-10GT2 193d 1008 560T-B 193d 1009 560T-L 193d 1011 UN-NIC-ETH563T-sL-2P 4c52 1025 LRES1025PT Dual-port 10Gb Ethernet Network Adapter 4c52 9812 LREC9812BT Dual-port 10Gb Ethernet Network Adapter 8086 0001 Ethernet Converged Network Adapter X550-T2 8086 001a Ethernet Converged Network Adapter X550-T2 8086 001b Ethernet Server Adapter X550-T2 for OCP 8086 001d Ethernet 10G 2P X550-t Adapter 8086 0022 Ethernet Converged Network Adapter X550-T2 1564 X550 Virtual Function 1565 X550 Virtual Function 1566 DSL4410 Thunderbolt NHI [Redwood Ridge 2C 2013] 1567 DSL4410 Thunderbolt Bridge [Redwood Ridge 2C 2013] 1568 DSL4510 Thunderbolt NHI [Redwood Ridge 4C 2013] 1569 DSL4510 Thunderbolt Bridge [Redwood Ridge 4C 2013] 156a DSL5320 Thunderbolt 2 NHI [Falcon Ridge 2C 2013] 156b DSL5320 Thunderbolt 2 Bridge [Falcon Ridge 2C 2013] 156c DSL5520 Thunderbolt 2 NHI [Falcon Ridge 4C 2013] 156d DSL5520 Thunderbolt 2 Bridge [Falcon Ridge 4C 2013] 156f Ethernet Connection I219-LM 1028 06dc Latitude E7470 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 1570 Ethernet Connection I219-V 1571 Ethernet Virtual Function 700 Series 1572 Ethernet Controller X710 for 10GbE SFP+ 1028 0000 Ethernet 10G X710 rNDC 1028 1f99 Ethernet 10G 4P X710/I350 rNDC 1028 1f9c Ethernet 10G 4P X710 SFP+ rNDC 103c 0000 Ethernet 10Gb 562SFP+ Adapter 103c 22fc Ethernet 10Gb 2-port 562FLR-SFP+ Adapter 103c 22fd Ethernet 10Gb 2-port 562SFP+ Adapter 1137 0000 Ethernet Converged NIC X710-DA 1137 013b Ethernet Converged NIC X710-DA4 1137 020a Ethernet Converged NIC X710-DA2 1590 0000 Ethernet Controller X710 for 10GbE SFP+ 1590 0225 Ethernet 10GbE 4P 563SFP+ Adapter 1590 022f Ethernet 10Gb 2-port 564i Communication Board 17aa 0000 ThinkServer X710 AnyFabric for 10GbE SFP+ 17aa 4001 ThinkServer X710-4 AnyFabric for 10GbE SFP+ 17aa 4002 ThinkServer X710-2 AnyFabric for 10GbE SFP+ 193d 1020 NIC-ETH561F-sL-4x10G 193d 1021 NIC-ETH561F-sL-2x10G # NIC-ETH561F-3S-2P OCP3.0 2x10G SFP+ Card 193d 1081 NIC-ETH561F-3S-2P 19e5 d11c Ethernet 2-port X710 10Gb SFP+ Adapter SP330 1bd4 0042 10G SFP+ DP EP102Fi4 Adapter 1bd4 0056 Ethernet Network Adapter X710-BM2 for OCP NIC 3.0 1bd4 0065 F102IX710 1bd4 0074 Ethernet Network Adapter X710-BM2 for lldp 1bd4 008b F102IX710 4c52 3003 LRES3003PF Quad-port 10Gb Ethernet Server Adapter for OCP 4c52 3007 LRES3007PF Quad-port 10Gb Ethernet Server Adapter for OCP 4c52 3039 LRES3039PF Dual-port 10Gb Ethernet Server Adapter for OCP 4c52 8003 LRES8003PT Quad-port 10Gb Ethernet Bypass Network Adapter 4c52 9804 LREC9804BF Quad-port 10Gb Ethernet Server Adapter 4c52 9812 LREC9812BF Dual-port 10Gb Ethernet Server Adapter 8086 0000 Ethernet Converged Network Adapter X710 8086 0001 Ethernet Converged Network Adapter X710-4 8086 0002 Ethernet Converged Network Adapter X710-4 8086 0004 Ethernet Converged Network Adapter X710-4 8086 0005 Ethernet Converged Network Adapter X710 8086 0006 Ethernet Converged Network Adapter X710 8086 0007 Ethernet Converged Network Adapter X710-2 8086 0008 Ethernet Converged Network Adapter X710-2 8086 0009 Ethernet Controller X710 for 10GbE SFP+ 8086 000a Ethernet Controller X710 for 10GbE SFP+ 8086 000b Ethernet Server Adapter X710-DA2 for OCP 8086 000d Ethernet Controller X710 for 10GbE SFP+ 8086 000e Ethernet Server Adapter OCP X710-2 8086 000f Ethernet Server Adapter OCP X710-2 8086 0010 Ethernet Converged Network Adapter X710 8086 0011 Ethernet Network Adapter X710-2 for OCP NIC 3.0 8086 0012 Ethernet Network Adapter X710-4 for OCP NIC 3.0 8086 0013 Ethernet 10G 2P X710 OCP 8086 0014 Ethernet 10G 4P X710 OCP 8086 0015 Ethernet Server Adapter X710-DA2 for OCP 8086 00a1 Ethernet Network Adapter X710-2 for OCP NIC 3.0 8086 00a2 Ethernet Network Adapter X710-4 for OCP NIC 3.0 8086 4005 Ethernet Controller X710 for 10GbE SFP+ 8086 4006 Ethernet Controller X710 for 10GbE SFP+ 8086 4007 Ethernet Controller X710 for 10GbE SFP+ 1574 Ethernet Controller XL710 Emulation 1575 DSL6340 Thunderbolt 3 NHI [Alpine Ridge 2C 2015] 1576 DSL6340 Thunderbolt 3 Bridge [Alpine Ridge 2C 2015] 1577 DSL6540 Thunderbolt 3 NHI [Alpine Ridge 4C 2015] 1578 DSL6540 Thunderbolt 3 Bridge [Alpine Ridge 4C 2015] 157b I210 Gigabit Network Connection ea50 cc10 RXi2-BP 157c I210 Gigabit Backplane Connection 157d DSL5110 Thunderbolt 2 NHI (Low Power) [Win Ridge 2C 2014] 157e DSL5110 Thunderbolt 2 Bridge (Low Power) [Win Ridge 2C 2014] 1580 Ethernet Controller XL710 for 40GbE backplane 1581 Ethernet Controller X710 for 10GbE backplane 1028 0000 Ethernet 10G X710-k bNDC 1028 1f98 Ethernet 10G 4P X710-k bNDC 1028 1f9e Ethernet 10G 2P X710-k bNDC 1059 0150 RD-01068 10GbE-KR interface 1059 0170 RD-01213 10GbE interface 1590 0000 Ethernet 2-port 563i Adapter 1590 00f8 Ethernet 2-port 563i Adapter 193d 100e NIC-ETH561i-Mb-4x10G 8086 0000 Ethernet Converged Network Adapter XL710-Q2 1583 Ethernet Controller XL710 for 40GbE QSFP+ 1028 0000 Ethernet 40G 2P XL710 QSFP+ rNDC 1028 1f9f Ethernet 40G 2P XL710 QSFP+ rNDC 108e 0000 10 Gb/40 Gb Ethernet Adapter 108e 7b1b 10 Gb/40 Gb Ethernet Adapter 108e 7b1d 10Gb/40Gb Ethernet Adapter 1137 0000 Ethernet Converged NIC XL710-QDA2 1137 013c Ethernet Converged NIC XL710-QDA2 4c52 3042 LRES3042PF Dual-port 40Gb Ethernet Server Adapter for OCP 4c52 9902 LREC9902BF Dual-port 40Gb Ethernet Server Adapter 8086 0000 Ethernet Converged Network Adapter XL710-Q2 8086 0001 Ethernet Converged Network Adapter XL710-Q2 8086 0002 Ethernet Converged Network Adapter XL710-Q2 8086 0003 Ethernet I/O Module XL710-Q2 8086 0004 Ethernet Server Adapter XL710-Q2OCP 8086 0006 Ethernet Converged Network Adapter XL710-Q2 1584 Ethernet Controller XL710 for 40GbE QSFP+ 4c52 9901 LREC9901BF Single-port 40Gb Ethernet Server Adapter 8086 0000 Ethernet Converged Network Adapter XL710-Q1 8086 0001 Ethernet Converged Network Adapter XL710-Q1 8086 0002 Ethernet Converged Network Adapter XL710-Q1 8086 0003 Ethernet I/O Module XL710-Q1 8086 0004 Ethernet Server Adapter XL710-Q1OCP 1585 Ethernet Controller X710 for 10GbE QSFP+ 1586 Ethernet Controller X710 for 10GBASE-T 108e 0000 Ethernet Controller X710 for 10GBASE-T 108e 4857 Ethernet Controller X710 for 10GBASE-T 1587 Ethernet Controller XL710 for 20GbE backplane 103c 0000 Ethernet 10/20Gb 2-port 660FLB Adapter 103c 22fe Ethernet 10/20Gb 2-port 660FLB Adapter 1588 Ethernet Controller XL710 for 20GbE backplane 103c 0000 Ethernet 10/20Gb 2-port 660M Adapter 103c 22ff Ethernet 10/20Gb 2-port 660M Adapter 1137 0000 Ethernet Network Adapter XXV710 1137 02b4 Ethernet Network Adapter XXV710 OCP 2.0 1589 Ethernet Controller X710/X557-AT 10GBASE-T 108e 0000 Quad Port 10GBase-T Adapter 108e 7b1c Quad Port 10GBase-T Adapter 4c52 9804 LREC9804BT Quad-port 10Gb Ethernet Network Adapter 8086 0000 Ethernet Converged Network Adapter X710-T 8086 0001 Ethernet Converged Network Adapter X710-T4 8086 0002 Ethernet Converged Network Adapter X710-T4 8086 0003 Ethernet Converged Network Adapter X710-T 8086 00a0 Ethernet Converged Network Adapter X710-T4 8086 1003 Ethernet Converged Network Adapter X710-T 158a Ethernet Controller XXV710 for 25GbE backplane 1590 0000 10/25Gb Ethernet Adapter 1590 0286 Synergy 4610C 10/25Gb Ethernet Adapter 8086 0000 Ethernet Controller XXV710 for 25GbE backplane 8086 000a Ethernet 25G 2P XXV710 Mezz 158b Ethernet Controller XXV710 for 25GbE SFP28 1137 0000 Ethernet Network Adapter XXV710 1137 0225 Ethernet Network Adapter XXV710 1137 02b4 Ethernet Network Adapter XXV710 OCP 2.0 # UEFI PXE Disabled 1374 0230 Single Port 25 Gigabit Ethernet PCI Express Server Adapter (PE325G1I71) # With UEFI PXE Enabled 1374 0231 Single Port 25 Gigabit Ethernet PCI Express Server Adapter (PE325G1I71EU) # UEFI PXE Disabled 1374 0234 Dual Port 25 Gigabit Ethernet PCI Express Server Adapter (PE325G2I71) # With UEFI PXE Enabled 1374 0235 Dual Port 25 Gigabit Ethernet PCI Express Server Adapter (PE325G2I71EU) # PCIe x8 Bifurcated as x4x4, UEFI PXE Disabled, low profile 1374 0238 Quad Port 25 Gigabit Ethernet PCI Express Server Adapter (PE325G4I71L) # PCIe x8 Bifurcated as x4x4, UEFI PXE Enabled, low profile 1374 0239 Quad Port 25 Gigabit Ethernet PCI Express Server Adapter (PE325G4I71LEU) # PCIe x16 Bifurcated as x8x8, UEFI PXE Disabled, low profile 1374 023a Quad Port 25 Gigabit Ethernet PCI Express Server Adapter (PE31625G4I71L) # PCIe x16 Bifurcated as x8x8, UEFI PXE Enabled, low profile 1374 023b Quad Port 25 Gigabit Ethernet PCI Express Server Adapter (PE31625G4I71LEU) 1590 0000 Ethernet Network Adapter XXV710-2 1590 0253 Ethernet 10/25/Gb 2-port 661SFP28 Adapter 4c52 3017 LRES3017PF Dual-port 25Gb Ethernet Server Adapter for OCP 4c52 8004 LRES8004PT Quad-port 25Gb Ethernet Bypass Network Adapter 8086 0000 Ethernet Network Adapter XXV710 8086 0001 Ethernet Network Adapter XXV710-2 8086 0002 Ethernet Network Adapter XXV710-2 8086 0003 Ethernet Network Adapter XXV710-1 8086 0004 Ethernet Network Adapter XXV710-1 8086 0005 Ethernet Network Adapter OCP XXV710-2 8086 0006 Ethernet Network Adapter OCP XXV710-2 8086 0007 Ethernet Network Adapter OCP XXV710-1 8086 0008 Ethernet Network Adapter OCP XXV710-1 8086 0009 Ethernet 25G 2P XXV710 Adapter 8086 000a Ethernet 25G 2P XXV710 OCP 8086 000c Ethernet Network Adapter XXV710-DA2 for OCP 3.0 8086 000d Ethernet 25G 2P XXV710 OCP 8086 4001 Ethernet Network Adapter XXV710-2 1591 Ethernet Controller E810-C for backplane 8086 bcce Ethernet Controller E810-C for Intel(R) Open FPGA Stack 1592 Ethernet Controller E810-C for QSFP 1137 02bf E810CQDA2 2x100 GbE QSFP28 PCIe NIC 193d 1050 NIC-ETH1060F-LP-2P 2x100GbE Ethernet PCIe Card 4c52 1014 LRES1014PF Dual-port 100Gb Ethernet Server Adapter 4c52 3026 LRES3026PF Dual-port 100Gb Ethernet Server Adapter for OCP 8086 0001 Ethernet Network Adapter E810-C-Q1 8086 0002 Ethernet Network Adapter E810-C-Q2 8086 0004 Ethernet Network Adapter E810-C-Q2 8086 0005 Ethernet Network Adapter E810-C-Q1 for OCP3.0 8086 0006 Ethernet Network Adapter E810-C-Q2 for OCP3.0 8086 0009 Ethernet Network Adapter E810-C-Q1 8086 000a Ethernet Network Adapter E810-C-Q1 for OCP 8086 000b Ethernet 100G 2P E810-C Adapter 8086 000c Ethernet 100G 2P E810-C OCP 8086 000d Ethernet Network Adapter E810-L-Q2 for OCP 3.0 8086 000e Ethernet Network Adapter E810-2C-Q2 8086 000f Ethernet Network Adapter E810-C-Q2T 8086 0010 Ethernet 100G 2P E810-C-stg Adapter 8086 0011 Ethernet Network Adapter E810-C-Q1 for OCP3.0 8086 0012 Ethernet 100G 2P E810-C-st Adapter 8086 0013 Ethernet Network Adapter E810-C-Q1 for OCP 3.0 8086 0014 Ethernet 100G 2P E810-2C Adapter 1593 Ethernet Controller E810-C for SFP 1137 02c3 E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC 1137 02e9 E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC 1137 02ea E810XXVDA4T 4x25/10 GbE SFP28 PCIe NIC 4c52 1023 LRES1023PF Quad-port 25Gb Ethernet Server Adapter 4c52 3027 LRES3027PF Quad-port 25Gb Ethernet Server Adapter for OCP 8086 0002 Ethernet Network Adapter E810-L-2 8086 0005 Ethernet Network Adapter E810-XXV-4 8086 0006 Ethernet Network Adapter E810-XXV-4 8086 0007 Ethernet Network Adapter E810-XXV-4 8086 0008 Ethernet Network Adapter E810-XXV-2 8086 0009 Ethernet Network Adapter E810-XXV-2 for OCP 2.0 8086 000a Ethernet 25G 4P E810-XXV Adapter 8086 000c Ethernet Network Adapter E810-XXV-4 for OCP 3.0 8086 000d Ethernet 25G 4P E810-XXV OCP 8086 000e Ethernet Network Adapter E810-XXV-4T 8086 000f Ethernet 25G 4P E810-XXV-stg Adapter 8086 0010 Ethernet 25G 4P E810-XXV-st Adapter 8086 0012 Ethernet 25G 4P E810-XXV Adapter 8086 4010 Ethernet Network Adapter E810-XXV-4 8086 4013 Ethernet Network Adapter E810-XXV-4 for OCP 3.0 8086 401c Ethernet Network Adapter E810-XXV-4 for OCP 3.0 1599 Ethernet Controller E810-XXV for backplane 8086 0001 Ethernet 25G 2P E810-XXV-k Mezz 159a Ethernet Controller E810-XXV for QSFP 159b Ethernet Controller E810-XXV for SFP 1137 02be E810XXVDA2 2x25/10 GbE SFP28 PCIe NIC # NIC-ETH660F-3S-2P 2x25GbE SFP28 Network Adapter for OCP 3.0 193d 1085 NIC-ETH660F-3S-2P 1bd4 0057 Ethernet Network Adapter E810-XXVAM2 1bd4 0058 Ethernet Network Adapter E810-XXVAM2 for OCP 3.0 1bd4 006e Ethernet Network Adapter E810-XXVAM2 for BD 1bd4 0083 Ethernet Network Adapter E810-XXVAM2 for lldp 1bd4 00a0 S252IE810 1eec 0102 VSE-225-41E Dual-port 10Gb/25Gb Etherent PCIe 4c52 0003 LRES1021PF Dual-port 25Gb Ethernet Server Adapter 4c52 3029 LRES3029PF Dual-port 25Gb Ethernet Server Adapter for OCP 8086 0001 Ethernet 25G 2P E810-XXV OCP 8086 0002 Ethernet 25G 2P E810-XXV Adapter 8086 0003 Ethernet Network Adapter E810-XXV-2 8086 0005 Ethernet Network Adapter E810-XXV-2 for OCP 3.0 8086 4001 Ethernet Network Adapter E810-XXV-2 8086 4002 Ethernet Network Adapter E810-XXV-2 for OCP 3.0 8086 4003 Ethernet Network Adapter E810-XXV-2 8086 4015 Ethernet Network Adapter E810-XXV-2 for OCP 3.0 15a0 Ethernet Connection (2) I218-LM 15a1 Ethernet Connection (2) I218-V 15a2 Ethernet Connection (3) I218-LM 15a3 Ethernet Connection (3) I218-V 15a4 Ethernet Switch FM10000 Host Interface 15a5 Ethernet Switch FM10000 Host Virtual Interface 15a8 Ethernet Connection X552 Virtual Function 15a9 X552 Virtual Function 15aa Ethernet Connection X552 10 GbE Backplane 1059 0120 T4008 10GbE interface 15ab Ethernet Connection X552 10 GbE Backplane 1059 0150 RD-01068 10GbE interface 1059 0170 RD-01213 10GbE interface 15ac Ethernet Connection X552 10 GbE SFP+ 1059 0160 RD-01167 10GbE interface 15ad Ethernet Connection X552/X557-AT 10GBASE-T 15ae Ethernet Connection X552 1000BASE-T 15b0 Ethernet Connection X552 Backplane 15b4 X553 Virtual Function 15b5 DSL6340 USB 3.1 Controller [Alpine Ridge] 15b6 DSL6540 USB 3.1 Controller [Alpine Ridge] 15b7 Ethernet Connection (2) I219-LM 15b8 Ethernet Connection (2) I219-V 1462 7994 H110M ECO/GAMING 1462 7a72 H270 PC MATE 15b9 Ethernet Connection (3) I219-LM 15bb Ethernet Connection (7) I219-LM 15bc Ethernet Connection (7) I219-V 15bd Ethernet Connection (6) I219-LM 15be Ethernet Connection (6) I219-V 15bf JHL6240 Thunderbolt 3 NHI (Low Power) [Alpine Ridge LP 2016] 15c0 JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016] 15c1 JHL6240 Thunderbolt 3 USB 3.1 Controller (Low Power) [Alpine Ridge LP 2016] 15c2 Ethernet Connection X553 Backplane 15c3 Ethernet Connection X553 Backplane 15c4 Ethernet Connection X553 10 GbE SFP+ 15c5 X553 Virtual Function 15c6 Ethernet Connection X553 1GbE 15c7 Ethernet Connection X553 1GbE 15c8 Ethernet Connection X553/X557-AT 10GBASE-T 15ce Ethernet Connection X553 10 GbE SFP+ 15d0 Ethernet SDI Adapter 8086 0001 Ethernet SDI Adapter FM10420-100GbE-QDA2 8086 0002 Ethernet SDI Adapter FM10840-MTP2 15d1 Ethernet Controller 10G X550T 4c52 9811 LREC9811BT Single-port 10Gb Ethernet Network Adapter 8086 0002 Ethernet Converged Network Adapter X550-T1 8086 001b Ethernet Server Adapter X550-T1 for OCP 8086 0021 Ethernet Converged Network Adapter X550-T1 8086 00a2 Ethernet Converged Network Adapter X550-T1 15d2 JHL6540 Thunderbolt 3 NHI (C step) [Alpine Ridge 4C 2016] 15d3 JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016] 15d4 JHL6540 Thunderbolt 3 USB Controller (C step) [Alpine Ridge 4C 2016] 15d5 Ethernet SDI Adapter FM10420-25GbE-DA2 8086 0001 Ethernet SDI Adapter FM10420-25GbE-DA2 15d6 Ethernet Connection (5) I219-V 15d7 Ethernet Connection (4) I219-LM 15d8 Ethernet Connection (4) I219-V 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 17aa 225d ThinkPad T480 15d9 JHL6340 Thunderbolt 3 NHI (C step) [Alpine Ridge 2C 2016] 15da JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016] 15db JHL6340 Thunderbolt 3 USB 3.1 Controller (C step) [Alpine Ridge 2C 2016] 15df Ethernet Connection (8) I219-LM 15e0 Ethernet Connection (8) I219-V 15e1 Ethernet Connection (9) I219-LM 15e2 Ethernet Connection (9) I219-V 15e3 Ethernet Connection (5) I219-LM 15e4 Ethernet Connection X553 1GbE 15e5 Ethernet Connection X553 1GbE 15e7 JHL7540 Thunderbolt 3 Bridge [Titan Ridge 2C 2018] 15e8 JHL7540 Thunderbolt 3 NHI [Titan Ridge 2C 2018] 15e9 JHL7540 Thunderbolt 3 USB Controller [Titan Ridge 2C 2018] 15ea JHL7540 Thunderbolt 3 Bridge [Titan Ridge 4C 2018] 15eb JHL7540 Thunderbolt 3 NHI [Titan Ridge 4C 2018] 1028 09be Latitude 7410 15ec JHL7540 Thunderbolt 3 USB Controller [Titan Ridge 4C 2018] 1028 09be Latitude 7410 15ef JHL7440 Thunderbolt 3 Bridge [Titan Ridge DD 2018] 15f0 JHL7440 Thunderbolt 3 USB Controller [Titan Ridge DD 2018] 15f2 Ethernet Controller I225-LM 4c52 2031 LRES2031PT Single-port 2.5Gb Ethernet Network Adapter 8086 0001 Ethernet Network Adapter I225-T1 8086 0002 Ethernet Network Adapter I225-T1 15f3 Ethernet Controller I225-V 4c52 2031 LRES2031PT Single-port 2.5Gb Ethernet Network Adapter 8086 0003 Intel(R) Ethernet Controller (3) I225-V 15f4 Ethernet Connection (15) I219-LM 15f5 Ethernet Connection (15) I219-V 15f6 I210 Gigabit Ethernet Connection 15f9 Ethernet Connection (14) I219-LM 15fa Ethernet Connection (14) I219-V 15fb Ethernet Connection (13) I219-LM 15fc Ethernet Connection (13) I219-V 15ff Ethernet Controller X710 for 10GBASE-T 1014 0000 PCIe3 4-port 10GbE Base-T Adapter 108e 0000 Quad Port 10GBase-T Adapter - CP 108e 7b1f Quad Port 10GBase-T Adapter - CP 1137 0000 X710TLG GbE RJ45 PCIe NIC 1137 02c1 X710T2LG 2x10 GbE RJ45 PCIe NIC 1137 02c2 X710T4LG 4x10 GbE RJ45 PCIe NIC 1137 02d9 Ethernet Network Adapter X710-T2L OCP 3.0 1137 02da Ethernet Network Adapter X710-T4L OCP 3.0 # NIC-ETH565T-3S-2P OCP3.0 2x10G Base-T Card 193d 1082 NIC-ETH565T-3S-2P 4c52 1012 LRES1012PT Dual-port 10Gb Ethernet Network Adapter 4c52 3021 LRES3021PT Dual-port 10Gb Ethernet Server Adapter for OCP 8086 0000 Ethernet Network Adapter X710-TL 8086 0001 Ethernet Network Adapter X710-T4L 8086 0002 Ethernet Network Adapter X710-T4L 8086 0003 Ethernet Network Adapter X710-T2L 8086 0004 Ethernet Network Adapter X710-T2L 8086 0005 Ethernet 10G 2P X710-T2L-t Adapter 8086 0006 Ethernet 10G 4P X710-T4L-t Adapter 8086 0007 Ethernet 10G 2P X710-T2L-t OCP 8086 0008 Ethernet 10G 4P X710-T4L-t OCP 8086 0009 Ethernet Network Adapter X710-T4L for OCP 3.0 8086 000a Ethernet Network Adapter X710-T4L for OCP 3.0 8086 000b Ethernet Network Adapter X710-T2L for OCP 3.0 8086 000c Ethernet Network Adapter X710-T2L for OCP 3.0 8086 000d Ethernet 10G 2P X710-T2L-t OCP 8086 000f Ethernet Network Adapter X710-T2L for OCP 3.0 8086 4009 Ethernet Network Adapter X710-T2L 8086 4012 Ethernet Network Adapter X710-T4L for OCP 3.0 8086 4018 Ethernet Network Adapter X710-T2L for OCP 3.0 8086 4019 Ethernet Network Adapter X710-T4L 1600 Broadwell-U Host Bridge -OPI 1601 Broadwell-U PCI Express x16 Controller 1602 Broadwell-U Integrated Graphics 1603 Broadwell-U Processor Thermal Subsystem 1604 Broadwell-U Host Bridge -OPI 1605 Broadwell-U PCI Express x8 Controller 1606 HD Graphics 1607 Broadwell-U CHAPS Device 1608 Broadwell-U Host Bridge -OPI 1609 Broadwell-U x4 PCIe 160a Broadwell-U Integrated Graphics 160b Broadwell-U Integrated Graphics 160c Broadwell-U Audio Controller 160d Broadwell-U Integrated Graphics 160e Broadwell-U Integrated Graphics 160f Broadwell-U SoftSKU 1610 Broadwell-U Host Bridge - DMI 1612 HD Graphics 5600 1614 Broadwell-U Host Bridge - DMI 1616 HD Graphics 5500 103c 2216 ZBook 15u G2 Mobile Workstation 1618 Broadwell-U Host Bridge - DMI 161a Broadwell-U Integrated Graphics 161b Broadwell-U Integrated Graphics 161d Broadwell-U Integrated Graphics 161e HD Graphics 5300 1622 Iris Pro Graphics 6200 1626 HD Graphics 6000 162a Iris Pro Graphics P6300 162b Iris Graphics 6100 162d Broadwell-U Integrated Graphics 162e Broadwell-U Integrated Graphics 1632 Broadwell-U Integrated Graphics 1636 Broadwell-U Integrated Graphics 163a Broadwell-U Integrated Graphics 163b Broadwell-U Integrated Graphics 163d Broadwell-U Integrated Graphics 163e Broadwell-U Integrated Graphics 1889 Ethernet Adaptive Virtual Function 188a Ethernet Connection E823-C for backplane 188b Ethernet Connection E823-C for QSFP 188c Ethernet Connection E823-C for SFP 1028 0abd Ethernet Connection 25G 4P E823-C LOM 17aa 405e E823 25G/10G Ethernet LOM Controller 188d Ethernet Connection E823-C/X557-AT 10GBASE-T 188e Ethernet Connection E823-C 1GbE 17aa 405f E823 1G Ethernet LOM Controller 1890 Ethernet Connection E822-C for backplane 1891 Ethernet Connection E822-C for QSFP 1892 Ethernet Connection E822-C for SFP 1893 Ethernet Connection E822-C/X557-AT 10GBASE-T 1894 Ethernet Connection E822-C 1GbE 1897 Ethernet Connection E822-L for backplane 1898 Ethernet Connection E822-L for SFP 1899 Ethernet Connection E822-L/X557-AT 10GBASE-T 189a Ethernet Connection E822-L 1GbE 18a0 Atom Processor P5xxx Series QAT 18a1 C4XXX Series QAT Virtual Function 18b3 Atom Processor P5xxx Series SATA Controller 18d0 Atom Processor P5xxx Series USB xHCI Controller 18d3 Atom Processor P5xxx Series MEI Controller 18d6 Atom Processor P5xxx Series MEI Controller 18df Atom Processor P5xxx Series SMBus Controller 18e0 Atom Processor P5xxx Series SPI Controller 18e1 Atom Processor P5xxx Series Trace Hub 18ee 200xx Series QAT 18ef 200xx Series QAT Virtual Function 18f3 Atom Processor P5xxx Series SATA Controller 1900 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1901 6th-10th Gen Core Processor PCIe Controller (x16) 1902 HD Graphics 510 1903 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e4 XPS 15 9550 1028 06e6 Latitude 11 5175 2-in-1 1028 09be Latitude 7410 103c 825b OMEN-17-w001nv 17aa 225d ThinkPad T480 1904 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1028 06dc Latitude E7470 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 17aa 382a B51-80 Laptop 1905 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8) 1906 HD Graphics 510 17aa 382a B51-80 Laptop 1908 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1909 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x4) 190b HD Graphics 510 190c Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 190f Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1910 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 1911 Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model 1028 0869 Vostro 3470 1028 09be Latitude 7410 1462 7994 H110M ECO/GAMING 1462 7a72 H270 PC MATE 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 17aa 225d ThinkPad T480 1912 HD Graphics 530 1916 Skylake GT2 [HD Graphics 520] 1028 06dc Latitude E7470 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 1918 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1919 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 191b HD Graphics 530 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 191d HD Graphics P530 191e HD Graphics 515 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 191f Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers 1921 HD Graphics 520 1923 HD Graphics 535 1926 Iris Graphics 540 1927 Iris Graphics 550 192b Iris Graphics 555 192d Iris Graphics P555 1932 Iris Pro Graphics 580 193a Iris Pro Graphics P580 193b Iris Pro Graphics 580 193d Iris Pro Graphics P580 1960 80960RP (i960RP) Microprocessor 101e 0431 MegaRAID 431 RAID Controller 101e 0438 MegaRAID 438 Ultra2 LVD RAID Controller 101e 0466 MegaRAID 466 Express Plus RAID Controller 101e 0467 MegaRAID 467 Enterprise 1500 RAID Controller 101e 0490 MegaRAID 490 Express 300 RAID Controller 101e 0762 MegaRAID 762 Express RAID Controller 101e 09a0 PowerEdge Expandable RAID Controller 2/SC 1028 0467 PowerEdge Expandable RAID Controller 2/DC 1028 1111 PowerEdge Expandable RAID Controller 2/SC 103c 03a2 MegaRAID 103c 10c6 MegaRAID 438, NetRAID-3Si 103c 10c7 MegaRAID T5, Integrated NetRAID 103c 10cc MegaRAID, Integrated NetRAID 103c 10cd NetRAID-1Si 105a 0000 SuperTrak 105a 2168 SuperTrak Pro 105a 5168 SuperTrak66/100 1111 1111 MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC 1111 1112 PowerEdge Expandable RAID Controller 2/SC 113c 03a2 MegaRAID e4bf 1010 CG1-RADIO e4bf 1020 CU2-QUARTET e4bf 1040 CU1-CHORUS e4bf 3100 CX1-BAND 1962 80960RM (i960RM) Microprocessor 105a 0000 SuperTrak SX6000 I2O CPU 1964 80960RN (i960RN) Microprocessor 1980 Atom Processor C3000 Series System Agent 19a1 Atom Processor C3000 Series Error Registers 19a2 Atom Processor C3000 Series Root Complex Event Collector 19a3 Atom Processor C3000 Series Integrated QAT Root Port 19a4 Atom Processor C3000 Series PCI Express Root Port #0 19a5 Atom Processor C3000 Series PCI Express Root Port #1 19a6 Atom Processor C3000 Series PCI Express Root Port #2 19a7 Atom Processor C3000 Series PCI Express Root Port #3 19a8 Atom Processor C3000 Series PCI Express Root Port #4 19a9 Atom Processor C3000 Series PCI Express Root Port #5 19aa Atom Processor C3000 Series PCI Express Root Port #6 19ab Atom Processor C3000 Series PCI Express Root Port #7 19ac Atom Processor C3000 Series SMBus Contoller - Host 19b0 Atom Processor C3000 Series SATA Controller 0 19b1 Atom Processor C3000 Series SATA Controller 0 19b2 Atom Processor C3000 Series SATA Controller 0 19b3 Atom Processor C3000 Series SATA Controller 0 19b4 Atom Processor C3000 Series SATA Controller 0 19b5 Atom Processor C3000 Series SATA Controller 0 19b6 Atom Processor C3000 Series SATA Controller 0 19b7 Atom Processor C3000 Series SATA Controller 0 19be Atom Processor C3000 Series SATA Controller 0 19bf Atom Processor C3000 Series SATA Controller 0 19c0 Atom Processor C3000 Series SATA Controller 1 19c1 Atom Processor C3000 Series SATA Controller 1 19c2 Atom Processor C3000 Series SATA Controller 1 19c3 Atom Processor C3000 Series SATA Controller 1 19c4 Atom Processor C3000 Series SATA Controller 1 19c5 Atom Processor C3000 Series SATA Controller 1 19c6 Atom Processor C3000 Series SATA Controller 1 19c7 Atom Processor C3000 Series SATA Controller 1 19ce Atom Processor C3000 Series SATA Controller 1 19cf Atom Processor C3000 Series SATA Controller 1 19d0 Atom Processor C3000 Series USB 3.0 xHCI Controller 19d1 Atom Processor C3000 Series Integrated LAN Root Port #0 19d2 Atom Processor C3000 Series Integrated LAN Root Port #1 19d3 Atom Processor C3000 Series ME HECI 1 19d4 Atom Processor C3000 Series ME HECI 2 19d5 Atom Processor C3000 Series ME KT Controller 19d6 Atom Processor C3000 Series ME HECI 3 19d8 Atom Processor C3000 Series HSUART Controller 19db Atom Processor C3000 Series SD Host Controller 19dc Atom Processor C3000 Series LPC or eSPI 19dd Atom Processor C3000 Series Primary to Side Band (P2SB) Bridge 19de Atom Processor C3000 Series Power Management Controller 19df Atom Processor C3000 Series SMBus controller 19e0 Atom Processor C3000 Series SPI Controller 19e2 Atom Processor C3000 Series QuickAssist Technology 19e3 Atom Processor C3000 Series QuickAssist Technology Virtual Function 1a12 Timna CPU Graphics 1a1c Ethernet Connection (17) I219-LM 1a1d Ethernet Connection (17) I219-V 1a1e Ethernet Connection (16) I219-LM 1028 0b10 Precision 3571 1a1f Ethernet Connection (16) I219-V 1a21 82840 840 [Carmel] Chipset Host Bridge (Hub A) 1a23 82840 840 [Carmel] Chipset AGP Bridge 1a24 82840 840 [Carmel] Chipset PCI Bridge (Hub B) 1a30 82845 845 [Brookdale] Chipset Host Bridge 1028 010e Optiplex GX240 147b 0505 BL7 motherboard 15d9 3280 Supermicro P4SBE Mainboard 1a31 82845 845 [Brookdale] Chipset AGP Bridge 1a38 5000 Series Chipset DMA Engine 15d9 8680 X7DVL-E-O motherboard 8086 3476 S5000PSLSATA Server Board 1a48 82597EX 10GbE Ethernet Controller 8086 a01f PRO/10GbE SR Server Adapter 8086 a11f PRO/10GbE SR Server Adapter 1b48 82597EX 10GbE Ethernet Controller 8086 a01f PRO/10GbE LR Server Adapter 8086 a11f PRO/10GbE LR Server Adapter # Also rebranded as Montage IOH M88IO3020 1bcd Emmitsburg (C740 Family) USB 3.2 Gen 1 xHCI Controller 1bd4 00a5 RS0800I5H16i 1bd2 Sapphire Rapids SATA AHCI Controller 1bf2 Sapphire Rapids SATA AHCI Controller 1c00 6 Series/C200 Series Chipset Family Desktop SATA Controller (IDE mode, ports 0-3) 1c01 6 Series/C200 Series Chipset Family Mobile SATA Controller (IDE mode, ports 0-3) 1c02 6 Series/C200 Series Chipset Family 6 port Desktop SATA AHCI Controller 1028 04aa XPS 8300 1043 844d P8 series motherboard 17aa 3070 ThinkCentre M91p 8086 200d DH61CR motherboard 8086 7270 Server Board S1200BT Family 1c03 6 Series/C200 Series Chipset Family 6 port Mobile SATA AHCI Controller 1028 04a3 Precision M4600 1028 04b2 Vostro 3350 1028 04da Vostro 3750 17aa 21cf ThinkPad T520 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c04 6 Series/C200 Series Desktop SATA RAID Controller 103c 3118 Smart Array B110i SATA RAID Controller 1c05 6 Series/C200 Series Mobile SATA RAID Controller 1c06 Z68 Express Chipset SATA RAID Controller 1c08 6 Series/C200 Series Chipset Family Desktop SATA Controller (IDE mode, ports 4-5) 1c09 6 Series/C200 Series Chipset Family Mobile SATA Controller (IDE mode, ports 4-5) 1c10 6 Series/C200 Series Chipset Family PCI Express Root Port 1 1028 04aa XPS 8300 1028 04da Vostro 3750 1043 844d P8 series motherboard 17aa 21cf ThinkPad T520 8086 7270 Server Board S1200BTS / Apple MacBook Pro 8,1/8,2 1c12 6 Series/C200 Series Chipset Family PCI Express Root Port 2 1028 04aa XPS 8300 17aa 21cf ThinkPad T520 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c14 6 Series/C200 Series Chipset Family PCI Express Root Port 3 1028 04da Vostro 3750 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c16 6 Series/C200 Series Chipset Family PCI Express Root Port 4 1028 04aa XPS 8300 17aa 21cf ThinkPad T520 1c18 6 Series/C200 Series Chipset Family PCI Express Root Port 5 1028 04da Vostro 3750 17aa 21cf ThinkPad T520 8086 7270 Server Board S1200BTS 1c1a 6 Series/C200 Series Chipset Family PCI Express Root Port 6 1028 04da Vostro 3750 1043 844d P8 series motherboard 1c1c 6 Series/C200 Series Chipset Family PCI Express Root Port 7 1c1e 6 Series/C200 Series Chipset Family PCI Express Root Port 8 1043 844d P8 series motherboard 1c20 6 Series/C200 Series Chipset Family High Definition Audio Controller 1028 0490 Alienware M17x R3 1028 04a3 Precision M4600 1028 04aa XPS 8300 1028 04b2 Vostro 3350 1028 04da Vostro 3750 # Realtek ALC656 103c 2abf HP Pavilion p6-2100 Desktop PC Series 1043 8418 P8P67 Deluxe Motherboard 1043 841b P8H67 Series Motherboard 17aa 21cf ThinkPad T520 17aa 3070 ThinkCentre M91p # Realtek ALC888 audio codec 8086 2008 DQ67SW board 8086 200d DH61CR motherboard 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c22 6 Series/C200 Series Chipset Family SMBus Controller 1028 04a3 Precision M4600 1028 04aa XPS 8300 1028 04b2 Vostro 3350 1028 04da Vostro 3750 1043 844d P8 series motherboard 17aa 21cf ThinkPad T520 17aa 3070 ThinkCentre M91p 8086 200d DH61CR motherboard 8086 7270 Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2 1c24 6 Series/C200 Series Chipset Family Thermal Management Controller 1c25 6 Series/C200 Series Chipset Family DMI to PCI Bridge 1c26 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 1028 04a3 Precision M4600 1028 04aa XPS 8300 1028 04b2 Vostro 3350 1028 04da Vostro 3750 1043 844d P8 series motherboard 17aa 21cf ThinkPad T520 17aa 3070 ThinkCentre M91p 8086 200d DH61CR motherboard 8086 7270 Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2 1c27 6 Series/C200 Series Chipset Family USB Universal Host Controller #1 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c2c 6 Series/C200 Series Chipset Family USB Universal Host Controller #5 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c2d 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 1028 04a3 Precision M4600 1028 04aa XPS 8300 1028 04b2 Vostro 3350 1028 04da Vostro 3750 1043 844d P8 series motherboard 17aa 21cf ThinkPad T520 17aa 3070 ThinkCentre M91p 8086 200d DH61CR motherboard 8086 7270 Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2 1c33 6 Series/C200 Series Chipset Family LAN Controller 1c35 6 Series/C200 Series Chipset Family VECI Controller 1c3a 6 Series/C200 Series Chipset Family MEI Controller #1 1028 0493 Latitude E6420 1028 04a3 Precision M4600 1028 04aa XPS 8300 1028 04b2 Vostro 3350 1028 04da Vostro 3750 1043 844d P8 series motherboard 17aa 21cf ThinkPad T520 17aa 3070 ThinkCentre M91p 8086 200d DH61CR motherboard 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c3b 6 Series/C200 Series Chipset Family MEI Controller #2 1c3c 6 Series/C200 Series Chipset Family IDE-r Controller 1c3d 6 Series/C200 Series Chipset Family KT Controller 17aa 3070 ThinkCentre M91p 1c40 6 Series/C200 Series Chipset Family LPC Controller 1c41 Mobile SFF 6 Series Chipset Family LPC Controller 1c42 6 Series/C200 Series Chipset Family LPC Controller 1c43 Mobile 6 Series Chipset Family LPC Controller 1c44 Z68 Express Chipset LPC Controller 1c45 6 Series/C200 Series Chipset Family LPC Controller 1c46 P67 Express Chipset LPC Controller 1043 844d P8P67 Deluxe Motherboard 1c47 UM67 Express Chipset LPC Controller 1c48 6 Series/C200 Series Chipset Family LPC Controller 1c49 HM65 Express Chipset LPC Controller 8086 7270 Apple MacBookPro8,2 [Core i7, 15", 2011] 1c4a H67 Express Chipset LPC Controller 1028 04aa XPS 8300 1043 844d P8H67 Series Motherboard 1c4b HM67 Express Chipset LPC Controller 1028 04b2 Vostro 3350 1028 04da Vostro 3750 1c4c Q65 Express Chipset LPC Controller 1c4d QS67 Express Chipset LPC Controller 1c4e Q67 Express Chipset LPC Controller 17aa 3070 ThinkCentre M91p 1c4f QM67 Express Chipset LPC Controller 1028 04a3 Precision M4600 17aa 21cf ThinkPad T520 1c50 B65 Express Chipset LPC Controller 1c51 6 Series/C200 Series Chipset Family LPC Controller 1c52 C202 Chipset LPC Controller 8086 7270 Server Board S1200BTS 1c53 6 Series/C200 Series Chipset Family LPC Controller 1c54 C204 Chipset LPC Controller 1c55 6 Series/C200 Series Chipset Family LPC Controller 1c56 C206 Chipset LPC Controller 1043 844d P8B WS Motherboard 1c57 6 Series/C200 Series Chipset Family LPC Controller 1c58 Upgraded B65 Express Chipset LPC Controller 1c59 Upgraded HM67 Express Chipset LPC Controller 1c5a Upgraded Q67 Express Chipset LPC Controller 1c5b 6 Series/C200 Series Chipset Family LPC Controller 1c5c H61 Express Chipset LPC Controller 8086 200d DH61CR motherboard 1c5d 6 Series/C200 Series Chipset Family LPC Controller 1c5e 6 Series/C200 Series Chipset Family LPC Controller 1c5f 6 Series/C200 Series Chipset Family LPC Controller 1d00 C600/X79 series chipset 4-Port SATA IDE Controller 1d02 C600/X79 series chipset 6-Port SATA AHCI Controller 1028 04f7 C602J on PowerEdge R320 server 1d04 C600/X79 series chipset SATA RAID Controller 1d06 C600/X79 series chipset SATA Premium RAID Controller 1d08 C600/X79 series chipset 2-Port SATA IDE Controller 1d10 C600/X79 series chipset PCI Express Root Port 1 1028 04f7 C602J on PowerEdge R320 server 1d11 C600/X79 series chipset PCI Express Root Port 1 1d12 C600/X79 series chipset PCI Express Root Port 2 1d13 C600/X79 series chipset PCI Express Root Port 2 1d14 C600/X79 series chipset PCI Express Root Port 3 1d15 C600/X79 series chipset PCI Express Root Port 3 1d16 C600/X79 series chipset PCI Express Root Port 4 1d17 C600/X79 series chipset PCI Express Root Port 4 1d18 C600/X79 series chipset PCI Express Root Port 5 1028 04f7 C602J on PowerEdge R320 server 1d19 C600/X79 series chipset PCI Express Root Port 5 1d1a C600/X79 series chipset PCI Express Root Port 6 1d1b C600/X79 series chipset PCI Express Root Port 6 1d1c C600/X79 series chipset PCI Express Root Port 7 1d1d C600/X79 series chipset PCI Express Root Port 7 1d1e C600/X79 series chipset PCI Express Root Port 8 1028 04f7 C602J on PowerEdge R320 server 1d1f C600/X79 series chipset PCI Express Root Port 8 1d20 C600/X79 series chipset High Definition Audio Controller 1d22 C600/X79 series chipset SMBus Host Controller 15d9 066b X9SRL-F 1d24 C600/X79 series chipset Thermal Management Controller 15d9 066b X9SRL-F 1d25 C600/X79 series chipset DMI to PCI Bridge 1d26 C600/X79 series chipset USB2 Enhanced Host Controller #1 1028 04f7 C602J on PowerEdge R320 server 15d9 066b X9SRL-F 1d2d C600/X79 series chipset USB2 Enhanced Host Controller #2 1028 04f7 C602J on PowerEdge R320 server 103c 18a9 HP DL360e G8 15d9 066b X9SRL-F 1d33 C600/X79 series chipset LAN Controller 1d35 C600/X79 series chipset VECI Controller 1d3a C600/X79 series chipset MEI Controller #1 1028 04f7 C602J on PowerEdge R320 server 15d9 066b X9SRL-F 1d3b C600/X79 series chipset MEI Controller #2 1028 04f7 C602J on PowerEdge R320 server 15d9 066b X9SRL-F 1d3c C600/X79 series chipset IDE-r Controller 1d3d C600/X79 series chipset KT Controller 1d3e C600/X79 series chipset PCI Express Virtual Root Port 1028 04f7 C602J on PowerEdge R320 server 1d3f C608/C606/X79 series chipset PCI Express Virtual Switch Port 1d40 C600/X79 series chipset LPC Controller 1d41 C600/X79 series chipset LPC Controller 1028 04f7 C602J on PowerEdge R320 server 15d9 066b X9SRL-F 1d50 C608 chipset Dual 4-Port SATA/SAS Storage Control Unit 1d54 C600/X79 series chipset Dual 4-Port SATA/SAS Storage Control Unit 1d55 C600/X79 series chipset 4-Port SATA/SAS Storage Control Unit 1d58 C606 chipset Dual 4-Port SATA/SAS Storage Control Unit 1d59 C604/X79 series chipset 4-Port SATA/SAS Storage Control Unit 1d5a C600/X79 series chipset Dual 4-Port SATA Storage Control Unit 1d5b C602 chipset 4-Port SATA Storage Control Unit 1d5c C600/X79 series chipset Dual 4-Port SATA/SAS Storage Control Unit 1d5d C600/X79 series chipset 4-Port SATA/SAS Storage Control Unit 1d5e C600/X79 series chipset Dual 4-Port SATA Storage Control Unit 1d5f C600/X79 series chipset 4-Port SATA Storage Control Unit 1d60 C608 chipset Dual 4-Port SATA/SAS Storage Control Unit 1d64 C600/X79 series chipset Dual 4-Port SATA/SAS Storage Control Unit 1d65 C600/X79 series chipset 4-Port SATA/SAS Storage Control Unit 1d68 C606 chipset Dual 4-Port SATA/SAS Storage Control Unit 1d69 C604/X79 series chipset 4-Port SATA/SAS Storage Control Unit 1d6a C600/X79 series chipset Dual 4-Port SATA Storage Control Unit 1d6b C602 chipset 4-Port SATA Storage Control Unit 0497 1028 Dell Precision T3600 1d6c C600/X79 series chipset Dual 4-Port SATA/SAS Storage Control Unit 1d6d C600/X79 series chipset 4-Port SATA/SAS Storage Control Unit 1d6e C600/X79 series chipset Dual 4-Port SATA Storage Control Unit 1d6f C600/X79 series chipset 4-Port SATA Storage Control Unit 1d70 C600/X79 series chipset SMBus Controller 0 1d71 C608/C606/X79 series chipset SMBus Controller 1 1d72 C608 chipset SMBus Controller 2 1d74 C608/C606/X79 series chipset PCI Express Upstream Port 1d76 C600/X79 series chipset Multi-Function Glue 1e00 7 Series/C210 Series Chipset Family 4-port SATA Controller [IDE mode] 1734 11d6 B75 [Ivy Bridge] chipset on Esprimo P510 D3171 motherboard 1e01 7 Series Chipset Family 4-port SATA Controller [IDE mode] 144d c652 NP300E5C series laptop 1e02 7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] 1043 84ca P8 series motherboard 1734 11d6 B75 [Ivy Bridge] chipset on Esprimo P510 D3171 motherboard 1849 1e02 Motherboard 1e03 7 Series Chipset Family 6-port SATA Controller [AHCI mode] 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 10cf 16e2 LIFEBOOK E752 144d c652 NP300E5C series laptop 1e04 7 Series/C210 Series Chipset Family SATA Controller [RAID mode] 1e05 7 Series Chipset SATA Controller [RAID mode] 1e06 7 Series/C210 Series Chipset Family SATA Controller [RAID mode] 1e07 7 Series Chipset Family SATA Controller [RAID mode] 1e08 7 Series/C210 Series Chipset Family 2-port SATA Controller [IDE mode] 1e09 7 Series Chipset Family 2-port SATA Controller [IDE mode] 144d c652 NP300E5C series laptop 1e0e 7 Series/C210 Series Chipset Family SATA Controller [RAID mode] 1e10 7 Series/C216 Chipset Family PCI Express Root Port 1 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1043 84ca P8H77-I Motherboard 10cf 16e9 LIFEBOOK E752 144d c652 NP300E5C series laptop 1734 11d6 B75 [Ivy Bridge] chipset on Esprimo P510 D3171 motherboard 1849 1e10 Motherboard 1e12 7 Series/C210 Series Chipset Family PCI Express Root Port 2 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1e14 7 Series/C210 Series Chipset Family PCI Express Root Port 3 10cf 16e9 LIFEBOOK E752 1e16 7 Series/C216 Chipset Family PCI Express Root Port 4 1043 108d VivoBook X202EV 1043 1477 N56VZ 144d c652 NP300E5C series laptop 1849 1618 Z77 Extreme4 motherboard 1e18 7 Series/C210 Series Chipset Family PCI Express Root Port 5 1043 84ca P8H77-I Motherboard 1849 1e18 Motherboard 1e1a 7 Series/C210 Series Chipset Family PCI Express Root Port 6 1734 11d6 B75 [Ivy Bridge] chipset on Esprimo P510 D3171 motherboard 1849 1e1a Motherboard 1e1c 7 Series/C210 Series Chipset Family PCI Express Root Port 7 1e1e 7 Series/C210 Series Chipset Family PCI Express Root Port 8 10cf 16e9 LIFEBOOK E752 1849 1e1e Motherboard 1e20 7 Series/C216 Chipset Family High Definition Audio Controller 1028 054b XPS One 2710 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1043 8415 P8H77-I Motherboard 1043 8445 P8Z77-V LX Motherboard 10cf 1757 LIFEBOOK E752 144d c652 NP300E5C series laptop 1734 11d8 B75 [Ivy Bridge] chipset CX20642 audio controller on Esprimo P510 D3171 motherboard 1849 1898 Z77 Extreme4 motherboard 1e22 7 Series/C216 Chipset Family SMBus Controller 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1043 84ca P8 series motherboard 10cf 16e6 LIFEBOOK E752 144d c652 NP300E5C series laptop 1734 11d6 B75 [Ivy Bridge] chipset on Esprimo P510 D3171 motherboard 1849 1e22 Motherboard 1e24 7 Series/C210 Series Chipset Family Thermal Management Controller 1043 1517 Zenbook Prime UX31A 1e25 7 Series/C210 Series Chipset Family DMI to PCI Bridge 1e26 7 Series/C216 Chipset Family USB Enhanced Host Controller #1 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1043 84ca P8 series motherboard 10cf 16e8 LIFEBOOK E752 144d c652 NP300E5C series laptop 1734 11d6 B75 [Ivy Bridge] chipset USB 2.0 controller on Esprimo P510 D3171 motherboard 1849 1e26 Motherboard 1e2d 7 Series/C216 Chipset Family USB Enhanced Host Controller #2 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1043 84ca P8 series motherboard 10cf 16e8 LIFEBOOK E752 144d c652 NP300E5C series laptop 1734 11d6 B75 [Ivy Bridge] chipset USB 2.0 controller on Esprimo P510 D3171 motherboard 1849 1e2d Motherboard 1e31 7 Series/C210 Series Chipset Family USB xHCI Host Controller 103c 179b Elitebook 8470p 103c 17ab ProBook 6570b 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1043 84ca P8 series motherboard 10cf 16ee LIFEBOOK E752 1734 11d6 B75 [Ivy Bridge] chipset USB 3.0 controller on Esprimo P510 D3171 motherboard 17aa 21f3 ThinkPad T430 1849 1e31 Motherboard 1e33 7 Series/C210 Series Chipset Family LAN Controller 1e3a 7 Series/C216 Chipset Family MEI Controller #1 1043 108d VivoBook X202EV 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 1043 84ca P8 series motherboard 10cf 16ea LIFEBOOK E752 144d c652 NP300E5C series laptop 1734 11d6 B75 [Ivy Bridge] chipset on Esprimo P510 D3171 motherboard 1849 1e3a Motherboard 1e3b 7 Series/C210 Series Chipset Family MEI Controller #2 1e3c 7 Series/C210 Series Chipset Family IDE-r Controller 1e3d 7 Series/C210 Series Chipset Family KT Controller 1e41 7 Series Chipset Family LPC Controller 1e42 7 Series Chipset Family LPC Controller 1e43 7 Series Chipset Family LPC Controller 1e44 Z77 Express Chipset LPC Controller 1043 84ca P8 series motherboard 1849 1e44 Motherboard 1e45 7 Series Chipset Family LPC Controller 1e46 Z75 Express Chipset LPC Controller 1e47 Q77 Express Chipset LPC Controller 1e48 Q75 Express Chipset LPC Controller 1e49 B75 Express Chipset LPC Controller 1734 11d6 Esprimo P510 D3171 motherboard 1e4a H77 Express Chipset LPC Controller 1043 84ca P8H77-I Motherboard 1e4b 7 Series Chipset Family LPC Controller 1e4c 7 Series Chipset Family LPC Controller 1e4d 7 Series Chipset Family LPC Controller 1e4e 7 Series Chipset Family LPC Controller 1e4f 7 Series Chipset Family LPC Controller 1e50 7 Series Chipset Family LPC Controller 1e51 7 Series Chipset Family LPC Controller 1e52 7 Series Chipset Family LPC Controller 1e53 C216 Series Chipset LPC Controller 1e54 7 Series Chipset Family LPC Controller 1e55 QM77 Express Chipset LPC Controller 1e56 QS77 Express Chipset LPC Controller 1e57 HM77 Express Chipset LPC Controller 1e58 UM77 Express Chipset LPC Controller 1e59 HM76 Express Chipset LPC Controller 1043 1477 N56VZ 1043 1517 Zenbook Prime UX31A 10cf 16e0 LIFEBOOK E752 1e5a 7 Series Chipset Family LPC Controller 1e5b UM77 Express Chipset LPC Controller 1e5c 7 Series Chipset Family LPC Controller 1e5d HM75 Express Chipset LPC Controller 144d c652 NP300E5C series laptop 1e5e HM70 Express Chipset LPC Controller 1043 108d VivoBook X202EV 1e5f NM70 Express Chipset LPC Controller 1f00 Atom processor C2000 SoC Transaction Router 1f01 Atom processor C2000 SoC Transaction Router 1f02 Atom processor C2000 SoC Transaction Router 1f03 Atom processor C2000 SoC Transaction Router 1f04 Atom processor C2000 SoC Transaction Router 1f05 Atom processor C2000 SoC Transaction Router 1f06 Atom processor C2000 SoC Transaction Router 1f07 Atom processor C2000 SoC Transaction Router 1f08 Atom processor C2000 SoC Transaction Router 1f09 Atom processor C2000 SoC Transaction Router 1f0a Atom processor C2000 SoC Transaction Router 1f0b Atom processor C2000 SoC Transaction Router 1f0c Atom processor C2000 SoC Transaction Router 1f0d Atom processor C2000 SoC Transaction Router 1f0e Atom processor C2000 SoC Transaction Router 1f0f Atom processor C2000 SoC Transaction Router 1f10 Atom processor C2000 PCIe Root Port 1 1f11 Atom processor C2000 PCIe Root Port 2 1f12 Atom processor C2000 PCIe Root Port 3 1f13 Atom processor C2000 PCIe Root Port 4 1f14 Atom processor C2000 RAS 1f15 Atom processor C2000 SMBus 2.0 1f16 Atom processor C2000 RCEC 1f18 Atom processor C2000 QAT 1f19 Atom processor C2000 QAT 1f20 Atom processor C2000 4-Port IDE SATA2 Controller 1f21 Atom processor C2000 4-Port IDE SATA2 Controller 1f22 Atom processor C2000 AHCI SATA2 Controller 1f23 Atom processor C2000 AHCI SATA2 Controller 1f24 Atom processor C2000 RAID SATA2 Controller 1f25 Atom processor C2000 RAID SATA2 Controller 1f26 Atom processor C2000 RAID SATA2 Controller 1f27 Atom processor C2000 RAID SATA2 Controller 1f2c Atom processor C2000 USB Enhanced Host Controller 0200 1028 Atom C2338 on Dell 0K8Y0N motherboard 1f2e Atom processor C2000 RAID SATA2 Controller 1f2f Atom processor C2000 RAID SATA2 Controller 1f30 Atom processor C2000 2-Port IDE SATA3 Controller 1f31 Atom processor C2000 2-Port IDE SATA3 Controller 1f32 Atom processor C2000 AHCI SATA3 Controller 1f33 Atom processor C2000 AHCI SATA3 Controller 1f34 Atom processor C2000 RAID SATA3 Controller 1f35 Atom processor C2000 RAID SATA3 Controller 1f36 Atom processor C2000 RAID SATA3 Controller 1f37 Atom processor C2000 RAID SATA3 Controller 1f38 Atom processor C2000 PCU 1f39 Atom processor C2000 PCU 1f3a Atom processor C2000 PCU 1f3b Atom processor C2000 PCU 1f3c Atom processor C2000 PCU SMBus 1f3d Atom Processor C2000 PECI SMBus 1f3e Atom processor C2000 RAID SATA3 Controller 1f3f Atom processor C2000 RAID SATA3 Controller 1f40 Ethernet Connection I354 1.0 GbE Backplane 1028 05f1 Ethernet Connection I354 1.0 GbE Backplane 1f41 Ethernet Connection I354 1f42 Atom processor C2000 GbE 1f44 Atom processor C2000 GbE Virtual Function 1f45 Ethernet Connection I354 2.5 GbE Backplane 2014 Sky Lake-E Ubox Registers 2015 Sky Lake-E Ubox Registers 2016 Sky Lake-E Ubox Registers 2018 Sky Lake-E M2PCI Registers 201a Sky Lake-E Non-Transparent Bridge Registers 201c Sky Lake-E Non-Transparent Bridge Registers 201d Volume Management Device NVMe RAID Controller 2020 Sky Lake-E DMI3 Registers 15d9 095d X11SPM-TF 2021 Sky Lake-E CBDMA Registers 2024 Sky Lake-E MM/Vt-d Configuration Registers 2025 Sky Lake-E RAS 2026 Sky Lake-E IOAPIC 2030 Sky Lake-E PCI Express Root Port A 2031 Sky Lake-E PCI Express Root Port B 2032 Sky Lake-E PCI Express Root Port C 2033 Sky Lake-E PCI Express Root Port D 2034 Sky Lake-E VT-d 2035 Sky Lake-E RAS Configuration Registers 2036 Sky Lake-E IOxAPIC Configuration Registers 2040 Sky Lake-E Integrated Memory Controller 2041 Sky Lake-E Integrated Memory Controller 2042 Sky Lake-E Integrated Memory Controller 2043 Sky Lake-E Integrated Memory Controller 2044 Sky Lake-E Integrated Memory Controller 2045 Sky Lake-E LM Channel 1 2046 Sky Lake-E LMS Channel 1 2047 Sky Lake-E LMDP Channel 1 2048 Sky Lake-E DECS Channel 2 2049 Sky Lake-E LM Channel 2 204a Sky Lake-E LMS Channel 2 204b Sky Lake-E LMDP Channel 2 204c Sky Lake-E M3KTI Registers 204d Sky Lake-E M3KTI Registers 204e Sky Lake-E M3KTI Registers 2054 Sky Lake-E CHA Registers 2055 Sky Lake-E CHA Registers 2056 Sky Lake-E CHA Registers 2057 Sky Lake-E CHA Registers 2058 Sky Lake-E KTI 0 2059 Sky Lake-E UPI Registers 2066 Sky Lake-E Integrated Memory Controller 2068 Sky Lake-E DDRIO Registers 2069 Sky Lake-E DDRIO Registers 206a Sky Lake-E IOxAPIC Configuration Registers 206e Sky Lake-E DDRIO Registers 206f Sky Lake-E DDRIO Registers 2078 Sky Lake-E PCU Registers 207a Sky Lake-E PCU Registers 2080 Sky Lake-E PCU Registers 2081 Sky Lake-E PCU Registers 2082 Sky Lake-E PCU Registers 2083 Sky Lake-E PCU Registers 2084 Sky Lake-E PCU Registers 2085 Sky Lake-E PCU Registers 2086 Sky Lake-E PCU Registers 2088 Sky Lake-E DDRIO Registers 208d Sky Lake-E CHA Registers 208e Sky Lake-E CHA Registers # Engineering sample GPU 2240 Larrabee 2241 Larrabee 2250 Xeon Phi coprocessor 5100 series 225c Xeon Phi coprocessor SE10/7120 series 225d Xeon Phi coprocessor 3120 series 225e Xeon Phi coprocessor 31S1 2262 Xeon Phi coprocessor 7220 2280 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SoC Transaction Register 2284 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series High Definition Audio Controller 2286 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO1 DMA Controller 228a Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO1 HSUART Controller #1 228c Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO1 HSUART Controller #2 2292 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx SMBus Controller 2294 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series MMC Controller 2295 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SDIO Controller 2296 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SD Controller 2298 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Trusted Execution Engine 229c Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCU 22a3 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SATA Controller 22a4 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SATA AHCI Controller 22a8 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Low Power Engine Audio 22b0 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller 22b1 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller 22b5 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series USB xHCI Controller 22b8 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Imaging Unit 22c0 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 DMA Controller 22c1 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #1 22c2 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #2 22c3 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #3 22c4 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #4 22c5 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #5 22c6 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #6 22c7 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #7 22c8 Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #1 22ca Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #2 22cc Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #3 22ce Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #4 22dc Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Power Management Controller 2310 DH89xxCC LPC Controller 2323 DH89xxCC 4 Port SATA AHCI Controller 2330 DH89xxCC SMBus Controller 2331 DH89xxCC Chap Counter 2332 DH89xxCC Thermal Subsystem 2334 DH89xxCC USB2 Enhanced Host Controller #1 2335 DH89xxCC USB2 Enhanced Host Controller #1 2342 DH89xxCC PCI Express Root Port #1 2343 DH89xxCC PCI Express Root Port #1 2344 DH89xxCC PCI Express Root Port #2 2345 DH89xxCC PCI Express Root Port #2 2346 DH89xxCC PCI Express Root Port #3 2347 DH89xxCC PCI Express Root Port #3 2348 DH89xxCC PCI Express Root Port #4 2349 DH89xxCC PCI Express Root Port #4 2360 DH89xxCC Watchdog Timer 2364 DH89xxCC MEI 0 2365 DH89xxCC MEI 1 2390 DH895XCC Series LPC Controller 23a1 DH895XCC Series 2-Port SATA Controller [IDE Mode] 23a3 DH895XCC Series 4-Port SATA Controller [AHCI Mode] 23a6 DH895XCC Series 2-Port SATA Controller [IDE Mode] 23b0 DH895XCC Series SMBus Controller 23b1 DH895XCC Series CHAP Counter 23b2 DH895XCC Series Thermal Management Controller 23b4 DH895XCC Series USB2 Enhanced Host Controller #1 23b5 DH895XCC Series USB2 Enhanced Host Controller #1 23c2 DH895XCC Series PCI Express Root Port #1 23c3 DH895XCC Series PCI Express Root Port #1 23c4 DH895XCC Series PCI Express Root Port #2 23c5 DH895XCC Series PCI Express Root Port #2 23c6 CDH895XCC Series PCI Express Root Port #3 23c7 DH895XCC Series PCI Express Root Port #3 23c8 DH895XCC Series PCI Express Root Port #4 23c9 DH895XCC Series PCI Express Root Port #4 23e0 DH895XCC Series Watchdog Timer 23e4 DH895XCC Series MEI Controller #1 23e5 DH895XCC Series MEI Controller #2 2410 82801AA ISA Bridge (LPC) 2411 82801AA IDE Controller 2412 82801AA USB Controller 2413 82801AA SMBus Controller 2415 82801AA AC'97 Audio Controller 1028 0095 Precision Workstation 220 Integrated Digital Audio 1028 00b4 OptiPlex GX110 110a 0051 Activy 2xx 11d4 0040 SoundMAX Integrated Digital Audio 11d4 0048 SoundMAX Integrated Digital Audio 11d4 5340 SoundMAX Integrated Digital Audio 1734 1025 Activy 3xx 1af4 1100 QEMU Virtual Machine 2416 82801AA AC'97 Modem Controller 2418 82801AA PCI Bridge 2420 82801AB ISA Bridge (LPC) 2421 82801AB IDE Controller 2422 82801AB USB Controller 2423 82801AB SMBus Controller 2425 82801AB AC'97 Audio Controller 11d4 0040 SoundMAX Integrated Digital Audio 11d4 0048 SoundMAX Integrated Digital Audio 2426 82801AB AC'97 Modem Controller 2428 82801AB PCI Bridge 2440 82801BA ISA Bridge (LPC) 8086 5744 S845WD1-E 2442 82801BA/BAM UHCI USB 1.1 Controller #1 1014 01c6 Netvista A40/A40p 1025 1016 Travelmate 612 TX 1028 00c7 Dimension 8100 1028 00d8 Precision 530 1028 010e Optiplex GX240 103c 126f e-pc 40 1043 8027 CUSL2-C/TUSL2-C Mainboard 104d 80df Vaio PCG-FX403 147b 0505 BL7 motherboard 147b 0507 TH7II-RAID 8086 4532 Desktop Board D815EEA2/D815EFV 8086 4557 D815EGEW Mainboard 8086 4d44 D850EMV2 motherboard 8086 5744 S845WD1-E mainboard 2443 82801BA/BAM SMBus Controller 1014 01c6 Netvista A40/A40p 1025 1016 Travelmate 612 TX 1028 00c7 Dimension 8100 1028 00d8 Precision 530 1028 010e Optiplex GX240 103c 126f e-pc 40 1043 8027 CUSL2-C/TUSL2-C Mainboard 104d 80df Vaio PCG-FX403 147b 0505 BL7 motherboard 147b 0507 TH7II-RAID 15d9 3280 Supermicro P4SBE Mainboard 8086 4532 Desktop Board D815EEA2/D815EFV 8086 4557 D815EGEW Mainboard 8086 5744 S845WD1-E mainboard 2444 82801BA/BAM UHCI USB 1.1 Controller #2 1025 1016 Travelmate 612 TX 1028 00c7 Dimension 8100 1028 00d8 Precision 530 1028 010e Optiplex GX240 103c 126f e-pc 40 1043 8027 CUSL2-C/TUSL2-C Mainboard 104d 80df Vaio PCG-FX403 147b 0505 BL7 motherboard 147b 0507 TH7II-RAID 8086 4532 Desktop Board D815EEA2/D815EFV 8086 5744 S845WD1-E mainboard 2445 82801BA/BAM AC'97 Audio Controller 0e11 000b Compaq Deskpro EN Audio 0e11 0088 Evo D500 1014 01c6 Netvista A40/A40p 1025 1016 Travelmate 612 TX 1028 00d8 Precision 530 103c 126f e-pc 40 104d 80df Vaio PCG-FX403 11d4 5340 AD1885 AC97 codec 1462 3370 STAC9721 AC 147b 0505 BL7 motherboard 147b 0507 TH7II-RAID 8086 4557 D815EGEW Mainboard 8086 4656 Desktop Board D815EFV 8086 4d44 D850EMV2 motherboard 2446 82801BA/BAM AC'97 Modem Controller 1025 1016 Travelmate 612 TX 104d 80df Vaio PCG-FX403 2448 82801 Mobile PCI Bridge 1028 040a Latitude E6410 1028 040b Latitude E6510 103c 0934 Compaq nw8240 Mobile Workstation 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 103c 309f Compaq nx9420 Notebook 103c 30a3 Compaq nw8440 103c 30c1 Compaq 6910p 1043 1017 X58LE 104d 902d VAIO VGN-NR120E 105b 0d7c D270S/D250S Motherboard 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 144d c00c P30 notebook 144d c06a R730 Laptop 144d c072 Notebook N150P 1458 5000 GA-D525TUD 1734 1055 Amilo M1420 17aa 2013 ThinkPad R60e 17aa 20ae ThinkPad T61/R61 17aa 20f4 ThinkPad T400 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 8086 544b Desktop Board D425KT e4bf cc47 CCG-RUMBA 2449 82801BA/BAM/CA/CAM Ethernet Controller 0e11 0012 EtherExpress PRO/100 VM 0e11 0091 EtherExpress PRO/100 VE 1014 01ce EtherExpress PRO/100 VE 1014 01dc EtherExpress PRO/100 VE 1014 01eb EtherExpress PRO/100 VE 1014 01ec EtherExpress PRO/100 VE 1014 0202 EtherExpress PRO/100 VE 1014 0205 EtherExpress PRO/100 VE 1014 0217 EtherExpress PRO/100 VE 1014 0234 EtherExpress PRO/100 VE 1014 023d EtherExpress PRO/100 VE 1014 0244 EtherExpress PRO/100 VE 1014 0245 EtherExpress PRO/100 VE 1014 0265 PRO/100 VE Desktop Connection 1014 0267 PRO/100 VE Desktop Connection 1014 026a PRO/100 VE Desktop Connection 109f 315d EtherExpress PRO/100 VE 109f 3181 EtherExpress PRO/100 VE 1179 ff01 PRO/100 VE Network Connection 1186 7801 EtherExpress PRO/100 VE 144d 2602 HomePNA 1M CNR 1af4 1100 QEMU Virtual Machine 8086 3010 EtherExpress PRO/100 VE 8086 3011 EtherExpress PRO/100 VM 8086 3012 82562EH based Phoneline 8086 3013 EtherExpress PRO/100 VE 8086 3014 EtherExpress PRO/100 VM 8086 3015 82562EH based Phoneline 8086 3016 EtherExpress PRO/100 P Mobile Combo 8086 3017 EtherExpress PRO/100 P Mobile 8086 3018 EtherExpress PRO/100 244a 82801BAM IDE U100 Controller 1025 1016 Travelmate 612TX 104d 80df Vaio PCG-FX403 244b 82801BA IDE U100 Controller 1014 01c6 Netvista A40/A40p 1028 00c7 Dimension 8100 1028 00d8 Precision 530 1028 010e Optiplex GX240 103c 126f e-pc 40 1043 8027 CUSL2-C/TUSL2-C Mainboard 147b 0505 BL7 motherboard 147b 0507 TH7II-RAID 15d9 3280 Supermicro P4SBE Mainboard 8086 4532 Desktop Board D815EEA2/D815EFV 8086 4557 D815EGEW Mainboard 8086 4d44 D850EMV2 motherboard 8086 5744 S845WD1-E mainboard 244c 82801BAM ISA Bridge (LPC) 244e 82801 PCI Bridge 1014 0267 NetVista A30p 1028 020d Inspiron 530 1028 0211 Optiplex 755 1028 02da OptiPlex 980 1028 04f7 PowerEdge R320 server 103c 130a Z600 Workstation 103c 2a3b Pavilion A1512X 103c 2a6f Asus IPIBL-LB Motherboard 103c 31fe ProLiant DL140 G3 103c 330b ProLiant ML150 G6 Server 1043 81ec P5B Motherboard # same ID possibly also on other ASUS boards 1043 8277 P5K PRO Motherboard 1043 844d P8 series motherboard 1043 8534 ASUS B85-PLUS 1458 5000 Motherboard 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7418 Wind PC MS-7418 15d9 060d C7SIM-Q Motherboard 15d9 9680 X7DBN Motherboard 1734 11d6 B75 [Ivy Bridge] chipset on Esprimo P510 D3171 motherboard 1775 11cc CC11/CL11 17aa 3070 ThinkCentre M91p 8086 7270 Server Board S1200BTS 2450 82801E ISA Bridge (LPC) 2452 82801E USB Controller 2453 82801E SMBus Controller 2459 82801E Ethernet Controller 0 245b 82801E IDE U100 Controller 245d 82801E Ethernet Controller 1 245e 82801E PCI Bridge 2480 82801CA LPC Interface Controller 2482 82801CA/CAM USB Controller #1 0e11 0030 Evo N600c 1014 0220 ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 15d9 3480 P4DP6 8086 1958 vpr Matrix 170B4 8086 3424 SE7501HG2 Mainboard 8086 4541 Latitude C640 2483 82801CA/CAM SMBus Controller 1014 0220 ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 15d9 3480 P4DP6 8086 1958 vpr Matrix 170B4 2484 82801CA/CAM USB Controller #2 0e11 0030 Evo N600c 1014 0220 ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 15d9 3480 P4DP6 8086 1958 vpr Matrix 170B4 2485 82801CA/CAM AC'97 Audio Controller 1013 5959 Crystal WMD Audio Codec 1014 0222 ThinkPad A30/A30p/T23 1014 0508 ThinkPad T30 1014 051c ThinkPad A/T/X Series 1043 1583 L3C (SPDIF) 1043 1623 L2B (no SPDIF) 1043 1643 L3F 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 144d c006 vpr Matrix 170B4 2486 82801CA/CAM AC'97 Modem Controller 1014 0223 ThinkPad A/T/X Series 1014 0503 ThinkPad R31 1014 051a ThinkPad A/T/X Series 101f 1025 620 Series 1043 1496 PCtel HSP56 MR 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 134d 4c21 Dell Inspiron 2100 internal modem 144d 2115 vpr Matrix 170B4 internal modem 14f1 5421 MD56ORD V.92 MDC Modem 2487 82801CA/CAM USB Controller #3 0e11 0030 Evo N600c 1014 0220 ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 15d9 3480 P4DP6 8086 1958 vpr Matrix 170B4 248a 82801CAM IDE U100 Controller 0e11 0030 Evo N600c 1014 0220 ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 8086 1958 vpr Matrix 170B4 8086 4541 Latitude C640 248b 82801CA Ultra ATA Storage Controller 15d9 3480 P4DP6 248c 82801CAM ISA Bridge (LPC) 24c0 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge 1014 0267 NetVista A30p 1462 5800 845PE Max (MS-6580) 24c1 82801DBL (ICH4-L) IDE Controller 24c2 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 1014 0267 NetVista A30p 1014 052d ThinkPad 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 0126 Optiplex GX260 1028 0160 Dimension 2400 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1043 8089 P4B533 1071 8160 MIM2000 114a 0582 PC8 onboard USB 1.x 144d c005 X10 Laptop 144d c00c P30/P35 notebook 1462 5800 845PE Max (MS-6580) 1509 2990 Averatec 5110H laptop 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) 1734 1055 Amilo M1420 4c53 1090 Cx9 / Vx9 mainboard 8086 24c2 Latitude X300 8086 4541 Latitude D400/D500 e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 24c3 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller 1014 0267 NetVista A30p 1014 052d ThinkPad 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 0126 Optiplex GX260 1028 014f Latitude X300 1028 0160 Dimension 2400 1028 018d Inspiron 700m/710m 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1071 8160 MIM2000 114a 0582 PC8 onboard SMbus 144d c005 X10 Laptop 144d c00c P30/P35 notebook 1458 24c2 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) 1734 1055 Amilo M1420 4c53 1090 Cx9 / Vx9 mainboard e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 24c4 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 1014 0267 NetVista A30p 1014 052d ThinkPad 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 0126 Optiplex GX260 1028 0160 Dimension 2400 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1043 8089 P4B533 1071 8160 MIM2000 144d c00c P30/P35 notebook 1462 5800 845PE Max (MS-6580) 1509 2990 Averatec 5110H 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) 4c53 1090 Cx9 / Vx9 mainboard 8086 24c2 Latitude X300 8086 4541 Latitude D400/D500 e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 24c5 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller 0e11 00b8 Analog Devices Inc. codec [SoundMAX] 1014 0267 NetVista A30p 1014 0537 ThinkPad T4x Series 1014 055f Thinkpad R50e model 1634 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 0139 Latitude D400 1028 014f Latitude X300 1028 0152 Latitude D500 1028 0160 Dimension 2400 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m [SigmaTel STAC9750,51] 1028 0196 Inspiron 5160 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1043 1713 M2400N/M6800N laptop 1043 80b0 P4B533 1071 8160 MIM2000 1179 0201 Toshiba Tecra M1 144d c005 X10 Laptop 144d c00c P30/P35 notebook 1458 a002 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) 1734 1005 D1451 (SCENIC N300, i845GV) Sigmatel STAC9750T 1734 1055 Amilo M1420 24c6 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller 1014 0524 ThinkPad T4x Series 1014 0525 ThinkPad 1014 0559 ThinkPad R50e 1025 003c Aspire 2001WLCi (Compal CL50 motherboard) implementation 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 0196 Inspiron 5160 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1043 1716 M2400N laptop 1043 1826 M6800N 1071 8160 MIM2000 134d 4c21 Latitude D500 144d 2115 X10 Laptop 144d c00c P30/P35 notebook # Conexant HSF Softmodem (CXT22) 14f1 5422 D480 MDC V.9x Modem 24c7 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 1014 0267 NetVista A30p 1014 052d ThinkPad 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 0126 Optiplex GX260 1028 0160 Dimension 2400 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1043 8089 P4B533 1071 8160 MIM2000 144d c00c P30/P35 notebook 1462 5800 845PE Max (MS-6580) 1509 2990 Averatec 5110H 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) 4c53 1090 Cx9 / Vx9 mainboard 8086 24c2 Latitude X300 8086 4541 Latitude D400/D500 e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 24ca 82801DBM (ICH4-M) IDE Controller 1014 052d ThinkPad 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 014f Latitude X300 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1071 8160 MIM2000 144d c005 X10 Laptop 144d c00c P30/P35 notebook 1734 1055 Amilo M1420 8086 4541 Latitude D400/D500 24cb 82801DB (ICH4) IDE Controller 1014 0267 NetVista A30p 1028 0126 Optiplex GX260 1028 0160 Dimension 2400 1043 8089 P4B533 114a 0582 PC8 onboard IDE 1458 24c2 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) 4c53 1090 Cx9 / Vx9 mainboard e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 24cc 82801DBM (ICH4-M) LPC Interface Bridge 144d c00c P30 notebook 1734 1055 Amilo M1420 24cd 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller 1014 0267 NetVista A30p 1014 052e ThinkPad 1025 005a TravelMate 290 1025 0064 Extensa 3000 series laptop: Intel 82801DBM (ICH4-M) 1028 011d Latitude D600 1028 0126 Optiplex GX260 1028 0139 Latitude D400 1028 0152 Latitude D500 1028 0160 Dimension 2400 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 1043 8089 P4B533 1071 8160 MIM2000 114a 0582 PC8 onboard USB 2.0 1179 ff00 Satellite 2430 144d c005 X10 Laptop 144d c00c P30/P35 notebook 1462 3981 845PE Max (MS-6580) 1509 1968 Averatec 5110H 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) 1734 1055 Amilo M1420 1af4 1100 QEMU Virtual Machine 4c53 1090 Cx9 / Vx9 mainboard 8086 24c2 Latitude X300 e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 24d0 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge 24d1 82801EB (ICH5) SATA Controller 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 1028 019a PowerEdge SC1425 103c 12bc d530 CMT (DG746A) 103c 3208 ProLiant DL140 G2 1043 80a6 P4P800 series motherboard 1458 24d1 GA-8IPE1000 Pro2 motherboard (865PE) 1462 7280 865PE Neo2 (MS-6728) 1462 7650 Hetis 865GV-E (MS-7065) 1565 5200 P4TSV Motherboard (865G) 15d9 4580 P4SCE Mainboard 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24d2 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 1014 0287 ThinkCentre S50 1014 02dd eServer xSeries server mainboard 1014 02ed eServer xSeries server mainboard 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 1028 016c PowerEdge 1850 onboard UHCI 1028 016d PowerEdge 2850 onboard UHCI 1028 0170 PowerEdge 6850 onboard UHCI 1028 0183 PowerEdge 1800 1028 019a PowerEdge SC1425 103c 006a NX9500 103c 12bc d530 CMT (DG746A) 103c 3208 ProLiant DL140 G2 1043 80a6 P4P800/P5P800 series motherboard 1458 24d2 GA-8IPE1000/8KNXP motherboard 1462 7280 865PE Neo2 (MS-6728) 1565 3101 P4TSV Motherboard (865G) 15d9 4580 P4SCE Mainboard 1734 101c PRIMERGY RX/TX series onboard UHCI 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24d3 82801EB/ER (ICH5/ICH5R) SMBus Controller 1014 0287 ThinkCentre S50 1014 02dd eServer xSeries server mainboard 1014 02ed eServer xSeries server mainboard 1028 0156 Precision 360 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 103c 12bc d330 uT 103c 3208 ProLiant DL140 G2 1043 80a6 P4P800/P5P800 series motherboard 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) 1462 7280 865PE Neo2 (MS-6728) 1462 7650 Hetis 865GV-E (MS-7065) 1565 3101 P4TSV Motherboard (865G) 15d9 4580 P4SCE Mainboard 1734 101c PRIMERGY RX/TX S2 series SMBus 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24d4 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 1014 0287 ThinkCentre S50 1014 02dd eServer xSeries server mainboard 1014 02ed eServer xSeries server mainboard 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 1028 016c PowerEdge 1850 onboard UHCI 1028 016d PowerEdge 2850 onboard UHCI 1028 0170 PowerEdge 6850 onboard UHCI 1028 0183 PowerEdge 1800 1028 019a PowerEdge SC1425 103c 006a NX9500 103c 12bc d530 CMT (DG746A) 103c 3208 ProLiant DL140 G2 1043 80a6 P4P800/P5P800 series motherboard 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) 1462 7280 865PE Neo2 (MS-6728) 1462 7650 Hetis 865GV-E (MS-7065) 1565 3101 P4TSV Motherboard (865G) 15d9 4580 P4SCE Mainboard 1734 101c PRIMERGY RX/TX S2 series onboard UHCI 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24d5 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller 100a 147b Abit IS7-E motherboard 1014 0287 ThinkCentre S50 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 103c 006a NX9500 103c 12bc d330 uT 1043 80f3 P4P800 series motherboard 1043 810f P5P800-MX Mainboard 1458 a002 GA-8IPE1000/8KNXP motherboard 1462 0080 865PE Neo2-V (MS-6788) Mainboard 1462 7280 865PE Neo2 (MS-6728) 1462 7650 Hetis 865GV-E (MS-7065) 8086 a000 D865PERL mainboard 8086 e000 D865PERL mainboard 8086 e001 Desktop Board D865GBF 8086 e002 SoundMax Integrated Digital Audio 24d6 82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller 103c 006a NX9500 24d7 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3 1014 0287 ThinkCentre S50 1014 02ed xSeries server mainboard 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 1028 016c PowerEdge 1850 onboard UHCI 1028 016d PowerEdge 2850 onboard UHCI 1028 0170 PowerEdge 6850 onboard UHCI 1028 0183 PowerEdge 1800 103c 006a NX9500 103c 12bc d530 CMT (DG746A) 1043 80a6 P4P800/P5P800 series motherboard 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) 1462 7280 865PE Neo2 (MS-6728) 1462 7650 Hetis 865GV-E (MS-7065) 1565 3101 P4TSV Motherboard (865G) 15d9 4580 P4SCE Mainboard 1734 101c PRIMERGY RX/TX S2 series onboard UHCI 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24db 82801EB/ER (ICH5/ICH5R) IDE Controller 1014 0287 ThinkCentre S50 1014 02dd eServer xSeries server mainboard 1014 02ed eServer xSeries server mainboard 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 1028 016c PowerEdge 1850 IDE Controller 1028 016d PowerEdge 2850 IDE Controller 1028 0170 PowerEdge 6850 IDE Controller 1028 019a PowerEdge SC1425 103c 006a NX9500 103c 12bc d530 CMT (DG746A) 1043 80a6 P4P800/P5P800 series motherboard 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) 1462 7280 865PE Neo2 (MS-6728) 1462 7580 MSI 875P 1462 7650 Hetis 865GV-E (MS-7065) 1565 3101 P4TSV Motherboard (865G) 15d9 4580 P4SCE Mainboard 1734 101c PRIMERGY RX/TX S2 series onboard IDE 8086 24db P4C800 Mainboard 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24dc 82801EB (ICH5) LPC Interface Bridge 24dd 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller 1014 0287 ThinkCentre S50 1014 02dd eServer xSeries server mainboard 1014 02ed eServer xSeries server mainboard 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 1028 016c PowerEdge 1850 onboard EHCI 1028 016d PowerEdge 2850 onboard EHCI 1028 0170 PowerEdge 6850 onboard EHCI 1028 0183 PowerEdge 1800 1028 019a PowerEdge SC1425 103c 006a NX9500 103c 12bc d530 CMT (DG746A) 103c 3208 ProLiant DL140 G2 1043 80a6 P4P800/P5P800 series motherboard 1458 5006 GA-8IPE1000 Pro2 motherboard (865PE) 1462 7280 865PE Neo2 (MS-6728) 1462 7650 Hetis 865GV-E (MS-7065) 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24de 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4 1014 0287 ThinkCentre S50 1014 02ed xSeries server mainboard 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 1043 80a6 P4P800/P5P800 series motherboard 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) 1462 7280 865PE Neo2 (MS-6728) 1462 7650 Hetis 865GV-E (MS-7065) 1565 3101 P4TSV Motherboard (865G) 15d9 4580 P4SCE Mainboard 1734 101c PRIMERGY RX/TX S2 series onboard UHCI 8086 3427 S875WP1-E mainboard 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 8086 524c D865PERL mainboard 24df 82801ER (ICH5R) SATA Controller 1028 0168 Precision Workstation 670 Mainboard 24f0 Omni-Path HFI Silicon 100 Series [discrete] 10a9 802e Omni-path HFI 100 Series, 1-port A-board 10a9 802f Omni-path HFI 100 Series, 2-port A-board 10a9 8030 Omni-path HFI 100 Series, 1-port B-board 10a9 8031 Omni-path HFI 100 Series, 2-port B-board 1590 00e7 100Gb 1-port OP101 QSFP28 x8 PCIe Gen3 with Intel Omni-Path Adapter 1590 00e8 100Gb 1-port OP101 QSFP28 x16 PCIe Gen3 with Intel Omni-Path Adapter 1590 021c Apollo 100Gb 1-port Intel Omni-Path Architecture 860z Mezzanine FIO Adapter 15d9 0934 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, SIOM Module 15d9 099b Omni-path HFI Mezz AOC, 1 Port, PCIe x16. 1cb8 0001 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC4600 QSFP28 1cb8 0002 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC6600 Fixed Port 1cb8 0003 Omni-Path HFI Adapter 100 Series, 2 Port, 2 PCIe x16, Earth Simulation QSFP28 1cb8 0004 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC4600E QSFP28 434e 0001 Omni-Path HFI Adapter 100 Series, 1 Port, OCP 3.0 434e 2628 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16 8086 2628 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16 8086 2629 Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x8 8086 262a Omni-Path HFI Adapter 100 Series, 2 Ports, Split PCIe x16 8086 262d Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, IO Module AHWKPTP100HF 24f1 Omni-Path HFI Silicon 100 Series [integrated] 24f3 Wireless 8260 8086 0010 Dual Band Wireless-AC 8260 [Snow Field Peak AC] 8086 1010 Dual Band Wireless-AC 8260 24f4 Wireless 8260 8086 0030 Dual Band Wireless-AC 8260 [Snow Field Peak AC] 24fb Dual Band Wireless-AC 3168NGW [Stone Peak] 24fd Wireless 8265 / 8275 8086 0010 Dual Band Wireless-AC 8265 [Windstorm Peak] 8086 0150 Dual Band Wireless-AC 8265 8086 1010 Dual Band Wireless-AC 8265 8086 1130 Dual Band Wireless-AC 8265 2500 82820 820 (Camino) Chipset Host Bridge (MCH) 1028 0095 Precision Workstation 220 Chipset 1043 801c P3C-2000 system chipset 2501 82820 820 (Camino) Chipset Host Bridge (MCH) 1043 801c P3C-2000 system chipset 250b 82820 820 (Camino) Chipset Host Bridge 250f 82820 820 (Camino) Chipset AGP Bridge 2520 82805AA MTH Memory Translator Hub 2521 82804AA MRH-S Memory Repeater Hub for SDRAM 2522 NVMe Optane Memory Series 8086 3806 Optane Memory 16GB 8086 3810 Optane Memory M10 16GB 2525 Optane NVME SSD P1600X Series 2526 Wi-Fi 5(802.11ac) Wireless-AC 9x6x [Thunder Peak] 8086 0014 Dual Band Wi-Fi 5 Wireless-AC 9260 160MHz 2x2 8086 0210 Dual Band Wi-Fi 5 Wireless-AC 9260 80MHz 2x2 8086 0214 Dual Band Wi-Fi 5 Wireless-AC 9260 80MHz 2x2 8086 0230 Dual Band Wi-Fi 5 Wireless-AC 9560 80MHz 2x2 8086 0234 Dual Band Wi-Fi 5 Wireless-AC 9560 80MHz 2x2 8086 0238 Dual Band Wi-Fi 5 Wireless-AC 9560 80MHz 2x2 8086 023c Dual Band Wi-Fi 5 Wireless-AC 9560 80MHz 2x2 8086 0260 Dual Band Wi-Fi 5 Wireless-AC 9461 80MHz 1x1 8086 0264 Dual Band Wi-Fi 5 Wireless-AC 9461 80MHz 1x1 8086 02a0 Dual Band Wi-Fi 5 Wireless-AC 9462 80MHz 1x1 8086 02a4 Dual Band Wi-Fi 5 Wireless-AC 9462 80MHz 1x1 2530 82850 850 (Tehama) Chipset Host Bridge (MCH) 1028 00c7 Dimension 8100 147b 0507 TH7II-RAID 2531 82860 860 (Wombat) Chipset Host Bridge (MCH) 1028 00d8 Precision 530 2532 82850 850 (Tehama) Chipset AGP Bridge 2533 82860 860 (Wombat) Chipset AGP Bridge 2534 82860 860 (Wombat) Chipset PCI Bridge 2540 E7500 Memory Controller Hub 15d9 3480 P4DP6 2541 E7500/E7501 Host RASUM Controller 15d9 3480 P4DP6 4c53 1090 Cx9 / Vx9 mainboard 8086 3424 SE7501HG2 Mainboard 2543 E7500/E7501 Hub Interface B PCI-to-PCI Bridge 2544 E7500/E7501 Hub Interface B RASUM Controller 4c53 1090 Cx9 / Vx9 mainboard 2545 E7500/E7501 Hub Interface C PCI-to-PCI Bridge 2546 E7500/E7501 Hub Interface C RASUM Controller 2547 E7500/E7501 Hub Interface D PCI-to-PCI Bridge 2548 E7500/E7501 Hub Interface D RASUM Controller 254c E7501 Memory Controller Hub 4c53 1090 Cx9 / Vx9 mainboard 8086 3424 SE7501HG2 Mainboard 2550 E7505 Memory Controller Hub 2551 E7505/E7205 Series RAS Controller 2552 E7505/E7205 PCI-to-AGP Bridge 2553 E7505 Hub Interface B PCI-to-PCI Bridge 2554 E7505 Hub Interface B PCI-to-PCI Bridge RAS Controller 255d E7205 Memory Controller Hub 2560 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface 1028 0126 Optiplex GX260 1458 2560 GA-8PE667 Ultra 1462 5800 845PE Max (MS-6580) 2561 82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge 2562 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device 0e11 00b9 Evo D510 SFF 1014 0267 NetVista A30p 1028 0160 Dimension 2400 1734 1003 D1521 Mainboard (Fujitsu-Siemens) 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) 2570 82865G/PE/P DRAM Controller/Host-Hub Interface 103c 006a NX9500 103c 12bc d330 uT 1043 80f2 P4P800/P5P800 series motherboard 1458 2570 GA-8IPE1000 Pro2 motherboard (865PE) 2571 82865G/PE/P AGP Bridge 2572 82865G Integrated Graphics Controller 1014 0287 ThinkCentre S50 1028 019d Dimension 3000 103c 12bc D530 sff(dc578av) 1043 80a5 P5P800-MX Mainboard 1462 7650 Hetis 865GV-E (MS-7065) 1734 101b Fujitsu-Siemens Scenic E300 i865GV 8086 4246 Desktop Board D865GBF 8086 4c43 Desktop Board D865GLC 2573 82865G/PE/P PCI to CSA Bridge 2576 82865G/PE/P Processor to I/O Memory Interface 2578 82875P/E7210 Memory Controller Hub 1458 2578 GA-8KNXP motherboard (875P) 1462 7580 MS-6758 (875P Neo) 15d9 4580 P4SCE Motherboard 2579 82875P Processor to AGP Controller 257b 82875P/E7210 Processor to PCI to CSA Bridge 257e 82875P/E7210 Processor to I/O Memory Interface 2580 82915G/P/GV/GL/PL/910GL Memory Controller Hub 1458 2580 GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105b Scenic W620 2581 82915G/P/GV/GL/PL/910GL PCI Express Root Port 2582 82915G/GV/910GL Integrated Graphics Controller 1028 1079 Optiplex GX280 103c 3006 DC7100 SFF(DX878AV) 1043 2582 P5GD1-VW Mainboard 1458 2582 GA-8I915ME-G Mainboard 1734 105b Scenic W620 1849 2582 ASRock P4Dual-915GL 2584 82925X/XE Memory Controller Hub 1028 0177 Dimension 8400 2585 82925X/XE PCI Express Root Port 2588 E7220/E7221 Memory Controller Hub 2589 E7220/E7221 PCI Express Root Port 258a E7221 Integrated Graphics Controller 2590 Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller 1014 0575 ThinkPad X41 / Z60t 1028 0182 Latitude C610 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 1043 82d9 Asus Eee PC 900 104d 81b7 Vaio VGN-S3XP a304 81b7 Vaio VGN-S3XP e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2591 Mobile 915GM/PM Express PCI Express Root Port 103c 0934 Compaq nw8240 Mobile Workstation 2592 Mobile 915GM/GMS/910GML Express Graphics Controller 1014 0582 ThinkPad X41 103c 099c NX6110/NC6120 103c 308a NC6220 1043 1881 GMA 900 915GM Integrated Graphics e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 25a1 6300ESB LPC Interface Controller 25a2 6300ESB PATA Storage Controller 1734 1073 Primergy Econel 200 D2020 mainboard 1775 10d0 V5D Single Board Computer IDE 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10e0 PSL09 PrPMC 25a3 6300ESB SATA Storage Controller 1734 1073 Primergy Econel 200 D2020 mainboard 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25a4 6300ESB SMBus Controller 1734 1073 Primergy Econel 200 D2020 mainboard 1775 10d0 V5D Single Board Computer 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25a6 6300ESB AC'97 Audio Controller 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 25a7 6300ESB AC'97 Modem Controller 25a9 6300ESB USB Universal Host Controller 1734 1073 Primergy Econel 200 D2020 mainboard 1775 10d0 V5D Single Board Computer USB 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25aa 6300ESB USB Universal Host Controller 1734 1073 Primergy Econel 200 D2020 mainboard 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25ab 6300ESB Watchdog Timer 1734 1073 Primergy Econel 200 D2020 mainboard 1775 10d0 V5D Single Board Computer 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 1af4 1100 QEMU Virtual Machine 4c53 10b0 CL9 mainboard 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25ac 6300ESB I/O Advanced Programmable Interrupt Controller 1734 1073 Primergy Econel 200 D2020 mainboard 1775 10d0 V5D Single Board Computer 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25ad 6300ESB USB2 Enhanced Host Controller 1734 1073 Primergy Econel 200 D2020 mainboard 1775 10d0 V5D Single Board Computer USB 2.0 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25ae 6300ESB 64-bit PCI-X Bridge 25b0 6300ESB SATA RAID Controller 1775 1100 CR11/VR11 Single Board Computer 4c53 10d0 Telum ASLP10 Processor AMC 4c53 10e0 PSL09 PrPMC 25c0 5000X Chipset Memory Controller Hub 25d0 5000Z Chipset Memory Controller Hub 25d4 5000V Chipset Memory Controller Hub 15d9 8680 X7DVL-E-O motherboard 25d8 5000P Chipset Memory Controller Hub 103c 31fd ProLiant DL360 G5 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 25e2 5000 Series Chipset PCI Express x4 Port 2 25e3 5000 Series Chipset PCI Express x4 Port 3 25e4 5000 Series Chipset PCI Express x4 Port 4 25e5 5000 Series Chipset PCI Express x4 Port 5 25e6 5000 Series Chipset PCI Express x4 Port 6 25e7 5000 Series Chipset PCI Express x4 Port 7 25f0 5000 Series Chipset FSB Registers 1028 01bb PowerEdge 1955 FSB Registers 103c 31fd ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 25f1 5000 Series Chipset Reserved Registers 103c 31fd ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 25f3 5000 Series Chipset Reserved Registers 103c 31fd ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 25f5 5000 Series Chipset FBD Registers 103c 31fd ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 25f6 5000 Series Chipset FBD Registers 103c 31fd ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 25f7 5000 Series Chipset PCI Express x8 Port 2-3 25f8 5000 Series Chipset PCI Express x8 Port 4-5 25f9 5000 Series Chipset PCI Express x8 Port 6-7 25fa 5000X Chipset PCI Express x16 Port 4-7 2600 E8500/E8501 Hub Interface 1.5 1028 0170 PowerEdge 6850 Hub Interface 2601 E8500/E8501 PCI Express x4 Port D 2602 E8500/E8501 PCI Express x4 Port C0 2603 E8500/E8501 PCI Express x4 Port C1 2604 E8500/E8501 PCI Express x4 Port B0 2605 E8500/E8501 PCI Express x4 Port B1 2606 E8500/E8501 PCI Express x4 Port A0 2607 E8500/E8501 PCI Express x4 Port A1 2608 E8500/E8501 PCI Express x8 Port C 2609 E8500/E8501 PCI Express x8 Port B 260a E8500/E8501 PCI Express x8 Port A 260c E8500/E8501 IMI Registers 2610 E8500/E8501 FSB Registers 2611 E8500/E8501 Address Mapping Registers 2612 E8500/E8501 RAS Registers 2613 E8500/E8501 Reserved Registers 2614 E8500/E8501 Reserved Registers 2615 E8500/E8501 Miscellaneous Registers 2617 E8500/E8501 Reserved Registers 2618 E8500/E8501 Reserved Registers 2619 E8500/E8501 Reserved Registers 261a E8500/E8501 Reserved Registers 261b E8500/E8501 Reserved Registers 261c E8500/E8501 Reserved Registers 261d E8500/E8501 Reserved Registers 261e E8500/E8501 Reserved Registers 2620 E8500/E8501 eXternal Memory Bridge 1028 0170 PowerEdge 6850 Memory Bridge 2621 E8500/E8501 XMB Miscellaneous Registers 1028 0170 PowerEdge 6850 XMB Registers 2622 E8500/E8501 XMB Memory Interleaving Registers 1028 0170 PowerEdge 6850 Memory Interleaving Registers 2623 E8500/E8501 XMB DDR Initialization and Calibration 1028 0170 PowerEdge 6850 DDR Initialization and Calibration 2624 E8500/E8501 XMB Reserved Registers 1028 0170 PowerEdge 6850 Reserved Registers 2625 E8500/E8501 XMB Reserved Registers 1028 0170 PowerEdge 6850 Reserved Registers 2626 E8500/E8501 XMB Reserved Registers 1028 0170 PowerEdge 6850 Reserved Registers 2627 E8500/E8501 XMB Reserved Registers 1028 0170 PowerEdge 6850 Reserved Registers 2640 82801FB/FR (ICH6/ICH6R) LPC Interface Bridge 1462 7028 915P/G Neo2 1734 105c Scenic W620 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2641 82801FBM (ICH6M) LPC Interface Bridge 1014 0568 ThinkPad X41 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 2642 82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge 2651 82801FB/FW (ICH6/ICH6W) SATA Controller 1028 0179 Optiplex GX280 1043 2601 P5GD1-VW Mainboard 1734 105c Scenic W620 8086 4147 D915GAG Motherboard e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2652 82801FR/FRW (ICH6R/ICH6RW) SATA Controller 1028 0177 Dimension 8400 1462 7028 915P/G Neo2 2653 82801FBM (ICH6M) SATA Controller 1014 056a ThinkPad X41 2658 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 1014 0565 ThinkPad X41 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 1043 80a6 P5GD1-VW Mainboard 1458 2558 GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105c Scenic W620 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2659 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 1014 0565 ThinkPad X41 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 1043 80a6 P5GD1-VW Mainboard 1458 2659 GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105c Scenic W620 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 265a 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 1014 0565 ThinkPad X41 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 1043 80a6 P5GD1-VW Mainboard 1458 265a GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105c Scenic W620 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 265b 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 1014 0565 ThinkPad X41 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 103c 099c NX6110/NC6120 1043 80a6 P5GD1-VW Mainboard 1458 265a GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105c Scenic W620 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 265c 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller 1014 0566 ThinkPad X41 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 1043 80a6 P5GD1-VW Mainboard 1458 5006 GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105c Scenic W620 8086 265c Dimension 3100 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2660 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 103c 0934 Compaq nw8240 Mobile Workstation 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2662 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2 103c 0934 Compaq nw8240 Mobile Workstation 103c 0944 Compaq nc6220 Notebook PC e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2664 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2666 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2668 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller 1014 05b7 ThinkPad Z60t # based on the PTGD1-LA motherboard 103c 2a09 PufferM-UL8E 1043 1173 A6VC 1043 814e P5GD1-VW Mainboard 1462 7028 915P/G Neo2 1af4 1100 QEMU Virtual Machine 266a 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller 1014 056b ThinkPad X41 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 1043 80a6 P5GD1-VW Mainboard 1458 266a GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105c Scenic W620 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 266c 82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller 266d 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller 1025 006a Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop) 103c 0934 Compaq nw8240/nx8220 103c 099c NX6110/NC6120 266e 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller 1014 0581 ThinkPad X41 (Analog Devices AD1981B codec) 1025 006a Realtek ALC 655 codec (in Acer TravelMate 2410 serie laptop) 1028 0177 Dimension 8400 1028 0179 Optiplex GX280 1028 0182 Latitude D610 Laptop 1028 0187 Precision M70 Laptop 1028 0188 Inspiron 6000 laptop 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq NC6220 103c 099c NX6110/NC6120 103c 3006 DC7100 SFF(DX878AV) 1458 a002 GA-8I915ME-G Mainboard 152d 0745 Packard Bell A8550 Laptop 1734 105a Scenic W620 266f 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller 1028 0177 Dimension 8400 103c 0934 Compaq nw8240/nx8220 103c 0944 Compaq nc6220 Notebook PC 103c 099c NX6110/NC6120 1043 80a6 P5GD1-VW Mainboard 1458 266f GA-8I915ME-G Mainboard 1462 7028 915P/G Neo2 1734 105c Scenic W620 e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 2670 631xESB/632xESB/3100 Chipset LPC Interface Controller 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 2680 631xESB/632xESB/3100 Chipset SATA IDE Controller 2681 631xESB/632xESB SATA AHCI Controller 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 2682 631xESB/632xESB SATA RAID Controller 103c 31fe Adaptec Serial ATA HostRAID 2683 631xESB/632xESB SATA RAID Controller 2688 631xESB/632xESB/3100 Chipset UHCI USB Controller #1 1028 01bb PowerEdge 1955 onboard USB 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 2689 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 1028 01bb PowerEdge 1955 onboard USB 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 268a 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 268b 631xESB/632xESB/3100 Chipset UHCI USB Controller #4 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL360 G5 15d9 8680 X7DVL-E-O motherboard 8086 3476 S5000PSLSATA Server Board 268c 631xESB/632xESB/3100 Chipset EHCI USB2 Controller 1028 01bb PowerEdge 1955 onboard USB 1028 01f0 PowerEdge R900 onboard USB 103c 31fe ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 2690 631xESB/632xESB/3100 Chipset PCI Express Root Port 1 103c 31fe ProLiant DL140 G3 15d9 9680 X7DBN Motherboard 2692 631xESB/632xESB/3100 Chipset PCI Express Root Port 2 103c 31fe ProLiant DL140 G3 2694 631xESB/632xESB/3100 Chipset PCI Express Root Port 3 2696 631xESB/632xESB/3100 Chipset PCI Express Root Port 4 2698 631xESB/632xESB AC '97 Audio Controller 2699 631xESB/632xESB AC '97 Modem Controller 269a 631xESB/632xESB High Definition Audio Controller 269b 631xESB/632xESB/3100 Chipset SMBus Controller 103c 31fe ProLiant DL140 G3 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 8086 3476 S5000PSLSATA Server Board 269e 631xESB/632xESB IDE Controller 103c 31fe ProLiant DL140 G3, DL360 G5 15d9 8680 X7DVL-E-O motherboard 15d9 9680 X7DBN Motherboard 2700 Optane SSD 900P Series 8086 3900 900P Series [Add-in Card] 8086 3901 900P Series [2.5" SFF] 2701 NVMe Datacenter SSD [Optane] 1028 2000 Express Flash NVMe [Optane] 375GB 2.5" U.2 (P4800X) 1028 2001 Express Flash NVMe [Optane] 750GB 2.5" U.2 (P4800X) 1028 2002 Express Flash NVMe [Optane] 750GB AIC (P4800X) 1028 200a Express Flash NVMe [Optane] 375GB AIC (P4800X) 8086 3904 NVMe Datacenter SSD [Optane] x4 AIC (P4800X) 8086 3905 NVMe Datacenter SSD [Optane] 15mm 2.5" U.2 (P4800X) 2723 Wi-Fi 6 AX200 1a56 1654 Killer Wi-Fi 6 AX1650x (AX200NGW) 8086 0084 Wi-Fi 6 AX200NGW 2725 Wi-Fi 6E(802.11ax) AX210/AX1675* 2x2 [Typhoon Peak] 1a56 1673 Killer AX1675w 160MHz 1a56 1674 Killer Wi-Fi 6E AX1675x 160MHz 8086 0020 Wi-Fi 6 AX210 160MHz 8086 0024 Wi-Fi 6 AX210 160MHz 8086 0310 Wi-Fi 6 AX210 160MHz 8086 0510 Wi-Fi 6 AX210 160MHz 8086 0a10 Wi-Fi 6 AX210 160MHz 8086 2020 Wi-Fi 6 AX210 160MHz 8086 4020 Wi-Fi 6 AX210 160MHz 8086 6020 Wi-Fi 6 AX210 160MHz 8086 6024 Wi-Fi 6 AX210 160MHz 8086 e020 Wi-Fi 6 AX210 160MHz 8086 e024 Wi-Fi 6 AX210 160MHz 272b Wi-Fi 7(802.11be) AX1775*/AX1790*/BE20*/BE401/BE1750* 2x2 8086 00f0 BE200 320MHz [Gale Peak] 8086 00f4 BE200 320MHz [Gale Peak] 8086 02f4 BE202 160MHz [Misty Peak] 8086 40f0 BE200 320MHz [Gale Peak] 8086 42f4 BE202 160MHz [Misty Peak] 8086 e0f4 BE200 320MHz [Gale Peak] 2770 82945G/GZ/P/PL Memory Controller Hub 1028 01ad OptiPlex GX620 103c 2a3b Pavilion A1512X 1043 817a P5LD2-VM Mainboard 107b 5048 E4500 1462 7418 Wind PC MS-7418 1849 2770 ConRoe1333-D667 8086 544e DeskTop Board D945GTP 2771 82945G/GZ/P/PL PCI Express Root Port 2772 82945G/GZ Integrated Graphics Controller 103c 2a3b Pavilion A1512X 1462 7418 Wind PC MS-7418 1849 2772 ConRoe1333-D667 8086 544e DeskTop Board D945GTP 8086 d605 Desktop Board D945GCCR 2774 82955X Memory Controller Hub 2775 82955X PCI Express Root Port 2776 82945G/GZ Integrated Graphics Controller 2778 E7230/3000/3010 Memory Controller Hub 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 2779 E7230/3000/3010 PCI Express Root Port 277a 82975X/3010 PCI Express Root Port 277c 82975X Memory Controller Hub 1043 8178 P5WDG2 WS Professional motherboard 277d 82975X PCI Express Root Port 2780 82915G/GV/GL/910GL [Grantsdale] Graphics Device 2782 82915G Integrated Graphics Controller 1043 2582 P5GD1-VW Mainboard 1734 105b Scenic W620 2792 Mobile 915GM/GMS/910GML Express Graphics Controller 1014 0582 ThinkPad X41 103c 099c NX6110/NC6120 103c 308a Compaq nc6220 Notebook PC 1043 1881 GMA 900 915GM Integrated Graphics e4bf 0ccd CCD-CALYPSO e4bf 0cd3 CD3-JIVE e4bf 58b1 XB1 27a0 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub 1025 006c 9814 WKMI 1028 01d7 XPS M1210 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 103c 30d5 530 Laptop 1043 1237 A6J-Q008 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 17aa 2015 ThinkPad T60 17aa 2017 ThinkPad R60/T60/X60 series 27a1 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port 103c 309f Compaq nx9420 Notebook 103c 30a3 Compaq nw8440 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 27a2 Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller 103c 30a1 NC2400 103c 30d5 530 Laptop 17aa 201a ThinkPad R60/T60/X60 series 9902 1584 CCE MPL-D10H120F 27a6 Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller 103c 30a1 NC2400 103c 30d5 530 Laptop 1775 11cc CC11/CL11 integrated graphics (secondary) 17aa 201a ThinkPad R60/T60/X60 series 27ac Mobile 945GSE Express Memory Controller Hub 1775 11cc CC11/CL11 27ad Mobile 945GSE Express PCI Express Root Port 27ae Mobile 945GSE Express Integrated Graphics Controller 1775 11cc CC11/CL11 integrated graphics (primary) 27b0 82801GH (ICH7DH) LPC Interface Bridge 103c 2a3b Pavilion A1512X 8086 544e DeskTop Board D945GTP 27b8 82801GB/GR (ICH7 Family) LPC Interface Bridge 1028 01e6 PowerEdge 860 103c 2a8c Compaq 500B Microtower 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM Motherboard 107b 5048 E4500 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 8086 544e DeskTop Board D945GTP 27b9 82801GBM (ICH7-M) LPC Interface Bridge 1028 01d7 XPS M1210 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 103c 30d5 530 Laptop 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 10f7 8338 Panasonic CF-Y5 laptop 17aa 2009 ThinkPad R60/T60/X60 series 27bc NM10 Family LPC Controller 1043 83ad Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 144d c072 Notebook N150P 1458 5001 GA-D525TUD 8086 4f4d DeskTop Board D510MO 8086 544b Desktop Board D425KT 27bd 82801GHM (ICH7-M DH) LPC Interface Bridge 1025 006c 9814 WKMI 27c0 NM10/ICH7 Family SATA Controller [IDE mode] 1028 01ad OptiPlex GX620 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 103c 2a8c Compaq 500B Microtower 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM Motherboard 107b 5048 E4500 1462 2310 MSI Hetis 945 1462 7236 945P Neo3-F Rev. 2.2 motherboard 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 8086 544b Desktop Board D425KT 8086 544e DeskTop Board D945GTP 27c1 NM10/ICH7 Family SATA Controller [AHCI mode] 1028 01df PowerEdge SC440 103c 2a3b Pavilion A1512X 1043 83ad Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 144d c072 Notebook N150P 1458 b005 GA-D525TUD 1775 11cc CC11/CL11 8086 4f4d DeskTop Board D510MO 8086 5842 DeskTop Board D975XBX 27c3 82801GR/GDH (ICH7R/ICH7DH) SATA Controller [RAID mode] 1775 11cc CC11/CL11 8086 544e DeskTop Board D945GTP 27c4 82801GBM/GHM (ICH7-M Family) SATA Controller [IDE mode] 1025 006c 9814 WKMI 1028 01d7 XPS M1210 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 17aa 200e ThinkPad T60 27c5 82801GBM/GHM (ICH7-M Family) SATA Controller [AHCI mode] 103c 309f Compaq nx9420 Notebook 103c 30a3 Compaq nw8440 103c 30d5 530 Laptop 17aa 200d ThinkPad R60/T60/X60 series 27c6 82801GHM (ICH7-M DH) SATA Controller [RAID mode] 27c8 NM10/ICH7 Family USB UHCI Controller #1 1025 006c 9814 WKMI 1028 01ad OptiPlex GX620 1028 01d7 XPS M1210 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 103c 30d5 530 Laptop 1043 1237 A6J-Q008 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM, P5LD2-VM Mainboard 1043 83ad Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 107b 5048 E4500 144d c072 Notebook N150P 1458 5004 GA-D525TUD 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 200a ThinkPad R60/T60/X60 series 8086 4f4d DeskTop Board D510MO 8086 544b Desktop Board D425KT 8086 544e DeskTop Board D945GTP 27c9 NM10/ICH7 Family USB UHCI Controller #2 1025 006c 9814 WKMI 1028 01ad OptiPlex GX620 1028 01d7 XPS M1210 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 1043 1237 A6J-Q008 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM, P5LD2-VM Mainboard 1043 83ad Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 107b 5048 E4500 144d c072 Notebook N150P 1458 5004 GA-D525TUD 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 200a ThinkPad R60/T60/X60 series 8086 4f4d DeskTop Board D510MO 8086 544b Desktop Board D425KT 8086 544e DeskTop Board D945GTP 27ca NM10/ICH7 Family USB UHCI Controller #3 1025 006c 9814 WKMI 1028 01ad OptiPlex GX620 1028 01d7 XPS M1210 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 1043 1237 A6J-Q008 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM, P5LD2-VM Mainboard 1043 83ad Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 107b 5048 E4500 144d c072 Notebook N150P 1458 5004 GA-D525TUD 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 200a ThinkPad R60/T60/X60 series 8086 4f4d DeskTop Board D510MO 8086 544e DeskTop Board D945GTP 27cb NM10/ICH7 Family USB UHCI Controller #4 1025 006c 9814 WKMI 1028 01ad OptiPlex GX620 1028 01d7 XPS M1210 1028 01df PowerEdge SC440 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 1043 1237 A6J-Q008 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM, P5LD2-VM Mainboard 1043 83ad Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 107b 5048 E4500 144d c072 Notebook N150P 1458 5004 GA-D525TUD 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 200a ThinkPad R60/T60/X60 series 8086 4f4d DeskTop Board D510MO 8086 544e DeskTop Board D945GTP 27cc NM10/ICH7 Family USB2 EHCI Controller 1025 006c 9814 WKMI 1028 01ad OptiPlex GX620 1028 01d7 XPS M1210 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 103c 30d5 530 Laptop 1043 1237 A6J-Q008 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM, P5LD2-VM Mainboard 1043 83ad Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 144d c072 Notebook N150P 1458 5006 GA-D525TUD 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 200b ThinkPad R60/T60/X60 series 8086 4f4d DeskTop Board D510MO 8086 544b Desktop Board D425KT 8086 544e DeskTop Board D945GTP 27d0 NM10/ICH7 Family PCI Express Port 1 103c 309f Compaq nx9420 Notebook 103c 30a3 Compaq nw8440 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 144d c072 Notebook N150P 1458 5001 GA-D525TUD 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 2011 ThinkPad R60e 8086 544b Desktop Board D425KT 27d2 NM10/ICH7 Family PCI Express Port 2 103c 309f Compaq nx9420 Notebook 103c 30a3 Compaq nw8440 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 144d c072 Notebook N150P 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 2011 ThinkPad R60e 8086 544b Desktop Board D425KT 27d4 NM10/ICH7 Family PCI Express Port 3 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 144d c072 Notebook N150P 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 2011 ThinkPad R60e 8086 544b Desktop Board D425KT 27d6 NM10/ICH7 Family PCI Express Port 4 103c 30a3 Compaq nw8440 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 144d c072 Notebook N150P 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 2011 ThinkPad R60e 8086 544b Desktop Board D425KT 27d8 NM10/ICH7 Family High Definition Audio Controller 1025 006c 9814 WKMI 1028 01d7 XPS M1210 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 103c 30d5 530 Laptop 1043 1123 A6J-Q008 1043 13c4 G2P 1043 817f P5LD2-VM Mainboard (Realtek ALC 882 codec) 1043 8249 P5B-MX/WiFi-AP 1043 8290 P5KPL-VM Motherboard 1043 82ea P5KPL-CM Motherboard 1043 8437 Eee PC 1015PX 105b 0d7c D270S/D250S Motherboard 1071 8207 Medion MIM 2240 Notebook PC [MD98100] 107b 5048 E4500 10f7 8338 Panasonic CF-Y5 laptop 1179 ff10 Toshiba Satellite A100-796 audio (Realtek ALC861) 1179 ff31 AC97 Data Fax SoftModem with SmartCP 1447 1043 Asus A8JP (Analog Devices AD1986A) 144d c072 Notebook N150P 1458 a002 GA-D525TUD (Realtek ALC887) 1458 a102 GA-8I945PG-RH Mainboard 1462 7418 Wind PC MS-7418 152d 0753 Softmodem 1734 10ad Conexant softmodem SmartCP 17aa 2010 ThinkPad R60/T60/X60 series 17aa 3802 3000 C200 audio [Realtek ALC861VD] 8086 1112 DeskTop Board D945GTP 8086 27d8 DeskTop Board D945GTP 8086 d618 DeskTop Board D510MO 8384 7680 STAC9221 HD Audio Codec 27da NM10/ICH7 Family SMBus Controller 1025 006c 9814 WKMI 1028 01ad OptiPlex GX620 1028 01d7 XPS M1210 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM Motherboard 105b 0d7c D270S/D250S Motherboard 1071 8209 Medion MIM 2240 Notebook PC [MD98100] 10f7 8338 Panasonic CF-Y5 laptop 144d c072 Notebook N150P 1458 5001 GA-8I945PG-RH/GA-D525TUD Mainboard 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 200f ThinkPad R60/T60/X60 series 8086 4f4d DeskTop Board D510MO 8086 544b Desktop Board D425KT 8086 544e DeskTop Board D945GTP 8086 5842 DeskTop Board D975XBX 27dc NM10/ICH7 Family LAN Controller 103c 2a3b Pavilion A1512X 8086 308d DeskTop Board D945GTP 27dd 82801G (ICH7 Family) AC'97 Modem Controller 27de 82801G (ICH7 Family) AC'97 Audio Controller 1028 01ad OptiPlex GX620 1462 7267 Realtek ALC883 Audio Controller 1775 11cc CC11 integrated audio (AD1981BL codec) 27df 82801G (ICH7 Family) IDE Controller 1028 01df PowerEdge SC440 1028 01e6 PowerEdge 860 103c 2a3b Pavilion A1512X 103c 2a8c Compaq 500B Microtower 103c 309f Compaq nx9420 Notebook 103c 30a1 NC2400 103c 30a3 Compaq nw8440 103c 30d5 530 Laptop 1043 1237 A6J-Q008 1043 8179 P5B-MX/WiFi-AP, P5KPL-VM Motherboard 107b 5048 E4500 10f7 8338 Panasonic CF-Y5 laptop 1462 7418 Wind PC MS-7418 1775 11cc CC11/CL11 17aa 200c ThinkPad R60/T60/X60 series 8086 544e DeskTop Board D945GTP 27e0 82801GR/GH/GHM (ICH7 Family) PCI Express Port 5 1775 11cc CC11/CL11 27e2 82801GR/GH/GHM (ICH7 Family) PCI Express Port 6 1775 11cc CC11/CL11 2810 82801HB/HR (ICH8/R) LPC Interface Controller 1043 81ec P5B 2811 82801HEM (ICH8M-E) LPC Interface Controller 103c 30c1 Compaq 6910p 17aa 20b6 ThinkPad T61/R61 e4bf cc47 CCG-RUMBA 2812 82801HH (ICH8DH) LPC Interface Controller 2814 82801HO (ICH8DO) LPC Interface Controller 2815 82801HM (ICH8M) LPC Interface Controller 1025 0121 Aspire 5920G 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 17aa 20a5 ThinkPad R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 2820 82801H (ICH8 Family) 4 port SATA Controller [IDE mode] 1028 01da OptiPlex 745 1462 7235 P965 Neo MS-7235 mainboard 2821 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA Controller [AHCI mode] 2822 SATA Controller [RAID mode] 1028 020d Inspiron 530 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 2823 sSATA Controller [RAID Mode] 2824 82801HB (ICH8) 4 port SATA Controller [AHCI mode] 1043 81ec P5B 2825 82801HR/HO/HH (ICH8R/DO/DH) 2 port SATA Controller [IDE mode] 1028 01da OptiPlex 745 1462 7235 P965 Neo MS-7235 mainboard 2826 SATA Controller [RAID Mode] 1d49 0100 Intel RSTe SATA Software RAID 1d49 0101 Intel RSTe SATA Software RAID 1d49 0102 Intel RSTe SATA Software RAID 1d49 0103 Intel RSTe SATA Software RAID 1d49 0104 Intel RSTe SATA Software RAID 1d49 0105 Intel RSTe SATA Software RAID 2827 sSATA Controller [RAID Mode] 2828 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [IDE mode] 1028 01f3 Inspiron 1420 103c 30c0 Compaq 6710b 17aa 20a8 ThinkPad R61 e4bf cc47 CCG-RUMBA 2829 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] 1025 0121 Aspire 5920G 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 17aa 20a7 ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 282a 82801 Mobile SATA Controller [RAID mode] 1028 040b Latitude E6510 e4bf 50c1 PC1-GROOVE 282f tSATA Controller [RAID Mode] 2830 82801H (ICH8 Family) USB UHCI Controller #1 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 1462 7235 P965 Neo MS-7235 mainboard 17aa 20aa ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2831 82801H (ICH8 Family) USB UHCI Controller #2 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 1462 7235 P965 Neo MS-7235 mainboard 17aa 20aa ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2832 82801H (ICH8 Family) USB UHCI Controller #3 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 17aa 20aa ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2833 82801H (ICH8 Family) USB UHCI Controller #4 1043 81ec P5B 2834 82801H (ICH8 Family) USB UHCI Controller #4 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 1462 7235 P965 Neo MS-7235 mainboard 17aa 20aa ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2835 82801H (ICH8 Family) USB UHCI Controller #5 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 17aa 20aa Thinkpad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2836 82801H (ICH8 Family) USB2 EHCI Controller #1 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 1462 7235 P965 Neo MS-7235 mainboard 17aa 20ab ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 283a 82801H (ICH8 Family) USB2 EHCI Controller #2 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 17aa 20ab ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 283e 82801H (ICH8 Family) SMBus Controller 1025 0121 Aspire 5920G 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30d9 Presario C700 1043 1017 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 9008 Vaio VGN-SZ79SN_C 104d 902d VAIO VGN-NR120E 1462 7235 P965 Neo MS-7235 mainboard 17aa 20a9 ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 283f 82801H (ICH8 Family) PCI Express Port 1 1028 01da OptiPlex 745 103c 30c1 Compaq 6910p 1043 1017 X58LE 1043 81ec P5B 104d 902d VAIO VGN-NR120E 17aa 20ad ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 2841 82801H (ICH8 Family) PCI Express Port 2 103c 30c1 Compaq 6910p 1043 1017 X58LE 1043 81ec P5B 104d 902d VAIO VGN-NR120E 17aa 20ad ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 2843 82801H (ICH8 Family) PCI Express Port 3 1043 1017 X58LE 1043 81ec P5B 104d 902d VAIO VGN-NR120E 17aa 20ad ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 2845 82801H (ICH8 Family) PCI Express Port 4 1043 1017 X58LE 1043 81ec P5B 17aa 20ad ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 2847 82801H (ICH8 Family) PCI Express Port 5 1028 01da OptiPlex 745 103c 30c1 Compaq 6910p 1043 81ec P5B 17aa 20ad ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] 2849 82801H (ICH8 Family) PCI Express Port 6 284b 82801H (ICH8 Family) HD Audio Controller 1025 011f Realtek ALC268 audio codec 1025 0121 Aspire 5920G 1025 0145 Realtek ALC889 (Aspire 8920G w. Dolby Theater) 1028 01da OptiPlex 745 1028 01f3 Inspiron 1420 1028 01f9 Latitude D630 1028 01ff Precision M4300 1028 022f Inspiron 1525 1028 0256 Studio 1735 103c 2802 Compaq dc7700p 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 1043 1339 M51S series 1043 17f3 X58LE 1043 81ec P5B 104d 9005 Vaio VGN-FZ260E 104d 9008 Vaio VGN-SZ79SN_C 104d 9016 Sony VAIO VGN-AR51M 104d 902d VAIO VGN-NR120E 14f1 5051 Presario C700 17aa 20ac ThinkPad T61/R61 17c0 4088 Medion WIM 2210 Notebook PC [MD96850] 8384 7616 Dell Vostro 1400 e4bf cc47 CCG-RUMBA 284f 82801H (ICH8 Family) Thermal Reporting Device 2850 82801HM/HEM (ICH8M/ICH8M-E) IDE Controller 1025 0121 Aspire 5920G 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 17aa 20a6 ThinkPad T61/R61 17c0 4083 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2880 Ice Lake DDRIO Registers 28c0 Volume Management Device NVMe RAID Controller 1d49 011a Intel VROC (VMD NVMe RAID) for ThinkSystem V4 PL 2912 82801IH (ICH9DH) LPC Interface Controller 2914 82801IO (ICH9DO) LPC Interface Controller 1028 0211 Optiplex 755 2916 82801IR (ICH9R) LPC Interface Controller 1028 020d Inspiron 530 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard 1462 7345 MS-7345 Motherboard 8086 5044 Desktop Board DP35DP 2917 ICH9M-E LPC Interface Controller 17aa 20f5 ThinkPad T400 e4bf cc4d CCM-BOOGIE 2918 82801IB (ICH9) LPC Interface Controller 1028 0236 PowerEdge R610 82801IB (ICH9) LPC Interface Controller 1462 7360 G33/P35 Neo 1af4 1100 QEMU Virtual Machine 2919 ICH9M LPC Interface Controller 2920 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA Controller [IDE mode] 1028 020d Inspiron 530 1028 020f PowerEdge R300 onboard SATA Controller 1028 0210 PowerEdge T300 onboard SATA Controller 1028 0211 Optiplex 755 1028 023c PowerEdge R200 onboard SATA Controller 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801IR [ICH9R] 2921 82801IB (ICH9) 2 port SATA Controller [IDE mode] 1028 0235 PowerEdge R710 SATA IDE Controller 1028 0236 PowerEdge R610 SATA IDE Controller 1028 0237 PowerEdge T610 SATA IDE Controller 1462 7360 G33/P35 Neo 2922 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801IR [ICH9R] 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP 2923 82801IB (ICH9) 4 port SATA Controller [AHCI mode] 2925 82801IR/IO (ICH9R/DO) SATA Controller [RAID mode] 1734 10e0 System Board D2542 8086 2925 System Board D2542 2926 82801I (ICH9 Family) 2 port SATA Controller [IDE mode] 1028 020d Inspiron 530 1028 020f PowerEdge R300 onboard SATA Controller 1028 0210 PowerEdge T300 onboard SATA Controller 1028 0211 Optiplex 755 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801IR [ICH9R] 1462 7360 G33/P35 Neo 2928 82801IBM/IEM (ICH9M/ICH9M-E) 2 port SATA Controller [IDE mode] 2929 82801IBM/IEM (ICH9M/ICH9M-E) 4 port SATA Controller [AHCI mode] 103c 3628 dv6-1190en 17aa 20f8 ThinkPad T400 e4bf cc4d CCM-BOOGIE 292c 82801IEM (ICH9M-E) SATA Controller [RAID mode] 292d 82801IBM/IEM (ICH9M/ICH9M-E) 2 port SATA Controller [IDE mode] e4bf cc4d CCM-BOOGIE 2930 82801I (ICH9 Family) SMBus Controller 1028 020d Inspiron 530 1028 0211 Optiplex 755 103c 2a6f Asus IPIBL-LB Motherboard 103c 3628 dv6-1190en 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f9 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 2932 82801I (ICH9 Family) Thermal Subsystem 103c 3628 dv6-1190en 2934 82801I (ICH9 Family) USB UHCI Controller #1 1028 020d Inspiron 530 1028 020f PowerEdge R300 onboard UHCI 1028 0210 PowerEdge T300 onboard UHCI 1028 0211 Optiplex 755 1028 0235 PowerEdge R710 USB UHCI Controller 1028 0236 PowerEdge R610 USB UHCI Controller 1028 0237 PowerEdge T610 USB UHCI Controller 1028 023c PowerEdge R200 onboard UHCI 1028 0287 PowerEdge M610 onboard UHCI 1028 029c PowerEdge M710 USB UHCI Controller 1028 2011 Optiplex 755 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f0 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 2935 82801I (ICH9 Family) USB UHCI Controller #2 1028 020d Inspiron 530 1028 020f PowerEdge R300 onboard UHCI 1028 0210 PowerEdge T300 onboard UHCI 1028 0211 Optiplex 755 1028 0235 PowerEdge R710 USB UHCI Controller 1028 0236 PowerEdge R610 USB UHCI Controller 1028 0237 PowerEdge T610 USB UHCI Controller 1028 023c PowerEdge R200 onboard UHCI 1028 0287 PowerEdge M610 onboard UHCI 1028 029c PowerEdge M710 USB UHCI Controller 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f0 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 2936 82801I (ICH9 Family) USB UHCI Controller #3 1028 020d Inspiron 530 1028 020f PowerEdge R300 onboard UHCI 1028 0210 PowerEdge T300 onboard UHCI 1028 0211 Optiplex 755 1028 0237 PowerEdge T610 USB UHCI Controller 1028 023c PowerEdge R200 onboard UHCI 1028 0287 PowerEdge M610 onboard UHCI 1028 029c PowerEdge M710 USB UHCI Controller 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f0 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 2937 82801I (ICH9 Family) USB UHCI Controller #4 1028 020d Inspiron 530 1028 0211 Optiplex 755 1028 0235 PowerEdge R710 USB UHCI Controller 1028 0236 PowerEdge R610 USB UHCI Controller 1028 0237 PowerEdge T610 USB UHCI Controller 1028 0287 PowerEdge M610 onboard UHCI 1028 029c PowerEdge M710 USB UHCI Controller 1028 2011 Optiplex 755 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f0 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 2937 Optiplex 755 8086 2942 828011 (ICH9 Family ) USB UHCI Controller 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 2938 82801I (ICH9 Family) USB UHCI Controller #5 1028 020d Inspiron 530 1028 0211 Optiplex 755 1028 0235 PowerEdge R710 USB UHCI Controller 1028 0236 PowerEdge R610 USB UHCI Controller 1028 0237 PowerEdge T610 USB UHCI Controller 1028 0287 PowerEdge M610 onboard UHCI 1028 029c PowerEdge M710 USB UHCI Controller 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f0 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 2938 Optiplex 755 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 2939 82801I (ICH9 Family) USB UHCI Controller #6 1028 020d Inspiron 530 1028 0210 PowerEdge T300 onboard UHCI 1028 0237 PowerEdge T610 USB UHCI Controller 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f0 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 293a 82801I (ICH9 Family) USB2 EHCI Controller #1 1028 020d Inspiron 530 1028 020f PowerEdge R300 onboard EHCI 1028 0210 PowerEdge T300 onboard EHCI 1028 0211 Optiplex 755 1028 0235 PowerEdge R710 USB EHCI Controller 1028 0236 PowerEdge R610 USB EHCI Controller 1028 0237 PowerEdge T610 USB EHCI Controller 1028 023c PowerEdge R200 onboard EHCI 1028 0287 PowerEdge M610 onboard EHCI 1028 029c PowerEdge M710 USB EHCI Controller 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f1 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 293c 82801I (ICH9 Family) USB2 EHCI Controller #2 1028 020d Inspiron 530 1028 0211 Optiplex 755 1028 0235 PowerEdge R710 USB EHCI Controller 1028 0236 PowerEdge R610 USB EHCI Controller 1028 0237 PowerEdge T610 USB EHCI Controller 1028 0287 PowerEdge M610 onboard EHCI 1028 029c PowerEdge M710 USB EHCI Controller 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f1 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 293c Optiplex 755 8086 5044 Desktop Board DP35DP e4bf cc4d CCM-BOOGIE 293e 82801I (ICH9 Family) HD Audio Controller 1028 020d Inspiron 530 1028 0211 Optiplex 755 103c 2a6f Asus IPIBL-LB Motherboard 103c 3628 dv6-1190en 1043 829f P5K PRO Motherboard: 82801IR [ICH9R] 1462 735a MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 1462 7360 G33/P35 Neo 17aa 20f2 ThinkPad T400 1af4 1100 QEMU Virtual Machine 8086 293e Optiplex 755 8086 2940 Optiplex 755 e4bf cc4d CCM-BOOGIE 2940 82801I (ICH9 Family) PCI Express Port 1 1028 020d Inspiron 530 1028 0211 Optiplex 755 103c 2a6f Asus IPIBL-LB Motherboard 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 17aa 20f3 ThinkPad T400 8086 2940 Optiplex 755 2942 82801I (ICH9 Family) PCI Express Port 2 1028 020d Inspiron 530 17aa 20f3 ThinkPad T400 2944 82801I (ICH9 Family) PCI Express Port 3 1028 020d Inspiron 530 103c 2a6f Asus IPIBL-LB Motherboard 2946 82801I (ICH9 Family) PCI Express Port 4 1028 020d Inspiron 530 17aa 20f3 ThinkPad T400 2948 82801I (ICH9 Family) PCI Express Port 5 1028 020d Inspiron 530 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 17aa 20f3 ThinkPad T400 294a 82801I (ICH9 Family) PCI Express Port 6 1028 020d Inspiron 530 1043 8277 P5K PRO Motherboard: 82801IR [ICH9R] 1462 7345 MS-7345 Motherboard: Intel 82801I/IR [ICH9/ICH9R] 294c 82566DC-2 Gigabit Network Connection 17aa 302e 82566DM-2 Gigabit Network Connection 2970 82946GZ/PL/GL Memory Controller Hub 1043 823b P5B-MX/WiFi-AP 2971 82946GZ/PL/GL PCI Express Root Port 2972 82946GZ/GL Integrated Graphics Controller 1043 823b P5B-MX/WiFi-AP 2973 82946GZ/GL Integrated Graphics Controller 2974 82946GZ/GL HECI Controller 2975 82946GZ/GL HECI Controller 2976 82946GZ/GL PT IDER Controller 2977 82946GZ/GL KT Controller 2980 82G35 Express DRAM Controller 2981 82G35 Express PCI Express Root Port 2982 82G35 Express Integrated Graphics Controller 2983 82G35 Express Integrated Graphics Controller 2984 82G35 Express HECI Controller 2990 82Q963/Q965 Memory Controller Hub 1028 01da OptiPlex 745 2991 82Q963/Q965 PCI Express Root Port 2992 82Q963/Q965 Integrated Graphics Controller 2993 82Q963/Q965 Integrated Graphics Controller 2994 82Q963/Q965 HECI Controller 2995 82Q963/Q965 HECI Controller 2996 82Q963/Q965 PT IDER Controller 2997 82Q963/Q965 KT Controller 29a0 82P965/G965 Memory Controller Hub 1043 81ea P5B 1462 7276 MS-7276 [G965MDH] 29a1 82P965/G965 PCI Express Root Port 29a2 82G965 Integrated Graphics Controller 1462 7276 MS-7276 [G965MDH] 29a3 82G965 Integrated Graphics Controller 29a4 82P965/G965 HECI Controller 29a5 82P965/G965 HECI Controller 29a6 82P965/G965 PT IDER Controller 29a7 82P965/G965 KT Controller 29b0 82Q35 Express DRAM Controller 1028 0211 OptiPlex 755 29b1 82Q35 Express PCI Express Root Port 1028 0211 OptiPlex 755 29b2 82Q35 Express Integrated Graphics Controller 1028 0211 OptiPlex 755 29b3 82Q35 Express Integrated Graphics Controller 1028 0211 OptiPlex 755 29b4 82Q35 Express MEI Controller 1028 0211 OptiPlex 755 29b5 82Q35 Express MEI Controller 29b6 82Q35 Express PT IDER Controller 1028 0211 OptiPlex 755 29b7 82Q35 Express Serial KT Controller 1028 0211 OptiPlex 755 29c0 82G33/G31/P35/P31 Express DRAM Controller 1028 020d Inspiron 530 103c 2a6f Asus IPIBL-LB Motherboard 1043 8276 P5K PRO Motherboard: Intel 82P35 Northbridge 1043 82b0 P5KPL-VM Motherboard 1462 7345 MS-7345 Motherboard: Intel 82G33/P35 Northbridge 1462 7360 G33/P35 Neo 1af4 1100 QEMU Virtual Machine 8086 5044 Desktop Board DP35DP 29c1 82G33/G31/P35/P31 Express PCI Express Root Port 1028 020d Inspiron 530 1043 8276 P5K PRO Motherboard: Intel 82P35 Northbridge 29c2 82G33/G31 Express Integrated Graphics Controller 1028 020d Inspiron 530 1043 82b0 P5KPL-VM Motherboard 29c3 82G33/G31 Express Integrated Graphics Controller 1028 020d Inspiron 530 1043 82b0 P5KPL-VM Motherboard 29c4 82G33/G31/P35/P31 Express MEI Controller 8086 5044 Desktop Board DP35DP 29c5 82G33/G31/P35/P31 Express MEI Controller 29c6 82G33/G31/P35/P31 Express PT IDER Controller 29c7 82G33/G31/P35/P31 Express Serial KT Controller 29cf Virtual HECI Controller 29d0 82Q33 Express DRAM Controller 29d1 82Q33 Express PCI Express Root Port 29d2 82Q33 Express Integrated Graphics Controller 29d3 82Q33 Express Integrated Graphics Controller 29d4 82Q33 Express MEI Controller 29d5 82Q33 Express MEI Controller 29d6 82Q33 Express PT IDER Controller 29d7 82Q33 Express Serial KT Controller 29e0 82X38/X48 Express DRAM Controller 29e1 82X38/X48 Express Host-Primary PCI Express Bridge 29e4 82X38/X48 Express MEI Controller 29e5 82X38/X48 Express MEI Controller 29e6 82X38/X48 Express PT IDER Controller 29e7 82X38/X48 Express Serial KT Controller 29e9 82X38/X48 Express Host-Secondary PCI Express Bridge 29f0 3200/3210 Chipset DRAM Controller 29f1 3200/3210 Chipset Host-Primary PCI Express Bridge 29f4 3200/3210 Chipset MEI Controller 29f5 3200/3210 Chipset MEI Controller 29f6 3200/3210 Chipset PT IDER Controller 29f7 3200/3210 Chipset Serial KT Controller 29f9 3210 Chipset Host-Secondary PCI Express Bridge 2a00 Mobile PM965/GM965/GL960 Memory Controller Hub 1025 0121 Aspire 5920G 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30c1 Compaq 6910p 103c 30c5 Compaq 8510p 103c 30cc Pavilion dv6700 103c 30d9 Presario C700 1043 1017 X58LE 104d 9005 Vaio VGN-FZ260E 104d 902d VAIO VGN-NR120E 17aa 20b1 ThinkPad T61 17aa 20b3 ThinkPad T61/R61 17c0 4082 Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2a01 Mobile PM965/GM965/GL960 PCI Express Root Port 2a02 Mobile GM965/GL960 Integrated Graphics Controller (primary) 1028 01f3 Inspiron 1420 1028 01f9 Latitude D630 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30d9 Presario C700 1043 14e2 X58LE 104d 902d VAIO VGN-NR120E 17aa 20b5 GM965 [X3100] on ThinkPad T61/R61 17c0 4082 GM965 on Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2a03 Mobile GM965/GL960 Integrated Graphics Controller (secondary) 1028 01f3 Inspiron 1420 1028 022f Inspiron 1525 103c 30c0 Compaq 6710b 103c 30d9 Presario C700 1043 14e2 X58LE 104d 902d VAIO VGN-NR120E 17aa 20b5 GM965 [X3100] on ThinkPad T61/R61 17c0 4082 GM965 on Medion WIM 2210 Notebook PC [MD96850] e4bf cc47 CCG-RUMBA 2a04 Mobile PM965/GM965 MEI Controller 103c 30c1 Compaq 6910p 2a05 Mobile PM965/GM965 MEI Controller 2a06 Mobile PM965/GM965 PT IDER Controller 103c 30c1 Compaq 6910p 2a07 Mobile PM965/GM965 KT Controller 103c 30c1 Compaq 6910p 2a10 Mobile GME965/GLE960 Memory Controller Hub e4bf cc47 CCG-RUMBA 2a11 Mobile GME965/GLE960 PCI Express Root Port 2a12 Mobile GME965/GLE960 Integrated Graphics Controller e4bf cc47 CCG-RUMBA 2a13 Mobile GME965/GLE960 Integrated Graphics Controller e4bf cc47 CCG-RUMBA 2a14 Mobile GME965/GLE960 MEI Controller 2a15 Mobile GME965/GLE960 MEI Controller 2a16 Mobile GME965/GLE960 PT IDER Controller 2a17 Mobile GME965/GLE960 KT Controller 2a40 Mobile 4 Series Chipset Memory Controller Hub 17aa 20e0 ThinkPad T400 e4bf cc4d CCM-BOOGIE 2a41 Mobile 4 Series Chipset PCI Express Graphics Port e4bf cc4d CCM-BOOGIE 2a42 Mobile 4 Series Chipset Integrated Graphics Controller 1028 02aa Dell Inspiron 1545 17aa 20e4 ThinkPad T400 17aa 2112 ThinkPad T400 e4bf cc4d CCM-BOOGIE 2a43 Mobile 4 Series Chipset Integrated Graphics Controller 17aa 20e4 ThinkPad T400 17aa 2112 ThinkPad T400 e4bf cc4d CCM-BOOGIE 2a44 Mobile 4 Series Chipset MEI Controller 17aa 20e6 ThinkPad T400 2a45 Mobile 4 Series Chipset MEI Controller 2a46 Mobile 4 Series Chipset PT IDER Controller 2a47 Mobile 4 Series Chipset AMT SOL Redirection 17aa 20ec ThinkPad T400 2a50 Cantiga MEI Controller 2a51 Cantiga MEI Controller 2a52 Cantiga PT IDER Controller 2a53 Cantiga AMT SOL Redirection 2b00 Xeon Processor E7 Product Family System Configuration Controller 1 2b02 Xeon Processor E7 Product Family System Configuration Controller 2 2b04 Xeon Processor E7 Product Family Power Controller 2b08 Xeon Processor E7 Product Family Caching Agent 0 2b0c Xeon Processor E7 Product Family Caching Agent 1 2b10 Xeon Processor E7 Product Family QPI Home Agent 0 2b13 Xeon Processor E7 Product Family Memory Controller 0c 2b14 Xeon Processor E7 Product Family Memory Controller 0a 2b16 Xeon Processor E7 Product Family Memory Controller 0b 2b18 Xeon Processor E7 Product Family QPI Home Agent 1 2b1b Xeon Processor E7 Product Family Memory Controller 1c 2b1c Xeon Processor E7 Product Family Memory Controller 1a 2b1e Xeon Processor E7 Product Family Memory Controller 1b 2b20 Xeon Processor E7 Product Family Last Level Cache Coherence Engine 0 2b22 Xeon Processor E7 Product Family System Configuration Controller 3 2b24 Xeon Processor E7 Product Family Last Level Cache Coherence Engine 1 2b28 Xeon Processor E7 Product Family Last Level Cache Coherence Engine 2 2b2a Xeon Processor E7 Product Family System Configuration Controller 4 2b2c Xeon Processor E7 Product Family Last Level Cache Coherence Engine 3 2b30 Xeon Processor E7 Product Family Last Level Cache Coherence Engine 4 2b34 Xeon Processor E7 Product Family Last Level Cache Coherence Engine 5 2b38 Xeon Processor E7 Product Family Last Level Cache Coherence Engine 6 2b3c Xeon Processor E7 Product Family Last Level Cache Coherence Engine 7 2b40 Xeon Processor E7 Product Family QPI Router Port 0-1 2b42 Xeon Processor E7 Product Family QPI Router Port 2-3 2b44 Xeon Processor E7 Product Family QPI Router Port 4-5 2b46 Xeon Processor E7 Product Family QPI Router Port 6-7 2b48 Xeon Processor E7 Product Family Test and Debug 0 2b4c Xeon Processor E7 Product Family Test and Debug 1 2b50 Xeon Processor E7 Product Family QPI Physical Port 0: REUT control/status 2b52 Xeon Processor E7 Product Family QPI Physical Port 0: Misc. control/status 2b54 Xeon Processor E7 Product Family QPI Physical Port 1: REUT control/status 2b56 Xeon Processor E7 Product Family QPI Physical Port 1: Misc. control/status 2b58 Xeon Processor E7 Product Family QPI Physical Port 2: REUT control/status 2b5a Xeon Processor E7 Product Family QPI Physical Port 2: Misc. control/status 2b5c Xeon Processor E7 Product Family QPI Physical Port 3: REUT control/status 2b5e Xeon Processor E7 Product Family QPI Physical Port 3: Misc. control/status 2b60 Xeon Processor E7 Product Family SMI Physical Port 0: REUT control/status 2b62 Xeon Processor E7 Product Family SMI Physical Port 0: Misc control/status 2b64 Xeon Processor E7 Product Family SMI Physical Port 1: REUT control/status 2b66 Xeon Processor E7 Product Family SMI Physical Port 1: Misc control/status 2b68 Xeon Processor E7 Product Family Last Level Cache Coherence Engine 8 2b6c Xeon Processor E7 Product Family Last Level Cache Coherence Engine 9 2b80 Atom CE2700 Series [Puma 7] 2b98 Puma 7 Trusted Execution Engine 2bb5 Puma 7 xHCI Controller # Synopsys DesignWare Core SuperSpeed USB 3.0 Controller 2bb7 Puma 7 USB Device Controller (OTG) 2bdc Puma 7 Thermal 2be2 Puma 7 Security Processor 2c01 Xeon 5500/Core i7 QuickPath Architecture System Address Decoder 2c10 Xeon 5500/Core i7 QPI Link 0 2c11 Xeon 5500/Core i7 QPI Physical 0 2c14 Xeon 5500/Core i7 QPI Link 1 2c15 Xeon 5500/Core i7 QPI Physical 1 2c18 Xeon 5500/Core i7 Integrated Memory Controller 2c19 Xeon 5500/Core i7 Integrated Memory Controller Target Address Decoder 2c1a Xeon 5500/Core i7 Integrated Memory Controller RAS Registers 2c1c Xeon 5500/Core i7 Integrated Memory Controller Test Registers 2c20 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Control Registers 2c21 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Address Registers 2c22 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Rank Registers 2c23 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Thermal Control Registers 2c28 Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Control Registers 2c29 Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Address Registers 2c2a Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Rank Registers 2c2b Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Thermal Control Registers 2c30 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Control Registers 2c31 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Address Registers 2c32 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Rank Registers 2c33 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Thermal Control Registers 2c40 Xeon 5500/Core i7 QuickPath Architecture Generic Non-Core Registers 2c41 Xeon 5500/Core i7 QuickPath Architecture Generic Non-Core Registers 2c50 Core Processor QuickPath Architecture Generic Non-Core Registers 2c51 Core Processor QuickPath Architecture Generic Non-Core Registers 2c52 Core Processor QuickPath Architecture Generic Non-Core Registers 2c53 Core Processor QuickPath Architecture Generic Non-Core Registers 2c54 Core Processor QuickPath Architecture Generic Non-Core Registers 2c55 Core Processor QuickPath Architecture Generic Non-Core Registers 2c56 Core Processor QuickPath Architecture Generic Non-Core Registers 2c57 Core Processor QuickPath Architecture Generic Non-Core Registers 2c58 Xeon C5500/C3500 QPI Generic Non-core Registers 2c59 Xeon C5500/C3500 QPI Generic Non-core Registers 2c5a Xeon C5500/C3500 QPI Generic Non-core Registers 2c5b Xeon C5500/C3500 QPI Generic Non-core Registers 2c5c Xeon C5500/C3500 QPI Generic Non-core Registers 2c5d Xeon C5500/C3500 QPI Generic Non-core Registers 2c5e Xeon C5500/C3500 QPI Generic Non-core Registers 2c5f Xeon C5500/C3500 QPI Generic Non-core Registers 2c61 Core Processor QuickPath Architecture Generic Non-core Registers 2c62 Core Processor QuickPath Architecture Generic Non-core Registers 2c70 Xeon 5600 Series QuickPath Architecture Generic Non-core Registers 2c81 Core Processor QuickPath Architecture System Address Decoder 2c90 Core Processor QPI Link 0 2c91 Core Processor QPI Physical 0 2c98 Core Processor Integrated Memory Controller 2c99 Core Processor Integrated Memory Controller Target Address Decoder 2c9a Core Processor Integrated Memory Controller Test Registers 2c9c Core Processor Integrated Memory Controller Test Registers 2ca0 Core Processor Integrated Memory Controller Channel 0 Control Registers 2ca1 Core Processor Integrated Memory Controller Channel 0 Address Registers 2ca2 Core Processor Integrated Memory Controller Channel 0 Rank Registers 2ca3 Core Processor Integrated Memory Controller Channel 0 Thermal Control Registers 2ca8 Core Processor Integrated Memory Controller Channel 1 Control Registers 2ca9 Core Processor Integrated Memory Controller Channel 1 Address Registers 2caa Core Processor Integrated Memory Controller Channel 1 Rank Registers 2cab Core Processor Integrated Memory Controller Channel 1 Thermal Control Registers 2cc1 Xeon C5500/C3500 QPI System Address Decoder 2cd0 Xeon C5500/C3500 QPI Link 0 2cd1 Xeon C5500/C3500 QPI Physical 0 2cd4 Xeon C5500/C3500 QPI Link 1 2cd5 Xeon C5500/C3500 QPI Physical 1 2cd8 Xeon C5500/C3500 Integrated Memory Controller Registers 2cd9 Xeon C5500/C3500 Integrated Memory Controller Target Address Decoder 2cda Xeon C5500/C3500 Integrated Memory Controller RAS Registers 2cdc Xeon C5500/C3500 Integrated Memory Controller Test Registers 2ce0 Xeon C5500/C3500 Integrated Memory Controller Channel 0 Control 2ce1 Xeon C5500/C3500 Integrated Memory Controller Channel 0 Address 2ce2 Xeon C5500/C3500 Integrated Memory Controller Channel 0 Rank 2ce3 Xeon C5500/C3500 Integrated Memory Controller Channel 0 Thermal Control 2ce8 Xeon C5500/C3500 Integrated Memory Controller Channel 1 Control 2ce9 Xeon C5500/C3500 Integrated Memory Controller Channel 1 Address 2cea Xeon C5500/C3500 Integrated Memory Controller Channel 1 Rank 2ceb Xeon C5500/C3500 Integrated Memory Controller Channel 1 Thermal Control 2cf0 Xeon C5500/C3500 Integrated Memory Controller Channel 2 Control 2cf1 Xeon C5500/C3500 Integrated Memory Controller Channel 2 Address 2cf2 Xeon C5500/C3500 Integrated Memory Controller Channel 2 Rank 2cf3 Xeon C5500/C3500 Integrated Memory Controller Channel 2 Thermal Control 2d01 Core Processor QuickPath Architecture System Address Decoder 2d10 Core Processor QPI Link 0 2d11 1st Generation Core i3/5/7 Processor QPI Physical 0 2d12 1st Generation Core i3/5/7 Processor Reserved 2d13 1st Generation Core i3/5/7 Processor Reserved 2d81 Xeon 5600 Series QuickPath Architecture System Address Decoder 2d90 Xeon 5600 Series QPI Link 0 2d91 Xeon 5600 Series QPI Physical 0 2d92 Xeon 5600 Series Mirror Port Link 0 2d93 Xeon 5600 Series Mirror Port Link 1 2d94 Xeon 5600 Series QPI Link 1 2d95 Xeon 5600 Series QPI Physical 1 2d98 Xeon 5600 Series Integrated Memory Controller Registers 2d99 Xeon 5600 Series Integrated Memory Controller Target Address Decoder 2d9a Xeon 5600 Series Integrated Memory Controller RAS Registers 2d9c Xeon 5600 Series Integrated Memory Controller Test Registers 2da0 Xeon 5600 Series Integrated Memory Controller Channel 0 Control 2da1 Xeon 5600 Series Integrated Memory Controller Channel 0 Address 2da2 Xeon 5600 Series Integrated Memory Controller Channel 0 Rank 2da3 Xeon 5600 Series Integrated Memory Controller Channel 0 Thermal Control 2da8 Xeon 5600 Series Integrated Memory Controller Channel 1 Control 2da9 Xeon 5600 Series Integrated Memory Controller Channel 1 Address 2daa Xeon 5600 Series Integrated Memory Controller Channel 1 Rank 2dab Xeon 5600 Series Integrated Memory Controller Channel 1 Thermal Control 2db0 Xeon 5600 Series Integrated Memory Controller Channel 2 Control 2db1 Xeon 5600 Series Integrated Memory Controller Channel 2 Address 2db2 Xeon 5600 Series Integrated Memory Controller Channel 2 Rank 2db3 Xeon 5600 Series Integrated Memory Controller Channel 2 Thermal Control 2e00 4 Series Chipset DRAM Controller 2e01 4 Series Chipset PCI Express Root Port 2e02 4 Series Chipset Integrated Graphics Controller 2e03 4 Series Chipset Integrated Graphics Controller 2e04 4 Series Chipset HECI Controller 2e05 4 Series Chipset HECI Controller 2e06 4 Series Chipset PT IDER Controller 2e07 4 Series Chipset Serial KT Controller 2e10 4 Series Chipset DRAM Controller 2e11 4 Series Chipset PCI Express Root Port 2e12 4 Series Chipset Integrated Graphics Controller 17aa 3048 ThinkCentre M6258 2e13 4 Series Chipset Integrated Graphics Controller 2e14 4 Series Chipset HECI Controller 2e15 4 Series Chipset HECI Controller 2e16 4 Series Chipset PT IDER Controller 2e17 4 Series Chipset Serial KT Controller 2e20 4 Series Chipset DRAM Controller 1028 0283 Vostro 220 1043 82d3 P5Q Deluxe Motherboard 1458 5000 GA-EP45-DS5/GA-EG45M-DS2H Motherboard 2e21 4 Series Chipset PCI Express Root Port 1043 82d3 P5Q Deluxe Motherboard 1458 5000 GA-EP45-DS5 Motherboard 2e22 4 Series Chipset Integrated Graphics Controller 1458 d000 GA-EG45M-DS2H Mainboard 2e23 4 Series Chipset Integrated Graphics Controller 1458 d000 GA-EG45M-DS2H Mainboard 2e24 4 Series Chipset HECI Controller 2e25 4 Series Chipset HECI Controller 2e26 4 Series Chipset PT IDER Controller 2e27 4 Series Chipset Serial KT Controller 2e29 4 Series Chipset PCI Express Root Port 2e30 4 Series Chipset DRAM Controller 103c 2a8c Compaq 500B Microtower 2e31 4 Series Chipset PCI Express Root Port 2e32 4 Series Chipset Integrated Graphics Controller 103c 2a8c Compaq 500B Microtower 2e33 4 Series Chipset Integrated Graphics Controller 2e34 4 Series Chipset HECI Controller 2e35 4 Series Chipset HECI Controller 2e36 4 Series Chipset PT IDER Controller 2e37 4 Series Chipset Serial KT Controller 2e40 4 Series Chipset DRAM Controller 2e41 4 Series Chipset PCI Express Root Port 2e42 4 Series Chipset Integrated Graphics Controller 2e43 4 Series Chipset Integrated Graphics Controller 2e44 4 Series Chipset HECI Controller 2e45 4 Series Chipset HECI Controller 2e46 4 Series Chipset PT IDER Controller 2e47 4 Series Chipset Serial KT Controller 2e50 CE Media Processor CE3100 2e52 CE Media Processor Clock and Reset Controller 2e58 CE Media Processor Interrupt Controller 2e5a CE Media Processor CE3100 A/V Bridge 2e5b Graphics Media Accelerator 500 Graphics 2e5c CE Media Processor Video Decoder 2e5d CE Media Processor Transport Stream Interface 2e5e CE Media Processor Transport Stream Processor 0 2e5f CE Media Processor Audio DSP 2e60 CE Media Processor Audio Interfaces 2e61 CE Media Processor Video Display Controller 2e62 CE Media Processor Video Processing Unit 2e63 CE Media Processor HDMI Tx Interface 2e64 Atom CE2600/3100/4100/4200/5300 Security Processor 2e65 CE Media Processor Expansion Bus Interface 2e66 CE Media Processor UART 2e67 CE Media Processor General Purpose I/Os 2e68 CE Media Processor I2C Interface 2e69 CE Media Processor Smart Card Interface 2e6a CE Media Processor SPI Master Interface 2e6e CE Media Processor Gigabit Ethernet Controller 2e6f CE Media Processor Media Timing Unit 2e70 CE Media Processor USB 2e71 CE Media Processor SATA 2e73 CE Media Processor CE3100 PCI Express 2e90 4 Series Chipset DRAM Controller 2e91 4 Series Chipset PCI Express Root Port 2e92 4 Series Chipset Integrated Graphics Controller 2e93 4 Series Chipset Integrated Graphics Controller 2e94 4 Series Chipset HECI Controller 2e95 4 Series Chipset HECI Controller 2e96 4 Series Chipset PT IDER Controller 2f00 Xeon E7 v3/Xeon E5 v3/Core i7 DMI2 15d9 0821 X10DRW-i 2f01 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 0 2f02 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 1 2f03 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 1 2f04 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2 2f05 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2 2f06 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2 2f07 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2 2f08 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3 2f09 Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3 2f0a Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3 2f0b Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3 2f0d Haswell Xeon Non-Transparent Bridge (Back-to-back) 2f0e Haswell Xeon Non-Transparent Bridge (Primary Side) 2f0f Haswell Xeon Non-Transparent Bridge (Secondary Side) 2f10 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f11 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f12 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f13 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f14 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f15 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f16 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f17 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f18 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f19 Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f1a Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f1b Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f1c Xeon E7 v3/Xeon E5 v3/Core i7 IIO Debug 2f1d Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface 15d9 0821 X10DRW-i 2f1e Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers 15d9 0821 X10DRW-i 2f1f Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers 15d9 0821 X10DRW-i 2f20 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 0 15d9 0821 X10DRW-i 2f21 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 1 15d9 0821 X10DRW-i 2f22 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 2 15d9 0821 X10DRW-i 2f23 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 3 15d9 0821 X10DRW-i 2f24 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 4 15d9 0821 X10DRW-i 2f25 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 5 15d9 0821 X10DRW-i 2f26 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 6 15d9 0821 X10DRW-i 2f27 Xeon E7 v3/Xeon E5 v3/Core i7 DMA Channel 7 15d9 0821 X10DRW-i 2f28 Xeon E7 v3/Xeon E5 v3/Core i7 Address Map, VTd_Misc, System Management 15d9 0821 X10DRW-i 2f29 Xeon E7 v3/Xeon E5 v3/Core i7 Hot Plug 15d9 0821 X10DRW-i 2f2a Xeon E7 v3/Xeon E5 v3/Core i7 RAS, Control Status and Global Errors 15d9 0821 X10DRW-i 2f2c Xeon E7 v3/Xeon E5 v3/Core i7 I/O APIC 15d9 0821 X10DRW-i 2f2e Xeon E7 v3/Xeon E5 v3/Core i7 RAID 5/6 2f2f Xeon E7 v3/Xeon E5 v3/Core i7 RAID 5/6 2f30 Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0 15d9 0821 X10DRW-i 2f32 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0 15d9 0821 X10DRW-i 2f33 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1 2f34 Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface 15d9 0821 X10DRW-i 2f36 Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring 15d9 0821 X10DRW-i 2f37 Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring 15d9 0821 X10DRW-i 2f38 Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1 2f39 Xeon E7 v3/Xeon E5 v3/Core i7 I/O Performance Monitoring 2f3a Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 2 2f3e Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring 2f3f Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring 2f40 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 2 2f41 Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 2 Monitoring 2f43 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 2 2f45 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 2 Debug 2f46 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 2 Debug 2f47 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 2 Debug 2f60 Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1 2f68 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers 2f6a Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder 2f6b Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder 2f6c Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder 2f6d Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder 2f6e Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 2/3 Broadcast 2f6f Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast 2f70 Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0 Debug 2f71 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers 2f76 Xeon E7 v3/Xeon E5 v3/Core i7 E3 QPI Link Debug 2f78 Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1 Debug 2f79 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers 2f7d Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers 15d9 0821 X10DRW-i 2f7e Xeon E7 v3/Xeon E5 v3/Core i7 E3 QPI Link Debug 2f80 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0 15d9 0821 X10DRW-i 2f81 Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring 15d9 0821 X10DRW-i 2f83 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0 15d9 0821 X10DRW-i 2f85 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0 Debug 2f86 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0 Debug 2f87 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0 Debug 2f88 Xeon E7 v3/Xeon E5 v3/Core i7 VCU 2f8a Xeon E7 v3/Xeon E5 v3/Core i7 VCU 2f90 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1 2f93 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1 2f95 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1 Debug 2f96 Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1 Debug 2f98 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2f99 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2f9a Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2f9c Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2fa0 Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0 15d9 0821 X10DRW-i 2fa8 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers 2faa Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder 15d9 0821 X10DRW-i 2fab Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder 15d9 0821 X10DRW-i 2fac Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder 15d9 0821 X10DRW-i 2fad Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder 15d9 0821 X10DRW-i 2fae Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 0/1 Broadcast 2faf Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast 2fb0 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 Thermal Control 2fb1 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 Thermal Control 2fb2 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 ERROR Registers 2fb3 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 ERROR Registers 2fb4 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 2 Thermal Control 2fb5 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 3 Thermal Control 2fb6 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 2 ERROR Registers 2fb7 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 3 ERROR Registers 2fb8 Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 2fb9 Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 2fba Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 2fbb Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 2fbc Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 2fbd Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 2fbe Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 2fbf Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 2fc0 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2fc1 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2fc2 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2fc3 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2fc4 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2fc5 Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit 2fd0 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 Thermal Control 2fd1 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 Thermal Control 2fd2 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 ERROR Registers 2fd3 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 ERROR Registers 2fd4 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 2 Thermal Control 2fd5 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 3 Thermal Control 2fd6 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 2 ERROR Registers 2fd7 Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 3 ERROR Registers 2fe0 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe1 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe2 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe3 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe4 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe5 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe6 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe7 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 15d9 0821 X10DRW-i 2fe8 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2fe9 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2fea Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2feb Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2fec Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2fed Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2fee Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2fef Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff0 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff1 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff2 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff3 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff4 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff5 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff6 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff7 Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers 2ff8 Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent 2ff9 Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent 2ffa Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent 2ffb Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent 2ffc Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers 15d9 0821 X10DRW-i 2ffd Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers 15d9 0821 X10DRW-i 2ffe Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers 15d9 0821 X10DRW-i 3101 Killer E3100X 2.5 Gigabit Ethernet Controller 3140 Easel/Monette Hill Image Processor [Pixel Visual Core] 3165 Wireless 3165 8086 4010 Dual Band Wireless AC 3165 [Stone Peak 1x1] 8086 4210 Dual Band Wireless AC 3165 [Stone Peak 1x1] 3166 Dual Band Wireless-AC 3165 Plus Bluetooth 8086 4210 Dual Band Wireless-AC 3165 3184 GeminiLake [UHD Graphics 605] 3185 GeminiLake [UHD Graphics 600] 318c Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant 318e Celeron/Pentium Silver Processor NorthPeak 3190 Celeron/Pentium Silver Processor Gaussian Mixture Model 3192 Gemini Lake P2SB 3196 Unknown P2SB serial controller 3197 Celeron/Pentium Silver Processor PCI-default ISA-bridge 3198 Celeron/Pentium Silver Processor High Definition Audio 17aa 380b V130-15IGM Laptop (Lenovo) - Type 81HL 319a Celeron/Pentium Silver Processor Trusted Execution Engine Interface 31a2 Celeron/Pentium Silver Processor Integrated Sensor Solution 31a8 Celeron/Pentium Silver Processor USB 3.0 xHCI Controller 1849 31a8 Celeron/Pentium Silver Processor USB 3.0 xHCI Controller 31ac Celeron/Pentium Silver Processor I2C 0 31ae Celeron/Pentium Silver Processor I2C 1 31b0 Celeron/Pentium Silver Processor I2C 2 31b2 Celeron/Pentium Silver Processor I2C 3 31b4 Celeron/Pentium Silver Processor I2C 4 31b6 Celeron/Pentium Silver Processor I2C 5 31b8 Celeron/Pentium Silver Processor I2C 6 31ba Celeron/Pentium Silver Processor I2C 7 31bc Celeron/Pentium Silver Processor Serial IO UART Host Controller 31be Celeron/Pentium Silver Processor Serial IO UART Host Controller 31c0 Celeron/Pentium Silver Processor Serial IO UART Host Controller 31c2 Celeron/Pentium Silver Processor Serial IO SPI Host Controller 31c4 Celeron/Pentium Silver Processor Serial IO SPI Host Controller 31c6 Celeron/Pentium Silver Processor Serial IO SPI Host Controller 31cc Celeron/Pentium Silver Processor SDA Standard Compliant SD Host Controller 31d4 Celeron/Pentium Silver Processor Gaussian Mixture Model 31d6 Gemini Lake PCI Express Root Port 31d7 Gemini Lake PCI Express Root Port 31d8 Gemini Lake PCI Express Root Port 31d9 Gemini Lake PCI Express Root Port 31da Gemini Lake PCI Express Root Port 31db Gemini Lake PCI Express Root Port 31dc Gemini Lake PCH CNVi WiFi 1a56 1552 Killer(R) Wireless-AC 1550i Wireless Network Adapter (9560NGW) 8086 0034 Wireless-AC 9560 31e3 Celeron/Pentium Silver Processor SATA Controller 31e8 Celeron/Pentium Silver Processor LPC Controller 31ee Celeron/Pentium Silver Processor Serial IO UART Host Controller 31f0 Gemini Lake Host Bridge 3200 GD31244 PCI-X SATA HBA 1775 c200 C2K onboard SATA host bus adapter 3310 IOP348 I/O Processor 1054 3030 HRA380 Hitachi RAID Adapter to PCIe 1054 3034 HRA381 Hitachi RAID Adapter to PCIe 3313 IOP348 I/O Processor (SL8e) in IOC Mode SAS/SATA 331b IOP348 I/O Processor (SL8x) in IOC Mode SAS/SATA 3331 IOC340 I/O Controller (VV8e) SAS/SATA 3339 IOC340 I/O Controller (VV8x) SAS/SATA 3340 82855PM Processor to I/O Controller 1014 0529 Thinkpad T40 series 1025 005a TravelMate 290 103c 088c NC8000 laptop 103c 0890 NC6000 laptop 103c 08b0 tc1100 tablet 144d c005 X10 Laptop 144d c00c P30/P35 notebook 3341 82855PM Processor to AGP Controller 144d c00c P30 notebook 3363 IOC340 I/O Controller in IOC Mode SAS/SATA 3382 81342 [Chevelon] I/O Processor (ATUe) 33c3 IOP348 I/O Processor (SL8De) in IOC Mode SAS/SATA 33cb IOP348 I/O Processor (SL8Dx) in IOC Mode SAS/SATA 3400 5520/5500/X58 I/O Hub to ESI Port 3401 5520/5500/X58 I/O Hub to ESI Port 3402 5520/5500/X58 I/O Hub to ESI Port 3403 5500 I/O Hub to ESI Port 1028 0236 PowerEdge R610 I/O Hub to ESI Port 1028 0287 PowerEdge M610 I/O Hub to ESI Port 1028 028c PowerEdge R410 I/O Hub to ESI Port 1028 028d PowerEdge T410 I/O Hub to ESI Port 103c 330b ProLiant ML150 G6 Server 3404 5520/5500/X58 I/O Hub to ESI Port 3405 5520/5500/X58 I/O Hub to ESI Port 3406 5520 I/O Hub to ESI Port 103c 330b ProLiant G6 series 3407 5520/5500/X58 I/O Hub to ESI Port 3408 5520/5500/X58 I/O Hub PCI Express Root Port 1 103c 330b ProLiant G6 series 3409 5520/5500/X58 I/O Hub PCI Express Root Port 2 340a 5520/5500/X58 I/O Hub PCI Express Root Port 3 103c 330b ProLiant ML150 G6 Server 340b 5520/X58 I/O Hub PCI Express Root Port 4 340c 5520/X58 I/O Hub PCI Express Root Port 5 340d 5520/X58 I/O Hub PCI Express Root Port 6 340e 5520/5500/X58 I/O Hub PCI Express Root Port 7 103c 330b ProLiant ML150 G6 Server 340f 5520/5500/X58 I/O Hub PCI Express Root Port 8 3410 7500/5520/5500/X58 I/O Hub PCI Express Root Port 9 3411 7500/5520/5500/X58 I/O Hub PCI Express Root Port 10 3418 7500/5520/5500/X58 Physical Layer Port 0 3419 7500/5520/5500 Physical Layer Port 1 3420 7500/5520/5500/X58 I/O Hub PCI Express Root Port 0 3421 7500/5520/5500/X58 I/O Hub PCI Express Root Port 0 3422 7500/5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers 103c 330b ProLiant G6 series 3423 7500/5520/5500/X58 I/O Hub Control Status and RAS Registers 103c 330b ProLiant G6 series 3425 7500/5520/5500/X58 Physical and Link Layer Registers Port 0 3426 7500/5520/5500/X58 Routing and Protocol Layer Registers Port 0 3427 7500/5520/5500 Physical and Link Layer Registers Port 1 3428 7500/5520/5500 Routing & Protocol Layer Register Port 1 3429 5520/5500/X58 Chipset QuickData Technology Device 342a 5520/5500/X58 Chipset QuickData Technology Device 342b 5520/5500/X58 Chipset QuickData Technology Device 342c 5520/5500/X58 Chipset QuickData Technology Device 342d 7500/5520/5500/X58 I/O Hub I/OxAPIC Interrupt Controller 342e 7500/5520/5500/X58 I/O Hub System Management Registers 103c 330b ProLiant G6 series 342f 7500/5520/5500/X58 Trusted Execution Technology Registers 3430 5520/5500/X58 Chipset QuickData Technology Device 3431 5520/5500/X58 Chipset QuickData Technology Device 3432 5520/5500/X58 Chipset QuickData Technology Device 3433 5520/5500/X58 Chipset QuickData Technology Device 3438 7500/5520/5500/X58 I/O Hub Throttle Registers 3440 Ice Lake UPI Misc 3441 Ice Lake UPI Link/Phy0 3442 Ice Lake UPI Phy0 Registers 3445 Ice Lake UPI Mesh Stop Registers 3446 Ice Lake UPI PMON0 Registers 3447 Ice Lake UPI PMON1 Registers 3448 Ice Lake PCU Registers 344a Ice Lake Integrated Memory Controller 344b Ice Lake PCU Registers 344c Ice Lake CHA Registers 344d Ice Lake CHA Registers 344f Ice Lake CHA Registers 3450 Ice Lake Ubox Registers 3451 Ice Lake Ubox Registers 3452 Ice Lake Ubox Registers 3455 Ice Lake Ubox Registers 3456 Ice Lake NorthPeak 3457 Ice Lake CHA Registers 3458 Ice Lake PCU Registers 3459 Ice Lake PCU Registers 345a Ice Lake PCU Registers 345b Ice Lake PCU Registers 345c Ice Lake PCU Registers 345d Ice Lake PCU Registers 345e Ice Lake PCU Registers 347a Ice Lake PCI Express Root Port A 347b Ice Lake PCI Express Root Port B 347c Ice Lake PCI Express Root Port C 347d Ice Lake PCI Express Root Port D 347e Ice Lake Xeon Non-Transparent Bridge 3482 Ice Lake-LP LPC Controller 34a3 Ice Lake-LP SMBus Controller 34a4 Ice Lake-LP SPI Controller 34a8 Ice Lake-LP Serial IO UART Controller #0 34a9 Ice Lake-LP Serial IO UART Controller #1 34aa Ice Lake-LP Serial IO SPI Controller #0 34ab Ice Lake-LP Serial IO SPI Controller #1 34b0 Ice Lake-LP PCI Express Root Port #9 34b1 Ice Lake-LP PCIe Port #10 34b4 Ice Lake-LP PCIe Port #13 34b5 Ice Lake-LP PCIe Port #14 34b7 Ice Lake-LP PCI Express Root Port #16 34b8 Ice Lake-LP PCIe Port #1 34ba Ice Lake-LP PCI Express Root Port #3 34bb Ice Lake-LP PCIe Port #4 34bc Ice Lake-LP PCI Express Root Port #5 34bd Ice Lake-LP PCIe Port #6 34be Ice Lake-LP PCIe Port #7 34bf Ice Lake-LP PCIe Port #8 34c4 Ice Lake-LP SD Host Controller 34c5 Ice Lake-LP Serial IO I2c Controller #4 34c6 Ice Lake-LP Serial IO I2c Controller #5 34c8 Ice Lake-LP Smart Sound Technology Audio Controller 34d3 Ice Lake-LP SATA Controller [AHCI mode] 34e0 Ice Lake-LP Management Engine 34e8 Ice Lake-LP Serial IO I2C Controller #0 34e9 Ice Lake-LP Serial IO I2C Controller #1 34ea Ice Lake-LP Serial IO I2C Controller #2 34eb Ice Lake-LP Serial IO I2C Controller #3 34ed Ice Lake-LP USB 3.1 xHCI Host Controller 34ef Ice Lake-LP DRAM Controller 34f0 Ice Lake-LP PCH CNVi WiFi 1a56 1552 Killer(R) Wireless-AC 1550i Wireless Network Adapter (9560NGW) 8086 0074 Wi-Fi 6 AX201 8086 0264 Wireless-AC 9461 34f8 Ice Lake-LP SD Controller 34fc Ice Lake-LP Integrated Sensor Solution 3500 6311ESB/6321ESB PCI Express Upstream Port 103c 31fe ProLiant DL140 G3 15d9 9680 X7DBN Motherboard 3501 6310ESB PCI Express Upstream Port 3504 6311ESB/6321ESB I/OxAPIC Interrupt Controller 3505 6310ESB I/OxAPIC Interrupt Controller 350c 6311ESB/6321ESB PCI Express to PCI-X Bridge 103c 31fe ProLiant DL140 G3 15d9 9680 X7DBN Motherboard 350d 6310ESB PCI Express to PCI-X Bridge 3510 6311ESB/6321ESB PCI Express Downstream Port E1 103c 31fe ProLiant DL140 G3 15d9 9680 X7DBN Motherboard 3511 6310ESB PCI Express Downstream Port E1 3514 6311ESB/6321ESB PCI Express Downstream Port E2 3515 6310ESB PCI Express Downstream Port E2 3518 6311ESB/6321ESB PCI Express Downstream Port E3 15d9 9680 X7DBN Motherboard 3519 6310ESB PCI Express Downstream Port E3 3575 82830M/MG/MP Host Bridge 0e11 0030 Evo N600c 1014 021d ThinkPad A/T/X Series 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP 3576 82830M/MP AGP Bridge 3577 82830M/MG Integrated Graphics Controller 1014 0513 ThinkPad A/T/X Series 3578 82830M/MG/MP Host Bridge 3580 82852/82855 GM/GME/PM/GMV Processor to I/O Controller 1014 055c ThinkPad R50e 1025 0064 Extensa 3000 series laptop 1028 0139 Latitude D400 1028 014f Latitude X300 1028 0152 Latitude D500 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 114a 0582 PC8 1734 1055 Amilo M1420 1775 10d0 V5D Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10e0 PSL09 PrPMC e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 3581 82852/82855 GM/GME/PM/GMV Processor to AGP Controller 1734 1055 Amilo M1420 3582 82852/855GM Integrated Graphics Device 1014 0562 ThinkPad R50e 1028 0139 Latitude D400 1028 014f Latitude X300 1028 0152 Latitude D500 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 114a 0582 PC8 integrated graphics 1775 10d0 V5D Single Board Computer VGA 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10e0 PSL09 PrPMC e4bf 0cc9 CC9-SAMBA e4bf 0cd2 CD2-BEBOP 3584 82852/82855 GM/GME/PM/GMV Processor to I/O Controller 1014 055d ThinkPad R50e 1025 0064 Extensa 3000 series laptop 1028 0139 Latitude D400 1028 014f Latitude X300 1028 0152 Latitude D500 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 114a 0582 PC8 1734 1055 Amilo M1420 1775 10d0 V5D Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10e0 PSL09 PrPMC 3585 82852/82855 GM/GME/PM/GMV Processor to I/O Controller 1014 055e ThinkPad R50e 1025 0064 Extensa 3000 series laptop 1028 0139 Latitude D400 1028 014f Latitude X300 1028 0152 Latitude D500 1028 0163 Latitude D505 1028 018d Inspiron 700m/710m 1028 0196 Inspiron 5160 114a 0582 PC8 1734 1055 Amilo M1420 1775 10d0 V5D Single Board Computer 1775 ce90 CE9 4c53 10b0 CL9 mainboard 4c53 10e0 PSL09 PrPMC 358c 82854 GMCH 358e 82854 GMCH Integrated Graphics Device 3590 E7520 Memory Controller Hub 1014 02dd eServer xSeries server mainboard 1028 016c PowerEdge 1850 Memory Controller Hub 1028 016d PowerEdge 2850 Memory Controller Hub 1028 019a PowerEdge SC1425 1734 103e PRIMERGY RX/TX S2 series 1775 1100 CR11/VR11 Single Board Computer 4c53 10d0 Telum ASLP10 Processor AMC 3591 E7525/E7520 Error Reporting Registers 1014 02dd eServer xSeries server mainboard 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 103c 3208 ProLiant DL140 G2 4c53 10d0 Telum ASLP10 Processor AMC 3592 E7320 Memory Controller Hub 1734 1073 Primergy Econel 200 D2020 mainboard 3593 E7320 Error Reporting Registers 1734 1073 Primergy Econel 200 D2020 mainboard 3594 E7520 DMA Controller 1775 1100 CR11/VR11 Single Board Computer 4c53 10d0 Telum ASLP10 Processor AMC 3595 E7525/E7520/E7320 PCI Express Port A 1775 1100 CR11/VR11 Single Board Computer 3596 E7525/E7520/E7320 PCI Express Port A1 3597 E7525/E7520 PCI Express Port B 1775 1100 CR11/VR11 Single Board Computer 3598 E7520 PCI Express Port B1 1775 1100 CR11/VR11 Single Board Computer 3599 E7520 PCI Express Port C 1775 1100 CR11/VR11 Single Board Computer 359a E7520 PCI Express Port C1 359b E7525/E7520/E7320 Extended Configuration Registers 1014 02dd eServer xSeries server mainboard 359e E7525 Memory Controller Hub 1028 0168 Precision Workstation 670 Mainboard 1028 0169 Precision 470 35b0 3100 Chipset Memory I/O Controller Hub 35b1 3100 DRAM Controller Error Reporting Registers 35b5 3100 Chipset Enhanced DMA Controller 35b6 3100 Chipset PCI Express Port A 35b7 3100 Chipset PCI Express Port A1 35c8 3100 Extended Configuration Test Overflow Registers 3600 7300 Chipset Memory Controller Hub 3604 7300 Chipset PCI Express Port 1 3605 7300 Chipset PCI Express Port 2 3606 7300 Chipset PCI Express Port 3 3607 7300 Chipset PCI Express Port 4 3608 7300 Chipset PCI Express Port 5 3609 7300 Chipset PCI Express Port 6 360a 7300 Chipset PCI Express Port 7 360b 7300 Chipset QuickData Technology Device 360c 7300 Chipset FSB Registers 1028 01f0 PowerEdge R900 7300 Chipset FSB Registers 360d 7300 Chipset Snoop Filter Registers 360e 7300 Chipset Debug and Miscellaneous Registers 360f 7300 Chipset FBD Branch 0 Registers 3610 7300 Chipset FBD Branch 1 Registers 3700 Xeon C5500/C3500 DMI 3701 Xeon C5500/C3500 DMI 3702 Xeon C5500/C3500 DMI 3703 Xeon C5500/C3500 DMI 3704 Xeon C5500/C3500 DMI 3705 Xeon C5500/C3500 DMI 3706 Xeon C5500/C3500 DMI 3707 Xeon C5500/C3500 DMI 3708 Xeon C5500/C3500 DMI 3709 Xeon C5500/C3500 DMI 370a Xeon C5500/C3500 DMI 370b Xeon C5500/C3500 DMI 370c Xeon C5500/C3500 DMI 370d Xeon C5500/C3500 DMI 370e Xeon C5500/C3500 DMI 370f Xeon C5500/C3500 DMI 3710 Xeon C5500/C3500 CB3 DMA 3711 Xeon C5500/C3500 CB3 DMA 3712 Xeon C5500/C3500 CB3 DMA 3713 Xeon C5500/C3500 CB3 DMA 3714 Xeon C5500/C3500 CB3 DMA 3715 Xeon C5500/C3500 CB3 DMA 3716 Xeon C5500/C3500 CB3 DMA 3717 Xeon C5500/C3500 CB3 DMA 3718 Xeon C5500/C3500 CB3 DMA 3719 Xeon C5500/C3500 CB3 DMA 371a Xeon C5500/C3500 QPI Link 371b Xeon C5500/C3500 QPI Routing and Protocol 371d Xeon C5500/C3500 QPI Routing and Protocol 3720 Xeon C5500/C3500 PCI Express Root Port 0 3721 Xeon C5500/C3500 PCI Express Root Port 1 3722 Xeon C5500/C3500 PCI Express Root Port 2 3723 Xeon C5500/C3500 PCI Express Root Port 3 3724 Xeon C5500/C3500 PCI Express Root Port 4 3725 Xeon C5500/C3500 NTB Primary 3726 Xeon C5500/C3500 NTB Primary 3727 Xeon C5500/C3500 NTB Secondary 3728 Xeon C5500/C3500 Core 3729 Xeon C5500/C3500 Core 372a Xeon C5500/C3500 Core 372b Xeon C5500/C3500 Core 372c Xeon C5500/C3500 Reserved 373f Xeon C5500/C3500 IOxAPIC 37c0 C62x chipset series PCIe x16/x8 Upstream Port 37c2 C62x chipset series PCIe Virtual Switch Port 0 37c3 C62x chipset series PCIe Virtual Switch Port 1 37c4 C62x chipset series PCIe Virtual Switch Port 2 37c5 C62x chipset series PCIe Virtual Switch Port 3 37c8 C62x Chipset series QuickAssist Technology Physical Function 0~2 8086 0001 QuickAssist Adapter 8960 8086 0002 QuickAssist Adapter 8970 37c9 C62x Chipset QuickAssist Technology Virtual Function 37cc Ethernet Connection X722 37cd Ethernet Virtual Function 700 Series 37ce Ethernet Connection X722 for 10GbE backplane 1590 0215 Ethernet 10Gb 2-port 568i Adapter 17aa 4023 Intel Ethernet Connection X722 for 10GbE backplane 17aa 4025 Ethernet Connection X722 for 10GbE backplane 37cf Ethernet Connection X722 for 10GbE QSFP+ 37d0 Ethernet Connection X722 for 10GbE SFP+ 17aa 4020 Intel Ethernet Connection X722 for 10G SFP+ 17aa 4021 Intel Ethernet Connection X722 for 10G SFP+ 17aa 4022 Ethernet Connection X722 for 10GbE SFP+ 8086 0001 Ethernet Network Adapter X722-2 8086 0002 Ethernet Network Adapter X722-2 8086 0003 Ethernet Network Adapter X722-4 8086 0004 Ethernet Network Adapter X722-4 37d1 Ethernet Connection X722 for 1GbE 14cd 0010 88E1514 Ethernet OCP 2x1G RJ45 Phy Card [USI-1514-1GbaseT] 1590 0216 Ethernet 1Gb 2-port 368i Adapter 1590 0217 Ethernet 1Gb 2-port 368FLR-MMT Adapter 1590 0247 Ethernet 1Gb 4-port 369i Adapter 17aa 4020 Ethernet Connection X722 for 1GbE 17aa 4021 Ethernet Connection X722 for 1GbE 17aa 4022 Ethernet Connection X722 for 1GbE 17aa 4024 Ethernet Connection X722 for 1GbE 37d2 Ethernet Connection X722 for 10GBASE-T 1059 0180 RD10019 10GbE interface 1170 37d2 Ethernet Connection X722 for 10GBASE-T 14cd 0030 Ethernet OCP 2x10G RJ45 Phy Card [USI-X557-10GbaseT] 1590 0218 Ethernet 10Gb 2-port 568FLR-MMT Adapter 17aa 4020 Ethernet Connection X722 for 10GBASE-T 17aa 4021 Ethernet Connection X722 for 10GBASE-T 17aa 4022 Ethernet Connection X722 for 10GBASE-T 17aa 4024 Ethernet Connection X722 for 10GBASE-T 17aa 4025 Ethernet Connection X722 for 10GBASE-T 37d3 Ethernet Connection X722 for 10GbE SFP+ 1590 0219 Ethernet 10Gb 2-port 568FLR-MMSFP+ Adapter 17aa 4020 Ethernet Connection X722 for 10GbE SFP+ 17aa 4021 Ethernet Connection X722 for 10GbE SFP+ 17aa 4025 Ethernet Connection X722 for 10GbE SFP+ 37d4 Ethernet Connection X722 for 10GbE QSFP+ 37d9 X722 Hyper-V Virtual Function 3882 Ice Lake LPC Controller 38a4 Ice Lake SPI Controller 38c8 Ice Lake-LP Smart Sound Technology Audio Controller 38e0 Ice Lake Management Engine Interface 3a00 82801JD/DO (ICH10 Family) 4-port SATA IDE Controller 3a02 82801JD/DO (ICH10 Family) SATA AHCI Controller 3a05 82801JD/DO (ICH10 Family) SATA RAID Controller 3a06 82801JD/DO (ICH10 Family) 2-port SATA IDE Controller 3a14 82801JDO (ICH10DO) LPC Interface Controller 3a16 82801JIR (ICH10R) LPC Interface Controller 1028 028c PowerEdge R410 LPC Interface Controller 1028 028d PowerEdge T410 LPC Interface Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 5001 GA-EP45-DS5 Motherboard 3a18 82801JIB (ICH10) LPC Interface Controller 3a1a 82801JD (ICH10D) LPC Interface Controller 3a20 82801JI (ICH10 Family) 4 port SATA IDE Controller #1 1028 028c PowerEdge R410 SATA IDE Controller 1028 028d PowerEdge T410 SATA IDE Controller 3a22 82801JI (ICH10 Family) SATA AHCI Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 b005 GA-EP45-DS5/GA-EG45M-DS2H Motherboard 3a25 82801JIR (ICH10R) SATA RAID Controller 1028 028c PERC S100 Controller (PE R410) 1028 028d PERC S100 Controller (PE T410) 1028 02f1 PERC S100 Controller (PE R510) 3a26 82801JI (ICH10 Family) 2 port SATA IDE Controller #2 1028 028c PowerEdge R410 SATA IDE Controller 1028 028d PowerEdge T410 SATA IDE Controller 3a30 82801JI (ICH10 Family) SMBus Controller 1043 82d4 P5Q Deluxe Motherboard 1458 5001 GA-EP45-DS5/GA-EG45M-DS2H Motherboard 3a32 82801JI (ICH10 Family) Thermal Subsystem 3a34 82801JI (ICH10 Family) USB UHCI Controller #1 1028 028c PowerEdge R410 USB UHCI Controller 1028 028d PowerEdge T410 USB UHCI Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 5004 GA-EP45-DS5 Motherboard 3a35 82801JI (ICH10 Family) USB UHCI Controller #2 1028 028c PowerEdge R410 USB UHCI Controller 1028 028d PowerEdge T410 USB UHCI Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 5004 GA-EP45-DS5 Motherboard 3a36 82801JI (ICH10 Family) USB UHCI Controller #3 1028 028c PowerEdge R410 USB UHCI Controller 1028 028d PowerEdge T410 USB UHCI Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 5004 GA-EP45-DS5 Motherboard 3a37 82801JI (ICH10 Family) USB UHCI Controller #4 1028 028c PowerEdge R410 USB UHCI Controller 1028 028d PowerEdge T410 USB UHCI Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 5004 Motherboard 3a38 82801JI (ICH10 Family) USB UHCI Controller #5 1028 028c PowerEdge R410 USB UHCI Controller 1028 028d PowerEdge T410 USB UHCI Controller 103c 330b ProLiant ML150 G6 Server 1043 82d4 P5Q Deluxe Motherboard 1458 5004 Motherboard 3a39 82801JI (ICH10 Family) USB UHCI Controller #6 1028 028c PowerEdge R410 USB UHCI Controller 1028 028d PowerEdge T410 USB UHCI Controller 103c 330b ProLiant ML150 G6 Server 1043 82d4 P5Q Deluxe Motherboard 1458 5004 Motherboard 3a3a 82801JI (ICH10 Family) USB2 EHCI Controller #1 1028 028c PowerEdge R410 USB EHCI Controller 1028 028d PowerEdge T410 USB EHCI Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 5006 GA-EP45-DS5 Motherboard 3a3c 82801JI (ICH10 Family) USB2 EHCI Controller #2 1028 028c PowerEdge R410 USB EHCI Controller 1028 028d PowerEdge T410 USB EHCI Controller 103c 330b ProLiant G6 series 1043 82d4 P5Q Deluxe Motherboard 1458 5006 Motherboard 3a3e 82801JI (ICH10 Family) HD Audio Controller 1043 8311 P5Q Deluxe Motherboard 1458 a002 GA-EP45-UD3R Motherboard 1458 a102 GA-EP45-DS5/GA-EG45M-DS2H Motherboard 3a40 82801JI (ICH10 Family) PCI Express Root Port 1 1028 028c PowerEdge R410 PCI Express Port 1 1028 028d PowerEdge T410 PCI Express Port 1 103c 330b ProLiant ML150 G6 Server 1043 82d4 P5Q Deluxe Motherboard 1043 82ea P6T DeLuxe Motherboard 1458 5001 GA-EP45-DS5/GA-EG45M-DS2H Motherboard 3a42 82801JI (ICH10 Family) PCI Express Port 2 3a44 82801JI (ICH10 Family) PCI Express Root Port 3 1043 82ea P6T DeLuxe Motherboard 3a46 82801JI (ICH10 Family) PCI Express Root Port 4 1043 82ea P6T DeLuxe Motherboard 1458 5001 GA-EP45-DS5 Motherboard 3a48 82801JI (ICH10 Family) PCI Express Root Port 5 103c 330b ProLiant ML150 G6 Server 1043 82ea P6T Deluxe Motherboard 1458 5001 GA-EP45-DS5 Motherboard 3a4a 82801JI (ICH10 Family) PCI Express Root Port 6 103c 330b ProLiant ML150 G6 Server 1043 82d4 P5Q Deluxe Motherboard 1043 82ea P6T DeLuxe Motherboard 1458 5001 GA-EP45-DS5/GA-EG45M-DS2H Motherboard 3a4c 82801JI (ICH10 Family) Gigabit Ethernet Controller 3a51 82801JDO (ICH10DO) VECI Controller 3a55 82801JD/DO (ICH10 Family) Virtual SATA Controller 3a60 82801JD/DO (ICH10 Family) SMBus Controller 3a62 82801JD/DO (ICH10 Family) Thermal Subsystem 3a64 82801JD/DO (ICH10 Family) USB UHCI Controller #1 3a65 82801JD/DO (ICH10 Family) USB UHCI Controller #2 3a66 82801JD/DO (ICH10 Family) USB UHCI Controller #3 3a67 82801JD/DO (ICH10 Family) USB UHCI Controller #4 3a68 82801JD/DO (ICH10 Family) USB UHCI Controller #5 3a69 82801JD/DO (ICH10 Family) USB UHCI Controller #6 3a6a 82801JD/DO (ICH10 Family) USB2 EHCI Controller #1 3a6c 82801JD/DO (ICH10 Family) USB2 EHCI Controller #2 3a6e 82801JD/DO (ICH10 Family) HD Audio Controller 3a70 82801JD/DO (ICH10 Family) PCI Express Port 1 3a72 82801JD/DO (ICH10 Family) PCI Express Port 2 3a74 82801JD/DO (ICH10 Family) PCI Express Port 3 3a76 82801JD/DO (ICH10 Family) PCI Express Port 4 3a78 82801JD/DO (ICH10 Family) PCI Express Port 5 3a7a 82801JD/DO (ICH10 Family) PCI Express Port 6 3a7c 82801JD/DO (ICH10 Family) Gigabit Ethernet Controller 3b00 5 Series/3400 Series Chipset LPC Interface Controller 3b01 Mobile 5 Series Chipset LPC Interface Controller 3b02 P55 Chipset LPC Interface Controller 3b03 PM55 Chipset LPC Interface Controller 3b04 5 Series Chipset LPC Interface Controller 3b05 Mobile 5 Series Chipset LPC Interface Controller 3b06 H55 Chipset LPC Interface Controller 3b07 QM57 Chipset LPC Interface Controller 1028 040a Latitude E6410 1028 040b Latitude E6510 e4bf 50c1 PC1-GROOVE 3b08 H57 Chipset LPC Interface Controller 3b09 HM55 Chipset LPC Interface Controller 1025 0347 Aspire 7740G 144d c06a R730 Laptop 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b0a Q57 Chipset LPC Interface Controller 1028 02da OptiPlex 980 15d9 060d C7SIM-Q Motherboard 3b0b HM57 Chipset LPC Interface Controller 3b0c 5 Series Chipset LPC Interface Controller 3b0d 5 Series/3400 Series Chipset LPC Interface Controller 3b0e 5 Series/3400 Series Chipset LPC Interface Controller 3b0f QS57 Chipset LPC Interface Controller 3b10 5 Series/3400 Series Chipset LPC Interface Controller 3b11 5 Series/3400 Series Chipset LPC Interface Controller 3b12 3400 Series Chipset LPC Interface Controller 3b13 5 Series/3400 Series Chipset LPC Interface Controller 3b14 3420 Chipset LPC Interface Controller 15d9 0605 X8SIL 3b15 5 Series/3400 Series Chipset LPC Interface Controller 3b16 3450 Chipset LPC Interface Controller 3b17 5 Series/3400 Series Chipset LPC Interface Controller 3b18 5 Series/3400 Series Chipset LPC Interface Controller 3b19 5 Series/3400 Series Chipset LPC Interface Controller 3b1a 5 Series/3400 Series Chipset LPC Interface Controller 3b1b 5 Series/3400 Series Chipset LPC Interface Controller 3b1c 5 Series/3400 Series Chipset LPC Interface Controller 3b1d 5 Series/3400 Series Chipset LPC Interface Controller 3b1e 5 Series/3400 Series Chipset LPC Interface Controller 3b1f 5 Series/3400 Series Chipset LPC Interface Controller 3b20 5 Series/3400 Series Chipset 4 port SATA IDE Controller 3b21 5 Series/3400 Series Chipset 2 port SATA IDE Controller 3b22 5 Series/3400 Series Chipset 6 port SATA AHCI Controller 1028 02da OptiPlex 980 15d9 0605 X8SIL 15d9 060d C7SIM-Q Motherboard 3b23 5 Series/3400 Series Chipset 4 port SATA AHCI Controller 3b25 5 Series/3400 Series Chipset SATA RAID Controller 103c 3118 Smart Array B110i SATA RAID Controller 3b26 5 Series/3400 Series Chipset 2 port SATA IDE Controller 3b28 5 Series/3400 Series Chipset 4 port SATA IDE Controller 144d c06a R730 Laptop 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b29 5 Series/3400 Series Chipset 4 port SATA AHCI Controller 1025 0347 Aspire 7740G 144d c06a R730 Laptop 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b2c 5 Series/3400 Series Chipset SATA RAID Controller 3b2d 5 Series/3400 Series Chipset 2 port SATA IDE Controller 144d c06a R730 Laptop 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 3b2e 5 Series/3400 Series Chipset 4 port SATA IDE Controller e4bf 50c1 PC1-GROOVE 3b2f 5 Series/3400 Series Chipset 6 port SATA AHCI Controller 1028 040a Latitude E6410 1028 040b Latitude E6510 e4bf 50c1 PC1-GROOVE 3b30 5 Series/3400 Series Chipset SMBus Controller 1025 0347 Aspire 7740G 1028 02da OptiPlex 980 1028 040a Latitude E6410 1028 040b Latitude E6510 1043 3838 P7P55-M Motherboard 1043 8383 P7P55-M Motherboard 144d c06a R730 Laptop 15d9 0605 X8SIL 15d9 060d C7SIM-Q Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 3b32 5 Series/3400 Series Chipset Thermal Subsystem 1025 0347 Aspire 7740G 1028 040a Latitude E6410 144d c06a R730 Laptop 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b34 5 Series/3400 Series Chipset USB2 Enhanced Host Controller 1025 0347 Aspire 7740G 1028 02da OptiPlex 980 1028 040a Latitude E6410 1028 040b Latitude E6510 144d c06a R730 Laptop 15d9 0605 X8SIL 15d9 060d C7SIM-Q Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 3b36 5 Series/3400 Series Chipset USB Universal Host Controller 3b37 5 Series/3400 Series Chipset USB Universal Host Controller 3b38 5 Series/3400 Series Chipset USB Universal Host Controller 3b39 5 Series/3400 Series Chipset USB Universal Host Controller 3b3a 5 Series/3400 Series Chipset USB Universal Host Controller 3b3b 5 Series/3400 Series Chipset USB Universal Host Controller 3b3c 5 Series/3400 Series Chipset USB2 Enhanced Host Controller 1025 0347 Aspire 7740G 1028 02da OptiPlex 980 1028 040a Latitude E6410 1028 040b Latitude E6510 144d c06a R730 Laptop 15d9 0605 X8SIL 15d9 060d C7SIM-Q Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 3b3e 5 Series/3400 Series Chipset USB Universal Host Controller 3b3f 5 Series/3400 Series Chipset USB Universal Host Controller 3b40 5 Series/3400 Series Chipset USB Universal Host Controller 3b41 5 Series/3400 Series Chipset LAN Controller 3b42 5 Series/3400 Series Chipset PCI Express Root Port 1 1028 02da OptiPlex 980 1028 040a Latitude E6410 1028 040b Latitude E6510 103c 1521 EliteBook 8540p 144d c06a R730 Laptop 15d9 060d C7SIM-Q Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b44 5 Series/3400 Series Chipset PCI Express Root Port 2 1028 040a Latitude E6410 1028 040b Latitude E6510 15d9 060d C7SIM-Q Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b46 5 Series/3400 Series Chipset PCI Express Root Port 3 1028 040a Latitude E6410 1028 040b Latitude E6510 144d c06a R730 Laptop 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b48 5 Series/3400 Series Chipset PCI Express Root Port 4 1028 040a Latitude E6410 1028 040b Latitude E6510 144d c06a R730 Laptop 3b4a 5 Series/3400 Series Chipset PCI Express Root Port 5 1028 02da OptiPlex 980 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] 3b4c 5 Series/3400 Series Chipset PCI Express Root Port 6 3b4e 5 Series/3400 Series Chipset PCI Express Root Port 7 3b50 5 Series/3400 Series Chipset PCI Express Root Port 8 3b53 5 Series/3400 Series Chipset VECI Controller 3b56 5 Series/3400 Series Chipset High Definition Audio 1025 0347 Aspire 7740G 1028 02da OptiPlex 980 1028 040a Latitude E6410 1028 040b Latitude E6510 1043 1373 G73-series gaming laptop 144d c06a R730 Laptop 15d9 060d C7SIM-Q Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 3b57 5 Series/3400 Series Chipset High Definition Audio 3b64 5 Series/3400 Series Chipset HECI Controller 1025 0347 Aspire 7740G 15d9 060d C7SIM-Q Motherboard 17c0 10d2 Medion Akoya E7214 Notebook PC [MD98410] e4bf 50c1 PC1-GROOVE 3b65 5 Series/3400 Series Chipset HECI Controller 3b66 5 Series/3400 Series Chipset PT IDER Controller 3b67 5 Series/3400 Series Chipset KT Controller e4bf 50c1 PC1-GROOVE 3c00 Xeon E5/Core i7 DMI2 3c01 Xeon E5/Core i7 DMI2 in PCI Express Mode 3c02 Xeon E5/Core i7 IIO PCI Express Root Port 1a 3c03 Xeon E5/Core i7 IIO PCI Express Root Port 1b 3c04 Xeon E5/Core i7 IIO PCI Express Root Port 2a 3c05 Xeon E5/Core i7 IIO PCI Express Root Port 2b 3c06 Xeon E5/Core i7 IIO PCI Express Root Port 2c 3c07 Xeon E5/Core i7 IIO PCI Express Root Port 2d 3c08 Xeon E5/Core i7 IIO PCI Express Root Port 3a in PCI Express Mode 3c09 Xeon E5/Core i7 IIO PCI Express Root Port 3b 3c0a Xeon E5/Core i7 IIO PCI Express Root Port 3c 3c0b Xeon E5/Core i7 IIO PCI Express Root Port 3d 3c0d Xeon E5/Core i7 Non-Transparent Bridge 3c0e Xeon E5/Core i7 Non-Transparent Bridge 3c0f Xeon E5/Core i7 Non-Transparent Bridge 3c20 Xeon E5/Core i7 DMA Channel 0 3c21 Xeon E5/Core i7 DMA Channel 1 3c22 Xeon E5/Core i7 DMA Channel 2 3c23 Xeon E5/Core i7 DMA Channel 3 3c24 Xeon E5/Core i7 DMA Channel 4 3c25 Xeon E5/Core i7 DMA Channel 5 3c26 Xeon E5/Core i7 DMA Channel 6 3c27 Xeon E5/Core i7 DMA Channel 7 3c28 Xeon E5/Core i7 Address Map, VTd_Misc, System Management 3c2a Xeon E5/Core i7 Control Status and Global Errors 3c2c Xeon E5/Core i7 I/O APIC 3c2e Xeon E5/Core i7 DMA 3c2f Xeon E5/Core i7 DMA 3c40 Xeon E5/Core i7 IIO Switch and IRP Performance Monitor 3c41 Sandy Bridge QPI Port 0 Performance Monitor 3c42 Sandy Bridge QPI Port 1 Performance Monitor 3c43 Xeon E5/Core i7 Ring to PCI Express Performance Monitor 3c44 Xeon E5/Core i7 Ring to QuickPath Interconnect Link 0 Performance Monitor 3c45 Xeon E5/Core i7 Ring to QuickPath Interconnect Link 1 Performance Monitor 3c46 Xeon E5/Core i7 Processor Home Agent Performance Monitoring 3c71 Xeon E5/Core i7 Integrated Memory Controller RAS Registers 3c80 Xeon E5/Core i7 QPI Link 0 3c83 Xeon E5/Core i7 QPI Link Reut 0 3c84 Xeon E5/Core i7 QPI Link Reut 0 3c86 Sandy Bridge QPI Port 0 DFX Link 3c90 Xeon E5/Core i7 QPI Link 1 3c93 Xeon E5/Core i7 QPI Link Reut 1 3c94 Xeon E5/Core i7 QPI Link Reut 1 3c96 Sandy Bridge QPI Port 1 DFX Link 3ca0 Xeon E5/Core i7 Processor Home Agent 3ca8 Xeon E5/Core i7 Integrated Memory Controller Registers 3caa Xeon E5/Core i7 Integrated Memory Controller Target Address Decoder 0 3cab Xeon E5/Core i7 Integrated Memory Controller Target Address Decoder 1 3cac Xeon E5/Core i7 Integrated Memory Controller Target Address Decoder 2 3cad Xeon E5/Core i7 Integrated Memory Controller Target Address Decoder 3 3cae Xeon E5/Core i7 Integrated Memory Controller Target Address Decoder 4 3cb0 Xeon E5/Core i7 Integrated Memory Controller Channel 0-3 Thermal Control 0 3cb1 Xeon E5/Core i7 Integrated Memory Controller Channel 0-3 Thermal Control 1 3cb2 Xeon E5/Core i7 Integrated Memory Controller ERROR Registers 0 3cb3 Xeon E5/Core i7 Integrated Memory Controller ERROR Registers 1 3cb4 Xeon E5/Core i7 Integrated Memory Controller Channel 0-3 Thermal Control 2 3cb5 Xeon E5/Core i7 Integrated Memory Controller Channel 0-3 Thermal Control 3 3cb6 Xeon E5/Core i7 Integrated Memory Controller ERROR Registers 2 3cb7 Xeon E5/Core i7 Integrated Memory Controller ERROR Registers 3 3cb8 Xeon E5/Core i7 DDRIO 3cc0 Xeon E5/Core i7 Power Control Unit 0 3cc1 Xeon E5/Core i7 Power Control Unit 1 3cc2 Xeon E5/Core i7 Power Control Unit 2 3cd0 Xeon E5/Core i7 Power Control Unit 3 3ce0 Xeon E5/Core i7 Interrupt Control Registers 3ce3 Xeon E5/Core i7 Semaphore and Scratchpad Configuration Registers 3ce4 Xeon E5/Core i7 R2PCIe 3ce6 Xeon E5/Core i7 QuickPath Interconnect Agent Ring Registers 3ce8 Xeon E5/Core i7 Unicast Register 0 3ce9 Xeon E5/Core i7 Unicast Register 5 3cea Xeon E5/Core i7 Unicast Register 1 3ceb Xeon E5/Core i7 Unicast Register 6 3cec Xeon E5/Core i7 Unicast Register 3 3ced Xeon E5/Core i7 Unicast Register 7 3cee Xeon E5/Core i7 Unicast Register 4 3cef Xeon E5/Core i7 Unicast Register 8 3cf4 Xeon E5/Core i7 Integrated Memory Controller System Address Decoder 0 3cf5 Xeon E5/Core i7 Integrated Memory Controller System Address Decoder 1 3cf6 Xeon E5/Core i7 System Address Decoder 3e10 8th Gen Core 4-core Processor Host Bridge/DRAM Registers [Coffee Lake H] 3e18 8th Gen Core 4-core Workstation Processor Host Bridge/DRAM Registers [Coffee Lake S] 3e1f 8th Gen Core 4-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S] 1458 5000 Z370 AORUS Gaming K3-CF 3e20 i9 Core / Xeon E 2200M Coffee Lake Host Bridge / DRAM Registers 3e30 8th/9th Gen Core 8-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S] 3e33 8th/9th Gen Core Processor Host Bridge/DRAM Registers [Coffee Lake] 3e34 Coffee Lake HOST and DRAM Controller 3e35 Coffee Lake Host Bridge/DRAM Registers 3e81 8th Gen Core Processor PCIe Controller (x16) 3e85 8th Gen Core Processor PCIe Controller (x8) 3e89 8th Gen Core Processor PCIe Controller (x4) 3e90 CoffeeLake-S GT1 [UHD Graphics 610] 3e91 CoffeeLake-S GT2 [UHD Graphics 630] 3e92 CoffeeLake-S GT2 [UHD Graphics 630] 1028 0869 Vostro 3470 3e93 CoffeeLake-S GT1 [UHD Graphics 610] 3e94 Coffee Lake-S GT2 [UHD Graphics P630] 3e96 CoffeeLake-S GT2 [UHD Graphics P630] 3e98 CoffeeLake-S GT2 [UHD Graphics 630] 3e9a Coffee Lake-S GT2 [UHD Graphics P630] 3e9b CoffeeLake-H GT2 [UHD Graphics 630] 3e9c Coffee Lake-S GT1 [UHD Graphics 610] 3ea0 WhiskeyLake-U GT2 [UHD Graphics 620] 1028 089e Inspiron 5482 3ea1 Whiskey Lake-U GT1 [UHD Graphics 610] 3ea5 CoffeeLake-U GT3e [Iris Plus Graphics 655] 3ea6 Coffee Lake-U GT3 [Iris Plus Graphics 645] 3ea8 Coffee Lake-U GT3 [Iris Plus Graphics 655] 3ea9 Coffee Lake-U GT2 [UHD Graphics 620] 3ec2 8th Gen Core Processor Host Bridge/DRAM Registers 1028 0869 Vostro 3470 1043 8694 PRIME H310M-D 3ec4 8th/9th Gen Core Processor Host Bridge / DRAM Registers 3ec6 8th Gen Core Processor Host Bridge/DRAM Registers 3eca 8th Gen Core Processor Host Bridge/DRAM Registers 3ed0 8th Gen Core Processor Host Bridge/DRAM Registers 4000 5400 Chipset Memory Controller Hub 4001 5400 Chipset Memory Controller Hub 4003 5400 Chipset Memory Controller Hub 4021 5400 Chipset PCI Express Port 1 4022 5400 Chipset PCI Express Port 2 4023 5400 Chipset PCI Express Port 3 4024 5400 Chipset PCI Express Port 4 4025 5400 Chipset PCI Express Port 5 4026 5400 Chipset PCI Express Port 6 4027 5400 Chipset PCI Express Port 7 4028 5400 Chipset PCI Express Port 8 4029 5400 Chipset PCI Express Port 9 402d 5400 Chipset IBIST Registers 402e 5400 Chipset IBIST Registers 402f 5400 Chipset QuickData Technology Device 4030 5400 Chipset FSB Registers 4031 5400 Chipset CE/SF Registers 4032 5400 Chipset IOxAPIC 4035 5400 Chipset FBD Registers 4036 5400 Chipset FBD Registers 4041 NVMe Datacenter SSD [Optane] 4100 Moorestown Graphics and Video 4108 Atom Processor E6xx Integrated Graphics Controller 4109 Atom Processor E6xx Integrated Graphics Controller 410a Atom Processor E6xx Integrated Graphics Controller 410b Atom Processor E6xx Integrated Graphics Controller 410c Atom Processor E6xx Integrated Graphics Controller 410d Atom Processor E6xx Integrated Graphics Controller 410e Atom Processor E6xx Integrated Graphics Controller 410f Atom Processor E6xx Integrated Graphics Controller 4114 Atom Processor E6xx PCI Host Bridge #1 4115 Atom Processor E6xx PCI Host Bridge #2 4116 Atom Processor E6xx PCI Host Bridge #3 4117 Atom Processor E6xx PCI Host Bridge #4 4140 NVMe Datacenter SSD [Optane] 1028 2134 NVMe Datacenter SSD [Optane] SED 400GB 2.5" U.2 (P5800X) 1028 2135 NVMe Datacenter SSD [Optane] SED 800GB 2.5" U.2 (P5800X) 1028 2136 NVMe Datacenter SSD [Optane] SED 1.6TB 2.5" U.2 (P5800X) 1028 2137 NVMe Datacenter SSD [Optane] 400GB 2.5" U.2 (P5800X) 1028 2138 NVMe Datacenter SSD [Optane] 800GB 2.5" U.2 (P5800X) 1028 2139 NVMe Datacenter SSD [Optane] 1.6TB 2.5" U.2 (P5800X) 4220 PRO/Wireless 2200BG [Calexico2] Network Connection 103c 0934 Compaq nw8240/nx8220 103c 12f6 nc6120/nc6220/nw8240/nx8220 8086 2701 WM3B2200BG Mini-PCI Card 8086 2712 IBM ThinkPad R50e 8086 2721 Dell B130 laptop integrated WLAN 8086 2722 Dell Latitude D600 8086 2731 Samsung P35 integrated WLAN 4222 PRO/Wireless 3945ABG [Golan] Network Connection 103c 135c PRO/Wireless 3945ABG [Golan] Network Connection 8086 1000 PRO/Wireless 3945ABG Network Connection 8086 1001 WM3945ABG MOW2 8086 1005 PRO/Wireless 3945BG Network Connection 8086 1034 PRO/Wireless 3945BG Network Connection 8086 1044 PRO/Wireless 3945BG Network Connection 8086 1c00 PRO/Wireless 3945ABG Network Connection 4223 PRO/Wireless 2915ABG [Calexico2] Network Connection 1000 8086 mPCI 3B Americas/Europe ZZA 1001 8086 mPCI 3B Europe ZZE 1002 8086 mPCI 3B Japan ZZJ 1003 8086 mPCI 3B High-Band ZZH 103c 1351 Compaq nc6220 4224 PRO/Wireless 2915ABG [Calexico2] Network Connection 4227 PRO/Wireless 3945ABG [Golan] Network Connection 8086 1010 ThinkPad R60e 8086 1011 ThinkPad T60/R60e/X60s/R61 8086 1014 PRO/Wireless 3945BG Network Connection 4229 PRO/Wireless 4965 AG or AGN [Kedron] Network Connection 8086 1100 Vaio VGN-SZ79SN_C 8086 1101 PRO/Wireless 4965 AG or AGN 422b Centrino Ultimate-N 6300 8086 1101 Centrino Ultimate-N 6300 3x3 AGN 8086 1121 Centrino Ultimate-N 6300 3x3 AGN 422c Centrino Advanced-N 6200 8086 1301 Centrino Advanced-N 6200 2x2 AGN 8086 1306 Centrino Advanced-N 6200 2x2 ABG 8086 1307 Centrino Advanced-N 6200 2x2 BG 8086 1321 Centrino Advanced-N 6200 2x2 AGN 8086 1326 Centrino Advanced-N 6200 2x2 ABG 4230 PRO/Wireless 4965 AG or AGN [Kedron] Network Connection 8086 1110 Lenovo ThinkPad T51 8086 1111 Lenovo ThinkPad T61 4232 WiFi Link 5100 8086 1201 WiFi Link 5100 AGN 8086 1204 WiFi Link 5100 AGN 8086 1205 WiFi Link 5100 BGN 8086 1206 WiFi Link 5100 ABG 8086 1221 WiFi Link 5100 AGN 8086 1224 WiFi Link 5100 AGN 8086 1225 WiFi Link 5100 BGN 8086 1226 WiFi Link 5100 ABG 8086 1301 WiFi Link 5100 AGN 8086 1304 WiFi Link 5100 AGN 8086 1305 WiFi Link 5100 BGN 8086 1306 WiFi Link 5100 ABG 8086 1321 WiFi Link 5100 AGN 8086 1324 WiFi Link 5100 AGN 8086 1325 WiFi Link 5100 BGN 8086 1326 WiFi Link 5100 ABG 4235 Ultimate N WiFi Link 5300 4236 Ultimate N WiFi Link 5300 4237 PRO/Wireless 5100 AGN [Shiloh] Network Connection 8086 1211 WiFi Link 5100 AGN 8086 1214 WiFi Link 5100 AGN 8086 1215 WiFi Link 5100 BGN 8086 1216 WiFi Link 5100 ABG 8086 1311 WiFi Link 5100 AGN 8086 1314 WiFi Link 5100 AGN 8086 1315 WiFi Link 5100 BGN 8086 1316 WiFi Link 5100 ABG 4238 Centrino Ultimate-N 6300 8086 1111 Centrino Ultimate-N 6300 3x3 AGN 4239 Centrino Advanced-N 6200 8086 1311 Centrino Advanced-N 6200 2x2 AGN 8086 1316 Centrino Advanced-N 6200 2x2 ABG 423a PRO/Wireless 5350 AGN [Echo Peak] Network Connection 423b PRO/Wireless 5350 AGN [Echo Peak] Network Connection 423c WiMAX/WiFi Link 5150 8086 1201 WiMAX/WiFi Link 5150 AGN 8086 1206 WiMAX/WiFi Link 5150 ABG 8086 1221 WiMAX/WiFi Link 5150 AGN 8086 1301 WiMAX/WiFi Link 5150 AGN 8086 1306 WiMAX/WiFi Link 5150 ABG 8086 1321 WiMAX/WiFi Link 5150 AGN 423d WiMAX/WiFi Link 5150 8086 1211 WiMAX/WiFi Link 5150 AGN 8086 1216 WiMAX/WiFi Link 5150 ABG 8086 1311 WiMAX/WiFi Link 5150 AGN 8086 1316 WiMAX/WiFi Link 5150 ABG 4384 Q570 LPC/eSPI Controller 4385 Z590 LPC/eSPI Controller 4386 H570 LPC/eSPI Controller 4387 B560 LPC/eSPI Controller 4388 H510 LPC/eSPI Controller 4389 WM590 LPC/eSPI Controller 438a QM580 LPC/eSPI Controller 438b HM570 LPC/eSPI Controller 438c C252 LPC/eSPI Controller 438d C256 LPC/eSPI Controller 438e H310D LPC/eSPI Controller 438f W580 LPC/eSPI Controller 4390 RM590E LPC/eSPI Controller 4391 R580E LPC/eSPI Controller 43a3 Tiger Lake-H SMBus Controller 43a4 Tiger Lake-H SPI Controller 43b0 Tiger Lake-H PCI Express Root Port #9 43b8 Tiger Lake-H PCIe Root Port #1 43ba Tiger Lake-H PCIe Root Port #3 43bb Tiger Lake-H PCIe Root Port #4 43bc Tiger Lake-H PCI Express Root Port #5 43be 11th Gen Core Processor PCIe Root Port #7 43c0 Tiger Lake-H PCIe Root Port #17 43c7 Tiger Lake-H PCIe Root Port #24 43c8 Tiger Lake-H HD Audio Controller 43d3 Tiger Lake SATA AHCI Controller 43e0 Tiger Lake-H Management Engine Interface 43e3 Tiger Lake AMT SOL Redirection 43e8 Tiger Lake-H Serial IO I2C Controller #0 43e9 Tiger Lake-H Serial IO I2C Controller #1 43ed Tiger Lake-H USB 3.2 Gen 2x1 xHCI Host Controller 43ef Tiger Lake-H Shared SRAM 43f0 Tiger Lake PCH CNVi WiFi 8086 0034 Wireless-AC 9560 8086 0074 Wi-Fi 6 AX201 160MHz 8086 0264 Wireless-AC 9461 8086 02a4 Wireless-AC 9462 43fc Tiger Lake-H Integrated Sensor Hub 444e Turbo Memory Controller 4511 Elkhart Lake Gaussian and Neural Accelerator 4538 Elkhart Lake PCI-e Root Complex 4555 Elkhart Lake [UHD Graphics Gen11 16EU] 4571 Elkhart Lake [UHD Graphics Gen11 32EU] # Seems to be different than ID 4602 4601 Alder Lake-U15 Host and DRAM Controller 4602 Alder Lake Host and DRAM Controller 460d 12th Gen Core Processor PCI Express x16 Controller #1 4619 Core i9/i7/i5/i3 Host Bridge/DRAM Registers 461b Alder Lake-N Processor Host Bridge/DRAM Registers 461c Alder Lake-N Processor Host Bridge/DRAM Registers 461d Alder Lake Innovation Platform Framework Processor Participant 1028 0b10 Precision 3571 461e Alder Lake-P Thunderbolt 4 USB Controller 1028 0b10 Precision 3571 461f Alder Lake-P Thunderbolt 4 PCI Express Root Port #3 4626 Alder Lake-P Integrated Graphics Controller 4628 Alder Lake-UP3 GT2 [UHD Graphics] 4629 12th Gen Core Processor Host Bridge/DRAM Registers 462a AlderLake-P [UHD Graphics] 462f Alder Lake-P Thunderbolt 4 PCI Express Root Port #2 4636 AlderLake-P [UHD Graphics] 4638 AlderLake-P [UHD Graphics] 463a AlderLake-P [UHD Graphics] 463d 12th Gen Core Processor PCI Express x4 Controller #2 463e Alder Lake-P Thunderbolt 4 NHI #0 1028 0b10 Precision 3571 463f Alder Lake-P Thunderbolt 4 PCI Express Root Port #1 4641 12th Gen Core Processor Host Bridge/DRAM Registers 1028 0b10 Precision 3571 464d 12th Gen Core Processor PCI Express x4 Controller #0 464e Alder Lake-N Thunderbolt 4 USB Controller 464f 12th Gen Core Processor Gaussian & Neural Accelerator 1028 0b10 Precision 3571 4650 12th Gen Core Processor Host Bridge 465d Alder Lake Imaging Signal Processor 4660 12th Gen Core Processor Host Bridge/DRAM Registers 4668 12th Gen Core Processor Host Bridge/DRAM Registers 466d Alder Lake-P Thunderbolt 4 NHI #1 466e Alder Lake-P Thunderbolt 4 PCI Express Root Port #0 467d Platform Monitoring Technology 467e GNA Scoring Accelerator 467f Volume Management Device NVMe RAID Controller 4680 AlderLake-S GT1 4682 Alder Lake-S GT1 [UHD Graphics 730] 4688 Alder Lake-HX GT1 [UHD Graphics 770] 468a Alder Lake-S [UHD Graphics] 468b Alder Lake-S [UHD Graphics] 4690 Alder Lake-S GT1 [UHD Graphics 770] 4692 Alder Lake-S GT1 [UHD Graphics 730] 4693 Alder Lake-S GT1 [UHD Graphics 710] 46a0 AlderLake-P GT2 46a1 UHD Graphics 46a3 Alder Lake-P GT1 [UHD Graphics] 46a6 Alder Lake-P GT2 [Iris Xe Graphics] 46a8 Alder Lake-UP3 GT2 [Iris Xe Graphics] 46aa Alder Lake-UP4 GT2 [Iris Xe Graphics] 46b0 AlderLake-P [Iris Xe Graphics] 46b1 AlderLake-P [Iris Xe Graphics] 46b3 Alder Lake-UP3 GT1 [UHD Graphics] 1025 161d N22C6 [Extensa 15 EX215-55] 46b6 AlderLake-P [Iris Xe Graphics] 46b8 AlderLake-P [Iris Xe Graphics] 46ba AlderLake-P [Iris Xe Graphics] 46c0 AlderLake-M GT1 46c1 AlderLake-M [Iris Xe Graphics] 46c3 Alder Lake-UP4 GT1 [UHD Graphics] 46d0 Alder Lake-N [UHD Graphics] 46d1 Alder Lake-N [UHD Graphics] 46d2 Alder Lake-N [UHD Graphics] 46d3 Alder Lake-N [Intel Graphics] 46d4 Alder Lake-N [Intel Graphics] 4905 DG1 [Iris Xe MAX Graphics] 4906 DG1 [Iris Xe Pod] 4907 SG1 [Server GPU SG-18M] 193d 4000 UN-GPU-XG310-32GB-FHFL 4908 DG1 [Iris Xe Graphics] 4909 DG1 [Iris Xe MAX 100] 4940 4xxx Series QAT 4941 4xxx Series QAT Virtual Function 4942 401xx Series QAT 4943 401xx Series QAT Virtual Function 4944 402xx Series QAT 4945 402xx Series QAT Virtual Function 4946 420xx Series QAT 4947 420xx Series QAT Virtual Function 4b00 Elkhart Lake eSPI Controller 4b23 Elkhart Lake SMBus Controller 4b24 Elkhart Lake SPI (Flash) Controller 4b38 Elkhart Lake PCH PCI Express Root Port #0 4b39 Elkhart Lake PCH PCI Express Root Port #1 4b3c Elkhart Lake PCIe Root Port #4 4b3e Elkhart Lake PCH PCI Express Root Port #6 4b4b Elkhart Lake Serial IO I2C Controller #4 4b4d Elkhart Lake Serial IO UART Controller #2 4b58 Elkhart Lake High Density Audio bus interface 4b63 Elkhart Lake SATA AHCI 4b70 Elkhart Lake Management Engine Interface 4b7d Elkhart Lake USB 3.10 XHCI 4b7f Elkhart Lake PMC SRAM 4c3d Volume Management Device NVMe RAID Controller 4c8a RocketLake-S GT1 [UHD Graphics 750] 4c8b RocketLake-S GT1 [UHD Graphics 730] 4c90 RocketLake-S GT1 [UHD Graphics P750] 4c9a RocketLake-S [UHD Graphics] 4d87 Jasper Lake eSPI Controller 4da3 Jasper Lake SMBus 4da4 Jasper Lake SPI Controller 4da8 Jasper Lake Serial IO UART Controller #0 4dab Jasper Lake Serial IO SPI Controller #1 4db8 Jasper Lake PCIe Root Port #1 4db9 Jasper Lake PCIe Root Port #2 4dbc Jasper Lake PCIe Root Port #5 4dbe Jasper Lake PCIe Root Port #7 4dc4 Jasper Lake eMMC Controller 4dc5 Jasper Lake Serial IO I2C Host Controller #4 4dc6 Jasper Lake Serial IO I2C Host Controller #5 4dc8 Jasper Lake HD Audio 4dd3 Jasper Lake SATA AHCI Controller 4de0 Management Engine Interface 4de8 Jasper Lake Serial IO I2C Host Controller #0 4de9 Jasper Lake Serial IO I2C Host Controller #1 4dea Jasper Lake Serial IO I2C Host Controller #2 4deb Jasper Lake Serial IO I2C Host Controller #3 4ded Jasper Lake USB 3.1 xHCI Host Controller 4def Jasper Lake Shared SRAM 4df0 Jasper Lake PCH CNVi WiFi 8086 4030 Wireless-AC 9560 160MHz 4df8 Jasper Lake SD Controller 4e03 Dynamic Tuning service 4e11 Gaussian Mixture Model and Neural Network Accelerator (GNA) 4e19 JasperLake IPU 4e22 Processor Transaction Router SKU 2 Core 4e55 JasperLake [UHD Graphics] 4e61 JasperLake [UHD Graphics] 4e71 JasperLake [UHD Graphics] 4f80 DG2 [Intel Xe Graphics] 4f81 DG2 [Intel Xe Graphics] 4f82 DG2 [Intel Xe Graphics] 4f83 DG2 [Intel Xe Graphics] 4f84 DG2 [Intel Xe Graphics] 4f85 DG2 [Intel Xe Graphics] 4f86 DG2 [Intel Xe Graphics] 4f87 DG2 [Intel Xe Graphics] 4f88 DG2 [Intel Xe Graphics] 4f89 ACMP [Xe Graphics] 4f8c ACMP [Xe Graphics] 4f90 DG2 Audio Controller 4f91 DG2 Audio Controller 4f92 DG2 Audio Controller 5001 LE80578 5002 LE80578 Graphics Processor Unit 5009 LE80578 Video Display Controller 500d LE80578 Expansion Bus 500e LE80578 UART Controller 500f LE80578 General Purpose IO 5010 LE80578 I2C Controller 5012 LE80578 Serial Peripheral Interface Bus 5020 EP80579 Memory Controller Hub 5021 EP80579 DRAM Error Reporting Registers 5023 EP80579 EDMA Controller 5024 EP80579 PCI Express Port PEA0 5025 EP80579 PCI Express Port PEA1 5028 EP80579 S-ATA IDE 5029 EP80579 S-ATA AHCI 502a EP80579 S-ATA Reserved 502b EP80579 S-ATA Reserved 502c EP80579 Integrated Processor ASU 502d EP80579 Integrated Processor with QuickAssist ASU 502e EP80579 Reserved 502f EP80579 Reserved 5030 EP80579 Reserved 5031 EP80579 LPC Bus 5032 EP80579 SMBus Controller 5033 EP80579 USB 1.1 Controller 5035 EP80579 USB 2.0 Controller 5037 EP80579 PCI-PCI Bridge (transparent mode) 5039 EP80579 Controller Area Network (CAN) interface #1 503a EP80579 Controller Area Network (CAN) interface #2 503b EP80579 Synchronous Serial Port (SPP) 503c EP80579 IEEE 1588 Hardware Assist 503d EP80579 Local Expansion Bus 503e EP80579 Global Control Unit (GCU) 503f EP80579 Reserved 5040 EP80579 Integrated Processor Gigabit Ethernet MAC 5041 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC 5042 EP80579 Reserved 5043 EP80579 Reserved 5044 EP80579 Integrated Processor Gigabit Ethernet MAC 5045 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC 5046 EP80579 Reserved 5047 EP80579 Reserved 5048 EP80579 Integrated Processor Gigabit Ethernet MAC 5049 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC 504a EP80579 Reserved 504b EP80579 Reserved 504c EP80579 Integrated Processor with QuickAssist TDM 5181 Alder Lake PCH-P LPC/eSPI Controller 5182 Alder Lake PCH eSPI Controller 1028 0b10 Precision 3571 5187 Alder Lake LPC Controller 519d Raptor Lake LPC/eSPI Controller 1028 0c06 Precision 3580 51a3 Alder Lake PCH-P SMBus Host Controller 1028 0b10 Precision 3571 1028 0c06 Precision 3580 51a4 Alder Lake-P PCH SPI Controller 1028 0b10 Precision 3571 1028 0c06 Precision 3580 51a8 Alder Lake PCH UART #0 51a9 Alder Lake PCH UART #1 51aa Alder Lake SPI Controller 51ab Alder Lake SPI Controller 51b0 Alder Lake PCI Express Root Port #9 51b1 Alder Lake PCI Express x1 Root Port #10 51b2 Alder Lake PCI Express x1 Root Port #11 51b3 Alder Lake PCI Express Root Port #12 51bb Alder Lake-P PCH PCIe Root Port #4 51bc Alder Lake PCI Express x4 Root Port #5 51bd Alder Lake-P PCH PCIe Root Port #6 51bf Alder Lake PCH-P PCI Express Root Port #9 51c5 Alder Lake-P Serial IO I2C Controller #0 51c6 Alder Lake-P Serial IO I2C Controller #1 51c8 Alder Lake PCH-P High Definition Audio Controller 1028 0b10 Precision 3571 51ca Raptor Lake-P/U/H cAVS 1028 0c06 Precision 3580 51cc Alder Lake Smart Sound Technology Audio Controller 51d3 Alder Lake-P SATA AHCI Controller 1028 0b10 Precision 3571 51d8 Alder Lake-P Serial IO I2C Controller #2 51d9 Alder Lake-P Serial IO I2C Controller #3 51e0 Alder Lake PCH HECI Controller 1028 0b10 Precision 3571 1028 0c06 Precision 3580 51e3 Alder Lake AMT SOL Redirection 1028 0b10 Precision 3571 51e8 Alder Lake PCH Serial IO I2C Controller #0 1028 0b10 Precision 3571 1028 0c06 Precision 3580 51e9 Alder Lake PCH Serial IO I2C Controller #1 1028 0b10 Precision 3571 1028 0c06 Precision 3580 51ea Alder Lake PCH Serial IO I2C Controller #2 51eb Alder Lake PCH Serial IO I2C Controller #3 51ed Alder Lake PCH USB 3.2 xHCI Host Controller 1028 0b10 Precision 3571 1028 0c06 Precision 3580 51ef Alder Lake PCH Shared SRAM 1028 0b10 Precision 3571 1028 0c06 Precision 3580 51f0 Alder Lake-P PCH CNVi WiFi 1a56 1652 Dual Band Wi-Fi 6(802.11ax) Killer AX1650i 160MHz 2x2 [Cyclone Peak] 1a56 1671 Dual Band Wi-Fi 6E(802.11ax) AX1675s 160MHz 2x2 [Garfield Peak] 1a56 1672 Dual Band Wi-Fi 6E(802.11ax) AX1675i 160MHz 2x2 [Garfield Peak] 1a56 1692 Simultaneous Dual Band(Double Connect) Wi-Fi 6E AX1690i 160MHz 2x2 [Garfield Peak] 8086 0034 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9560 160MHz 2x2 [Jefferson Peak] 8086 0070 Dual Band Wi-Fi 6(802.11ax) AX201 160MHz 2x2 [Harrison Peak] 8086 0074 Dual Band Wi-Fi 6(802.11ax) AX201 160MHz 2x2 [Harrison Peak] 8086 0094 Dual Band Wi-Fi 6E(802.11ax) AX211 160MHz 2x2 [Garfield Peak] 8086 00b4 Simultaneous Dual Band(Double Connect) Wi-Fi 6E AX411 160MHz 2x2 [Garfield Peak] 8086 0234 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9560 80MHz 2x2 [Jefferson Peak] 8086 0244 Single Band Wi-Fi 6(802.11ax) AX101 80MHz 1x1 [Harrison Peak] 8086 0264 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9461 80MHz 1x1 [Jefferson Peak] 8086 0274 Dual Band Wi-Fi E(802.11ax) AX203 80MHz 2x2 [Johnson Peak] 8086 02a4 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9462 80MHz 1x1 [Jefferson Peak] 8086 4070 Dual Band Wi-Fi 6(802.11ax) AX201 160MHz 2x2 [Harrison Peak] 8086 4090 Dual Band Wi-Fi 6E(802.11ax) AX211 160MHz 2x2 [Garfield Peak] 8086 42a4 Dual Band Wi-Fi 5(802.11ac) Wireless-AC 9462 80MHz 1x1 [Jefferson Peak] 51f1 Raptor Lake PCH CNVi WiFi 8086 4090 Wi-Fi 6E AX211 160MHz 51fc Alder Lake-P Integrated Sensor Hub 1028 0b10 Precision 3571 1028 0c06 Precision 3580 5200 EtherExpress PRO/100 Intelligent Server PCI Bridge 5201 EtherExpress PRO/100 Intelligent Server Fast Ethernet Controller 8086 0001 EtherExpress PRO/100 Server Ethernet Adapter 530d 80310 (IOP) IO Processor 5481 Alder Lake-N PCH eSPI Controller # https://edc.intel.com/content/www/us/en/design/products/platforms/processor-and-core-i3-n-series-datasheet-volume-1-of-2/002/pch-device-and-revision-ids/ 54a0 Alder Lake-N P2SB Bridge 54a1 Alder Lake-N Power Management Controller (PMC) 54a3 Alder Lake-N SMBus 54a4 Alder Lake-N SPI (flash) Controller 54a6 Alder Lake-N Intel Trace Hub 54a8 Alder Lake-N Serial IO UART Host Controller 54a9 Alder Lake-N UART Controller 54aa Alder Lake-N Generic SPI (GSPI) Controller #0 54ab Alder Lake-N Generic SPI (GSPI) Controller #1 54b0 Alder Lake-N PCI Express Root Port #9 54b1 Alder Lake-N PCI Express Root Port #10 54b2 Alder Lake-N PCI Express Root Port #11 54b3 Alder Lake-N PCI Express Root Port #12 54b8 Alder Lake-N PCI Express Root Port #1 54b9 Alder Lake-N PCI Express Root Port #2 54ba Alder Lake-N PCI Express Root Port #3 54bb Alder Lake-N PCI Express Root Port #4 54be Alder Lake-N PCI Express Root Port #7 54c4 Alder Lake-N eMMC Controller 54c5 Alder Lake-N I2C Controller #4 54c6 Alder Lake-N I2C Controller #5 54c7 Alder Lake-N UART Controller #2 54c8 Alder Lake-N PCH High Definition Audio Controller 54d0 Alder Lake-N Touch Host Controller #0 (THC #0) 54d1 Alder Lake-N Touch Host Controller #1 (THC #1) 54d3 Alder Lake-N SATA AHCI Controller 54da Alder Lake-N UART Controller #3 54e0 Alder Lake-N PCH HECI Controller 54e1 Alder Lake-N PCH HECI Controller 54e4 Alder Lake-N PCH HECI Controller 54e5 Alder Lake-N PCH HECI Controller 54e8 Alder Lake-N PCH I2C Controller 54e9 Alder Lake-N PCH I2C Controller 54ea Alder Lake-N PCH I2C Controller 54eb Alder Lake-N PCH I2C Controller 54ed Alder Lake-N PCH USB 3.2 Gen 2x1 (10 Gb/s) xHCI Host Controller 54ee Alder Lake-N USB 3.2 Gen 1x1 (5 Gb/s) Device Controller (xDCI) 54ef Alder Lake-N PCH Shared SRAM 54f0 Alder Lake-N PCH CNVi WiFi 8086 0244 Wi-Fi 6 AX101NGW 54f1 Alder Lake-N PCH CNVi WiFi 54f2 Alder Lake-N PCH CNVi WiFi 54f3 Alder Lake-N PCH CNVi WiFi 54fb Alder Lake-N Generic SPI (GSPI) Controller #2 54fc Alder Lake-N Integrated Sensor Hub 54ff Alder Lake-N UFS Controller 5502 Ethernet Controller (2) I225-LMvP 103c 87b9 Thunderbolt Dock G4 PCIe NIC 17aa 2303 ThinkPad Universal Thunderbolt 4 Dock PCIe NIC 1ab6 0225 TS4 On-Board 2.5GbE Ethernet Adaptor 5690 DG2 [Arc A770M] 5691 DG2 [Arc A730M] 5692 DG2 [Arc A550M] 5693 DG2 [Arc A370M] 5694 DG2 [Arc A350M] 5695 DG2 [Iris Xe MAX A200M] 5696 DG2 [Arc A570M] 5697 DG2 [Arc A530M] 5698 DG2 [Arc Xe Graphics] 56a0 DG2 [Arc A770] 56a1 DG2 [Arc A750] 56a2 DG2 [Arc A580] 56a3 DG2 [Arc Xe Graphics] 56a4 DG2 [Arc Xe Graphics] 56a5 DG2 [Arc A380] 56a6 DG2 [Arc A310] 56a7 DG2 [Arc Xe Graphics] 56a8 DG2 [Arc Xe Graphics] 56a9 DG2 [Arc Xe Graphics] 56b0 DG2 [Arc Pro A30M] 56b1 DG2 [Arc Pro A40/A50] 56b2 DG2 [Arc Pro A60M] 56b3 DG2 [Arc Pro A60] 56ba DG2 [Arc A380E] 56bb DG2 [Arc A310E] 56bc DG2 [Arc A370E] 56bd DG2 [Arc A350E] 56be DG2 [Arc A750E] 56bf DG2 [Arc A580E] 56c0 ATS-M [Data Center GPU Flex 170] 56c1 ATS-M [Data Center GPU Flex 140] 56c2 ATS-M [Data Center GPU Flex 170V] 5780 JHL9580 Thunderbolt 5 80/120G Bridge [Barlow Ridge Host 80G 2023] 5781 JHL9580 Thunderbolt 5 80/120G NHI [Barlow Ridge Host 80G 2023] 5782 JHL9580 Thunderbolt 5 80/120G USB Controller [Barlow Ridge Host 80G 2023] 5783 JHL9540 Thunderbolt 4 Bridge [Barlow Ridge Host 40G 2023] 5784 JHL9540 Thunderbolt 4 NHI [Barlow Ridge Host 40G 2023] 5785 JHL9540 Thunderbolt 4 USB Controller [Barlow Ridge Host 40G 2023] 5786 JHL9480 Thunderbolt 5 80/120G Bridge [Barlow Ridge Hub 80G 2023] 5787 JHL9480 Thunderbolt 5 80/120G USB Controller [Barlow Ridge Hub 80G 2023] 5795 Granite Rapids Chipset LPC Controller 579c Ethernet Connection E825-C for backplane 579d Ethernet Connection E825-C for QSFP 579e Ethernet Connection E825-C for SFP 579f Ethernet Connection E825-C 10GbE 57a4 JHL9440 Thunderbolt 4 Bridge [Barlow Ridge Hub 40G 2023] 57a5 JHL9440 Thunderbolt 4 USB Controller [Barlow Ridge Hub 40G 2023] 57ad E610 Virtual Function 57ae Ethernet Controller E610 Backplane 57af Ethernet Controller E610 SFP 57b0 Ethernet Controller E610 10GBASE T 8086 0001 Ethernet Network Adapter E610-XT4 8086 0002 Ethernet Network Adapter E610-XT2 8086 0003 Ethernet Network Adapter E610-XT4 for OCP 3.0 8086 0004 Ethernet Network Adapter E610-XT2 for OCP 3.0 57b1 Ethernet Controller E610 2.5GBASE T 8086 0000 Ethernet Converged Network Adapter E610 8086 0002 Ethernet Network Adapter E610-IT4 8086 0003 Ethernet Network Adapter E610-IT4 for OCP 3.0 57b2 Ethernet Controller E610 SGMII 5845 QEMU NVM Express Controller 1af4 1100 QEMU Virtual Machine 5900 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 5901 Xeon E3-1200 v6/7th Gen Core Processor PCIe Controller (x16) 5902 HD Graphics 610 5904 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 1025 115f Aspire E5-575G 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 5905 Xeon E3-1200 v6/7th Gen Core Processor PCIe Controller (x8) 5906 HD Graphics 610 5909 Xeon E3-1200 v6/7th Gen Core Processor PCIe Controller (x4) 590b HD Graphics 610 590c Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 590f Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING 1462 7a68 B250 KRAIT GAMING (MS-7A68) 1462 7a72 H270 PC MATE 5910 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 5911 Xeon E3-1200 v6/7th Gen Core Processor Gaussian Mixture Model 5912 HD Graphics 630 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING 1462 7a72 H270 PC MATE 5914 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 17aa 225d ThinkPad T480 5916 HD Graphics 620 1025 1094 Aspire E5-575G 17aa 2248 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 5917 UHD Graphics 620 17aa 225d ThinkPad T480 (20L5) 17aa 225e ThinkPad T480 5918 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 591b HD Graphics 630 591c UHD Graphics 615 591d HD Graphics P630 591e HD Graphics 615 591f Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers 5921 HD Graphics 620 5923 HD Graphics 635 5926 Iris Plus Graphics 640 5927 Iris Plus Graphics 650 5a84 Apollo Lake [HD Graphics 505] 5a85 HD Graphics 500 5a88 Celeron N3350/Pentium N4200/Atom E3900 Series Imaging Unit 5a98 Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster 5a9a Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine 5aa2 Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Sensor Hub 5aa8 Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI 5aac Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #1 5aae Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #2 5ab0 Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #3 5ab2 Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #4 5ab4 Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #5 5ab6 Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #6 5ab8 Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #7 5aba Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #8 5abc Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #1 5abe Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #2 5ac0 Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #3 5ac2 Celeron N3350/Pentium N4200/Atom E3900 Series SPI Controller #1 5ac4 Celeron N3350/Pentium N4200/Atom E3900 Series SPI Controller #2 5ac6 Celeron N3350/Pentium N4200/Atom E3900 Series SPI Controller #3 5ac8 Celeron N3350/Pentium N4200/Atom E3900 Series PWM Pin Controller 5aca Celeron N3350/Pentium N4200/Atom E3900 Series SDXC/MMC Host Controller 5acc Celeron N3350/Pentium N4200/Atom E3900 Series eMMC Controller 5ad0 Celeron N3350/Pentium N4200/Atom E3900 Series SDIO Controller 5ad4 Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller 5ad6 Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port B #1 5ad7 Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port B #2 5ad8 Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #1 5ad9 Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #2 5ada Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #3 5adb Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #4 5ae3 Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller 5ae8 Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface 5aee Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #4 5af0 Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge 641d Lunar Lake-M Dynamic Tuning Technology 6420 Lunar Lake [Intel Graphics] 643e Lunar Lake NPU 645d Lunar Lake IPU 647d Lunar Lake-M Crashlog and Telemetry 64a0 Lunar Lake [Intel Arc Graphics 130V / 140V] 64b0 Lunar Lake [Intel Graphics] 65c0 5100 Chipset Memory Controller Hub 65e2 5100 Chipset PCI Express x4 Port 2 65e3 5100 Chipset PCI Express x4 Port 3 65e4 5100 Chipset PCI Express x4 Port 4 65e5 5100 Chipset PCI Express x4 Port 5 65e6 5100 Chipset PCI Express x4 Port 6 65e7 5100 Chipset PCI Express x4 Port 7 65f0 5100 Chipset FSB Registers 1028 020f PowerEdge R300 1028 0210 PowerEdge T300 65f1 5100 Chipset Reserved Registers 1028 0210 PowerEdge T300 65f3 5100 Chipset Reserved Registers 65f5 5100 Chipset DDR Channel 0 Registers 65f6 5100 Chipset DDR Channel 1 Registers 65f7 5100 Chipset PCI Express x8 Port 2-3 65f8 5100 Chipset PCI Express x8 Port 4-5 65f9 5100 Chipset PCI Express x8 Port 6-7 65fa 5100 Chipset PCI Express x16 Port 4-7 65ff 5100 Chipset DMA Engine 6f00 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DMI2 15d9 0832 X10SRL-F 6f01 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 0 6f02 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 1 6f03 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 1 6f04 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 2 6f05 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 2 6f06 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 2 6f07 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 2 6f08 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 3 6f09 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 3 6f0a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 3 6f0b Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 3 6f10 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f11 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f12 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f13 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f14 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f15 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f16 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f17 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f18 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f19 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f1a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f1b Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f1c Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Debug 6f1d Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R2PCIe Agent 6f1e Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Ubox 6f1f Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Ubox 6f20 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 0 15d9 0832 X10SRL-F 6f21 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 1 15d9 0832 X10SRL-F 6f22 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 2 15d9 0832 X10SRL-F 6f23 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 3 15d9 0832 X10SRL-F 6f24 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 4 15d9 0832 X10SRL-F 6f25 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 5 15d9 0832 X10SRL-F 6f26 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 6 15d9 0832 X10SRL-F 6f27 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Crystal Beach DMA Channel 7 15d9 0832 X10SRL-F 6f28 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Map/VTd_Misc/System Management 15d9 0832 X10SRL-F 6f29 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Hot Plug 15d9 0832 X10SRL-F 6f2a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO RAS/Control Status/Global Errors 15d9 0832 X10SRL-F 6f2c Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D I/O APIC 15d9 0832 X10SRL-F 6f30 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 0 6f32 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 0 6f33 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 1 6f34 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R2PCIe Agent 6f36 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 0/1 6f37 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 0/1 6f38 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 1 6f39 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IO Performance Monitoring 6f3a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 2 6f3e Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 2 6f3f Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 2 6f40 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 2 6f41 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 2 6f43 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 2 6f45 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 2 Debug 6f46 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 2 Debug 6f47 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 2 Debug 6f50 Xeon Processor D Family QuickData Technology Register DMA Channel 0 6f51 Xeon Processor D Family QuickData Technology Register DMA Channel 1 6f52 Xeon Processor D Family QuickData Technology Register DMA Channel 2 6f53 Xeon Processor D Family QuickData Technology Register DMA Channel 3 6f54 Xeon Processor D Family QuickAssist Technology 6f55 Xeon Processor D Family QuickAssist Technology Virtual Fuction 6f60 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 1 6f68 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Target Address/Thermal/RAS 6f6a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Channel Target Address Decoder 6f6b Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Channel Target Address Decoder 6f6c Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Channel Target Address Decoder 6f6d Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Channel Target Address Decoder 6f6e Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 2/3 Broadcast 6f6f Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Global Broadcast 6f70 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 0 Debug 6f71 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Target Address/Thermal/RAS 6f76 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link Debug 6f78 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 1 Debug 6f79 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Target Address/Thermal/RAS 6f7d Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Ubox 6f7e Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link Debug 6f80 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 0 6f81 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 0/1 6f83 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 0 6f85 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 0 Debug 6f86 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 0 Debug 6f87 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 0 Debug 6f88 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6f8a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6f90 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 1 6f93 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 1 6f95 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 1 Debug 6f96 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D QPI Link 1 Debug 6f98 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6f99 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6f9a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6f9c Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fa0 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 0 6fa8 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Target Address/Thermal/RAS 6faa Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder 6fab Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder 6fac Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder 6fad Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder 6fae Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Broadcast 6faf Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Global Broadcast 6fb0 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 0 Thermal Control 6fb1 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 1 Thermal Control 6fb2 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 0 Error 6fb3 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 1 Error 6fb4 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 2 Thermal Control 6fb5 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 3 Thermal Control 6fb6 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 2 Error 6fb7 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 3 Error 6fb8 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 2/3 Interface 6fb9 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 2/3 Interface 6fba Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 2/3 Interface 6fbb Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 2/3 Interface 6fbc Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface 6fbd Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface 6fbe Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface 6fbf Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface 6fc0 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc1 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc2 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc3 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc4 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc5 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc6 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc7 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc8 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fc9 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fca Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fcb Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fcc Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fcd Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fce Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fcf Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit 6fd0 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 0 Thermal Control 6fd1 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 1 Thermal Control 6fd2 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 0 Error 6fd3 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 1 Error 6fd4 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 2 Thermal Control 6fd5 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 3 Thermal Control 6fd6 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 2 Error 6fd7 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 1 - Channel 3 Error 6fe0 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe1 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe2 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe3 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe4 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe5 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe6 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe7 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe8 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fe9 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fea Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6feb Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fec Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fed Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fee Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6fef Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ff0 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ff1 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ff8 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ff9 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ffa Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ffb Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ffc Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ffd Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 6ffe Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent 7000 82371SB PIIX3 ISA [Natoma/Triton II] 01de fffd Propolis Virtual PIIX3 ISA Controller 1af4 1100 Qemu virtual machine 7010 82371SB PIIX3 IDE [Natoma/Triton II] 1af4 1100 Qemu virtual machine 7020 82371SB PIIX3 USB [Natoma/Triton II] 1af4 1100 QEMU Virtual Machine 7030 430VX - 82437VX TVX [Triton VX] 7050 Intercast Video Capture Card 7051 PB 642365-003 (Business Video Conferencing Card) 7100 430TX - 82439TX MTXC 7110 82371AB/EB/MB PIIX4 ISA 15ad 1976 Virtual Machine Chipset 7111 82371AB/EB/MB PIIX4 IDE 15ad 1976 Virtual Machine Chipset 7112 82371AB/EB/MB PIIX4 USB 15ad 1976 Virtual Machine Chipset 1af4 1100 QEMU Virtual Machine 7113 82371AB/EB/MB PIIX4 ACPI 01de fffc Propolis Virtual PIIX4 PM Controller 15ad 1976 Virtual Machine Chipset 1af4 1100 Qemu virtual machine 7120 82810 GMCH (Graphics Memory Controller Hub) 4c53 1040 CL7 mainboard 4c53 1060 PC7 mainboard 7121 82810 (CGC) Chipset Graphics Controller 4c53 1040 CL7 mainboard 4c53 1060 PC7 mainboard 8086 4341 Cayman (CA810) Mainboard 7122 82810 DC-100 (GMCH) Graphics Memory Controller Hub 7123 82810 DC-100 (CGC) Chipset Graphics Controller 7124 82810E DC-133 (GMCH) Graphics Memory Controller Hub 1028 00b4 OptiPlex GX110 7125 82810E DC-133 (CGC) Chipset Graphics Controller 1028 00b4 OptiPlex GX110 7126 82810 DC-133 System and Graphics Controller 7128 82810-M DC-100 System and Graphics Controller 712a 82810-M DC-133 System and Graphics Controller 7180 440LX/EX - 82443LX/EX Host bridge 7181 440LX/EX - 82443LX/EX AGP bridge 7190 440BX/ZX/DX - 82443BX/ZX/DX Host bridge 0e11 0500 Armada 1750 Laptop System Chipset 0e11 b110 Armada M700/E500 1028 008e PowerEdge 1300 mainboard 1043 803b CUBX-L/E Mainboard 1179 0001 Toshiba Tecra 8100 Laptop System Chipset 15ad 1976 Virtual Machine Chipset 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard 7191 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge 1028 008e PowerEdge 1300 mainboard 7192 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) 0e11 0460 Armada 1700 Laptop System Chipset 1179 0001 Satellite 4010 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 8086 7190 Dell PowerEdge 350 7194 82440MX Host Bridge 1033 0000 Versa Note Vxi 4c53 10a0 CA3/CR3 mainboard 7195 82440MX AC'97 Audio Controller 1033 80cc Versa Note VXi 10cf 1099 QSound_SigmaTel Stac97 PCI Audio 11d4 0040 SoundMAX Integrated Digital Audio 11d4 0048 SoundMAX Integrated Digital Audio 7196 82440MX AC'97 Modem Controller 7198 82440MX ISA Bridge 7199 82440MX EIDE Controller 719a 82440MX USB Universal Host Controller 719b 82440MX Power Management Controller 71a0 440GX - 82443GX Host bridge 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard 71a1 440GX - 82443GX AGP bridge 71a2 440GX - 82443GX Host bridge (AGP disabled) 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard 7360 XMM7360 LTE Advanced Modem 7560 XMM7560 LTE Advanced Pro Modem 7600 82372FB PIIX5 ISA 7601 82372FB PIIX5 IDE 7602 82372FB PIIX5 USB 7603 82372FB PIIX5 SMBus 7725 Arrow Lake-H [PCH Serial IO UART Host Controller] 7726 Arrow Lake-H PCH Serial IO UART Host Controller] 7727 Arrow Lake-H [LPC/eSPI Controller] 7730 Arrow Lake-H [LPC/eSPI Controller] 7746 Arrow Lake-H [LPC/eSPI Controller] 7750 Arrow Lake-H [Serial IO I2C Host Controller] 7751 Arrow Lake-H [Serial IO I2C Host Controller] 7752 Arrow Lake-H [PCH Serial IO UART Host Controller] 7778 Arrow Lake-H [Serial IO I2C Host Controller] 7779 Arrow Lake-H [Serial IO I2C Host Controller] 777a Arrow Lake-H [Serial IO I2C Host Controller] 777b Arrow Lake-H [Serial IO I2C Host Controller] 7800 82740 (i740) AGP Graphics Accelerator 003d 0008 Starfighter AGP 003d 000b Starfighter AGP 1092 0100 Stealth II G460 10b4 201a Lightspeed 740 10b4 202f Lightspeed 740 8086 0000 Terminator 2x/i 8086 0100 Intel740 Graphics Accelerator 7a04 Raptor Lake LPC/eSPI Controller 7a23 Raptor Lake-S PCH SMBus Controller 7a24 Raptor Lake SPI (flash) Controller 7a27 Raptor Lake-S PCH Shared SRAM 7a30 Raptor Lake PCI Express Root Port #9 7a38 Raptor Lake PCI Express Root Port #1 7a3a Raptor Point-S PCH - PCI Express Root Port 3 7a3b Raptor Lake PCI Express Root Port #4 7a40 Raptor Lake PCI Express Root Port #17 7a44 Raptor Lake PCI Express Root Port #21 7a48 Raptor Lake PCI Express Root Port #25 7a4c Raptor Lake Serial IO I2C Host Controller #0 7a4d Raptor Lake Serial IO I2C Host Controller #1 7a4e Raptor Lake Serial IO I2C Host Controller #2 7a50 Raptor Lake High Definition Audio Controller 7a60 Raptor Lake USB 3.2 Gen 2x2 (20 Gb/s) XHCI Host Controller 7a62 Raptor Lake SATA AHCI Controller 7a68 Raptor Lake CSME HECI #1 7a69 Raptor Lake CSME HECI #2 7a70 Raptor Lake-S PCH CNVi WiFi 8086 0090 WiFi 6E AX211 160MHz # Unlike other PCH components. The eSPI controller is specific to each chipset model 7a84 Z690 Chipset LPC/eSPI Controller 7a85 LPC Controller/eSPI Controller (H670) 7aa3 Alder Lake-S PCH SMBus Controller 7aa4 Alder Lake-S PCH SPI Controller 7aa7 Alder Lake-S PCH Shared SRAM 7aa8 Alder Lake-S PCH Serial IO UART #0 7aab Alder Lake-S PCH Serial IO SPI Controller #1 7ab0 Alder Lake-S PCH PCI Express Root Port #9 7ab4 Alder Lake-S PCH PCI Express Root Port #13 7ab8 Alder Lake-S PCH PCI Express Root Port #1 7ab9 Alder Lake-S PCH PCI Express Root Port #2 7aba Alder Lake-S PCH PCI Express Root Port #3 7abc Alder Lake-S PCH PCI Express Root Port #5 7abd Alder Lake-S PCH PCI Express Root Port #6 7abf Alder Lake-S PCH PCI Express Root Port #8 7ac4 Alder Lake-S PCH PCI Express Root Port #21 7ac8 Alder Lake-S PCH PCI Express Root Port #25 7acc Alder Lake-S PCH Serial IO I2C Controller #0 7acd Alder Lake-S PCH Serial IO I2C Controller #1 7ace Alder Lake-S PCH Serial IO I2C Controller #2 7acf Alder Lake-S PCH Serial IO I2C Controller #3 7ad0 Alder Lake-S HD Audio Controller 7ae0 Alder Lake-S PCH USB 3.2 Gen 2x2 XHCI Controller 7ae1 Alder Lake-S PCH USB 3.2 Gen 1x1 xDCI Controller 7ae2 Alder Lake-S PCH SATA Controller [AHCI Mode] 7ae8 Alder Lake-S PCH HECI Controller #1 7aeb Alder Lake-S Keyboard and Text (KT) Redirection 7af0 Alder Lake-S PCH CNVi WiFi 8086 0034 Wireless-AC 9560 8086 0070 Wi-Fi 6 AX201 160MHz 8086 0094 Wi-Fi 6 AX201 160MHz 7af8 Alder Lake-S Integrated Sensor Hub 7afc Alder Lake-S PCH Serial IO I2C Controller #4 7afd Alder Lake-S PCH Serial IO I2C Controller #5 7d01 Meteor Lake-H 6p+8e cores Host Bridge/DRAM Controller 7d03 Meteor Lake-P Dynamic Tuning Technology 7d0b Volume Management Device NVMe RAID Controller Intel Corporation 7d0d Meteor Lake-P Platform Monitoring Technology 7d19 Meteor Lake IPU 7d1d Meteor Lake NPU 7d40 Meteor Lake-M [Intel Graphics] 7d41 Arrow Lake-U [Intel Graphics] 7d45 Meteor Lake-P [Intel Graphics] 7d51 Arrow Lake-P [Intel Graphics] 7d55 Meteor Lake-P [Intel Arc Graphics] 7d60 Meteor Lake-M [Intel Graphics] 7d67 Arrow Lake-S [Intel Graphics] 7dd1 Arrow Lake-P [Intel Graphics] 7dd5 Meteor Lake-P [Intel Graphics] 7e01 Meteor Lake-P LPC/eSPI Controller 7e02 Meteor Lake-H eSPI Controller 7e22 Meteor Lake-P SMBus Controller 7e23 Meteor Lake-P SPI Controller 7e24 Meteor Lake-P Trace Hub 7e25 Meteor Lake-P Serial IO UART Controller #0 7e26 Meteor Lake-P Serial IO UART Controller #1 7e27 Meteor Lake-P Serial IO SPI Controller #0 7e28 Meteor Lake-P HD Audio Controller 7e30 Meteor Lake-P Serial IO SPI Controller #1 7e3f Meteor Lake-H/U PCIe Root Port #8 7e40 Meteor Lake PCH CNVi WiFi 8086 0094 Wi-Fi 6E AX211 160MHz # Refer from Intel Meteor Lake EDS (doc#640228) under its "Device IDs" section. 7e45 Meteor Lake-P Integrated Sensor Hub 7e46 Meteor Lake-P Serial IO SPI Controller #2 7e4c Meteor Lake-P Gaussian & Neural-Network Accelerator 7e4d Meteor Lake-H/U PCIe Root Port #9 7e50 Meteor Lake-P Serial IO I2C Controller #4 7e51 Meteor Lake-P Serial IO I2C Controller #5 7e52 Meteor Lake-P Serial IO UART Controller #2 7e70 Meteor Lake-P CSME HECI #1 7e73 Meteor Lake-P Keyboard and Text (KT) Redirection 7e78 Meteor Lake-P Serial IO I2C Controller #0 7e79 Meteor Lake-P Serial IO I2C Controller #1 7e7a Meteor Lake-P Serial IO I2C Controller #2 7e7b Meteor Lake-P Serial IO I2C Controller #3 7e7d Meteor Lake-P USB 3.2 Gen 2x1 xHCI Host Controller 7e7e Meteor Lake-P USB Device Controller 7e7f Meteor Lake-H/U Shared SRAM 7ec0 Meteor Lake-P Thunderbolt 4 USB Controller 7ec2 Meteor Lake-P Thunderbolt 4 NHI #0 7ec3 Meteor Lake-P Thunderbolt 4 NHI #1 7ec4 Meteor Lake-P Thunderbolt 4 PCI Express Root Port #0 7ec5 Meteor Lake-P Thunderbolt 4 PCI Express Root Port #1 7ec6 Meteor Lake-P Thunderbolt 4 PCI Express Root Port #2 7ec7 Meteor Lake-P Thunderbolt 4 PCI Express Root Port #3 7eca Meteor Lake-H/U PCIe Root Port #10 7ecc Meteor Lake-H PCIe Root Port #12 7f70 Arrow Lake-S PCH CNVi WiFi 8086 0094 WiFi 6E AX211 160MHz 8002 Trusted Execution Technology Registers 8003 Trusted Execution Technology Registers 8100 US15W/US15X SCH [Poulsbo] Host Bridge 8101 US15L/UL11L SCH [Poulsbo] Host Bridge 8108 US15W/US15X SCH [Poulsbo] Graphics Controller 8109 US15L/UL11L SCH [Poulsbo] Graphics Controller 8110 US15W/US15X/US15L/UL11L SCH [Poulsbo] PCI Express Port 1 8112 US15W/US15X/US15L/UL11L SCH [Poulsbo] PCI Express Port 2 8114 US15W/US15X/US15L/UL11L SCH [Poulsbo] USB UHCI Controller #1 8115 US15W/US15X/US15L/UL11L SCH [Poulsbo] USB UHCI Controller #2 8116 US15W/US15X/US15L/UL11L SCH [Poulsbo] USB UHCI Controller #3 8117 US15W/US15X/US15L/UL11L SCH [Poulsbo] USB EHCI Controller 8118 US15W/US15X/US15L/UL11L SCH [Poulsbo] USB Client Controller 8119 US15W/US15X/US15L/UL11L SCH [Poulsbo] LPC Bridge 811a US15W/US15X/US15L/UL11L SCH [Poulsbo] IDE Controller 811b US15W/US15X/US15L/UL11L SCH [Poulsbo] HD Audio Controller 811c US15W/US15X/US15L/UL11L SCH [Poulsbo] SDIO/MMC Controller #1 811d US15W/US15X/US15L/UL11L SCH [Poulsbo] SDIO/MMC Controller #2 811e US15W/US15X/US15L/UL11L SCH [Poulsbo] SDIO/MMC Controller #3 8180 Atom Processor E6xx PCI Express Port 3 8181 Atom Processor E6xx PCI Express Port 4 8182 Atom Processor E6xx Integrated Graphics Controller 8183 Atom Processor E6xx Configuration Unit 8184 Atom Processor E6xx PCI Express Port 1 8185 Atom Processor E6xx PCI Express Port 2 8186 Atom Processor E6xx LPC Bridge 84c4 450KX/GX [Orion] - 82454KX/GX PCI bridge 84c5 450KX/GX [Orion] - 82453KX/GX Memory controller 84ca 450NX - 82451NX Memory & I/O Controller 84cb 450NX - 82454NX/84460GX PCI Expander Bridge 84e0 460GX - 84460GX System Address Controller (SAC) 84e1 460GX - 84460GX System Data Controller (SDC) 84e2 460GX - 84460GX AGP Bridge (GXB function 2) 84e3 460GX - 84460GX Memory Address Controller (MAC) 84e4 460GX - 84460GX Memory Data Controller (MDC) 84e6 460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB) 84ea 460GX - 84460GX AGP Bridge (GXB function 1) 8500 IXP4XX Network Processor (IXP420/421/422/425/IXC1100) 1993 0ded mGuard-PCI AV#2 1993 0dee mGuard-PCI AV#1 1993 0def mGuard-PCI AV#0 8603 Ice Lake-LP Dynamic Tuning Processor Participant 87c0 UHD Graphics 617 87ca UHD Graphics 617 8800 Platform Controller Hub EG20T PCI Express Port 8801 Platform Controller Hub EG20T Packet Hub 8802 Platform Controller Hub EG20T Gigabit Ethernet Controller 8803 Platform Controller Hub EG20T General Purpose IO Controller 8804 Platform Controller Hub EG20T USB OHCI Controller #4 8805 Platform Controller Hub EG20T USB OHCI Controller #5 8806 Platform Controller Hub EG20T USB OHCI Controller #6 8807 Platform Controller Hub EG20T USB2 EHCI Controller #2 8808 Platform Controller Hub EG20T USB Client Controller 8809 Platform Controller Hub EG20T SDIO Controller #1 880a Platform Controller Hub EG20T SDIO Controller #2 880b Platform Controller Hub EG20T SATA AHCI Controller 880c Platform Controller Hub EG20T USB OHCI Controller #1 880d Platform Controller Hub EG20T USB OHCI Controller #2 880e Platform Controller Hub EG20T USB OHCI Controller #3 880f Platform Controller Hub EG20T USB2 EHCI Controller #1 8810 Platform Controller Hub EG20T DMA Controller #1 8811 Platform Controller Hub EG20T UART Controller 0 8812 Platform Controller Hub EG20T UART Controller 1 8813 Platform Controller Hub EG20T UART Controller 2 8814 Platform Controller Hub EG20T UART Controller 3 8815 Platform Controller Hub EG20T DMA Controller #2 8816 Platform Controller Hub EG20T Serial Peripheral Interface Bus 8817 Platform Controller Hub EG20T I2C Controller 8818 Platform Controller Hub EG20T Controller Area Network (CAN) Controller 8819 Platform Controller Hub EG20T IEEE 1588 Hardware Assist 8a03 Processor Power and Thermal Controller 8a0d Ice Lake Thunderbolt 3 NHI #1 8a11 GNA Scoring Accelerator Module 8a12 Ice Lake-LP Processor Host Bridge/DRAM Registers 8a13 Ice Lake Thunderbolt 3 USB Controller 8a14 Ice Lake Processor Host Bridge/DRAM Registers 8a17 Ice Lake Thunderbolt 3 NHI #0 8a19 Image Signal Processor 8a1d Ice Lake Thunderbolt 3 PCI Express Root Port #0 8a1f Ice Lake Thunderbolt 3 PCI Express Root Port #1 8a21 Ice Lake Thunderbolt 3 PCI Express Root Port #2 8a23 Ice Lake Thunderbolt 3 PCI Express Root Port #3 8a51 Iris Plus Graphics G7 (Ice Lake) 8a52 Iris Plus Graphics G7 8a53 Iris Plus Graphics G7 8a56 Iris Plus Graphics G1 (Ice Lake) 8a58 Ice Lake-Y GT1 [UHD Graphics G1] 8a5a Iris Plus Graphics G4 (Ice Lake) 8a5c Iris Plus Graphics G4 (Ice Lake) 8c00 8 Series/C220 Series Chipset Family 4-port SATA Controller 1 [IDE mode] 8c01 8 Series Chipset Family 4-port SATA Controller 1 [IDE mode] - Mobile 8c02 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] 1028 05d7 Alienware X51 R2 103c 1998 EliteDesk 800 G1 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 8c03 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] 103c 1909 ZBook 15 17aa 220e ThinkPad T440p 8c04 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode] 8c05 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode] 8c06 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode] 8c07 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode] 8c08 8 Series/C220 Series Chipset Family 2-port SATA Controller 2 [IDE mode] 8c09 8 Series/C220 Series Chipset Family 2-port SATA Controller 2 [IDE mode] 8c0e 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode] 8c0f 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode] 8c10 8 Series/C220 Series Chipset Family PCI Express Root Port #1 103c 1998 EliteDesk 800 G1 1043 8534 ASUS H81I-PLUS 17aa 220e ThinkPad T440p 17aa 3098 ThinkCentre E73 8c11 8 Series/C220 Series Chipset Family PCI Express Root Port #1 8c12 8 Series/C220 Series Chipset Family PCI Express Root Port #2 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 8c13 8 Series/C220 Series Chipset Family PCI Express Root Port #2 8c14 8 Series/C220 Series Chipset Family PCI Express Root Port #3 8c15 8 Series/C220 Series Chipset Family PCI Express Root Port #3 8c16 8 Series/C220 Series Chipset Family PCI Express Root Port #4 8c17 8 Series/C220 Series Chipset Family PCI Express Root Port #4 8c18 8 Series/C220 Series Chipset Family PCI Express Root Port #5 8c19 8 Series/C220 Series Chipset Family PCI Express Root Port #5 8c1a 8 Series/C220 Series Chipset Family PCI Express Root Port #6 17aa 3098 ThinkCentre E73 8c1b 8 Series/C220 Series Chipset Family PCI Express Root Port #6 8c1c 8 Series/C220 Series Chipset Family PCI Express Root Port #7 8c1d 8 Series/C220 Series Chipset Family PCI Express Root Port #7 8c1e 8 Series/C220 Series Chipset Family PCI Express Root Port #8 8c1f 8 Series/C220 Series Chipset Family PCI Express Root Port #8 8c20 8 Series/C220 Series Chipset High Definition Audio Controller 1028 05d7 Alienware X51 R2 103c 1909 ZBook 15 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 309f ThinkCentre M83 8c21 8 Series/C220 Series Chipset High Definition Audio Controller 8c22 8 Series/C220 Series Chipset Family SMBus Controller 1028 05d7 Alienware X51 R2 103c 1909 ZBook 15 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 8c23 8 Series Chipset Family CHAP Counters 8c24 8 Series Chipset Family Thermal Management Controller 8c26 8 Series/C220 Series Chipset Family USB EHCI #1 1028 05d7 Alienware X51 R2 103c 1909 ZBook 15 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 2210 ThinkPad T540p 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 2210 17aa ThinkPad T540p 8c2d 8 Series/C220 Series Chipset Family USB EHCI #2 1028 05d7 Alienware X51 R2 103c 1909 ZBook 15 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 8c31 8 Series/C220 Series Chipset Family USB xHCI 1028 05d7 Alienware X51 R2 103c 1909 ZBook 15 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 8c33 8 Series/C220 Series Chipset Family LAN Controller 8c34 8 Series/C220 Series Chipset Family NAND Controller 8c3a 8 Series/C220 Series Chipset Family MEI Controller #1 1028 05d7 Alienware X51 R2 103c 1909 ZBook 15 103c 1998 EliteDesk 800 G1 17aa 220e ThinkPad T440p 17aa 3098 ThinkCentre E73 17aa 309f ThinkCentre M83 8c3b 8 Series/C220 Series Chipset Family MEI Controller #2 8c3c 8 Series/C220 Series Chipset Family IDE-r Controller 8c3d 8 Series/C220 Series Chipset Family KT Controller 103c 1998 EliteDesk 800 G1 8c40 8 Series/C220 Series Chipset Family LPC Controller 8c41 8 Series Chipset Family Mobile Super SKU LPC Controller 8c42 8 Series/C220 Series Chipset Family Desktop Super SKU LPC Controller 8c43 8 Series/C220 Series Chipset Family LPC Controller 8c44 Z87 Express LPC Controller 8c45 8 Series/C220 Series Chipset Family LPC Controller 8c46 Z85 Express LPC Controller 8c47 8 Series/C220 Series Chipset Family LPC Controller 8c48 8 Series/C220 Series Chipset Family LPC Controller 8c49 HM86 Express LPC Controller 8c4a H87 Express LPC Controller 1028 05d7 Alienware X51 R2 8c4b HM87 Express LPC Controller 8c4c Q85 Express LPC Controller 17aa 309f ThinkCentre M83 8c4d 8 Series/C220 Series Chipset Family LPC Controller 8c4e Q87 Express LPC Controller 103c 1998 EliteDesk 800 G1 8c4f QM87 Express LPC Controller 103c 1909 ZBook 15 17aa 220e ThinkPad T440p 8c50 B85 Express LPC Controller 8c51 8 Series/C220 Series Chipset Family LPC Controller 8c52 C222 Series Chipset Family Server Essential SKU LPC Controller 8c53 8 Series/C220 Series Chipset Family LPC Controller 8c54 C224 Series Chipset Family Server Standard SKU LPC Controller 8c55 8 Series/C220 Series Chipset Family LPC Controller 8c56 C226 Series Chipset Family Server Advanced SKU LPC Controller 8c57 8 Series/C220 Series Chipset Family LPC Controller 8c58 8 Series/C220 Series Chipset Family WS SKU LPC Controller 8c59 8 Series/C220 Series Chipset Family LPC Controller 8c5a 8 Series/C220 Series Chipset Family LPC Controller 8c5b 8 Series/C220 Series Chipset Family LPC Controller 8c5c H81 Express LPC Controller 17aa 3098 ThinkCentre E73 8c5d 8 Series/C220 Series Chipset Family LPC Controller 8c5e 8 Series/C220 Series Chipset Family LPC Controller 8c5f 8 Series/C220 Series Chipset Family LPC Controller 8c80 9 Series Chipset Family SATA Controller [IDE Mode] 8c81 9 Series Chipset Family SATA Controller [IDE Mode] 8c82 9 Series Chipset Family SATA Controller [AHCI Mode] 8c83 9 Series Chipset Family SATA Controller [AHCI Mode] 8c84 9 Series Chipset Family SATA Controller [RAID Mode] 8c85 9 Series Chipset Family SATA Controller [RAID Mode] 8c86 9 Series Chipset Family SATA Controller [RAID Mode] 8c87 9 Series Chipset Family SATA Controller [RAID Mode] 8c88 9 Series Chipset Family SATA Controller [IDE Mode] 8c89 9 Series Chipset Family SATA Controller [IDE Mode] 8c8e 9 Series Chipset Family SATA Controller [RAID Mode] 8c8f 9 Series Chipset Family SATA Controller [RAID Mode] 8c90 9 Series Chipset Family PCI Express Root Port 1 8c92 9 Series Chipset Family PCI Express Root Port 2 8c94 9 Series Chipset Family PCI Express Root Port 3 8c96 9 Series Chipset Family PCI Express Root Port 4 8c98 9 Series Chipset Family PCI Express Root Port 5 8c9a 9 Series Chipset Family PCI Express Root Port 6 8c9c 9 Series Chipset Family PCI Express Root Port 7 8c9e 9 Series Chipset Family PCI Express Root Port 8 8ca0 9 Series Chipset Family HD Audio Controller 8ca2 9 Series Chipset Family SMBus Controller 8ca4 9 Series Chipset Family Thermal Controller 8ca6 9 Series Chipset Family USB EHCI Controller #1 8cad 9 Series Chipset Family USB EHCI Controller #2 8cb1 9 Series Chipset Family USB xHCI Controller 8cb3 9 Series Chipset Family LAN Controller 8cba 9 Series Chipset Family ME Interface #1 8cbb 9 Series Chipset Family ME Interface #2 8cbc 9 Series Chipset Family IDE-R Controller 8cbd 9 Series Chipset Family KT Controller 8cc1 9 Series Chipset Family LPC Controller 8cc2 9 Series Chipset Family LPC Controller 8cc3 HM97 Chipset LPC Controller 8cc4 Z97 Chipset LPC Controller 8cc5 QM97 Chipset LPC Controller 8cc6 H97 Chipset LPC Controller 8d00 C610/X99 series chipset 4-port SATA Controller [IDE mode] 8d02 C610/X99 series chipset 6-Port SATA Controller [AHCI mode] 15d9 0821 X10DRW-i 8d04 C610/X99 series chipset SATA Controller [RAID mode] 8d06 C610/X99 series chipset SATA Controller [RAID mode] 17aa 1031 ThinkServer RAID 110i 8d08 C610/X99 series chipset 2-port SATA Controller [IDE mode] 8d0e C610/X99 series chipset SATA Controller [RAID mode] 8d10 C610/X99 series chipset PCI Express Root Port #1 1028 0617 Precision T5810 8d11 C610/X99 series chipset PCI Express Root Port #1 8d12 C610/X99 series chipset PCI Express Root Port #2 1028 0617 Precision T5810 8d13 C610/X99 series chipset PCI Express Root Port #2 8d14 C610/X99 series chipset PCI Express Root Port #3 8d15 C610/X99 series chipset PCI Express Root Port #3 8d16 C610/X99 series chipset PCI Express Root Port #4 8d17 C610/X99 series chipset PCI Express Root Port #4 8d18 C610/X99 series chipset PCI Express Root Port #5 8d19 C610/X99 series chipset PCI Express Root Port #5 8d1a C610/X99 series chipset PCI Express Root Port #6 8d1b C610/X99 series chipset PCI Express Root Port #6 8d1c C610/X99 series chipset PCI Express Root Port #7 8d1d C610/X99 series chipset PCI Express Root Port #7 8d1e C610/X99 series chipset PCI Express Root Port #8 8d1f C610/X99 series chipset PCI Express Root Port #8 8d20 C610/X99 series chipset HD Audio Controller 1028 0617 Precision T5810 8d21 C610/X99 series chipset HD Audio Controller 8d22 C610/X99 series chipset SMBus Controller 1028 0617 Precision T5810 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d24 C610/X99 series chipset Thermal Subsystem 15d9 0821 X10DRW-i 8d26 C610/X99 series chipset USB Enhanced Host Controller #1 1028 0617 Precision T5810 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d2d C610/X99 series chipset USB Enhanced Host Controller #2 1028 0617 Precision T5810 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d31 C610/X99 series chipset USB xHCI Host Controller 1028 0617 Precision T5810 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d33 C610/X99 series chipset LAN Controller 8d34 C610/X99 series chipset NAND Controller 8d3a C610/X99 series chipset MEI Controller #1 1028 0617 Precision T5810 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d3b C610/X99 series chipset MEI Controller #2 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d3c C610/X99 series chipset IDE-r Controller 8d3d C610/X99 series chipset KT Controller 8d40 C610/X99 series chipset LPC Controller 8d41 C610/X99 series chipset LPC Controller 8d42 C610/X99 series chipset LPC Controller 8d43 C610/X99 series chipset LPC Controller 8d44 C610/X99 series chipset LPC Controller 1028 0617 Precision T5810 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d45 C610/X99 series chipset LPC Controller 8d46 C610/X99 series chipset LPC Controller 8d47 C610/X99 series chipset LPC Controller 8d48 C610/X99 series chipset LPC Controller 8d49 C610/X99 series chipset LPC Controller 8d4a C610/X99 series chipset LPC Controller 8d4b C610/X99 series chipset LPC Controller 8d4c C610/X99 series chipset LPC Controller 8d4d C610/X99 series chipset LPC Controller 8d4e C610/X99 series chipset LPC Controller 8d4f C610/X99 series chipset LPC Controller 8d60 C610/X99 series chipset sSATA Controller [IDE mode] 8d62 C610/X99 series chipset sSATA Controller [AHCI mode] 1028 0617 Precision T5810 15d9 0821 X10DRW-i 8d64 C610/X99 series chipset sSATA Controller [RAID mode] 8d66 C610/X99 series chipset sSATA Controller [RAID mode] 8d68 C610/X99 series chipset sSATA Controller [IDE mode] 8d6e C610/X99 series chipset sSATA Controller [RAID mode] 8d7c C610/X99 series chipset SPSR 1028 0617 Precision T5810 15d9 0821 X10DRW-i 15d9 0832 X10SRL-F 8d7d C610/X99 series chipset MS SMBus 0 8d7e C610/X99 series chipset MS SMBus 1 8d7f C610/X99 series chipset MS SMBus 2 9000 IXP2000 Family Network Processor 9001 IXP2400 Network Processor 9002 IXP2300 Network Processor 9004 IXP2800 Network Processor 9621 Integrated RAID 9622 Integrated RAID 9641 Integrated RAID 96a1 Integrated RAID 9840 Lakefield GT2 [UHD Graphics] 9841 Lakefield GT1.5 [UHD Graphics] 9a01 11th Gen Core Processor PCIe Controller #1 9a02 Tiger Lake-UP4 2 cores Host Bridge/DRAM Registers 9a03 TigerLake-LP Dynamic Tuning Processor Participant 9a04 Tiger Lake-UP3 2 cores Host Bridge/DRAM Registers 9a05 11th Gen Core Processor PCIe Controller #2 9a07 11th Gen Core Processor PCIe Controller #3 9a09 11th Gen Core Processor PCIe Controller 9a0b Volume Management Device NVMe RAID Controller 9a0d Tigerlake Telemetry Aggregator Driver 9a0f 11th Gen Core Processor PCIe Controller #0 9a11 GNA Scoring Accelerator module 9a12 Tiger Lake-UP4 4 cores Host Bridge/DRAM Registers 9a13 Tiger Lake-LP Thunderbolt 4 USB Controller 9a14 Tiger Lake-UP3/H35 4 cores Host Bridge/DRAM Registers 9a15 Tiger Lake xDCI Controller 9a17 Tiger Lake-H Thunderbolt 4 USB Controller 9a19 Tiger Lake IPU6 9a1b Tiger Lake-LP Thunderbolt 4 NHI #0 9a1d Tiger Lake-LP Thunderbolt 4 NHI #1 9a1f Tiger Lake-H Thunderbolt 4 NHI #0 9a21 Tiger Lake-H Thunderbolt 4 NHI #1 9a23 Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #0 9a25 Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #1 9a26 Tiger Lake-H 6 cores Host Bridge/DRAM Registers 9a27 Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #2 9a29 Tiger Lake-LP Thunderbolt 4 PCI Express Root Port #3 9a2b Tiger Lake-H Thunderbolt 4 PCI Express Root Port #0 9a2d Tiger Lake-H Thunderbolt 4 PCI Express Root Port #1 9a2f Tiger Lake-H Thunderbolt 4 PCI Express Root Port #2 9a31 Tiger Lake-H Thunderbolt 4 PCI Express Root Port #3 9a33 Tiger Lake Trace Hub 9a36 Tiger Lake-H 8 cores Host Bridge/DRAM Registers 9a39 Tiger Lake H IPU6-Slim 9a40 Tiger Lake-UP4 GT2 [Iris Xe Graphics] 9a49 TigerLake-LP GT2 [Iris Xe Graphics] 9a60 TigerLake-H GT1 [UHD Graphics] 9a68 TigerLake-H GT1 [UHD Graphics] 9a70 Tiger Lake-H GT1 [UHD Graphics] 9a78 Tiger Lake-LP GT2 [UHD Graphics G4] 9b21 Comet Lake-U GT2 [UHD Graphics 620] 9b33 Comet Lake-S 6c Host Bridge/DRAM Controller 9b41 CometLake-U GT2 [UHD Graphics] 1028 09bd Latitude 7310 1028 09be Latitude 7410 9b43 10th Gen Core Processor Host Bridge/DRAM Registers 9b44 10th Gen Core Processor Host Bridge/DRAM Registers 9b51 10th Gen Core Processor Host Bridge/DRAM Registers 9b53 Comet Lake-S 6c Host Bridge/DRAM Controller 9b54 10th Gen Core Processor Host Bridge/DRAM Registers 9b61 Comet Lake-U v1 4c Host Bridge/DRAM Controller 1028 09be Latitude 7410 9b63 10th Gen Core Processor Host Bridge/DRAM Registers 9b64 10th Gen Core Processor Host Bridge/DRAM Registers 9ba4 Comet Lake-H GT1 [UHD Graphics 610] 9ba8 CometLake-S GT1 [UHD Graphics 610] 9baa Comet Lake UHD Graphics 9bac Comet Lake UHD Graphics 9bc4 CometLake-H GT2 [UHD Graphics] 9bc5 CometLake-S GT2 [UHD Graphics 630] 9bc6 Comet Lake-S GT2 [UHD Graphics P630] 9bc8 CometLake-S GT2 [UHD Graphics 630] 9bca Comet Lake UHD Graphics 9bcc Comet Lake UHD Graphics 9be6 Comet Lake-S GT2 [UHD Graphics P630] 9bf6 Coffee Lake-S GT2 [UHD Graphics P630] 9c00 8 Series SATA Controller 1 [IDE mode] 9c01 8 Series SATA Controller 1 [IDE mode] 9c02 8 Series SATA Controller 1 [AHCI mode] 9c03 8 Series SATA Controller 1 [AHCI mode] 17aa 2214 ThinkPad X240 9c04 8 Series SATA Controller 1 [RAID mode] 9c05 8 Series SATA Controller 1 [RAID mode] 9c06 8 Series SATA Controller 1 [RAID mode] 9c07 8 Series SATA Controller 1 [RAID mode] 9c08 8 Series SATA Controller 2 [IDE mode] 9c09 8 Series SATA Controller 2 [IDE mode] 9c0a 8 Series SATA Controller [Reserved] 9c0b 8 Series SATA Controller [Reserved] 9c0c 8 Series SATA Controller [Reserved] 9c0d 8 Series SATA Controller [Reserved] 9c0e 8 Series SATA Controller 1 [RAID mode] 9c0f 8 Series SATA Controller 1 [RAID mode] 9c10 8 Series PCI Express Root Port 1 9c11 8 Series PCI Express Root Port 1 9c12 8 Series PCI Express Root Port 2 9c13 8 Series PCI Express Root Port 2 9c14 8 Series PCI Express Root Port 3 9c15 8 Series PCI Express Root Port 3 9c16 8 Series PCI Express Root Port 4 9c17 8 Series PCI Express Root Port 4 9c18 8 Series PCI Express Root Port 5 9c19 8 Series PCI Express Root Port 5 9c1a 8 Series PCI Express Root Port 6 9c1b 8 Series PCI Express Root Port 6 9c1c 8 Series PCI Express Root Port 7 9c1d 8 Series PCI Express Root Port 7 9c1e 8 Series PCI Express Root Port 8 9c1f 8 Series PCI Express Root Port 8 9c20 8 Series HD Audio Controller 17aa 2214 ThinkPad X240 9c21 8 Series HD Audio Controller 9c22 8 Series SMBus Controller 17aa 2214 ThinkPad X240 9c23 8 Series CHAP Counters 9c24 8 Series Thermal 9c26 8 Series USB EHCI #1 17aa 220c T440s 17aa 2214 ThinkPad X240 9c2d 8 Series USB EHCI #2 9c31 8 Series USB xHCI HC 17aa 2214 ThinkPad X240 8086 7270 Apple MacBookAir6,2 / MacBookPro11,1 9c35 8 Series SDIO Controller 9c36 8 Series Audio DSP Controller 9c3a 8 Series HECI #0 17aa 2214 ThinkPad X240 9c3b 8 Series HECI #1 9c3c 8 Series HECI IDER 9c3d 8 Series HECI KT 9c40 8 Series LPC Controller 9c41 8 Series LPC Controller 9c42 8 Series LPC Controller 9c43 8 Series LPC Controller 17aa 2214 ThinkPad X240 9c44 8 Series LPC Controller 9c45 8 Series LPC Controller 9c46 8 Series LPC Controller 9c47 8 Series LPC Controller 9c60 8 Series Low Power Sub-System DMA 9c61 8 Series I2C Controller #0 9c62 8 Series I2C Controller #1 9c63 8 Series UART Controller #0 9c64 8 Series UART Controller #1 9c65 8 Series SPI Controller #0 9c66 8 Series SPI Controller #1 9c83 Wildcat Point-LP SATA Controller [AHCI Mode] 9c85 Wildcat Point-LP SATA Controller [RAID Mode] 9c87 Wildcat Point-LP SATA Controller [RAID Mode] 9c8f Wildcat Point-LP SATA Controller [RAID Mode] 9c90 Wildcat Point-LP PCI Express Root Port #1 9c92 Wildcat Point-LP PCI Express Root Port #2 9c94 Wildcat Point-LP PCI Express Root Port #3 9c96 Wildcat Point-LP PCI Express Root Port #4 9c98 Wildcat Point-LP PCI Express Root Port #5 9c9a Wildcat Point-LP PCI Express Root Port #6 9ca0 Wildcat Point-LP High Definition Audio Controller 9ca2 Wildcat Point-LP SMBus Controller 9ca4 Wildcat Point-LP Thermal Management Controller 9ca6 Wildcat Point-LP USB EHCI Controller 9cb1 Wildcat Point-LP USB xHCI Controller 9cb5 Wildcat Point-LP Secure Digital IO Controller 9cb6 Wildcat Point-LP Smart Sound Technology Controller 9cba Wildcat Point-LP MEI Controller #1 9cbb Wildcat Point-LP MEI Controller #2 9cbc Wildcat Point-LP IDE-r Controller 9cbd Wildcat Point-LP KT Controller 9cc1 Wildcat Point-LP LPC Controller 9cc2 Wildcat Point-LP LPC Controller 9cc3 Wildcat Point-LP LPC Controller 9cc5 Wildcat Point-LP LPC Controller 9cc6 Wildcat Point-LP LPC Controller 9cc7 Wildcat Point-LP LPC Controller 9cc9 Wildcat Point-LP LPC Controller 9ce0 Wildcat Point-LP Serial IO DMA Controller 9ce1 Wildcat Point-LP Serial IO I2C Controller #0 9ce2 Wildcat Point-LP Serial IO I2C Controller #1 9ce3 Wildcat Point-LP Serial IO UART Controller #0 9ce4 Wildcat Point-LP Serial IO UART Controller #1 9ce5 Wildcat Point-LP Serial IO GSPI Controller #0 9ce6 Wildcat Point-LP Serial IO GSPI Controller #1 9d03 Sunrise Point-LP SATA Controller [AHCI mode] 1025 115f Acer Aspire E5-575G 1028 06dc Latitude E7470 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 225d ThinkPad T480 17aa 382a B51-80 Laptop 9d10 Sunrise Point-LP PCI Express Root Port #1 9d11 Sunrise Point-LP PCI Express Root Port #2 9d12 Sunrise Point-LP PCI Express Root Port #3 9d13 Sunrise Point-LP PCI Express Root Port #4 9d14 Sunrise Point-LP PCI Express Root Port #5 17aa 382a B51-80 Laptop 9d15 Sunrise Point-LP PCI Express Root Port #6 17aa 382a B51-80 Laptop 9d16 Sunrise Point-LP PCI Express Root Port #7 9d17 Sunrise Point-LP PCI Express Root Port #8 9d18 Sunrise Point-LP PCI Express Root Port #9 17aa 2247 ThinkPad T570 17aa 382a B51-80 Laptop 9d19 Sunrise Point-LP PCI Express Root Port #10 9d1a Sunrise Point-LP PCI Express Root Port #11 9d21 Sunrise Point-LP PMC 1025 115f Acer Aspire E5-575G 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 17aa 225d ThinkPad T480 17aa 382a B51-80 Laptop 9d23 Sunrise Point-LP SMBus 1025 115f Acer Aspire E5-575G 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 17aa 225d ThinkPad T480 17aa 382a B51-80 Laptop 9d27 Sunrise Point-LP Serial IO UART Controller #0 9d28 Sunrise Point-LP Serial IO UART Controller #1 9d29 Sunrise Point-LP Serial IO SPI Controller #0 9d2a Sunrise Point-LP Serial IO SPI Controller #1 9d2d Sunrise Point-LP Secure Digital IO Controller 9d2f Sunrise Point-LP USB 3.0 xHCI Controller 1025 115f Acer Aspire E5-575G 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 17aa 225d ThinkPad T480 17aa 382a B51-80 Laptop 9d31 Sunrise Point-LP Thermal subsystem 1025 115f Acer Aspire E5-575G 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 17aa 225d ThinkPad T480 17aa 382a B51-80 Laptop 9d32 CSI-2 Host Controller 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 9d35 Sunrise Point-LP Integrated Sensor Hub 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 9d3a Sunrise Point-LP CSME HECI #1 1025 115f Acer Aspire E5-575G 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 17aa 225d ThinkPad T480 17aa 382a B51-80 Laptop 9d3d Sunrise Point-LP Active Management Technology - SOL 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 9d3e iTouch Controller 9d43 Sunrise Point-LP LPC Controller 17aa 382a B51-80 Laptop 9d46 LPC/eSPI Controller 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 9d48 Sunrise Point-LP LPC Controller 1028 06dc Latitude E7470 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 9d4e Sunrise Point LPC/eSPI Controller 17aa 225d ThinkPad T480 9d50 Sunrise Point LPC Controller 9d56 Sunrise Point-LP LPC Controller 9d58 Sunrise Point-LP LPC Controller 1025 115f Acer Aspire E5-575G 17aa 2247 ThinkPad T570 17aa 224f ThinkPad X1 Carbon 5th Gen 9d60 Sunrise Point-LP Serial IO I2C Controller #0 1025 115f Acer Aspire E5-575G 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 225d ThinkPad T480 8086 9d60 100 Series PCH/Sunrise Point PCH I2C0 [Skylake/Kaby Lake LPSS I2C] 9d61 Sunrise Point-LP Serial IO I2C Controller #1 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 9d62 Sunrise Point-LP Serial IO I2C Controller #2 1028 06d6 Latitude 7275 tablet 1028 06e6 Latitude 11 5175 2-in-1 9d63 Sunrise Point-LP Serial IO I2C Controller #3 9d64 Sunrise Point-LP Serial IO I2C Controller #4 9d65 Sunrise Point-LP Serial IO I2C Controller #5 9d66 Sunrise Point-LP Serial IO UART Controller #2 9d70 Sunrise Point-LP HD Audio 1028 06d6 Latitude 7275 tablet 1028 06dc Latitude E7470 1028 06e6 Latitude 11 5175 2-in-1 1028 06f3 Latitude 3570 103c 8079 EliteBook 840 G3 17aa 2247 ThinkPad T570 17aa 382a B51-80 Laptop 9d71 Sunrise Point-LP HD Audio 1025 1094 Acer Aspire E5-575G 17aa 224f ThinkPad X1 Carbon 5th Gen 17aa 225d ThinkPad T480 9d84 Cannon Point-LP LPC Controller 1028 089e Inspiron 5482 9da3 Cannon Point-LP SMBus Controller 9da4 Cannon Point-LP SPI Controller 9da8 Cannon Point-LP Serial IO UART Controller #2 9daa Cannon Point-LP Serial IO SPI Controller 9dab Cannon Point-LP Serial IO SPI Controller 9db0 Cannon Point-LP PCI Express Root Port #9 9db1 Cannon Point-LP PCI Express Root Port #10 9db2 Cannon Point-LP PCI Express Root Port #1 9db4 Cannon Point-LP PCI Express Root Port #13 1028 089e Inspiron 5482 9db6 Cannon Point-LP PCI Express Root Port #15 9db8 Cannon Point-LP PCI Express Root Port #1 9dbc Cannon Point-LP PCI Express Root Port #5 9dbe Cannon Point-LP PCI Express Root Port #7 9dbf Cannon Point PCI Express Root Port #8 9dc4 Cannon Point-LP SD Host Controller 9dc5 Cannon Point-LP Serial IO I2C Host Controller 9dc8 Cannon Point-LP High Definition Audio Controller 1028 089e Inspiron 5482 9dd3 Cannon Point-LP SATA Controller [AHCI Mode] 9de0 Cannon Point-LP MEI Controller #1 9de3 Cannon Point-LP Keyboard and Text (KT) Redirection 9de8 Cannon Point-LP Serial IO I2C Controller #0 1028 089e Inspiron 5482 9de9 Cannon Point-LP Serial IO I2C Controller #1 1028 089e Inspiron 5482 9ded Cannon Point-LP USB 3.1 xHCI Controller 9def Cannon Point-LP Shared SRAM 9df0 Cannon Point-LP CNVi [Wireless-AC] 9df5 BayHubTech Integrated SD controller 9df9 Cannon Point-LP Thermal Controller 9dfc Cannon Point-LP Integrated Sensor Hub a000 Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge 1458 5000 GA-D525TUD 8086 4f4d DeskTop Board D510MO 8086 544b Desktop Board D425KT a001 Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller 1458 d000 GA-D525TUD 8086 4f4d DeskTop Board D510MO 8086 544b Desktop Board D425KT a002 Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller a003 Atom Processor D4xx/D5xx/N4xx/N5xx CHAPS counter a010 Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge 1043 83ac Eee PC 1015PX 144d c072 Notebook N150P a011 Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller 1043 83ac Eee PC 1015PX 144d c072 Notebook N150P a012 Atom Processor D4xx/D5xx/N4xx/N5xx Integrated Graphics Controller 1043 83ac Eee PC 1015PX 144d c072 Notebook N150P a013 Atom Processor D4xx/D5xx/N4xx/N5xx CHAPS counter a082 Tiger Lake-LP LPC Controller a0a3 Tiger Lake-LP SMBus Controller a0a4 Tiger Lake-LP SPI Controller a0a6 Tiger Lake-LP Trace Hub a0a8 Tiger Lake-LP Serial IO UART Controller #0 a0a9 Tiger Lake-LP Serial IO UART Controller #1 a0ab Tiger Lake-LP Serial IO SPI Controller #1 a0b0 Tiger Lake-LP PCI Express Root Port #9 a0b1 Tiger Lake-LP PCI Express Root Port #10 a0b3 Tiger Lake-LP PCI Express Root Port #12 a0bc Tiger Lake-LP PCI Express Root Port #5 a0bd Tigerlake PCH-LP PCI Express Root Port #6 a0be Tiger Lake-LP PCI Express Root Port #7 a0bf Tiger Lake-LP PCI Express Root Port #8 a0c5 Tiger Lake-LP Serial IO I2C Controller #4 a0c6 Tiger Lake-LP Serial IO I2C Controller #5 a0c8 Tiger Lake-LP Smart Sound Technology Audio Controller # SATA controller on Intel Tiger Lake based mobile platforms in AHCI mode. Could be found on Panasonic Let's Note CF-SV2. a0d3 Tiger Lake-LP SATA Controller a0e0 Tiger Lake-LP Management Engine Interface a0e3 Tiger Lake-LP Active Management Technology - SOL a0e8 Tiger Lake-LP Serial IO I2C Controller #0 a0e9 Tiger Lake-LP Serial IO I2C Controller #1 a0ea Tiger Lake-LP Serial IO I2C Controller #2 a0eb Tiger Lake-LP Serial IO I2C Controller #3 a0ed Tiger Lake-LP USB 3.2 Gen 2x1 xHCI Host Controller a0ef Tiger Lake-LP Shared SRAM a0f0 Wi-Fi 6 AX201 8086 0244 Wi-Fi 6 AX101NGW a0fc Tiger Lake-LP Integrated Sensor Hub a102 Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode] 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING a103 HM170/QM170 Chipset SATA Controller [AHCI Mode] 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv a105 Sunrise Point-H SATA Controller [RAID mode] a106 Q170/H170/Z170/CM236 Chipset SATA Controller [RAID Mode] a107 HM170/QM170 Chipset SATA Controller [RAID Mode] a10f Sunrise Point-H SATA Controller [RAID mode] a110 100 Series/C230 Series Chipset Family PCI Express Root Port #1 a111 100 Series/C230 Series Chipset Family PCI Express Root Port #2 a112 100 Series/C230 Series Chipset Family PCI Express Root Port #3 a113 100 Series/C230 Series Chipset Family PCI Express Root Port #4 a114 100 Series/C230 Series Chipset Family PCI Express Root Port #5 1043 8694 H110I-PLUS Motherboard a115 100 Series/C230 Series Chipset Family PCI Express Root Port #6 a116 100 Series/C230 Series Chipset Family PCI Express Root Port #7 a117 100 Series/C230 Series Chipset Family PCI Express Root Port #8 a118 100 Series/C230 Series Chipset Family PCI Express Root Port #9 1043 8694 H110I-PLUS Motherboard a119 100 Series/C230 Series Chipset Family PCI Express Root Port #10 1043 8694 H110I-PLUS Motherboard a11a 100 Series/C230 Series Chipset Family PCI Express Root Port #11 a11b 100 Series/C230 Series Chipset Family PCI Express Root Port #12 a11c 100 Series/C230 Series Chipset Family PCI Express Root Port #13 a11d 100 Series/C230 Series Chipset Family PCI Express Root Port #14 a11e 100 Series/C230 Series Chipset Family PCI Express Root Port #15 a11f 100 Series/C230 Series Chipset Family PCI Express Root Port #16 a120 100 Series/C230 Series Chipset Family P2SB a121 100 Series/C230 Series Chipset Family Power Management Controller 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING a122 Sunrise Point-H cAVS a123 100 Series/C230 Series Chipset Family SMBus 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING a124 100 Series/C230 Series Chipset Family SPI Controller a125 100 Series/C230 Series Chipset Family Gigabit Ethernet Controller a126 100 Series/C230 Series Chipset Family Trace Hub a127 100 Series/C230 Series Chipset Family Serial IO UART #0 a128 100 Series/C230 Series Chipset Family Serial IO UART #1 a129 100 Series/C230 Series Chipset Family Serial IO GSPI #0 a12a 100 Series/C230 Series Chipset Family Serial IO GSPI #1 a12f 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING a130 100 Series/C230 Series Chipset Family USB Device Controller (OTG) a131 100 Series/C230 Series Chipset Family Thermal Subsystem 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 1462 7994 H110M ECO/GAMING a133 Sunrise Point-H Northpeak ACPI Function a135 100 Series/C230 Series Chipset Family Integrated Sensor Hub a13a 100 Series/C230 Series Chipset Family MEI Controller #1 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING a13b 100 Series/C230 Series Chipset Family MEI Controller #2 a13c 100 Series/C230 Series Chipset Family IDE Redirection a13d 100 Series/C230 Series Chipset Family KT Redirection a13e 100 Series/C230 Series Chipset Family MEI Controller #3 a140 Sunrise Point-H LPC Controller a141 Sunrise Point-H LPC Controller a142 Sunrise Point-H LPC Controller a143 H110 Chipset LPC/eSPI Controller 1043 8694 H110I-PLUS Motherboard 1462 7994 H110M ECO/GAMING a144 H170 Chipset LPC/eSPI Controller a145 Z170 Chipset LPC/eSPI Controller a146 Q170 Chipset LPC/eSPI Controller a147 Q150 Chipset LPC/eSPI Controller a148 B150 Chipset LPC/eSPI Controller a149 C236 Chipset LPC/eSPI Controller a14a C232 Chipset LPC/eSPI Controller a14b Sunrise Point-H LPC Controller a14c Sunrise Point-H LPC Controller a14d QM170 Chipset LPC/eSPI Controller a14e HM170 Chipset LPC/eSPI Controller 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv a14f Sunrise Point-H LPC Controller a150 CM236 Chipset LPC/eSPI Controller a151 Sunrise Point-H LPC Controller a152 HM175 Chipset LPC/eSPI Controller a153 QM175 Chipset LPC/eSPI Controller a154 CM238 Chipset LPC/eSPI Controller a155 Sunrise Point-H LPC Controller a156 Sunrise Point-H LPC Controller a157 Sunrise Point-H LPC Controller a158 Sunrise Point-H LPC Controller a159 Sunrise Point-H LPC Controller a15a Sunrise Point-H LPC Controller a15b Sunrise Point-H LPC Controller a15c Sunrise Point-H LPC Controller a15d Sunrise Point-H LPC Controller a15e Sunrise Point-H LPC Controller a15f Sunrise Point-H LPC Controller a160 100 Series/C230 Series Chipset Family Serial IO I2C Controller #0 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv a161 100 Series/C230 Series Chipset Family Serial IO I2C Controller #1 1028 06e4 XPS 15 9550 a162 100 Series/C230 Series Chipset Family Serial IO I2C Controller #2 a163 100 Series/C230 Series Chipset Family Serial IO I2C Controller #3 a166 100 Series/C230 Series Chipset Family Serial IO UART Controller #2 a167 100 Series/C230 Series Chipset Family PCI Express Root Port #17 a168 100 Series/C230 Series Chipset Family PCI Express Root Port #18 a169 100 Series/C230 Series Chipset Family PCI Express Root Port #19 a16a 100 Series/C230 Series Chipset Family PCI Express Root Port #20 a170 100 Series/C230 Series Chipset Family HD Audio Controller 1028 06e4 XPS 15 9550 103c 825b OMEN-17-w001nv 1043 86c7 H110I-PLUS Motherboard 1462 f994 H110M ECO/GAMING a171 CM238 HD Audio Controller a182 C620 Series Chipset Family SATA Controller [AHCI mode] a186 C620 Series Chipset Family SATA Controller [RAID mode] a190 C620 Series Chipset Family PCI Express Root Port #1 a191 C620 Series Chipset Family PCI Express Root Port #2 a192 C620 Series Chipset Family PCI Express Root Port #3 a193 C620 Series Chipset Family PCI Express Root Port #4 a194 C620 Series Chipset Family PCI Express Root Port #5 a195 C620 Series Chipset Family PCI Express Root Port #6 a196 C620 Series Chipset Family PCI Express Root Port #7 a197 C620 Series Chipset Family PCI Express Root Port #8 a198 C620 Series Chipset Family PCI Express Root Port #9 a199 C620 Series Chipset Family PCI Express Root Port #10 a19a C620 Series Chipset Family PCI Express Root Port #11 a19b C620 Series Chipset Family PCI Express Root Port #12 a19c C620 Series Chipset Family PCI Express Root Port #13 a19d C620 Series Chipset Family PCI Express Root Port #14 a19e C620 Series Chipset Family PCI Express Root Port #15 a19f C620 Series Chipset Family PCI Express Root Port #16 a1a0 C620 Series Chipset Family P2SB a1a1 C620 Series Chipset Family Power Management Controller 15d9 095d X11SPM-TF a1a2 C620 Series Chipset Family cAVS a1a3 C620 Series Chipset Family SMBus 15d9 095d X11SPM-TF a1a4 C620 Series Chipset Family SPI Controller 15d9 095d X11SPM-TF a1a6 C620 Series Chipset Family Trace Hub a1af C620 Series Chipset Family USB 3.0 xHCI Controller 15d9 095d X11SPM-TF a1b1 C620 Series Chipset Family Thermal Subsystem 15d9 095d X11SPM-TF a1ba C620 Series Chipset Family MEI Controller #1 15d9 095d X11SPM-TF a1bb C620 Series Chipset Family MEI Controller #2 15d9 095d X11SPM-TF a1bc C620 Series Chipset Family IDE Redirection a1bd C620 Series Chipset Family KT Redirection a1be C620 Series Chipset Family MEI Controller #3 15d9 095d X11SPM-TF a1c1 C621 Series Chipset LPC/eSPI Controller a1c2 C622 Series Chipset LPC/eSPI Controller 15d9 095d X11SPM-TF a1c3 C624 Series Chipset LPC/eSPI Controller a1c4 C625 Series Chipset LPC/eSPI Controller a1c5 C626 Series Chipset LPC/eSPI Controller a1c6 C627 Series Chipset LPC/eSPI Controller a1c7 C628 Series Chipset LPC/eSPI Controller a1d2 C620 Series Chipset Family SSATA Controller [AHCI mode] a1d6 C620 Series Chipset Family SSATA Controller [RAID mode] a1e7 C620 Series Chipset Family PCI Express Root Port #17 a1e8 C620 Series Chipset Family PCI Express Root Port #18 a1e9 C620 Series Chipset Family PCI Express Root Port #19 a1ea C620 Series Chipset Family PCI Express Root Port #20 a1ec C620 Series Chipset Family MROM 0 a1ed C620 Series Chipset Family MROM 1 a1f0 C62x HD Audio Controller a1f8 Lewisburg IE: HECI #1 a1f9 Lewisburg IE: HECI #2 a1fa Lewisburg IE: IDE-r a1fb Lewisburg IE: KT Controller a1fc Lewisburg IE: HECI #3 a202 Lewisburg SATA Controller [AHCI mode] a206 Lewisburg SATA Controller [RAID mode] a210 Lewisburg PCI Express Root Port a211 Lewisburg PCI Express Root Port a212 Lewisburg PCI Express Root Port a213 Lewisburg PCI Express Root Port a214 Lewisburg PCI Express Root Port a215 Lewisburg PCI Express Root Port a216 Lewisburg PCI Express Root Port a217 Lewisburg PCI Express Root Port a218 Lewisburg PCI Express Root Port a219 Lewisburg PCI Express Root Port a21a Lewisburg PCI Express Root Port a21b Lewisburg PCI Express Root Port a21c Lewisburg PCI Express Root Port a21d Lewisburg PCI Express Root Port a21e Lewisburg PCI Express Root Port a21f Lewisburg PCI Express Root Port a221 Lewisburg Power Management Controller a223 Lewisburg SMBus a224 Lewisburg SPI Controller a242 Lewisburg LPC or eSPI Controller a243 Lewisburg LPC or eSPI Controller a252 Lewisburg SSATA Controller [AHCI mode] a256 Lewisburg SSATA Controller [RAID mode] a267 Lewisburg PCI Express Root Port a268 Lewisburg PCI Express Root Port a269 Lewisburg PCI Express Root Port a26a Lewisburg PCI Express Root Port a282 200 Series PCH SATA controller [AHCI mode] 1462 7a72 H270 PC MATE a286 200 Series PCH SATA controller [RAID mode] a290 200 Series PCH PCI Express Root Port #1 a291 200 Series PCH PCI Express Root Port #2 a292 200 Series PCH PCI Express Root Port #3 a293 200 Series PCH PCI Express Root Port #4 a294 200 Series PCH PCI Express Root Port #5 1462 7a72 H270 PC MATE a295 200 Series PCH PCI Express Root Port #6 a296 200 Series PCH PCI Express Root Port #7 1462 7a72 H270 PC MATE a297 200 Series PCH PCI Express Root Port #8 a298 200 Series PCH PCI Express Root Port #9 1462 7a72 H270 PC MATE a299 200 Series PCH PCI Express Root Port #10 a29a 200 Series PCH PCI Express Root Port #11 a29b 200 Series PCH PCI Express Root Port #12 a29c 200 Series PCH PCI Express Root Port #13 a29d 200 Series PCH PCI Express Root Port #14 a29e 200 Series PCH PCI Express Root Port #15 a29f 200 Series PCH PCI Express Root Port #16 a2a0 200 Series/Z370 Chipset Family P2SB a2a1 200 Series/Z370 Chipset Family Power Management Controller 1462 7a72 H270 PC MATE a2a3 200 Series/Z370 Chipset Family SMBus Controller 1462 7a72 H270 PC MATE a2a4 200 Series/Z370 Chipset Family SPI Controller a2a5 200 Series/Z370 Chipset Family Gigabit Ethernet Controller a2a6 200 Series/Z370 Chipset Family Trace Hub a2a7 200 Series/Z370 Chipset Family Serial IO UART Controller #0 a2a8 200 Series/Z370 Chipset Family Serial IO UART Controller #1 a2a9 200 Series/Z370 Chipset Family Serial IO SPI Controller #0 a2aa 200 Series/Z370 Chipset Family Serial IO SPI Controller #1 a2af 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller 1462 7a72 H270 PC MATE a2b1 200 Series PCH Thermal Subsystem 1462 7a72 H270 PC MATE a2ba 200 Series PCH CSME HECI #1 1462 7a72 H270 PC MATE a2bb 200 Series PCH CSME HECI #2 # AMT serial over LAN a2bd 200 Series Chipset Family KT Redirection a2c4 200 Series PCH LPC Controller (H270) 1462 7a72 H270 PC MATE a2c5 200 Series PCH LPC Controller (Z270) a2c6 200 Series PCH LPC Controller (Q270) a2c7 200 Series PCH LPC Controller (Q250) a2c8 200 Series PCH LPC Controller (B250) a2c9 Z370 Chipset LPC/eSPI Controller a2d2 X299 Chipset LPC/eSPI Controller a2d3 C422 Chipset LPC/eSPI Controller a2e0 200 Series PCH Serial IO I2C Controller #0 a2e1 200 Series PCH Serial IO I2C Controller #1 a2e2 200 Series PCH Serial IO I2C Controller #2 a2e3 200 Series PCH Serial IO I2C Controller #3 a2e6 200 Series PCH Serial IO UART Controller #2 a2e7 200 Series PCH PCI Express Root Port #17 a2e8 200 Series PCH PCI Express Root Port #18 a2e9 200 Series PCH PCI Express Root Port #19 a2ea 200 Series PCH PCI Express Root Port #20 a2eb 200 Series PCH PCI Express Root Port #21 a2ec 200 Series PCH PCI Express Root Port #22 a2ed 200 Series PCH PCI Express Root Port #23 a2ee 200 Series PCH PCI Express Root Port #24 a2f0 200 Series PCH HD Audio 1462 7a72 H270 PC MATE 1462 fa72 H270 PC MATE a303 H310 Chipset LPC/eSPI Controller a304 H370 Chipset LPC/eSPI Controller 1028 0869 Vostro 3470 a305 Z390 Chipset LPC/eSPI Controller a306 Q370 Chipset LPC/eSPI Controller a307 Q360 Chipset LPC/eSPI Controller a308 B360 Chipset LPC/eSPI Controller a309 C246 Chipset LPC/eSPI Controller a30a C242 Chipset LPC/eSPI Controller a30c QM370 Chipset LPC/eSPI Controller a30d HM370 Chipset LPC/eSPI Controller a30e CM246 Chipset LPC/eSPI Controller a313 Cannon Lake LPC/eSPI Controller a323 Cannon Lake PCH SMBus Controller 1028 0869 Vostro 3470 a324 Cannon Lake PCH SPI Controller 1028 0869 Vostro 3470 a328 Cannon Lake PCH Serial IO UART Host Controller a32b Cannon Lake PCH SPI Host Controller a32c Cannon Lake PCH PCI Express Root Port #21 a32d Cannon Lake PCH PCI Express Root Port #22 a32e Cannon Lake PCH PCI Express Root Port #23 a32f Cannon Lake PCH PCI Express Root Port #24 a330 Cannon Lake PCH PCI Express Root Port #9 a331 Cannon Lake PCH PCI Express Root Port #10 a332 Cannon Lake PCH PCI Express Root Port #11 a333 Cannon Lake PCH PCI Express Root Port #12 a334 Cannon Lake PCH PCI Express Root Port #13 a335 Cannon Lake PCH PCI Express Root Port #14 a336 Cannon Lake PCH PCI Express Root Port #15 a337 Cannon Lake PCH PCI Express Root Port #16 a338 Cannon Lake PCH PCI Express Root Port #1 a339 Cannon Lake PCH PCI Express Root Port #2 a33a Cannon Lake PCH PCI Express Root Port #3 a33b Cannon Lake PCH PCI Express Root Port #4 a33c Cannon Lake PCH PCI Express Root Port #5 a33d Cannon Lake PCH PCI Express Root Port #6 a33e Cannon Lake PCH PCI Express Root Port #7 a33f Cannon Lake PCH PCI Express Root Port #8 a340 Cannon Lake PCH PCI Express Root Port #17 a341 Cannon Lake PCH PCI Express Root Port #18 a342 Cannon Lake PCH PCI Express Root Port #19 a343 Cannon Lake PCH PCI Express Root Port #20 a348 Cannon Lake PCH cAVS 1028 0869 Vostro 3470 a352 Cannon Lake PCH SATA AHCI Controller 1028 0869 Vostro 3470 a353 Cannon Lake Mobile PCH SATA AHCI Controller a360 Cannon Lake PCH HECI Controller 1028 0869 Vostro 3470 a363 Cannon Lake PCH Active Management Technology - SOL a364 Cannon Lake PCH HECI Controller #2 a368 Cannon Lake PCH Serial IO I2C Controller #0 a369 Cannon Lake PCH Serial IO I2C Controller #1 a36a Cannon Lake PCH Serial IO I2C Controller #2 a36b Cannon Lake PCH Serial IO I2C Controller #3 a36d Cannon Lake PCH USB 3.1 xHCI Host Controller 1028 0869 Vostro 3470 a36f Cannon Lake PCH Shared SRAM a370 Cannon Lake PCH CNVi WiFi 1a56 1552 Killer(R) Wireless-AC 1550i Wireless Network Adapter (9560NGW) 8086 0034 Wireless-AC 9560 a379 Cannon Lake PCH Thermal Controller 1028 0869 Vostro 3470 a382 400 Series Chipset Family SATA AHCI Controller a394 Comet Lake PCI Express Root Port #05 a397 Comet Lake PCI Express Root Port #08 a398 Comet Lake PCI Express Root Port 9 a39a Comet Lake PCI Express Root Port 11 a3a1 Cannon Lake PCH Power Management Controller a3a3 Comet Lake PCH-V SMBus Host Controller a3af Comet Lake PCH-V USB Controller a3b1 Comet Lake PCH-V Thermal Subsystem a3ba Comet Lake PCH-V HECI Controller a3c8 B460 Chipset LPC/eSPI Controller a3da H410 Chipset LPC/eSPI Controller a3eb Comet Lake PCI Express Root Port #21 a3f0 Comet Lake PCH-V cAVS a620 6400/6402 Advanced Memory Buffer (AMB) a703 Raptor Lake-S Host Bridge/DRAM Controller a706 Raptor Lake-P 6p+8e cores Host Bridge/DRAM Controller 1028 0c06 Precision 3580 a707 Raptor Lake-P/U 4p+8e cores Host Bridge/DRAM Controller a708 Raptor Lake-P/U 2p+8e cores Host Bridge/DRAM Controller a70d Raptor Lake PCI Express 5.0 Graphics Port (PEG010) a71d Raptor Lake Dynamic Platform and Thermal Framework Processor Participant 1028 0c06 Precision 3580 a71e Raptor Lake-P Thunderbolt 4 USB Controller 1028 0c06 Precision 3580 a71f Raptor Lake-P Thunderbolt 4 PCI Express Root Port #1 a720 Raptor Lake-P [UHD Graphics] a721 Raptor Lake-P [UHD Graphics] a72f Raptor Lake-P Thunderbolt 4 PCI Express Root Port #2 a73e Raptor Lake-P Thunderbolt 4 NHI #0 1028 0c06 Precision 3580 a740 Raptor Lake-S 8+12 - Host Bridge/DRAM Controller a74d Raptor Lake PCIe 4.0 Graphics Port a74f GNA Scoring Accelerator module 1028 0c06 Precision 3580 a75d Raptor Lake IPU a76d Raptor Lake-P Thunderbolt 4 NHI #1 a76e Raptor Lake-P Thunderbolt 4 PCI Express Root Port #0 a77d Raptor Lake Crashlog and Telemetry 1028 0c06 Precision 3580 a77f Volume Management Device NVMe RAID Controller Intel Corporation a780 Raptor Lake-S GT1 [UHD Graphics 770] a781 Raptor Lake-S UHD Graphics a782 Raptor Lake-S UHD Graphics a783 Raptor Lake-S UHD Graphics a788 Raptor Lake-S UHD Graphics a789 Raptor Lake-S UHD Graphics a78a Raptor Lake-S UHD Graphics a78b Raptor Lake-S UHD Graphics a7a0 Raptor Lake-P [Iris Xe Graphics] 1028 0c06 Precision 3580 a7a1 Raptor Lake-P [Iris Xe Graphics] a7a8 Raptor Lake-P [UHD Graphics] a7a9 Raptor Lake-P [UHD Graphics] a7aa Raptor Lake-P [Intel Graphics] a7ab Raptor Lake-P [Intel Graphics] a7ac Raptor Lake-U [Intel Graphics] a7ad Raptor Lake-U [Intel Graphics] a806 Lunar Lake-M LPC/eSPI Controller a822 Lunar Lake-M SMbus Controller a823 Lunar Lake-M SPI Controller a824 Lunar Lake-M Trace Hub a825 Lunar Lake-M Serial IO UART Controller #0 a826 Lunar Lake-M Serial IO UART Controller #1 a827 Lunar Lake-M Serial IO SPI Controller #0 a828 Lunar Lake-M HD Audio Controller a830 Lunar Lake-M Serial IO SPI Controller #1 a831 Lunar Lake-M Thunderbolt 4 USB Controller a833 Lunar Lake-M Thunderbolt 4 NHI #0 a834 Lunar Lake-M Thunderbolt 4 NHI #1 a838 Lunar Lake-M PCI Express Root Port #1 a839 Lunar Lake-M PCI Express Root Port #2 a83a Lunar Lake-M PCI Express Root Port #3 a83b Lunar Lake-M PCI Express Root Port #4 a83c Lunar Lake-M PCI Express Root Port #5 a83d Lunar Lake-M PCI Express Root Port #6 a840 BE201 320MHz a845 Lunar Lake-M Integrated Sensor Hub a847 Lunar Lake-M UFS Controller a848 Lunar Lake-M Touch Host Controller #0 ID1 a849 Lunar Lake-M Touch Host Controller #0 ID2 a84a Lunar Lake-M Touch Host Controller #1 ID1 a84b Lunar Lake-M Touch Host Controller #1 ID2 a84e Lunar Lake-M Thunderbolt 4 PCI Express Root Port #0 a84f Lunar Lake-M Thunderbolt 4 PCI Express Root Port #1 a860 Lunar Lake-M Thunderbolt 4 PCI Express Root Port #2 a870 Lunar Lake-M CSME HECI #1 a873 Lunar Lake-M Keyboard and Text (KT) Redirection a878 Lunar Lake-M Serial IO I2C Controller #0 a879 Lunar Lake-M Serial IO I2C Controller #1 a87a Lunar Lake-M Serial IO I2C Controller #2 a87b Lunar Lake-M Serial IO I2C Controller #3 a87d Lunar Lake-M USB 3.2 Gen 2x1 xHCI Host Controller a87f Lunar Lake-M Shared SRAM abc0 Omni-Path Fabric Switch Silicon 100 Series ad0b Volume Management Device NVMe RAID Controller Intel Corporation ad1d Arrow Lake NPU b03e Panther Lake NPU b080 Panther Lake [Intel Graphics] b081 Panther Lake [Intel Graphics] b082 Panther Lake [Intel Graphics] b083 Panther Lake [Intel Graphics] b084 Panther Lake [Intel Graphics] b085 Panther Lake [Intel Graphics] b086 Panther Lake [Intel Graphics] b087 Panther Lake [Intel Graphics] b08f Panther Lake [Intel Graphics] b090 Panther Lake [Intel Graphics] b0a0 Panther Lake [Intel Graphics] b0b0 Panther Lake [Intel Graphics] b152 21152 PCI-to-PCI Bridge 8086 b152 21152 PCI-to-PCI Bridge # observed, and documented in Intel revision note; new mask of 1011:0026 b154 21154 PCI-to-PCI Bridge b555 21555 Non transparent PCI-to-PCI Bridge 12c7 5005 SS7HD PCI Adaptor Card 12c7 5006 SS7HDC cPCI Adaptor Card 12d9 000a PCI VoIP Gateway 4c53 1050 CT7 mainboard 4c53 1051 CE7 mainboard e4bf 1000 CC8-1-BLUES b640 Arrow Lake-H [Intel Graphics] d130 Core Processor DMI 15d9 0605 X8SIL d131 Core Processor DMI 1028 02da OptiPlex 980 15d9 060d C7SIM-Q Motherboard d132 Core Processor DMI 1028 040b Latitude E6510 d133 Core Processor DMI d134 Core Processor DMI d135 Core Processor DMI d136 Core Processor DMI d137 Core Processor DMI d138 Core Processor PCI Express Root Port 1 1028 02da OptiPlex 980 1028 040b Latitude E6510 15d9 060d C7SIM-Q Motherboard d139 Core Processor PCI Express Root Port 2 d13a Core Processor PCI Express Root Port 3 d13b Core Processor PCI Express Root Port 4 d150 Core Processor QPI Link d151 Core Processor QPI Routing and Protocol Registers d155 Core Processor System Management Registers d156 Core Processor Semaphore and Scratchpad Registers d157 Core Processor System Control and Status Registers d158 Core Processor Miscellaneous Registers e202 Battlemage G21 [Intel Graphics] e20b Battlemage G21 [Arc B580] e20c Battlemage G21 [Arc B570] e20d Battlemage G21 [Intel Graphics] e210 Battlemage G21 [Intel Graphics] e211 Battlemage G21 [Intel Graphics] e212 Battlemage G21 [Intel Graphics] e215 Battlemage G21 [Intel Graphics] e216 Battlemage G21 [Intel Graphics] e220 Battlemage G31 [Intel Graphics] e221 Battlemage G31 [Intel Graphics] e222 Battlemage G31 [Intel Graphics] e223 Battlemage G31 [Intel Graphics] f1a5 SSD 600P Series 8086 390a SSDPEKKW256G7 256GB f1a6 SSD DC P4101/Pro 7600p/760p/E 6100p Series 8086 390b SSD Pro 7600p/760p/E 6100p Series [NVM Express] f1a7 SSD 700p Series f1a8 SSD 660P Series f1aa SSD 670p Series [Keystone Harbor] faf0 SSD 665p Series [Neptune Harbor Refresh] fd80 Wildcat Lake [Intel Graphics] fd81 Wildcat Lake [Intel Graphics] 8088 Beijing Wangxun Technology Co., Ltd. 0100 WX1860AL-W Gigabit Ethernet Controller 0101 WX1860A2 Gigabit Ethernet Controller 4c52 2024 LRES2024PT Dual-port 1Gb Ethernet Network Adapter 4c52 2025 LRES2025PT Quad-port 1Gb Ethernet Network Adapter 4c52 2027 LRES2027PF Dual-port 1Gb Ethernet Server Adapter 4c52 3018 LRES3018PT Dual-port 1Gb Ethernet Server Adapter for OCP 8088 0201 Dual-Port Ethernet Network Adaptor SF200T 8088 0501 Dual-Port Ethernet Network Adapter SF200T-C101 8088 0901 Dual-Port Ethernet Network Adapter SF200T-B401 8088 0b01 Dual-Port Ethernet Network Adapter SF200T-B402 8088 4201 Dual-Port Ethernet Network Adaptor SF200T (WOL) 8088 8201 Dual-Port Ethernet Network Adaptor SF200T (NCSI) 8088 c201 Dual-Port Ethernet Network Adaptor SF200T (WOL, NCSI) 0102 WX1860A2S Gigabit Ethernet Controller 8088 0210 Dual-Port Ethernet Network Adaptor SF200T-S 0103 WX1860A4 Gigabit Ethernet Controller 1bd4 009e ENPW2100-T4 4c52 2028 LRES2028PF Quad-port 1Gb Ethernet Server Adapter 4c52 3019 LRES3019PT Quad-port 1Gb Ethernet Server Adapter for OCP 8088 0401 Qual-Port Ethernet Network Adaptor SF400T 8088 0440 Qual-Port Ethernet Network Adaptor SF400-OCP 8088 0a01 Quad-Port Ethernet Network Adapter SF400T-B401 8088 0c01 Quad-Port Ethernet Network Adapter SF400T-B402 8088 4401 Quad-Port Ethernet Network Adapter SF400T (WOL) 8088 8103 Quad-Port Ethernet Network Adaptor SF400T (NCSI) 8088 8401 Quad-Port Ethernet Network Adapter SF400T (NCSI) 8088 c103 Quad-Port Ethernet Network Adaptor SF400T (WOL, NCSI) 8088 c401 Quad-Port Ethernet Network Adapter SF400T (WOL, NCSI) 0104 WX1860A4S Gigabit Ethernet Controller 8088 0410 Qual-Port Ethernet Network Adaptor SF400T-S 0105 WX1860AL2 Gigabit Ethernet Controller 8088 0202 Dual-Port Ethernet Network Adaptor SF200HT 8088 4202 Dual-Port Ethernet Network Adaptor SF200HT (WOL) 8088 8202 Dual-Port Ethernet Network Adaptor SF200HT (NCSI) 8088 c202 Dual-Port Ethernet Network Adaptor SF200HT (WOL, NCSI) 0106 WX1860AL2S Gigabit Ethernet Controller 8088 0220 Dual-Port Ethernet Network Adaptor SF200HT-S 0107 WX1860AL4 Gigabit Ethernet Controller 8088 0402 Qual-Port Ethernet Network Adaptor SF400HT 8088 4402 Quad-Port Ethernet Network Adaptor SF400HT (WOL) 8088 8402 Quad-Port Ethernet Network Adaptor SF400HT (NCSI) 8088 c402 Quad-Port Ethernet Network Adaptor SF400HT (WOL, NCSI) 0108 WX1860AL4S Gigabit Ethernet Controller 8088 0420 Qual-Port Ethernet Network Adaptor SF400HT-S 0109 WX1860-LC Gigabit Ethernet Controller 010a WX1860A1 Gigabit Ethernet Controller 4c52 2026 LRES2026PF Single-port 1Gb Ethernet Network Adapter 4c52 2034 LRES2034PT Single-port 1Gb Ethernet Network Adapter 010b WX1860AL1 Gigabit Ethernet Controller 4c52 2215 LRES2215PT Single-port 1Gb Ethernet Network Adapter 8088 0102 Single-Port Ethernet Network Adaptor SF100HT 8088 4102 Single-Port Ethernet Network Adaptor SF100HT (WOL) 8088 8102 Single-Port Ethernet Network Adaptor SF100HT (NCSI) 8088 c102 Single-Port Ethernet Network Adaptor SF100HT (WOL, NCSI) 0111 WX1860A2 Ethernet Controller Virtual Function 0113 WX1860A4 Ethernet Controller Virtual Function 0115 WX1860AL2 Ethernet Controller Virtual Function 0117 WX1860AL4 Ethernet Controller Virtual Function 0119 WX1860-LC Gigabit Ethernet Controller Virtual Function 011a WX1860A1 Gigabit Ethernet Controller Virtual Function 011b WX1860AL1 Gigabit Ethernet Controller Virtual Function 1000 Ethernet Controller SP1000A Virtual Function for 10GbE SFP+ 1001 Ethernet Controller SP1000A for 10GbE SFP+ 1bd4 0084 Ethernet Controller SP1000A for 10GbE SFP+(lldp) 1bd4 0085 Ethernet Controller SP1000A for 10GBASE-T 4c52 1002 LRES1002PF Dual-port 10Gb Ethernet Server Adapter 4c52 1003 LRES1003PF Single-port 10Gb Ethernet Server Adapter 4c52 3001 LRES3001PF Dual-port 10Gb Ethernet Server Adapter for OCP 4c52 8005 LRES8005PF Dual-port 10Gb Ethernet Bypass Network Adapter 8088 0000 Ethernet Network Adaptor RP1000 for 10GbE SFP+ 8088 0300 Ethernet Network Adaptor RP1000-A03 for 10GbE SFP+ 8088 0400 Ethernet Network Adaptor RP1000-A04 for 10GbE SFP+ 2000 Ethernet Controller WX1820AL Virtual Function for 10GbE SFP+ 2001 Ethernet Controller WX1820AL for 10GbE SFP+ 8088 2000 Ethernet Network Adaptor RP2000 for 10GbE SFP+ 8088 2300 Ethernet Network Adaptor RP2000-A03 for 10GbE SFP+ 8088 2400 Ethernet Network Adaptor RP2000-A04 for 10GbE SFP+ 5025 Ethernet Controller WX5025 for 25GbE SFP28 8088 1000 Dual-Port Ethernet Network Adapter FF5025-DDATACXX 5125 Ethernet Controller WX5025AL for 25GbE SFP28 8088 3000 Dual-Port Ethernet Network Adapter FF5025-DDATAIXX 80ee InnoTek Systemberatung GmbH beef VirtualBox Graphics Adapter cafe VirtualBox Guest Service 8322 Sodick America Corp. 8384 SigmaTel 8401 TRENDware International Inc. 8510 Sietium Semiconductor Co., Ltd. 0201 GenBu02 Series GPU 8510 0001 GB2062-PUB-LPDDR 8510 0002 GB2062-PCIe-C0 8510 0003 GB2062-PCIe-C41 8510 0004 GB2062-PCIe-HIEILP4 8510 0005 CQ2040-PCIe-C21 8510 0007 GB2062-PCIe-C40 8510 0008 CQ2040-MXM-M60 8510 0009 GB2062-PCIe-C20 8510 000b GB2062-PCIe-HIEILP42 8510 000c CQ2040-PUB 8510 0201 GB2062-PUB-DDR # nee ScaleMP 8686 SAP 1010 vSMP Foundation controller [vSMP CTL] 1011 vSMP Foundation MEX/FLX controller [vSMP CTL] 8800 Trigem Computer Inc. 2008 Video assistant component 8820 Stryker Corporation 2724 Mako Front Side Motor Controller [cPCI] # Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd. 8848 MUCSE 1000 Ethernet Controller N10 Series for 10GbE or 40GbE (Dual-port) 4c52 3032 LRES3032PF Dual-port 10Gb Ethernet Server Adapter for OCP 8848 8410 Ethernet Network Adapter N10G-X2-DC for 10GbE SFP+ 2-port 1001 Ethernet Controller N400 Series for 1GbE (Dual-port) 1003 Ethernet Controller N400 Series for 10GbE (Single-port) 4c52 1050 LRES1050PF Single-port 10Gb Ethernet Network Adapter 1020 Ethernet Controller N10 Series for 10GbE (Quad-port) 4c52 1030 LRES1030PF Quad-port 10Gb Ethernet Server Adapter 4c52 1031 LRES1031PF Dual-port 10Gb Ethernet Server Adapter 4c52 3031 LRES3031PF Quad-port 10Gb Ethernet Server Adapter for OCP 8848 8451 Ethernet Network Adapter N10G-X4-QC for 10GbE SFP+ 4-port 1021 Ethernet Controller N400 Series for 1GbE (Quad-port) 4c52 1032 LRES1032PF Quad-port 1Gb Ethernet Network Adapter 4c52 1039 LRES1039PT Quad-port 1Gb Ethernet Network Adapter 1060 Ethernet Controller N10 Series for 1GbE or 10GbE (8-port) 1080 Ethernet Controller N10 Series Virtual Function 1081 Ethernet Controller N400 Series Virtual Function 1083 Ethernet Controller N400 Series Virtual Function 8308 Ethernet Controller N500 Series for 1GbE (Quad-port, Copper RJ45) # NIC-ETH3M0T-3S-4P Quad-Port RJ45 Adapter for OCP 3.0 193d 1088 NIC-ETH3M0T-3S-4P 4c52 1048 LRES1048PT Quad-port 1Gb Ethernet Network Adapter 4c52 3044 LRES3044PT Quad-port 1Gb Ethernet Server Adapter for OCP 8309 Ethernet Controller N500 Series Virtual Function 8318 Ethernet Controller N500 Series for 1GbE (Dual-port, Copper RJ45) 4c52 1049 LRES1049PT Dual-port 1Gb Ethernet Network Adapter 4c52 3043 LRES3043PT Dual-port 1Gb Ethernet Server Adapter for OCP 8866 T-Square Design Inc. 8888 Silicon Magic 8504 AVMatrix VC42 4-port HDMI Capture 8581 AVMatrix VC12 4K HDMI Capture 8912 TRX # 8c4a is not Winbond but there is a board misprogrammed 8c4a Winbond 1980 W89C940 misprogrammed [ne2k] 8e0e Computone Corporation 8e2e KTI 3000 ET32P2 9000 C*Core Technology Co., Ltd. 9004 Adaptec 0078 AHA-2940U_CN 1078 AIC-7810 1160 AIC-1160 [Family Fibre Channel Adapter] 2178 AIC-7821 3860 AHA-2930CU 3b78 AHA-4844W/4844UW 5075 AIC-755x 5078 AIC-7850T/7856T [AVA-2902/4/6 / AHA-2910] 9004 7850 AIC-7850T/7856T [AVA-290x / AHA-2910] 5175 AIC-755x 5178 AIC-7851 5275 AIC-755x 5278 AIC-7852 5375 AIC-755x 5378 AIC-7850 5475 AIC-755x 5478 AIC-7850 5575 AVA-2930 5578 AIC-7855 5647 ANA-7711 TCP Offload Engine 9004 7710 ANA-7711F TCP Offload Engine - Optical 9004 7711 ANA-7711LP TCP Offload Engine - Copper 5675 AIC-755x 5678 AIC-7856 5775 AIC-755x 5778 AIC-7850 5800 AIC-5800 5900 ANA-5910/5930/5940 ATM155 & 25 LAN Adapter 5905 ANA-5910A/5930A/5940A ATM Adapter 6038 AIC-3860 6075 AIC-1480 / APA-1480 9004 7560 AIC-1480 / APA-1480 Cardbus 6078 AIC-7860 6178 AIC-7861 9004 7861 AHA-2940AU Single 6278 AIC-7860 6378 AIC-7860 6478 AIC-786x 6578 AIC-786x 6678 AIC-786x 6778 AIC-786x 6915 ANA620xx/ANA69011A 9004 0008 ANA69011A/TX 10/100 9004 0009 ANA69011A/TX 10/100 9004 0010 ANA62022 2-port 10/100 9004 0018 ANA62044 4-port 10/100 9004 0019 ANA62044 4-port 10/100 9004 0020 ANA62022 2-port 10/100 9004 0028 ANA69011A/TX 10/100 9004 8008 ANA69011A/TX 64 bit 10/100 9004 8009 ANA69011A/TX 64 bit 10/100 9004 8010 ANA62022 2-port 64 bit 10/100 9004 8018 ANA62044 4-port 64 bit 10/100 9004 8019 ANA62044 4-port 64 bit 10/100 9004 8020 ANA62022 2-port 64 bit 10/100 9004 8028 ANA69011A/TX 64 bit 10/100 7078 AHA-294x / AIC-7870 7178 AIC-7870P/7871 [AHA-2940/W/S76] 7278 AHA-3940/3940W / AIC-7872 7378 AHA-3985 / AIC-7873 7478 AHA-2944/2944W / AIC-7874 7578 AHA-3944/3944W / AIC-7875 7678 AHA-4944W/UW / AIC-7876 7710 ANA-7711F Network Accelerator Card (NAC) - Optical 7711 ANA-7711C Network Accelerator Card (NAC) - Copper 7778 AIC-787x 7810 AIC-7810 7815 AIC-7815 RAID+Memory Controller IC 9004 7815 ARO-1130U2 RAID Controller 9004 7840 AIC-7815 RAID+Memory Controller IC 7850 AIC-7850 7855 AHA-2930 7860 AIC-7860 7870 AIC-7870 7871 AHA-2940 7872 AHA-3940 7873 AHA-3980 7874 AHA-2944 7880 AIC-7880P 7890 AIC-7890 7891 AIC-789x 7892 AIC-789x 7893 AIC-789x 7894 AIC-789x 7895 AHA-2940U/UW / AHA-39xx / AIC-7895 9004 7890 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B 9004 7891 AHA-2940U/2940UW Dual 9004 7892 AHA-3940AU/AUW/AUWD/UWD 9004 7894 AHA-3944AUWD 9004 7895 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B 9004 7896 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B 9004 7897 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B 7896 AIC-789x 7897 AIC-789x 8078 AIC-7880U 9004 7880 AIC-7880P Ultra/Ultra Wide SCSI Chipset 8178 AIC-7870P/7881U [AHA-2940U/UW/D/S76] 9004 7881 AHA-2940UW SCSI Host Adapter 8278 AHA-3940U/UW/UWD / AIC-7882U 8378 AHA-3940U/UW / AIC-7883U 8478 AHA-2944UW / AIC-7884U 8578 AHA-3944U/UWD / AIC-7885 8678 AHA-4944UW / AIC-7886 8778 AHA-2940UW Pro / AIC-788x 9004 7887 2940UW Pro Ultra-Wide SCSI Controller 8878 AHA-2930UW / AIC-7888 9004 7888 AHA-2930UW SCSI Controller 8b78 ABA-1030 ec78 AHA-4944W/UW # Acquired by Microchip Technology 9005 Adaptec 0010 AHA-2940U2/U2W 9005 2180 AHA-2940U2 SCSI Controller 9005 8100 AHA-2940U2B SCSI Controller 9005 a100 AHA-2940U2B SCSI Controller 9005 a180 AIC-3860Q [AHA-2940U2W/GE] SCSI Controller 9005 e100 AHA-2950U2B SCSI Controller 0011 AHA-2930U2 0013 78902 9005 0003 AAA-131U2 Array1000 1 Channel RAID Controller 9005 000f AIC7890_ARO 001f AHA-2940U2/U2W / 7890/7891 9005 000f 2940U2W SCSI Controller 9005 a180 2940U2W SCSI Controller 0020 AIC-7890 002f AIC-7890 0030 AIC-7890 003f AIC-7890 0050 AHA-3940U2x/395U2x 9005 f500 AHA-3950U2B 9005 ffff AHA-3950U2B 0051 AHA-3950U2D 9005 b500 AHA-3950U2D 0053 AIC-7896 SCSI Controller 9005 ffff AIC-7896 SCSI Controller mainboard implementation 005f AIC-7896U2/7897U2 0080 AIC-7892A U160/m 0e11 e2a0 Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter 9005 6220 AHA-29160C 9005 62a0 29160N Ultra160 SCSI Controller 9005 e220 29160LP Low Profile Ultra160 SCSI Controller 9005 e2a0 29160 Ultra160 SCSI Controller 0081 AIC-7892B U160/m 9005 62a1 19160 Ultra160 SCSI Controller 0083 AIC-7892D U160/m 008f AIC-7892P U160/m 1179 0001 Magnia Z310 15d9 9005 Onboard SCSI Host Adapter 0092 AVC-2010 [VideoH!] 0093 AVC-2410 [VideoH!] 00c0 AHA-3960D / AIC-7899A U160/m 0e11 f620 Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter 9005 f620 AHA-3960D U160/m 00c1 AIC-7899B U160/m 00c3 AIC-7899D U160/m 00c5 RAID subsystem HBA 1028 00c5 PowerEdge 2400,2500,2550,4400 00cf AIC-7899P U160/m 1028 00ce PowerEdge 1400 1028 00d1 PowerEdge 2550 1028 00d9 PowerEdge 2500 10f1 2462 Thunder K7 S2462 15d9 9005 Onboard SCSI Host Adapter 8086 3411 SDS2 Mainboard 0241 Serial ATA II RAID 1420SA 0242 Serial ATA II RAID 1220SA 0243 Serial ATA II RAID 1430SA 0244 eSATA II RAID 1225SA 0250 ServeRAID Controller 1014 0279 ServeRAID 6M 1014 028c ServeRAID 6i/6i+ 1014 028e ServeRAID 7k 0279 ServeRAID 6M 0283 AAC-RAID 9005 0283 Catapult 0284 AAC-RAID 9005 0284 Tomcat 0285 AAC-RAID 0e11 0295 SATA 6Ch (Bearcat) 1014 02f2 ServeRAID 8i 1028 0287 PowerEdge Expandable RAID Controller 320/DC 1028 0291 CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) 103c 3227 AAR-2610SA 108e 0286 Sun StorageTek SAS RAID HBA, Internal 108e 0287 STK RAID EXT 108e 7aac STK RAID REM 108e 7aae STK RAID EX 15d9 02b5 SMC AOC-USAS-S4i 15d9 02b6 SMC AOC-USAS-S8i 15d9 02c9 SMC AOC-USAS-S4iR 15d9 02ca SMC AOC-USAS-S8iR 15d9 02d2 SMC AOC-USAS-S8i-LP 15d9 02d3 SMC AOC-USAS-S8iR-LP 17aa 0286 Legend S220 (Legend Crusader) 17aa 0287 Legend S230 (Legend Vulcan) 9005 0285 2200S (Vulcan) 9005 0286 2120S (Crusader) 9005 0287 2200S (Vulcan-2m) 9005 0288 3230S (Harrier) 9005 0289 3240S (Tornado) # Some early versions reported 2020S 9005 028a ASR-2020ZCR # Some early versions reported 2025S 9005 028b ASR-2025ZCR (Terminator) 9005 028e ASR-2020SA (Skyhawk) 9005 028f ASR-2025SA 9005 0290 AAR-2410SA PCI SATA 4ch (Jaguar II) 9005 0292 AAR-2810SA PCI SATA 8ch (Corsair-8) 9005 0293 AAR-21610SA PCI SATA 16ch (Corsair-16) 9005 0294 ESD SO-DIMM PCI-X SATA ZCR (Prowler) 9005 0296 ASR-2240S 9005 0297 ASR-4005SAS 9005 0298 ASR-4000 9005 0299 ASR-4800SAS 9005 029a 4805SAS 9005 02a4 ICP ICP9085LI 9005 02a5 ICP ICP5085BR 9005 02b5 ASR5800 9005 02b6 ASR5805 9005 02b7 ASR5808 9005 02b8 ICP5445SL 9005 02b9 ICP5085SL 9005 02ba ICP5805SL 9005 02bb 3405 9005 02bc 3805 9005 02bd 31205 9005 02be 31605 9005 02bf ICP ICP5045BL 9005 02c0 ICP ICP5085BL 9005 02c1 ICP ICP5125BR 9005 02c2 ICP ICP5165BR 9005 02c3 51205 9005 02c4 51605 9005 02c5 ICP ICP5125SL 9005 02c6 ICP ICP5165SL 9005 02c7 3085 9005 02c8 ICP5805BL 9005 02ce 51245 9005 02cf 51645 9005 02d0 52445 9005 02d1 5405 9005 02d4 ASR-2045 9005 02d5 ASR-2405 9005 02d6 ASR-2445 9005 02d7 ASR-2805 9005 02d8 5405G 9005 02d9 5445G 9005 02da 5805G 9005 02db 5085G 9005 02dc 51245G 9005 02dd 51645G 9005 02de 52445G 9005 02df ASR-2045G 9005 02e0 ASR-2405G 9005 02e1 ASR-2445G 9005 02e2 ASR-2805G 0286 AAC-RAID (Rocket) 1014 034d 8s 1014 9540 ServeRAID 8k/8k-l4 1014 9580 ServeRAID 8k/8k-l8 9005 028c ASR-2230S + ASR-2230SLP PCI-X (Lancer) 9005 028d ASR-2130S 9005 029b ASR-2820SA 9005 029c ASR-2620SA 9005 029d ASR-2420SA 9005 029e ICP ICP9024R0 9005 029f ICP ICP9014R0 9005 02a0 ICP ICP9047MA 9005 02a1 ICP ICP9087MA 9005 02a2 3800 9005 02a3 ICP ICP5445AU 9005 02a4 ICP ICP9085LI 9005 02a5 ICP ICP5085BR 9005 02a6 ICP9067MA 9005 02a7 3805 9005 02a8 3400 9005 02a9 ICP ICP5085AU 9005 02aa ICP ICP5045AU 9005 02ac 1800 9005 02b3 2400 9005 02b4 ICP ICP5045AL 9005 0800 Callisto 028b Series 6 - 6G SAS/PCIe 2 9005 0200 Series 6 Entry Level - ASR-6405E - 4 internal 6G SAS ports 9005 0201 Series 6 Entry Level - ASR-6805E - 8 internal 6G SAS ports 9005 0300 Series 6 - ASR-6405 - 4 internal 6G SAS ports 9005 0301 Series 6 - ASR-6805 - 8 internal 6G SAS ports 9005 0302 Series 6 - ASR-6445 - 4 internal and 4 external 6G SAS ports 9005 0310 Series 6 Connectors on Top - ASR-6405T - 4 internal 6G SAS ports 9005 0311 Series 6 Connectors on Top - ASR-6805T - 8 internal 6G SAS 9005 0400 Series 6 - ASR-61205 - 12 internal 6G SAS ports 9005 0401 Series 6 - ASR-61605 - 16 internal 6G SAS ports 9005 0403 Series 6 - ASR-62405 - 24 internal 6G SAS ports 028c Series 7 6G SAS/PCIe 3 9005 0500 Series 7 - ASR-7805 - 8 internal 6G SAS Port/PCIe 3.0 9005 0501 Series 7 - ASR-71605 - 16 internal 6G SAS Port/PCIe 3.0 9005 0502 Series 7 - ASR-71685 - 16 internal 8 external 6G SAS Port/PCIe 3.0 9005 0503 Series 7 - ASR-72405 - 24 internal 0 external 6G SAS Port/PCIe 3.0 9005 0504 Series 7 - ASR-7885 - 8 internal 8 external 6G SAS Port/PCIe 3.0 9005 0505 Series 7 Entry Level - ASR-71685E - 16 internal 8 external 6G SAS Port/PCIe 3.0 9005 0506 Series 7 Entry Level - ASR-72405E - 24 internal 0 external 6G SAS Port/PCIe 3.0 028d Series 8 12G SAS/PCIe 3 9005 0550 Series 8 - ASR-82405 - 24 internal 0 external 12G SAS Port/PCIe 3.0 9005 0551 Series 8 - ASR-81605 - 16 internal 0 external 12G SAS Port/PCIe 3.0 9005 0552 Series 8 - ASR-8805 - 8 internal 0 external 12G SAS Port/PCIe 3.0 9005 0553 Series 8 - ASR-8085 - 0 internal 8 external 12G SAS Port/PCIe 3.0 9005 0554 Series 8 - ASR-8885 - 8 internal 8 external 12G SAS Port/PCIe 3.0 028f Smart Storage PQI SAS 103c 0600 Smart Array P408i-p SR Gen10 103c 0601 Smart Array P408e-p SR Gen10 103c 0602 Smart Array P408i-a SR Gen10 103c 0603 Smart Array P408i-c SR Gen10 103c 0650 Smart Array E208i-p SR Gen10 103c 0651 Smart Array E208e-p SR Gen10 103c 0652 Smart Array E208i-c SR Gen10 103c 0654 Smart Array E208i-a SR Gen10 103c 0655 Smart Array P408e-m SR Gen10 103c 0700 Smart Array P204i-c SR Gen10 103c 0701 Smart Array P204i-b SR Gen10 103c 1100 Smart Array P816i-a SR Gen10 103c 1101 Smart Array P416ie-m SR G10 105b 1211 HBA 8238-16i 105b 1321 HBA 8242-24i 1137 02f8 24G TriMode M1 RAID 4GB FBWC 32D 1137 02f9 24G TriMode M1 RAID 4GB FBWC 16D 1137 02fa 24G TriMode M1 HBA 16D 13fe 8312 SKY-9200 MIC-8312BridgeB 152d 8a22 QS-8204-8i 152d 8a23 QS-8238-16i 152d 8a24 QS-8236-16i 152d 8a36 QS-8240-24i 152d 8a37 QS-8242-24i 1590 0294 SR932i-p Gen10+ 1590 02dc SR416i-a Gen10+ 193d 1104 RAID P2404-Mf-4i-2GB 193d 1105 RAID P4408-Mf-8i-2GB 193d 1106 RAID P2404-Mf-4i-1GB 193d 1107 RAID P4408-Mf-8i-4GB 193d 8460 HBA H460-M1 193d 8461 HBA H460-B1 193d c460 RAID P460-M2 193d c461 RAID P460-B2 193d f460 RAID P460-M4 193d f461 RAID P460-B4 19e5 d227 SmartROC-HD SR465C-M 4G 19e5 d228 SmartROC SR455C-M 2G 19e5 d229 SmartIOC SR155-M 19e5 d22a SmartIOC-HD SR765-M 19e5 d22b SmartROC-e SR455C-ME 4G 19e5 d22c SmartROC SR455C-M 4G 1bd4 0045 SMART-HBA 8242-24i 1bd4 0046 RAID 8236-16i 1bd4 0047 RAID 8240-24i 1bd4 0048 SMART-HBA 8238-16i 1bd4 004a PM8222-SHBA 1bd4 004b RAID PM8204-2GB 1bd4 004c RAID PM8204-4GB 1bd4 004f PM8222-HBA 1bd4 006b RS0800M5H24I 1bd4 006c RS0800M5E8i 1bd4 006d RS0800M5H8i 1bd4 006f RS0804M5R16i 1bd4 0070 RS0800M5E24i 1bd4 0071 RS0800M5H16i 1bd4 0072 RS0800M5E16i 1bd4 0077 RS0800M5E16iM 1bd4 0078 RS0800M5E24iM 1bd4 0079 RS0800M5H24iM 1bd4 0080 RS0804M5R16iM 1bd4 0086 RT0800M7E 1bd4 0087 RT0800M7H 1bd4 0088 RT0804M7R 1bd4 0089 RT0808M7R 1cc4 0101 Ramaxel FBGF-RAD PM8204 1cc4 0201 Ramaxel FBGF-RAD PM8222 1d49 0220 ThinkSystem 4350-8i SAS/SATA 12Gb HBA 1d49 0221 ThinkSystem 4350-16i SAS/SATA 12Gb HBA 1d49 0520 ThinkSystem RAID 5350-8i PCIe 12Gb Adapter 1d49 0522 ThinkSystem RAID 5350-8i PCIe 12Gb Internal Adapter 1d49 0620 ThinkSystem RAID 9350-8i 2GB Flash PCIe 12Gb Adapter 1d49 0621 ThinkSystem RAID 9350-8i 2GB Flash PCIe 12Gb Internal Adapter 1d49 0622 ThinkSystem RAID 9350-16i 4GB Flash PCIe 12Gb Adapter 1d49 0623 ThinkSystem RAID 9350-16i 4GB Flash PCIe 12Gb Internal Adapter 1f3f 0610 3S610-8i, SAS/SATA 12Gb HBA 207d 4140 TrustRAID D3152s-8i 207d 4240 TrustRAID D3154s-8i 9005 0608 SmartRAID 3162-8i /e 9005 0800 SmartRAID 3154-8i 9005 0801 SmartRAID 3152-8i 9005 0802 SmartRAID 3151-4i 9005 0803 SmartRAID 3101-4i 9005 0804 SmartRAID 3154-8e 9005 0805 SmartRAID 3102-8i 9005 0806 SmartRAID 3100 9005 0807 SmartRAID 3162-8i 9005 0808 SmartRAID 3101E-4i 9005 0809 SmartRAID 3102E-8i 9005 0900 SmartHBA 2100-8i 9005 0901 SmartHBA 2100-4i 9005 0902 HBA 1100-8i 9005 0903 HBA 1100-4i 9005 0904 SmartHBA 2100-8e 9005 0905 HBA 1100-8e 9005 0906 SmartHBA 2100-4i4e 9005 0907 HBA 1100 9005 0908 SmartHBA 2100 9005 090a SmartHBA 2100A-8i 9005 1200 SmartRAID 3154-24i 9005 1201 SmartRAID 3154-8i16e 9005 1202 SmartRAID 3154-8i8e 9005 1280 HBA 1100-16i 9005 1281 HBA 1100-16e 9005 1282 SmartHBA 2100-16i 9005 1300 HBA 1100-8i8e 9005 1301 HBA 1100-24i 9005 1302 SmartHBA 2100-8i8e 9005 1303 SmartHBA 2100-24i 9005 1380 SmartRAID 3154-16i 9005 1400 SmartRAID Ultra 3258p-16i /e 9005 1402 HBA Ultra 1200p-16i 9005 1410 HBA Ultra 1200-16e 9005 1430 SmartRAID Ultra 3254-16e /e 9005 1441 HBA Ultra 1200p-32i 9005 1450 SmartRAID Ultra 3258p-32i /e 9005 1462 HBA 1200-8i 9005 1471 SmartRAID 3254-16i /e 9005 1472 SmartRAID 3258-16i /e 9005 1475 SmartRAID 3254-16e /e 9005 14a0 SmartRAID 3254-8i 9005 14a1 SmartRAID 3204-8i 9005 14a2 SmartRAID 3252-8i 9005 14a4 SmartRAID 3254-8i /e 9005 14a5 SmartRAID 3252-8i /e 9005 14a6 SmartRAID 3204-8i /e 9005 14c0 SmartHBA 2200-16i 9005 14c1 HBA 1200-16i 9005 14c3 HBA 1200-16e 9005 14c4 HBA 1200-8e 0410 AIC-9410W SAS (Razor HBA RAID) 9005 0410 ASC-48300(Spirit RAID) 9005 0411 ASC-58300 (Oakmont RAID) 0412 AIC-9410W SAS (Razor HBA non-RAID) 9005 0412 ASC-48300 (Spirit non-RAID) 9005 0413 ASC-58300 (Oakmont non-RAID) 0415 ASC-58300 SAS (Razor-External HBA RAID) 0416 ASC-58300 SAS (Razor-External HBA non-RAID) 041e AIC-9410W SAS (Razor ASIC non-RAID) 041f AIC-9410W SAS (Razor ASIC RAID) 9005 041f AIC-9410W SAS (Razor ASIC RAID) 042f VSC7250/7251 SAS (Aurora ASIC non-RAID) 0430 AIC-9405W SAS (Razor-Lite HBA RAID) 9005 0430 ASC-44300 (Spirit-Lite RAID) 0432 AIC-9405W SAS (Razor-Lite HBA non-RAID) 9005 0432 ASC-44300 (Spirit-Lite non-RAID) 043e AIC-9405W SAS (Razor-Lite ASIC non-RAID) 043f AIC-9405W SAS (Razor-Lite ASIC RAID) 0450 ASC-1405 Unified Serial HBA 0500 Obsidian chipset SCSI controller 1014 02c1 PCI-X DDR 3Gb SAS Adapter (572A/572C) 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/572D) 0503 Scamp chipset SCSI controller 1014 02bf Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571E) 1014 02c3 PCI-X DDR 3Gb SAS RAID Adapter (572F) 1014 02d5 Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571F) 0910 AUA-3100B 091e AUA-3100B 8000 ASC-29320A U320 800f AIC-7901 U320 8010 ASC-39320 U320 8011 ASC-39320D 0e11 00ac ASC-39320D U320 9005 0041 ASC-39320D U320 8012 ASC-29320 U320 8013 ASC-29320B U320 8014 ASC-29320LP U320 8015 ASC-39320B U320 8016 ASC-39320A U320 8017 ASC-29320ALP U320 9005 0044 ASC-29320ALP PCIx U320 9005 0045 ASC-29320LPE PCIe U320 801c ASC-39320D U320 801d AIC-7902B U320 1014 02cc ServeRAID 7e 801e AIC-7901A U320 801f AIC-7902 U320 1734 1011 PRIMERGY RX300 onboard SCSI 8080 ASC-29320A U320 w/HostRAID 8081 PMC-Sierra PM8001 SAS HBA [Series 6H] 9005 0400 Adaptec SAS HBA 6405H 9005 0800 Adaptec SAS HBA 6805H 8088 PMC-Sierra PM8018 SAS HBA [Series 7H] 9005 0008 Adaptec SAS HBA 7085H 9005 0016 Adaptec SAS HBA 70165H 9005 0800 Adaptec SAS HBA 7805H 9005 1600 Adaptec SAS HBA 71605H 8089 PMC-Sierra PM8019 SAS encryption HBA [Series 7He] 808f AIC-7901 U320 w/HostRAID 1028 0168 Precision Workstation 670 Mainboard 8090 ASC-39320 U320 w/HostRAID 8091 ASC-39320D U320 w/HostRAID 8092 ASC-29320 U320 w/HostRAID 8093 ASC-29320B U320 w/HostRAID 8094 ASC-29320LP U320 w/HostRAID 8095 ASC-39320(B) U320 w/HostRAID 8096 ASC-39320A U320 w/HostRAID 8097 ASC-29320ALP U320 w/HostRAID 809c ASC-39320D(B) U320 w/HostRAID 809d AIC-7902(B) U320 w/HostRAID 1014 02cc ServeRAID 7e 809e AIC-7901A U320 w/HostRAID 809f AIC-7902 U320 w/HostRAID 907f Atronics 2015 IDE-2015PL 919a Gigapixel Corp 9412 Holtek 6565 6565 9413 Softlogic Co., Ltd. 6010 SOLO6010 MPEG-4 Video encoder/decoder 6110 SOLO6110 H.264 Video encoder/decoder 9618 JusonTech Corporation 0001 JusonTech Gigabit Ethernet Controller 9699 Omni Media Technology Inc 6565 6565 # nee Netmos Technology 9710 MosChip Semiconductor Technology Ltd. 9250 PCI-to-PCI bridge [MCS9250] 9805 PCI 1 port parallel adapter 9815 PCI 9815 Multi-I/O Controller 1000 0020 2P0S (2 port parallel adaptor) 9820 PCI 9820 Multi-I/O Controller 9835 PCI 9835 Multi-I/O Controller 1000 0002 2S (16C550 UART) 1000 0012 1P2S 9845 PCI 9845 Multi-I/O Controller # Serial ports at BAR0-3 1000 0004 0P4S (4 port 16550A serial card) 1000 0006 0P6S (6 port 16550a serial card) # Serial ports at BAR0-3, Parallel port at BAR4 1000 0014 1P4S (1 Parallel / 4 16550A Serial Port Adapter) 9855 PCI 9855 Multi-I/O Controller # Parallel port at BAR0. Serial ports at BAR2-5 1000 0014 1P4S # Parallel ports at BAR0,BAR2. Serial ports at BAR4-5 1000 0022 2P2S (2 Parallel / 2 16550A Serial Port Adapter) 9865 PCI 9865 Multi-I/O Controller 9900 MCS9900 Multi-I/O Controller 9901 PCIe 9901 Multi-I/O Controller 9904 4-Port PCIe Serial Adapter # 2-port Serial 1-port Parallel Adaptor 9912 PCIe 9912 Multi-I/O Controller 9922 MCS9922 PCIe Multi-I/O Controller 9990 MCS9990 PCIe to 4-Port USB 2.0 Host Controller # Subsystem ID on a 3c985B-SX network card 9850 3Com (wrong ID) 9902 Stargen Inc. 0001 SG2010 PCI over Starfabric Bridge 0002 SG2010 PCI to Starfabric Gateway 0003 SG1010 Starfabric Switch and PCI Bridge 9999 MetaX Integrated Circuits (Shanghai) Co., Ltd. 9a11 Tiger Lake-H Gaussian & Neural Accelerator 9d32 Beijing Starblaze Technology Co. Ltd. 0000 STAR1000 PCIe NVMe SSD Controller 1000 STAR1000 PCIe NVMe SSD Controller 1001 STAR1000P PCIe NVMe SSD Controller 1201 STAR1200C NVMe SSD 1202 STAR1200I NVMe SSD 1203 STAR1200L NVMe SSD 1204 STAR1200E NVMe SSD 1500 STAR1500 PCIe NVMe SSD Controller 1501 STAR1500C NVMe SSD 1502 STAR1500E NVMe SSD 1504 STAR1500L NVMe SSD 1505 STAR1500K NVMe SSD # NVMe Gen5 Controller 16ch 1516 STAR1516 PCIe NVMe SSD Controller 2000 STAR2000 NVMe Controller 2001 STAR2000E NVMe SSD 2002 STAR2000C NVMe SSD 2003 STAR2000L NVMe SSD 2004 EAST 2000K SSD 2008 STAR2008 PCIE NVMe SSD Controller 2010 STAR2010 PCIE NVMe Secure SSD Controller bb5b Asgard AN3+ NVMe SSD fc22 Asgard AN3+ NVMe SSD a000 Asix Electronics Corporation (Wrong ID) a0a0 AOPEN Inc. a0f1 UNISYS Corporation a200 NEC Corporation a259 Hewlett Packard a25b Hewlett Packard GmbH PL24-MKT a304 Sony a727 3Com Corporation 0013 3CRPAG175 Wireless PC Card 6803 3CRDAG675B Wireless 11a/b/g Adapter aa00 iTuner aa01 iTuner aa02 iTuner aa03 iTuner aa04 iTuner aa05 iTuner aa06 iTuner aa07 iTuner aa08 iTuner aa09 iTuner aa0a iTuner aa0b iTuner aa0c iTuner aa0d iTuner aa0e iTuner aa0f iTuner aa42 Scitex Digital Video aa55 Ncomputing X300 PCI-Engine aaaa Adnaco Technology Inc. 0001 H1 PCIe over fiber optic host controller 0002 R1BP1 PCIe over fiber optic expansion chassis abcd Vadatech Inc. ac1e Digital Receiver Technology Inc ac3d Actuality Systems ad00 Alta Data Technologies LLC aecb Adrienne Electronics Corporation 6250 VITC/LTC Timecode Reader card [PCI-VLTC/RDR] affe Sirrix AG security technologies 01e1 PCI1E1 1-port ISDN E1 interface 02e1 PCI2E1 2-port ISDN E1 interface 450e PCI4S0EC 4-port ISDN S0 interface dead Sirrix.PCI4S0 4-port ISDN S0 interface b100 OpenVox Communication Co. Ltd. # Not registered officially b10b Uakron PCI Project b1b3 Shiva Europe Limited b1d9 ATCOM Technology co., LTD. b390 TD3-X3+ # Pinnacle should be 11bd, but they got it wrong several times --mj bd11 Pinnacle Systems, Inc. (Wrong ID) bdbd Blackmagic Design a106 Multibridge Extreme a117 Intensity Pro a11a DeckLink HD Extreme 2 a11b DeckLink SDI/Duo/Quad a11c DeckLink HD Extreme 3 a11d DeckLink Studio a11e DeckLink Optical Fibre a120 Decklink Studio 2 a121 DeckLink HD Extreme 3D/3D+ a124 Intensity Extreme a126 Intensity Shuttle a127 UltraStudio Express a129 UltraStudio Mini Recorder a12a UltraStudio Mini Monitor a12d UltraStudio 4K a12e DeckLink 4K Extreme a12f DeckLink Mini Monitor a130 DeckLink Mini Recorder a132 UltraStudio 4K a136 DeckLink 4K Extreme 12G a137 DeckLink Studio 4K a138 Decklink SDI 4K a139 Intensity Pro 4K a13b DeckLink Micro Recorder a13d DeckLink 4K Pro a13e UltraStudio 4K Extreme a13f DeckLink Quad 2 a140 DeckLink Duo 2 a141 UltraStudio 4K Extreme 3 a142 UltraStudio HD Mini a143 DeckLink Mini Recorder 4K a144 DeckLink Mini Monitor 4K a148 DeckLink SDI Micro a14b DeckLink 8K Pro a14e DeckLink Quad HDMI Recorder a1ff eGPU RX580 c001 TSI Telsys c0a9 Micron/Crucial Technology 2263 P1 NVMe PCIe SSD[Frampton] 5403 P1 NVMe PCIe SSD[Frampton2] 5407 P5 Plus NVMe PCIe SSD 540a P2 [Nick P2] / P3 / P3 Plus NVMe PCIe SSD (DRAM-less) 5412 P5 NVMe PCIe SSD[SlashP5] 5415 T500 NVMe PCIe SSD 5419 T700 NVMe PCIe SSD 5420 P3 NVMe PCIe SSD (DRAM-less) 5421 P3 Plus NVMe PCIe SSD (DRAM-less) 5426 P310 NVMe PCIe SSD (DRAM-less) 542b T705 NVMe PCIe SSD 560b E100 NVMe PCIe SSD (DRAM-less) c0de Motorola c0fe Motion Engineering, Inc. ca01 I-TEK OptoElectronics Co., LTD. 0212 Vulcan-CL CameraLink Frame Grabber ca02 I-TEK OptoElectronics Co., LTD. 0213 Vulcan-CXP Frame Grabber ca3b Cambrionix Ltd. ca50 Varian Australia Pty Ltd cace CACE Technologies, Inc. 0001 TurboCap Port A 0002 TurboCap Port B 0023 AirPcap N caed Canny Edge # nee Chrysalis-ITS cafe Thales 0003 Luna K3 Hardware Security Module 0006 Luna PCI-e 3000 Hardware Security Module 0007 Luna K6 Hardware Security Module 0008 Luna K7 Hardware Security Module cc53 ScaleFlux Inc. 0001 CSS 1000 0010 CSD 3310 cccc Catapult Communications ccec Curtiss-Wright Controls Embedded Computing cddd Tyzx, Inc. 0101 DeepSea 1 High Speed Stereo Vision Frame Grabber 0200 DeepSea 2 High Speed Stereo Vision Frame Grabber cdfa NextSilicon Ltd 0007 Maverick ceba KEBA AG cf86 Spectrum-4TOR 0276 Spectrum-4TOR in Flash Recovery Mode d063 SolidRun 1000 SolidNET DPU 1500 Emulated NVMe d161 Digium, Inc. 0120 Wildcard TE120P single-span T1/E1/J1 card 0205 Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V 0210 Wildcard TE210P/TE212P dual-span T1/E1/J1 card 3.3V 0220 Wildcard TE220 dual-span T1/E1/J1 card 3.3V (PCI-Express) 0405 Wildcard TE405P/TE407P quad-span T1/E1/J1 card 5.0V 0410 Wildcard TE410P/TE412P quad-span T1/E1/J1 card 3.3V 0420 Wildcard TE420P quad-span T1/E1/J1 card 3.3V (PCI-Express) 0800 Wildcard TDM800P 8-port analog card 1205 Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V (u1) 1220 Wildcard TE220 dual-span T1/E1/J1 card 3.3V (PCI-Express) (5th gen) 1405 Wildcard TE405P/TE407P quad-span T1/E1/J1 card 5.0V (u1) 1410 Wildcard TE410P quad-span T1/E1/J1 card 3.3V (5th Gen) 1420 Wildcard TE420 quad-span T1/E1/J1 card 3.3V (PCI-Express) (5th gen) 1820 Wildcard TE820 octal-span T1/E1/J1 card 3.3V (PCI-Express) 2400 Wildcard TDM2400P 24-port analog card 3400 Wildcard TC400P transcoder base card 8000 Wildcard TE121 single-span T1/E1/J1 card (PCI-Express) 8001 Wildcard TE122 single-span T1/E1/J1 card 8002 Wildcard AEX800 8-port analog card (PCI-Express) 8003 Wildcard AEX2400 24-port analog card (PCI-Express) 8004 Wildcard TCE400P transcoder base card 8005 Wildcard TDM410 4-port analog card 8006 Wildcard AEX410 4-port analog card (PCI-Express) 8007 Hx8 Series 8-port Base Card 8008 Hx8 Series 8-port Base Card (PCI-Express) 800a Wildcard TE133 single-span T1/E1/J1 card (PCI Express) 800b Wildcard TE134 single-span T1/E1/J1 card 800c Wildcard A8A 8-port analog card 800d Wildcard A8B 8-port analog card (PCI-Express) 800e Wildcard TE235/TE435 quad-span T1/E1/J1 card (PCI-Express) 800f Wildcard A4A 4-port analog card 8010 Wildcard A4B 4-port analog card (PCI-Express) 8013 Wildcard TE236/TE436 quad-span T1/E1/J1 card b410 Wildcard B410 quad-BRI card d209 Ultimarc 1500 PAC Drive 15a2 SpinTrak 1601 AimTrak d20c Chengdu BeiZhongWangXin Technology Co., Ltd. 5011 NE5000 Ethernet Controller d20c e120 N5 Series 2-port 10GbE Network Adapter d20c e140 N5 Series 4-port 10GbE Network Adapter d20c e220 N5 Series 2-port 25GbE Network Adapter d20c e221 N5S Series 2-port 25GbE Network Adapter d20c e22c N5 Series 2-port 25GbE Network Adapter for OCP 6011 NE6000 Ethernet Controller d20c a001 N6S Series Network Adapter d20c e221 N6S Series 2-port 25GbE Network Adapter d20c e281 N6S Series 8-port 25GbE Network Adapter d20c e421 N6S Series 2-port 40GbE Network Adapter d20c ea21 N6S Series 2-port 100GbE Network Adapter d405 LeapIO 8200 LeapHBA 8201 LeapRAID d4d4 Dy4 Systems Inc 0601 PCI Mezzanine Card d531 I+ME ACTIA GmbH d84d Exsys dada Datapath Limited 0133 VisionRGB-X2 0139 VisionRGB-E1 0144 VisionSD8 0150 VisionRGB-E2 0151 VisionSD4+1 0159 VisionAV 0161 DGC161 0165 DGC165 0167 DGC167 0168 DGC168 1139 VisionRGB-E1S 1150 VisionRGB-E2S 1151 VisionSD4+1S 1153 VisionDVI-DL 1154 VisionSDI2 db10 Diablo Technologies dc93 Dawicontrol GmbH dcba Dynamic Engineering 0046 PCIe Altera Cyclone IV # VPX format Receiver Controller Board 0047 VPX-RCB # PMC Format FPGA design with 8 high speed UART channels 0048 PMC-Biserial-III-BAE9 004e PC104p-Biserial-III-NVY5 004f PC104p-Biserial-III-NVY6 0052 PCIeBiSerialDb37 BA22 LVDS IO # 8 port 16550 compatible UART, PMC format, RS-232 IO, RTS, CTS, DTR, DSR supported 0066 PMC-OctalUART-232 dd01 Digital Devices GmbH 0003 Octopus DVB Adapter dd01 0001 Octopus DVB adapter dd01 0002 Octopus LE DVB adapter dd01 0003 Octopus OEM dd01 0004 Octopus V3 DVB adapter dd01 0010 Octopus Mini dd01 0020 Cine S2 V6 DVB adapter dd01 0021 Cine S2 V6.5 DVB adapter dd01 0030 Cine CT V6.1 DVB adapter dd01 db03 Mystique SaTiX-S2 V3 DVB adapter 0006 Cine V7 0007 Max dd01 0023 Max S8 4/8 0011 Octopus CI DVB Adapter dd01 0040 Octopus CI dd01 0041 Octopus CI Single 0012 Octopus Duo CI 0201 Resi DVB-C Modulator dd01 0001 Resi DVB-C Modulator dead Indigita Corporation deaf Middle Digital Inc. 9050 PC Weasel Virtual VGA 9051 PC Weasel Serial Port 9052 PC Weasel Watchdog Timer # formerly SoftHard Technology Ltd. deda XIMEA 4001 CB or MX camera 4021 MT camera e000 Winbond e000 W89C940 e159 Tiger Jet Network Inc. / ICP DAS 0001 Tiger3XX Modem/ISDN interface 0059 0001 128k ISDN-S/T Adapter 0059 0003 128k ISDN-U Adapter 00a7 0001 TELES.S0/PCI 2.x ISDN Adapter 8086 0003 Digium X100P/X101P analogue PSTN FXO interface b100 0003 OpenVox A400P 4-port analog card b1d9 0003 AX400P 4-port analog card 0002 Tiger100APC ISDN chipset e1c5 Elcus e4bf EKF Elektronik GmbH 0ccd CCD-CALYPSO 0cd1 CD1-OPERA 0cd2 CD2-BEBOP 0cd3 CD3-JIVE 50c1 PC1-GROOVE 50c2 PC2-LIMBO 53c1 SC1-ALLEGRO cc47 CCG-RUMBA cc4d CCM-BOOGIE e4e4 Xorcom e55e Essence Technology, Inc. ea01 Eagle Technology 000a PCI-773 Temperature Card 0032 PCI-730 & PC104P-30 Card 003e PCI-762 Opto-Isolator Card 0041 PCI-763 Reed Relay Card 0043 PCI-769 Opto-Isolator Reed Relay Combo Card 0046 PCI-766 Analog Output Card 0052 PCI-703 Analog I/O Card 0800 PCI-800 Digital I/O Card ea50 Emerson Automation Solutions # The main chip of all these devices is by Xilinx -> It could also be a Xilinx ID. ea60 RME 9896 Digi32 9897 Digi32 Pro 9898 Digi32/8 eabb Aashima Technology B.V. eace Endace Measurement Systems, Ltd 3100 DAG 3.10 OC-3/OC-12 3200 DAG 3.2x OC-3/OC-12 320e DAG 3.2E Fast Ethernet 340e DAG 3.4E Fast Ethernet 341e DAG 3.41E Fast Ethernet 3500 DAG 3.5 OC-3/OC-12 351c DAG 3.5ECM Fast Ethernet 360d DAG 3.6D DS3 360e DAG 3.6E Fast Ethernet 368e DAG 3.6E Gig Ethernet 3707 DAG 3.7T T1/E1/J1 370d DAG 3.7D DS3/E3 378e DAG 3.7G Gig Ethernet 3800 DAG 3.8S OC-3/OC-12 4100 DAG 4.10 OC-48 4110 DAG 4.11 OC-48 4220 DAG 4.2 OC-48 422e DAG 4.2GE Gig Ethernet 4230 DAG 4.2S OC-48 423e DAG 4.2GE Gig Ethernet 4300 DAG 4.3S OC-48 430e DAG 4.3GE Gig Ethernet 452e DAG 4.5G2 Gig Ethernet 454e DAG 4.5G4 Gig Ethernet 45b8 DAG 4.5Z8 Gig Ethernet 45be DAG 4.5Z2 Gig Ethernet 520e DAG 5.2X 10G Ethernet 521a DAG 5.2SXA 10G Ethernet/OC-192 5400 DAG 5.4S-12 OC-3/OC-12 5401 DAG 5.4SG-48 Gig Ethernet/OC-3/OC-12/OC-48 540a DAG 5.4GA Gig Ethernet 541a DAG 5.4SA-12 OC-3/OC-12 542a DAG 5.4SGA-48 Gig Ethernet/OC-3/OC-12/OC-48 6000 DAG 6.0SE 10G Ethernet/OC-192 6100 DAG 6.1SE 10G Ethernet/OC-192 6200 DAG 6.2SE 10G Ethernet/OC-192 7100 DAG 7.1S OC-3/OC-12 7400 DAG 7.4S OC-3/OC-12 7401 DAG 7.4S48 OC-48 752e DAG 7.5G2 Gig Ethernet 754e DAG 7.5G4 Gig Ethernet 8100 DAG 8.1X 10G Ethernet 8101 DAG 8.1SX 10G Ethernet/OC-192 8102 DAG 8.1X 10G Ethernet 820e DAG 8.2X 10G Ethernet 820f DAG 8.2X 10G Ethernet (2nd bus) 8400 DAG 8.4I Infiniband x4 SDR 8500 DAG 8.5I Infiniband x4 DDR 9200 DAG 9.2SX2 10G Ethernet 920e DAG 9.2X2 10G Ethernet 9540 DAG 9.5G4 Gig Ethernet 954f DAG 9.5G4F Gig Ethernet a120 DAG 10X2-P 10G Ethernet a12e DAG 10X2-S 10G Ethernet a140 DAG 10X4-P 10/40G Ethernet a14e DAG 10X4-S 10/40G Ethernet eace vDAG virtual device ec80 Belkin Corporation ec00 F5D6000 ecc0 Echo Digital Audio Corporation edd8 ARK Logic Inc a091 1000PV [Stingray] a099 2000PV [Stingray] a0a1 2000MT a0a9 2000MI efab Enfabrica # Found on M2N68-AM Motherboard f043 ASUSTeK Computer Inc. (Wrong ID) f05b Foxconn International, Inc. (Wrong ID) f111 Framework Computer Inc. f117 Cerio 00ff Test Device 1000 Emulated PCIe Switch 1010 Placeholder Device 1020 Pseudo-Device 1030 Test Device f15e SiFive, Inc. 0000 FU740-C000 RISC-V SoC PCI Express x8 to AXI4 Bridge f1d0 AJA Video c0fe Xena HS/HD-R c0ff Kona/Xena 2 cafe Kona SD cfee Xena LS/SD-22-DA/SD-DA dafe Corvid 1 daff KONA LHi db00 IoExpress db01 Corvid22 db02 Kona 3G db03 Corvid 3G db04 Kona 3G QUAD db05 Kona LHe+ db06 IoXT db07 Kona 3G P2P db08 Kona 3G QUAD P2P db09 Corvid 24 db11 T-Tap dcaf Kona HD dfee Xena HD-DA eb07 Io4K eb0a Io4K UFC eb0b Kona 4 eb0c Kona 4 UFC eb0d Corvid 88 eb0e Corvid 44 eb16 Corvid HEVC 10cf 1049 Corvid HEVC M31 eb18 Corvid HB-R eb1a Kona IP 1SFP eb1c Kona IP 2SFP eb1d Io4KPlus eb1e IoIP eb1f Kona 5 eb23 Kona 1 eb24 Kona HDMI eb25 Corvid 44 12g eb26 T-Tap Pro eb27 IoX3 eb28 Kona XM eb29 Kona X eb30 Kona IP 25G efac Xena SD-MM/SD-22-MM facd Xena HD-MM f5f5 F5 Networks, Inc. # Subsystem ID for PATA controller on nForce motherboard f849 ASRock Incorporation (Wrong ID) fa57 Interagon AS 0001 PMC [Pattern Matching Chip] fab7 Fabric7 Systems, Inc. fe19 TenaFe, Inc. 0001 TC2200/TC2201 NVMe Controller (DRAM-less) febd Ultraview Corp. # Nee Epigram feda Broadcom Inc a0fa BCM4210 iLine10 HomePNA 2.0 a10e BCM4230 iLine10 HomePNA 2.0 fede Fedetec Inc. 0003 TABIC PCI v3 ffe1 Suzhou XiongLi Technology Inc. d200 XL82101/82102 PCI Express Gigabit Ethernet Controller fffd XenSource, Inc. 0101 PCI Event Channel Controller # Used in some old VMWare products before they got a real ID assigned fffe VMWare Inc (temporary ID) 0710 Virtual SVGA ffff Illegal Vendor ID # List of known device classes, subclasses and programming interfaces # Syntax: # C class class_name # subclass subclass_name <-- single tab # prog-if prog-if_name <-- two tabs C 00 Unclassified device 00 Non-VGA unclassified device 01 VGA compatible unclassified device 05 Image coprocessor C 01 Mass storage controller 00 SCSI storage controller 01 IDE interface 00 ISA Compatibility mode-only controller 05 PCI native mode-only controller 0a ISA Compatibility mode controller, supports both channels switched to PCI native mode 0f PCI native mode controller, supports both channels switched to ISA compatibility mode 80 ISA Compatibility mode-only controller, supports bus mastering 85 PCI native mode-only controller, supports bus mastering 8a ISA Compatibility mode controller, supports both channels switched to PCI native mode, supports bus mastering 8f PCI native mode controller, supports both channels switched to ISA compatibility mode, supports bus mastering 02 Floppy disk controller 03 IPI bus controller 04 RAID bus controller 05 ATA controller 20 ADMA single stepping 30 ADMA continuous operation 06 SATA controller 00 Vendor specific 01 AHCI 1.0 02 Serial Storage Bus 07 Serial Attached SCSI controller 01 Serial Storage Bus 08 Non-Volatile memory controller 01 NVMHCI 02 NVM Express 09 Universal Flash Storage controller 00 Vendor specific 01 UFSHCI 80 Mass storage controller C 02 Network controller 00 Ethernet controller 01 Token ring network controller 02 FDDI network controller 03 ATM network controller 04 ISDN controller 05 WorldFip controller 06 PICMG controller 07 Infiniband controller 08 Fabric controller 80 Network controller C 03 Display controller 00 VGA compatible controller 00 VGA controller 01 8514 controller 01 XGA compatible controller 02 3D controller 80 Display controller C 04 Multimedia controller 00 Multimedia video controller 01 Multimedia audio controller 02 Computer telephony device 03 Audio device 80 Multimedia controller C 05 Memory controller 00 RAM memory 01 FLASH memory 02 CXL 00 CXL Memory Device - vendor specific 10 CXL Memory Device (CXL 2.x) 80 Memory controller C 06 Bridge 00 Host bridge 01 ISA bridge 02 EISA bridge 03 MicroChannel bridge 04 PCI bridge 00 Normal decode 01 Subtractive decode 05 PCMCIA bridge 06 NuBus bridge 07 CardBus bridge 08 RACEway bridge 00 Transparent mode 01 Endpoint mode 09 Semi-transparent PCI-to-PCI bridge 40 Primary bus towards host CPU 80 Secondary bus towards host CPU 0a InfiniBand to PCI host bridge 80 Bridge C 07 Communication controller 00 Serial controller 00 8250 01 16450 02 16550 03 16650 04 16750 05 16850 06 16950 01 Parallel controller 00 SPP 01 BiDir 02 ECP 03 IEEE1284 fe IEEE1284 Target 02 Multiport serial controller 03 Modem 00 Generic 01 Hayes/16450 02 Hayes/16550 03 Hayes/16650 04 Hayes/16750 04 GPIB controller 05 Smard Card controller 80 Communication controller C 08 Generic system peripheral 00 PIC 00 8259 01 ISA PIC 02 EISA PIC 10 IO-APIC 20 IO(X)-APIC 01 DMA controller 00 8237 01 ISA DMA 02 EISA DMA 02 Timer 00 8254 01 ISA Timer 02 EISA Timers 03 HPET 03 RTC 00 Generic 01 ISA RTC 04 PCI Hot-plug controller 05 SD Host controller 06 IOMMU 07 Root Complex Event Collector 80 System peripheral 99 Timing Card # PTP Grandmaster Source Clock 01 TAP Timing Card C 09 Input device controller 00 Keyboard controller 01 Digitizer Pen 02 Mouse controller 03 Scanner controller 04 Gameport controller 00 Generic 10 Extended 80 Input device controller C 0a Docking station 00 Generic Docking Station 80 Docking Station C 0b Processor 00 386 01 486 02 Pentium 10 Alpha 20 Power PC 30 MIPS 40 Co-processor C 0c Serial bus controller 00 FireWire (IEEE 1394) 00 Generic 10 OHCI 01 ACCESS Bus 02 SSA 03 USB controller 00 UHCI 10 OHCI 20 EHCI 30 XHCI 40 USB4 Host Interface 80 Unspecified fe USB Device 04 Fibre Channel 05 SMBus 06 InfiniBand 07 IPMI Interface 00 SMIC 01 KCS 02 BT (Block Transfer) 08 SERCOS interface 09 CANBUS 80 Serial bus controller C 0d Wireless controller 00 IRDA controller 01 Consumer IR controller 10 RF controller 11 Bluetooth 12 Broadband 20 802.1a controller 21 802.1b controller 80 Wireless controller C 0e Intelligent controller 00 I2O C 0f Satellite communications controller 01 Satellite TV controller 02 Satellite audio communication controller 03 Satellite voice communication controller 04 Satellite data communication controller C 10 Encryption controller 00 Network and computing encryption device 10 Entertainment encryption device 80 Encryption controller C 11 Signal processing controller 00 DPIO module 01 Performance counters 10 Communication synchronizer 20 Signal processing management 80 Signal processing controller C 12 Processing accelerators 00 Processing accelerators 01 SNIA Smart Data Accelerator Interface (SDXI) controller C 13 Non-Essential Instrumentation C 40 Coprocessor C ff Unassigned class NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvlib/pkg/pciids/pciids.go000066400000000000000000000244321520540370700267510ustar00rootroot00000000000000package pciids import ( "bufio" "bytes" _ "embed" // Fallback is the embedded pci.ids db file "fmt" "io" "os" "strconv" "strings" ) // token what the Lexer retruns. type token int const ( // ILLEGAL a token which the Lexer does not understand. ILLEGAL token = iota // EOF end of file. EOF // WS whitespace. WS // NEWLINE '\n'. NEWLINE // COMMENT '# something'. COMMENT // VENDOR PCI vendor. VENDOR // SUBVENDOR PCI subvendor. SUBVENDOR // DEVICE PCI device. DEVICE // CLASS PCI class. CLASS // SUBCLASS PCI subclass. SUBCLASS // PROGIF PCI programming interface. PROGIF ) // literal values from the Lexer. type literal struct { ID string name string SubName string } // scanner a lexical scanner. type scanner struct { r *bufio.Reader isVendor bool } // newScanner well a new scanner ... func newScanner(r io.Reader) *scanner { return &scanner{r: bufio.NewReader(r)} } // Since the pci.ids is line base we're consuming a whole line rather then only // a single rune/char. func (s *scanner) readline() []byte { ln, err := s.r.ReadBytes('\n') if err == io.EOF { return []byte{'E', 'O', 'F'} } if err != nil { fmt.Printf("ReadBytes failed with %v", err) return []byte{} } return ln } func scanClass(line []byte) (token, literal) { class := string(line[1:]) return CLASS, scanEntry([]byte(class), 2) } func scanSubVendor(line []byte) (token, literal) { trim0 := strings.TrimSpace(string(line)) subv := string(trim0[:4]) trim1 := strings.TrimSpace(trim0[4:]) subd := string(trim1[:4]) subn := strings.TrimSpace(trim1[4:]) return SUBVENDOR, literal{subv, subd, subn} } func scanEntry(line []byte, offset uint) literal { trim := strings.TrimSpace(string(line)) id := string(trim[:offset]) name := strings.TrimSpace(trim[offset:]) return literal{id, name, ""} } func isLeadingOneTab(ln []byte) bool { return (ln[0] == '\t') && (ln[1] != '\t') } func isLeadingTwoTabs(ln []byte) bool { return (ln[0] == '\t') && (ln[1] == '\t') } func isHexDigit(ln []byte) bool { return (ln[0] >= '0' && ln[0] <= '9') } func isHexLetter(ln []byte) bool { return (ln[0] >= 'a' && ln[0] <= 'f') } func isVendor(ln []byte) bool { return isHexDigit(ln) || isHexLetter(ln) } func isEOF(ln []byte) bool { return (ln[0] == 'E' && ln[1] == 'O' && ln[2] == 'F') } func isComment(ln []byte) bool { return (ln[0] == '#') } func isSubVendor(ln []byte) bool { return isLeadingTwoTabs(ln) } func isDevice(ln []byte) bool { return isLeadingOneTab(ln) } func isNewline(ln []byte) bool { return (ln[0] == '\n') } // List of known device classes, subclasses and programming interfaces. func isClass(ln []byte) bool { return (ln[0] == 'C') } func isProgIf(ln []byte) bool { return isLeadingTwoTabs(ln) } func isSubClass(ln []byte) bool { return isLeadingOneTab(ln) } // unread places the previously read rune back on the reader. func (s *scanner) unread() { _ = s.r.UnreadRune() } // scan returns the next token and literal value. func (s *scanner) scan() (tok token, lit literal) { line := s.readline() if isEOF(line) { return EOF, literal{} } if isNewline(line) { return NEWLINE, literal{ID: string('\n')} } if isComment(line) { return COMMENT, literal{ID: string(line)} } // vendors if isVendor(line) { s.isVendor = true return VENDOR, scanEntry(line, 4) } if isSubVendor(line) && s.isVendor { return scanSubVendor(line) } if isDevice(line) && s.isVendor { return DEVICE, scanEntry(line, 4) } // classes if isClass(line) { s.isVendor = false return scanClass(line) } if isProgIf(line) && !s.isVendor { return PROGIF, scanEntry(line, 2) } if isSubClass(line) && !s.isVendor { return SUBCLASS, scanEntry(line, 2) } return ILLEGAL, literal{ID: string(line)} } // parser reads the tokens returned by the Lexer and constructs the AST. type parser struct { s *scanner buf struct { tok token lit literal n int } } // Various locations of pci.ids for different distributions. These may be more // up to date then the embedded pci.ids db. var defaultPCIdbPaths = []string{ "/usr/share/misc/pci.ids", // Ubuntu "/usr/local/share/pci.ids", // RHEL like with manual update "/usr/share/hwdata/pci.ids", // RHEL like "/usr/share/pci.ids", // SUSE } // This is a fallback if all of the locations fail // //go:embed default_pci.ids var defaultPCIdb []byte // NewDB Parse the PCI DB in its default locations or use the default // builtin pci.ids db. func NewDB(opts ...Option) Interface { db := &pcidb{} for _, opt := range opts { opt(db) } pcidbs := defaultPCIdbPaths if db.path != "" { pcidbs = append([]string{db.path}, defaultPCIdbPaths...) } return newParser(pcidbs).parse() } // Option defines a function for passing options to the NewDB() call. type Option func(*pcidb) // WithFilePath provides an Option to set the file path // for the pciids database used by pciids interface. // The file path provided takes precedence over all other // paths. func WithFilePath(path string) Option { return func(db *pcidb) { db.path = path } } // newParser will attempt to read the db pci.ids from well known places or fall // back to an internal db. func newParser(pcidbs []string) *parser { for _, db := range pcidbs { file, err := os.ReadFile(db) if err != nil { continue } return newParserFromReader(bufio.NewReader(bytes.NewReader(file))) } // We're using go embed above to have the byte array // correctly initialized with the internal shipped db // if we cannot find an up to date in the filesystem. return newParserFromReader(bufio.NewReader(bytes.NewReader(defaultPCIdb))) } func newParserFromReader(r *bufio.Reader) *parser { return &parser{s: newScanner(r)} } func (p *parser) scan() (tok token, lit literal) { if p.buf.n != 0 { p.buf.n = 0 return p.buf.tok, p.buf.lit } tok, lit = p.s.scan() p.buf.tok, p.buf.lit = tok, lit return } func (p *parser) unscan() { p.buf.n = 1 } var _ Interface = (*pcidb)(nil) // Interface returns textual description of specific attributes of PCI devices. type Interface interface { GetDeviceName(uint16, uint16) (string, error) GetClassName(uint32) (string, error) } // GetDeviceName return the textual description of the PCI device. func (d *pcidb) GetDeviceName(vendorID uint16, deviceID uint16) (string, error) { vendor, ok := d.vendors[vendorID] if !ok { return "", fmt.Errorf("failed to find vendor with id '%x'", vendorID) } device, ok := vendor.devices[deviceID] if !ok { return "", fmt.Errorf("failed to find device with id '%x'", deviceID) } return device.name, nil } // GetClassName resturn the textual description of the PCI device class. func (d *pcidb) GetClassName(classID uint32) (string, error) { class, ok := d.classes[classID] if !ok { return "", fmt.Errorf("failed to find class with id '%x'", classID) } return class.name, nil } // pcidb The complete set of PCI vendors and PCI classes. type pcidb struct { vendors map[uint16]vendor classes map[uint32]class path string } // vendor PCI vendors/devices/subVendors/SubDevices. type vendor struct { name string devices map[uint16]device } // subVendor PCI subVendor. type subVendor struct { SubDevices map[uint16]SubDevice } // SubDevice PCI SubDevice. type SubDevice struct { name string } // device PCI device. type device struct { name string subVendors map[uint16]subVendor } // class PCI classes/subClasses/Programming Interfaces. type class struct { name string subClasses map[uint32]subClass } // subClass PCI subClass. type subClass struct { name string progIfs map[uint8]progIf } // progIf PCI Programming Interface. type progIf struct { name string } // parse parses a PCI IDS entry. func (p *parser) parse() Interface { db := &pcidb{ vendors: map[uint16]vendor{}, classes: map[uint32]class{}, } // Used for housekeeping, breadcrumb for aggregated types. var hkVendor vendor var hkDevice device var hkClass class var hkSubClass subClass var hkFullID uint32 = 0 var hkFullName [2]string for { tok, lit := p.scan() // We're ignoring COMMENT, NEWLINE. // An EOF will break the loop. if tok == EOF { break } // PCI vendors ------------------------------------------------- if tok == VENDOR { id, _ := strconv.ParseUint(lit.ID, 16, 16) db.vendors[uint16(id)] = vendor{ name: lit.name, devices: map[uint16]device{}, } hkVendor = db.vendors[uint16(id)] } if tok == DEVICE { id, _ := strconv.ParseUint(lit.ID, 16, 16) hkVendor.devices[uint16(id)] = device{ name: lit.name, subVendors: map[uint16]subVendor{}, } hkDevice = hkVendor.devices[uint16(id)] } if tok == SUBVENDOR { id, _ := strconv.ParseUint(lit.ID, 16, 16) hkDevice.subVendors[uint16(id)] = subVendor{ SubDevices: map[uint16]SubDevice{}, } subvendor := hkDevice.subVendors[uint16(id)] subid, _ := strconv.ParseUint(lit.name, 16, 16) subvendor.SubDevices[uint16(subid)] = SubDevice{ name: lit.SubName, } } // PCI classes ------------------------------------------------- if tok == CLASS { id, _ := strconv.ParseUint(lit.ID, 16, 32) db.classes[uint32(id)] = class{ name: lit.name, subClasses: map[uint32]subClass{}, } hkClass = db.classes[uint32(id)] hkFullID = uint32(id) << 16 hkFullID &= 0xFFFF0000 hkFullName[0] = fmt.Sprintf("%s (%02x)", lit.name, id) } if tok == SUBCLASS { id, _ := strconv.ParseUint(lit.ID, 16, 8) hkClass.subClasses[uint32(id)] = subClass{ name: lit.name, progIfs: map[uint8]progIf{}, } hkSubClass = hkClass.subClasses[uint32(id)] // Clear the last detected subclass. hkFullID &= 0xFFFF0000 hkFullID |= uint32(id) << 8 // Clear the last detected prog iface. hkFullID &= 0xFFFFFF00 hkFullName[1] = fmt.Sprintf("%s (%02x)", lit.name, id) db.classes[uint32(hkFullID)] = class{ name: hkFullName[0] + " | " + hkFullName[1], } } if tok == PROGIF { id, _ := strconv.ParseUint(lit.ID, 16, 8) hkSubClass.progIfs[uint8(id)] = progIf{ name: lit.name, } finalID := hkFullID | uint32(id) name := fmt.Sprintf("%s (%02x)", lit.name, id) finalName := hkFullName[0] + " | " + hkFullName[1] + " | " + name db.classes[finalID] = class{ name: finalName, } } if tok == ILLEGAL { fmt.Printf("warning: illegal token %s %s cannot parse PCI IDS, database may be incomplete ", lit.ID, lit.name) } } return db } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/000077500000000000000000000000001520540370700227505ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/LICENSE000066400000000000000000000261361520540370700237650ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/000077500000000000000000000000001520540370700235315ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/dl/000077500000000000000000000000001520540370700241305ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/dl/dl.go000066400000000000000000000046001520540370700250560ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dl import ( "errors" "fmt" "runtime" "unsafe" ) // #cgo LDFLAGS: -ldl // #include // #include import "C" const ( RTLD_LAZY = C.RTLD_LAZY RTLD_NOW = C.RTLD_NOW RTLD_GLOBAL = C.RTLD_GLOBAL RTLD_LOCAL = C.RTLD_LOCAL RTLD_NODELETE = C.RTLD_NODELETE RTLD_NOLOAD = C.RTLD_NOLOAD ) type DynamicLibrary struct { Name string Flags int handle unsafe.Pointer } func New(name string, flags int) *DynamicLibrary { return &DynamicLibrary{ Name: name, Flags: flags, handle: nil, } } func withOSLock(action func() error) error { runtime.LockOSThread() defer runtime.UnlockOSThread() return action() } func dlError() error { lastErr := C.dlerror() if lastErr == nil { return nil } return errors.New(C.GoString(lastErr)) } func (dl *DynamicLibrary) Open() error { name := C.CString(dl.Name) defer C.free(unsafe.Pointer(name)) if err := withOSLock(func() error { handle := C.dlopen(name, C.int(dl.Flags)) if handle == nil { return dlError() } dl.handle = handle return nil }); err != nil { return err } return nil } func (dl *DynamicLibrary) Close() error { if dl.handle == nil { return nil } if err := withOSLock(func() error { if C.dlclose(dl.handle) != 0 { return dlError() } dl.handle = nil return nil }); err != nil { return err } return nil } func (dl *DynamicLibrary) Lookup(symbol string) error { sym := C.CString(symbol) defer C.free(unsafe.Pointer(sym)) var pointer unsafe.Pointer if err := withOSLock(func() error { // Call dlError() to clear out any previous errors. _ = dlError() pointer = C.dlsym(dl.handle, sym) if pointer == nil { return fmt.Errorf("symbol %q not found: %w", symbol, dlError()) } return nil }); err != nil { return err } return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/dl/dl_linux.go000066400000000000000000000013531520540370700262770ustar00rootroot00000000000000/** # Copyright (c) NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package dl // #cgo LDFLAGS: -ldl // #include // #include import "C" const ( RTLD_DEEPBIND = C.RTLD_DEEPBIND ) NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/000077500000000000000000000000001520540370700245055ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/api.go000066400000000000000000000035011520540370700256040ustar00rootroot00000000000000/** # Copyright 2023 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package nvml // ExtendedInterface defines a set of extensions to the core NVML API. // // TODO: For now the list of methods in this interface need to be kept in sync // with the list of excluded methods for the Interface type in // gen/nvml/generateapi.go. In the future we should automate this. // //go:generate moq -out mock/extendedinterface.go -pkg mock . ExtendedInterface:ExtendedInterface type ExtendedInterface interface { LookupSymbol(string) error } // libraryOptions hold the paramaters than can be set by a LibraryOption type libraryOptions struct { path string flags int } // LibraryOption represents a functional option to configure the underlying NVML library type LibraryOption func(*libraryOptions) // WithLibraryPath provides an option to set the library name to be used by the NVML library. func WithLibraryPath(path string) LibraryOption { return func(o *libraryOptions) { o.path = path } } // SetLibraryOptions applies the specified options to the NVML library. // If this is called when a library is already loaded, an error is raised. func SetLibraryOptions(opts ...LibraryOption) error { libnvml.Lock() defer libnvml.Unlock() if libnvml.refcount != 0 { return errLibraryAlreadyLoaded } libnvml.init(opts...) return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/cgo_helpers.h000066400000000000000000000014511520540370700271510ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // WARNING: THIS FILE WAS AUTOMATICALLY GENERATED. // Code generated by https://git.io/c-for-go. DO NOT EDIT. #include "nvml.h" #include #pragma once #define __CGOGEN 1 NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/cgo_helpers_static.go000066400000000000000000000034541520540370700307030ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml import ( "unsafe" ) import "C" var cgoAllocsUnknown = new(struct{}) type stringHeader struct { Data unsafe.Pointer Len int } func clen(n []byte) int { for i := 0; i < len(n); i++ { if n[i] == 0 { return i } } return len(n) } func uint32SliceToIntSlice(s []uint32) []int { ret := make([]int, len(s)) for i := range s { ret[i] = int(s[i]) } return ret } func convertSlice[T any, I any](input []T) []I { output := make([]I, len(input)) for i, obj := range input { switch v := any(obj).(type) { case I: output[i] = v } } return output } // packPCharString creates a Go string backed by *C.char and avoids copying. func packPCharString(p *C.char) (raw string) { if p != nil && *p != 0 { h := (*stringHeader)(unsafe.Pointer(&raw)) h.Data = unsafe.Pointer(p) for *p != 0 { p = (*C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(p)) + 1)) // p++ } h.Len = int(uintptr(unsafe.Pointer(p)) - uintptr(h.Data)) } return } // unpackPCharString represents the data from Go string as *C.char and avoids copying. func unpackPCharString(str string) (*C.char, *struct{}) { h := (*stringHeader)(unsafe.Pointer(&str)) return (*C.char)(h.Data), cgoAllocsUnknown } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/const.go000066400000000000000000002660131520540370700261720ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // WARNING: THIS FILE WAS AUTOMATICALLY GENERATED. // Code generated by https://git.io/c-for-go. DO NOT EDIT. package nvml /* #cgo linux LDFLAGS: -Wl,--export-dynamic -Wl,--unresolved-symbols=ignore-in-object-files #cgo darwin LDFLAGS: -Wl,-undefined,dynamic_lookup #cgo CFLAGS: -DNVML_NO_UNVERSIONED_FUNC_DEFS=1 #include "nvml.h" #include #include "cgo_helpers.h" */ import "C" const ( // NO_UNVERSIONED_FUNC_DEFS as defined in go-nvml/:24 NO_UNVERSIONED_FUNC_DEFS = 1 // API_VERSION as defined in nvml/nvml.h API_VERSION = 13 // API_VERSION_STR as defined in nvml/nvml.h API_VERSION_STR = "13" // VALUE_NOT_AVAILABLE as defined in nvml/nvml.h VALUE_NOT_AVAILABLE = -1 // DEVICE_PCI_BUS_ID_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_PCI_BUS_ID_BUFFER_SIZE = 32 // DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE as defined in nvml/nvml.h DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE = 16 // DEVICE_PCI_BUS_ID_LEGACY_FMT as defined in nvml/nvml.h DEVICE_PCI_BUS_ID_LEGACY_FMT = "%04X:%02X:%02X.0" // DEVICE_PCI_BUS_ID_FMT as defined in nvml/nvml.h DEVICE_PCI_BUS_ID_FMT = "%08X:%02X:%02X.0" // NVLINK_MAX_LINKS as defined in nvml/nvml.h NVLINK_MAX_LINKS = 18 // TOPOLOGY_CPU as defined in nvml/nvml.h TOPOLOGY_CPU = 0 // MAX_PHYSICAL_BRIDGE as defined in nvml/nvml.h MAX_PHYSICAL_BRIDGE = 128 // MAX_THERMAL_SENSORS_PER_GPU as defined in nvml/nvml.h MAX_THERMAL_SENSORS_PER_GPU = 3 // DEVICE_UUID_ASCII_LEN as defined in nvml/nvml.h DEVICE_UUID_ASCII_LEN = 41 // DEVICE_UUID_BINARY_LEN as defined in nvml/nvml.h DEVICE_UUID_BINARY_LEN = 16 // FlagDefault as defined in nvml/nvml.h FlagDefault = 0 // FlagForce as defined in nvml/nvml.h FlagForce = 1 // SINGLE_BIT_ECC as defined in nvml/nvml.h SINGLE_BIT_ECC = 0 // DOUBLE_BIT_ECC as defined in nvml/nvml.h DOUBLE_BIT_ECC = 0 // MAX_GPU_PERF_PSTATES as defined in nvml/nvml.h MAX_GPU_PERF_PSTATES = 16 // PERF_MODES_BUFFER_SIZE as defined in nvml/nvml.h PERF_MODES_BUFFER_SIZE = 2048 // POWER_MIZER_MODE_ADAPTIVE as defined in nvml/nvml.h POWER_MIZER_MODE_ADAPTIVE = 0 // POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE as defined in nvml/nvml.h POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE = 1 // POWER_MIZER_MODE_AUTO as defined in nvml/nvml.h POWER_MIZER_MODE_AUTO = 2 // POWER_MIZER_MODE_PREFER_CONSISTENT_PERFORMANCE as defined in nvml/nvml.h POWER_MIZER_MODE_PREFER_CONSISTENT_PERFORMANCE = 3 // GSP_FIRMWARE_VERSION_BUF_SIZE as defined in nvml/nvml.h GSP_FIRMWARE_VERSION_BUF_SIZE = 64 // DEVICE_ARCH_KEPLER as defined in nvml/nvml.h DEVICE_ARCH_KEPLER = 2 // DEVICE_ARCH_MAXWELL as defined in nvml/nvml.h DEVICE_ARCH_MAXWELL = 3 // DEVICE_ARCH_PASCAL as defined in nvml/nvml.h DEVICE_ARCH_PASCAL = 4 // DEVICE_ARCH_VOLTA as defined in nvml/nvml.h DEVICE_ARCH_VOLTA = 5 // DEVICE_ARCH_TURING as defined in nvml/nvml.h DEVICE_ARCH_TURING = 6 // DEVICE_ARCH_AMPERE as defined in nvml/nvml.h DEVICE_ARCH_AMPERE = 7 // DEVICE_ARCH_ADA as defined in nvml/nvml.h DEVICE_ARCH_ADA = 8 // DEVICE_ARCH_HOPPER as defined in nvml/nvml.h DEVICE_ARCH_HOPPER = 9 // DEVICE_ARCH_BLACKWELL as defined in nvml/nvml.h DEVICE_ARCH_BLACKWELL = 10 // DEVICE_ARCH_UNKNOWN as defined in nvml/nvml.h DEVICE_ARCH_UNKNOWN = 4294967295 // BUS_TYPE_UNKNOWN as defined in nvml/nvml.h BUS_TYPE_UNKNOWN = 0 // BUS_TYPE_PCI as defined in nvml/nvml.h BUS_TYPE_PCI = 1 // BUS_TYPE_PCIE as defined in nvml/nvml.h BUS_TYPE_PCIE = 2 // BUS_TYPE_FPCI as defined in nvml/nvml.h BUS_TYPE_FPCI = 3 // BUS_TYPE_AGP as defined in nvml/nvml.h BUS_TYPE_AGP = 4 // FAN_POLICY_TEMPERATURE_CONTINOUS_SW as defined in nvml/nvml.h FAN_POLICY_TEMPERATURE_CONTINOUS_SW = 0 // FAN_POLICY_MANUAL as defined in nvml/nvml.h FAN_POLICY_MANUAL = 1 // POWER_SOURCE_AC as defined in nvml/nvml.h POWER_SOURCE_AC = 0 // POWER_SOURCE_BATTERY as defined in nvml/nvml.h POWER_SOURCE_BATTERY = 1 // POWER_SOURCE_UNDERSIZED as defined in nvml/nvml.h POWER_SOURCE_UNDERSIZED = 2 // PCIE_LINK_MAX_SPEED_INVALID as defined in nvml/nvml.h PCIE_LINK_MAX_SPEED_INVALID = 0 // PCIE_LINK_MAX_SPEED_2500MBPS as defined in nvml/nvml.h PCIE_LINK_MAX_SPEED_2500MBPS = 1 // PCIE_LINK_MAX_SPEED_5000MBPS as defined in nvml/nvml.h PCIE_LINK_MAX_SPEED_5000MBPS = 2 // PCIE_LINK_MAX_SPEED_8000MBPS as defined in nvml/nvml.h PCIE_LINK_MAX_SPEED_8000MBPS = 3 // PCIE_LINK_MAX_SPEED_16000MBPS as defined in nvml/nvml.h PCIE_LINK_MAX_SPEED_16000MBPS = 4 // PCIE_LINK_MAX_SPEED_32000MBPS as defined in nvml/nvml.h PCIE_LINK_MAX_SPEED_32000MBPS = 5 // PCIE_LINK_MAX_SPEED_64000MBPS as defined in nvml/nvml.h PCIE_LINK_MAX_SPEED_64000MBPS = 6 // ADAPTIVE_CLOCKING_INFO_STATUS_DISABLED as defined in nvml/nvml.h ADAPTIVE_CLOCKING_INFO_STATUS_DISABLED = 0 // ADAPTIVE_CLOCKING_INFO_STATUS_ENABLED as defined in nvml/nvml.h ADAPTIVE_CLOCKING_INFO_STATUS_ENABLED = 1 // MAX_GPU_UTILIZATIONS as defined in nvml/nvml.h MAX_GPU_UTILIZATIONS = 8 // PCIE_ATOMICS_CAP_FETCHADD32 as defined in nvml/nvml.h PCIE_ATOMICS_CAP_FETCHADD32 = 1 // PCIE_ATOMICS_CAP_FETCHADD64 as defined in nvml/nvml.h PCIE_ATOMICS_CAP_FETCHADD64 = 2 // PCIE_ATOMICS_CAP_SWAP32 as defined in nvml/nvml.h PCIE_ATOMICS_CAP_SWAP32 = 4 // PCIE_ATOMICS_CAP_SWAP64 as defined in nvml/nvml.h PCIE_ATOMICS_CAP_SWAP64 = 8 // PCIE_ATOMICS_CAP_CAS32 as defined in nvml/nvml.h PCIE_ATOMICS_CAP_CAS32 = 16 // PCIE_ATOMICS_CAP_CAS64 as defined in nvml/nvml.h PCIE_ATOMICS_CAP_CAS64 = 32 // PCIE_ATOMICS_CAP_CAS128 as defined in nvml/nvml.h PCIE_ATOMICS_CAP_CAS128 = 64 // PCIE_ATOMICS_OPS_MAX as defined in nvml/nvml.h PCIE_ATOMICS_OPS_MAX = 7 // POWER_SCOPE_GPU as defined in nvml/nvml.h POWER_SCOPE_GPU = 0 // POWER_SCOPE_MODULE as defined in nvml/nvml.h POWER_SCOPE_MODULE = 1 // POWER_SCOPE_MEMORY as defined in nvml/nvml.h POWER_SCOPE_MEMORY = 2 // GRID_LICENSE_EXPIRY_NOT_AVAILABLE as defined in nvml/nvml.h GRID_LICENSE_EXPIRY_NOT_AVAILABLE = 0 // GRID_LICENSE_EXPIRY_INVALID as defined in nvml/nvml.h GRID_LICENSE_EXPIRY_INVALID = 1 // GRID_LICENSE_EXPIRY_VALID as defined in nvml/nvml.h GRID_LICENSE_EXPIRY_VALID = 2 // GRID_LICENSE_EXPIRY_NOT_APPLICABLE as defined in nvml/nvml.h GRID_LICENSE_EXPIRY_NOT_APPLICABLE = 3 // GRID_LICENSE_EXPIRY_PERMANENT as defined in nvml/nvml.h GRID_LICENSE_EXPIRY_PERMANENT = 4 // GRID_LICENSE_BUFFER_SIZE as defined in nvml/nvml.h GRID_LICENSE_BUFFER_SIZE = 128 // VGPU_NAME_BUFFER_SIZE as defined in nvml/nvml.h VGPU_NAME_BUFFER_SIZE = 64 // GRID_LICENSE_FEATURE_MAX_COUNT as defined in nvml/nvml.h GRID_LICENSE_FEATURE_MAX_COUNT = 3 // INVALID_VGPU_PLACEMENT_ID as defined in nvml/nvml.h INVALID_VGPU_PLACEMENT_ID = 65535 // VGPU_PGPU_HETEROGENEOUS_MODE as defined in nvml/nvml.h VGPU_PGPU_HETEROGENEOUS_MODE = 0 // VGPU_PGPU_HOMOGENEOUS_MODE as defined in nvml/nvml.h VGPU_PGPU_HOMOGENEOUS_MODE = 1 // VGPU_SCHEDULER_POLICY_UNKNOWN as defined in nvml/nvml.h VGPU_SCHEDULER_POLICY_UNKNOWN = 0 // VGPU_SCHEDULER_POLICY_BEST_EFFORT as defined in nvml/nvml.h VGPU_SCHEDULER_POLICY_BEST_EFFORT = 1 // VGPU_SCHEDULER_POLICY_EQUAL_SHARE as defined in nvml/nvml.h VGPU_SCHEDULER_POLICY_EQUAL_SHARE = 2 // VGPU_SCHEDULER_POLICY_FIXED_SHARE as defined in nvml/nvml.h VGPU_SCHEDULER_POLICY_FIXED_SHARE = 3 // SUPPORTED_VGPU_SCHEDULER_POLICY_COUNT as defined in nvml/nvml.h SUPPORTED_VGPU_SCHEDULER_POLICY_COUNT = 3 // SCHEDULER_SW_MAX_LOG_ENTRIES as defined in nvml/nvml.h SCHEDULER_SW_MAX_LOG_ENTRIES = 200 // VGPU_SCHEDULER_ARR_DEFAULT as defined in nvml/nvml.h VGPU_SCHEDULER_ARR_DEFAULT = 0 // VGPU_SCHEDULER_ARR_DISABLE as defined in nvml/nvml.h VGPU_SCHEDULER_ARR_DISABLE = 1 // VGPU_SCHEDULER_ARR_ENABLE as defined in nvml/nvml.h VGPU_SCHEDULER_ARR_ENABLE = 2 // VGPU_SCHEDULER_ENGINE_TYPE_GRAPHICS as defined in nvml/nvml.h VGPU_SCHEDULER_ENGINE_TYPE_GRAPHICS = 1 // GRID_LICENSE_STATE_UNKNOWN as defined in nvml/nvml.h GRID_LICENSE_STATE_UNKNOWN = 0 // GRID_LICENSE_STATE_UNINITIALIZED as defined in nvml/nvml.h GRID_LICENSE_STATE_UNINITIALIZED = 1 // GRID_LICENSE_STATE_UNLICENSED_UNRESTRICTED as defined in nvml/nvml.h GRID_LICENSE_STATE_UNLICENSED_UNRESTRICTED = 2 // GRID_LICENSE_STATE_UNLICENSED_RESTRICTED as defined in nvml/nvml.h GRID_LICENSE_STATE_UNLICENSED_RESTRICTED = 3 // GRID_LICENSE_STATE_UNLICENSED as defined in nvml/nvml.h GRID_LICENSE_STATE_UNLICENSED = 4 // GRID_LICENSE_STATE_LICENSED as defined in nvml/nvml.h GRID_LICENSE_STATE_LICENSED = 5 // FI_DEV_ECC_CURRENT as defined in nvml/nvml.h FI_DEV_ECC_CURRENT = 1 // FI_DEV_ECC_PENDING as defined in nvml/nvml.h FI_DEV_ECC_PENDING = 2 // FI_DEV_ECC_SBE_VOL_TOTAL as defined in nvml/nvml.h FI_DEV_ECC_SBE_VOL_TOTAL = 3 // FI_DEV_ECC_DBE_VOL_TOTAL as defined in nvml/nvml.h FI_DEV_ECC_DBE_VOL_TOTAL = 4 // FI_DEV_ECC_SBE_AGG_TOTAL as defined in nvml/nvml.h FI_DEV_ECC_SBE_AGG_TOTAL = 5 // FI_DEV_ECC_DBE_AGG_TOTAL as defined in nvml/nvml.h FI_DEV_ECC_DBE_AGG_TOTAL = 6 // FI_DEV_ECC_SBE_VOL_L1 as defined in nvml/nvml.h FI_DEV_ECC_SBE_VOL_L1 = 7 // FI_DEV_ECC_DBE_VOL_L1 as defined in nvml/nvml.h FI_DEV_ECC_DBE_VOL_L1 = 8 // FI_DEV_ECC_SBE_VOL_L2 as defined in nvml/nvml.h FI_DEV_ECC_SBE_VOL_L2 = 9 // FI_DEV_ECC_DBE_VOL_L2 as defined in nvml/nvml.h FI_DEV_ECC_DBE_VOL_L2 = 10 // FI_DEV_ECC_SBE_VOL_DEV as defined in nvml/nvml.h FI_DEV_ECC_SBE_VOL_DEV = 11 // FI_DEV_ECC_DBE_VOL_DEV as defined in nvml/nvml.h FI_DEV_ECC_DBE_VOL_DEV = 12 // FI_DEV_ECC_SBE_VOL_REG as defined in nvml/nvml.h FI_DEV_ECC_SBE_VOL_REG = 13 // FI_DEV_ECC_DBE_VOL_REG as defined in nvml/nvml.h FI_DEV_ECC_DBE_VOL_REG = 14 // FI_DEV_ECC_SBE_VOL_TEX as defined in nvml/nvml.h FI_DEV_ECC_SBE_VOL_TEX = 15 // FI_DEV_ECC_DBE_VOL_TEX as defined in nvml/nvml.h FI_DEV_ECC_DBE_VOL_TEX = 16 // FI_DEV_ECC_DBE_VOL_CBU as defined in nvml/nvml.h FI_DEV_ECC_DBE_VOL_CBU = 17 // FI_DEV_ECC_SBE_AGG_L1 as defined in nvml/nvml.h FI_DEV_ECC_SBE_AGG_L1 = 18 // FI_DEV_ECC_DBE_AGG_L1 as defined in nvml/nvml.h FI_DEV_ECC_DBE_AGG_L1 = 19 // FI_DEV_ECC_SBE_AGG_L2 as defined in nvml/nvml.h FI_DEV_ECC_SBE_AGG_L2 = 20 // FI_DEV_ECC_DBE_AGG_L2 as defined in nvml/nvml.h FI_DEV_ECC_DBE_AGG_L2 = 21 // FI_DEV_ECC_SBE_AGG_DEV as defined in nvml/nvml.h FI_DEV_ECC_SBE_AGG_DEV = 22 // FI_DEV_ECC_DBE_AGG_DEV as defined in nvml/nvml.h FI_DEV_ECC_DBE_AGG_DEV = 23 // FI_DEV_ECC_SBE_AGG_REG as defined in nvml/nvml.h FI_DEV_ECC_SBE_AGG_REG = 24 // FI_DEV_ECC_DBE_AGG_REG as defined in nvml/nvml.h FI_DEV_ECC_DBE_AGG_REG = 25 // FI_DEV_ECC_SBE_AGG_TEX as defined in nvml/nvml.h FI_DEV_ECC_SBE_AGG_TEX = 26 // FI_DEV_ECC_DBE_AGG_TEX as defined in nvml/nvml.h FI_DEV_ECC_DBE_AGG_TEX = 27 // FI_DEV_ECC_DBE_AGG_CBU as defined in nvml/nvml.h FI_DEV_ECC_DBE_AGG_CBU = 28 // FI_DEV_RETIRED_SBE as defined in nvml/nvml.h FI_DEV_RETIRED_SBE = 29 // FI_DEV_RETIRED_DBE as defined in nvml/nvml.h FI_DEV_RETIRED_DBE = 30 // FI_DEV_RETIRED_PENDING as defined in nvml/nvml.h FI_DEV_RETIRED_PENDING = 31 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L0 = 32 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L1 = 33 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L2 = 34 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L3 = 35 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L4 = 36 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L5 = 37 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_TOTAL as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_TOTAL = 38 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L0 = 39 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L1 = 40 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L2 = 41 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L3 = 42 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L4 = 43 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L5 = 44 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_TOTAL as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_TOTAL = 45 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L0 = 46 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L1 = 47 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L2 = 48 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L3 = 49 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L4 = 50 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L5 = 51 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_TOTAL as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_TOTAL = 52 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L0 = 53 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L1 = 54 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L2 = 55 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L3 = 56 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L4 = 57 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L5 = 58 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_TOTAL as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_TOTAL = 59 // FI_DEV_NVLINK_BANDWIDTH_C0_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L0 = 60 // FI_DEV_NVLINK_BANDWIDTH_C0_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L1 = 61 // FI_DEV_NVLINK_BANDWIDTH_C0_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L2 = 62 // FI_DEV_NVLINK_BANDWIDTH_C0_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L3 = 63 // FI_DEV_NVLINK_BANDWIDTH_C0_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L4 = 64 // FI_DEV_NVLINK_BANDWIDTH_C0_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L5 = 65 // FI_DEV_NVLINK_BANDWIDTH_C0_TOTAL as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_TOTAL = 66 // FI_DEV_NVLINK_BANDWIDTH_C1_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L0 = 67 // FI_DEV_NVLINK_BANDWIDTH_C1_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L1 = 68 // FI_DEV_NVLINK_BANDWIDTH_C1_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L2 = 69 // FI_DEV_NVLINK_BANDWIDTH_C1_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L3 = 70 // FI_DEV_NVLINK_BANDWIDTH_C1_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L4 = 71 // FI_DEV_NVLINK_BANDWIDTH_C1_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L5 = 72 // FI_DEV_NVLINK_BANDWIDTH_C1_TOTAL as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_TOTAL = 73 // FI_DEV_PERF_POLICY_POWER as defined in nvml/nvml.h FI_DEV_PERF_POLICY_POWER = 74 // FI_DEV_PERF_POLICY_THERMAL as defined in nvml/nvml.h FI_DEV_PERF_POLICY_THERMAL = 75 // FI_DEV_PERF_POLICY_SYNC_BOOST as defined in nvml/nvml.h FI_DEV_PERF_POLICY_SYNC_BOOST = 76 // FI_DEV_PERF_POLICY_BOARD_LIMIT as defined in nvml/nvml.h FI_DEV_PERF_POLICY_BOARD_LIMIT = 77 // FI_DEV_PERF_POLICY_LOW_UTILIZATION as defined in nvml/nvml.h FI_DEV_PERF_POLICY_LOW_UTILIZATION = 78 // FI_DEV_PERF_POLICY_RELIABILITY as defined in nvml/nvml.h FI_DEV_PERF_POLICY_RELIABILITY = 79 // FI_DEV_PERF_POLICY_TOTAL_APP_CLOCKS as defined in nvml/nvml.h FI_DEV_PERF_POLICY_TOTAL_APP_CLOCKS = 80 // FI_DEV_PERF_POLICY_TOTAL_BASE_CLOCKS as defined in nvml/nvml.h FI_DEV_PERF_POLICY_TOTAL_BASE_CLOCKS = 81 // FI_DEV_MEMORY_TEMP as defined in nvml/nvml.h FI_DEV_MEMORY_TEMP = 82 // FI_DEV_TOTAL_ENERGY_CONSUMPTION as defined in nvml/nvml.h FI_DEV_TOTAL_ENERGY_CONSUMPTION = 83 // FI_DEV_NVLINK_SPEED_MBPS_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L0 = 84 // FI_DEV_NVLINK_SPEED_MBPS_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L1 = 85 // FI_DEV_NVLINK_SPEED_MBPS_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L2 = 86 // FI_DEV_NVLINK_SPEED_MBPS_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L3 = 87 // FI_DEV_NVLINK_SPEED_MBPS_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L4 = 88 // FI_DEV_NVLINK_SPEED_MBPS_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L5 = 89 // FI_DEV_NVLINK_SPEED_MBPS_COMMON as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_COMMON = 90 // FI_DEV_NVLINK_LINK_COUNT as defined in nvml/nvml.h FI_DEV_NVLINK_LINK_COUNT = 91 // FI_DEV_RETIRED_PENDING_SBE as defined in nvml/nvml.h FI_DEV_RETIRED_PENDING_SBE = 92 // FI_DEV_RETIRED_PENDING_DBE as defined in nvml/nvml.h FI_DEV_RETIRED_PENDING_DBE = 93 // FI_DEV_PCIE_REPLAY_COUNTER as defined in nvml/nvml.h FI_DEV_PCIE_REPLAY_COUNTER = 94 // FI_DEV_PCIE_REPLAY_ROLLOVER_COUNTER as defined in nvml/nvml.h FI_DEV_PCIE_REPLAY_ROLLOVER_COUNTER = 95 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L6 = 96 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L7 = 97 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L8 = 98 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L9 = 99 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L10 = 100 // FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L11 = 101 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L6 = 102 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L7 = 103 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L8 = 104 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L9 = 105 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L10 = 106 // FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L11 = 107 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L6 = 108 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L7 = 109 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L8 = 110 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L9 = 111 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L10 = 112 // FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L11 = 113 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L6 = 114 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L7 = 115 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L8 = 116 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L9 = 117 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L10 = 118 // FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L11 = 119 // FI_DEV_NVLINK_BANDWIDTH_C0_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L6 = 120 // FI_DEV_NVLINK_BANDWIDTH_C0_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L7 = 121 // FI_DEV_NVLINK_BANDWIDTH_C0_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L8 = 122 // FI_DEV_NVLINK_BANDWIDTH_C0_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L9 = 123 // FI_DEV_NVLINK_BANDWIDTH_C0_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L10 = 124 // FI_DEV_NVLINK_BANDWIDTH_C0_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C0_L11 = 125 // FI_DEV_NVLINK_BANDWIDTH_C1_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L6 = 126 // FI_DEV_NVLINK_BANDWIDTH_C1_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L7 = 127 // FI_DEV_NVLINK_BANDWIDTH_C1_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L8 = 128 // FI_DEV_NVLINK_BANDWIDTH_C1_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L9 = 129 // FI_DEV_NVLINK_BANDWIDTH_C1_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L10 = 130 // FI_DEV_NVLINK_BANDWIDTH_C1_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_BANDWIDTH_C1_L11 = 131 // FI_DEV_NVLINK_SPEED_MBPS_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L6 = 132 // FI_DEV_NVLINK_SPEED_MBPS_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L7 = 133 // FI_DEV_NVLINK_SPEED_MBPS_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L8 = 134 // FI_DEV_NVLINK_SPEED_MBPS_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L9 = 135 // FI_DEV_NVLINK_SPEED_MBPS_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L10 = 136 // FI_DEV_NVLINK_SPEED_MBPS_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_SPEED_MBPS_L11 = 137 // FI_DEV_NVLINK_THROUGHPUT_DATA_TX as defined in nvml/nvml.h FI_DEV_NVLINK_THROUGHPUT_DATA_TX = 138 // FI_DEV_NVLINK_THROUGHPUT_DATA_RX as defined in nvml/nvml.h FI_DEV_NVLINK_THROUGHPUT_DATA_RX = 139 // FI_DEV_NVLINK_THROUGHPUT_RAW_TX as defined in nvml/nvml.h FI_DEV_NVLINK_THROUGHPUT_RAW_TX = 140 // FI_DEV_NVLINK_THROUGHPUT_RAW_RX as defined in nvml/nvml.h FI_DEV_NVLINK_THROUGHPUT_RAW_RX = 141 // FI_DEV_REMAPPED_COR as defined in nvml/nvml.h FI_DEV_REMAPPED_COR = 142 // FI_DEV_REMAPPED_UNC as defined in nvml/nvml.h FI_DEV_REMAPPED_UNC = 143 // FI_DEV_REMAPPED_PENDING as defined in nvml/nvml.h FI_DEV_REMAPPED_PENDING = 144 // FI_DEV_REMAPPED_FAILURE as defined in nvml/nvml.h FI_DEV_REMAPPED_FAILURE = 145 // FI_DEV_NVLINK_REMOTE_NVLINK_ID as defined in nvml/nvml.h FI_DEV_NVLINK_REMOTE_NVLINK_ID = 146 // FI_DEV_NVSWITCH_CONNECTED_LINK_COUNT as defined in nvml/nvml.h FI_DEV_NVSWITCH_CONNECTED_LINK_COUNT = 147 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L0 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L0 = 148 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L1 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L1 = 149 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L2 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L2 = 150 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L3 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L3 = 151 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L4 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L4 = 152 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L5 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L5 = 153 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L6 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L6 = 154 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L7 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L7 = 155 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L8 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L8 = 156 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L9 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L9 = 157 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L10 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L10 = 158 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L11 as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L11 = 159 // FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_TOTAL as defined in nvml/nvml.h FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_TOTAL = 160 // FI_DEV_NVLINK_ERROR_DL_REPLAY as defined in nvml/nvml.h FI_DEV_NVLINK_ERROR_DL_REPLAY = 161 // FI_DEV_NVLINK_ERROR_DL_RECOVERY as defined in nvml/nvml.h FI_DEV_NVLINK_ERROR_DL_RECOVERY = 162 // FI_DEV_NVLINK_ERROR_DL_CRC as defined in nvml/nvml.h FI_DEV_NVLINK_ERROR_DL_CRC = 163 // FI_DEV_NVLINK_GET_SPEED as defined in nvml/nvml.h FI_DEV_NVLINK_GET_SPEED = 164 // FI_DEV_NVLINK_GET_STATE as defined in nvml/nvml.h FI_DEV_NVLINK_GET_STATE = 165 // FI_DEV_NVLINK_GET_VERSION as defined in nvml/nvml.h FI_DEV_NVLINK_GET_VERSION = 166 // FI_DEV_NVLINK_GET_POWER_STATE as defined in nvml/nvml.h FI_DEV_NVLINK_GET_POWER_STATE = 167 // FI_DEV_NVLINK_GET_POWER_THRESHOLD as defined in nvml/nvml.h FI_DEV_NVLINK_GET_POWER_THRESHOLD = 168 // FI_DEV_PCIE_L0_TO_RECOVERY_COUNTER as defined in nvml/nvml.h FI_DEV_PCIE_L0_TO_RECOVERY_COUNTER = 169 // FI_DEV_C2C_LINK_COUNT as defined in nvml/nvml.h FI_DEV_C2C_LINK_COUNT = 170 // FI_DEV_C2C_LINK_GET_STATUS as defined in nvml/nvml.h FI_DEV_C2C_LINK_GET_STATUS = 171 // FI_DEV_C2C_LINK_GET_MAX_BW as defined in nvml/nvml.h FI_DEV_C2C_LINK_GET_MAX_BW = 172 // FI_DEV_PCIE_COUNT_CORRECTABLE_ERRORS as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_CORRECTABLE_ERRORS = 173 // FI_DEV_PCIE_COUNT_NAKS_RECEIVED as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_NAKS_RECEIVED = 174 // FI_DEV_PCIE_COUNT_RECEIVER_ERROR as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_RECEIVER_ERROR = 175 // FI_DEV_PCIE_COUNT_BAD_TLP as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_BAD_TLP = 176 // FI_DEV_PCIE_COUNT_NAKS_SENT as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_NAKS_SENT = 177 // FI_DEV_PCIE_COUNT_BAD_DLLP as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_BAD_DLLP = 178 // FI_DEV_PCIE_COUNT_NON_FATAL_ERROR as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_NON_FATAL_ERROR = 179 // FI_DEV_PCIE_COUNT_FATAL_ERROR as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_FATAL_ERROR = 180 // FI_DEV_PCIE_COUNT_UNSUPPORTED_REQ as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_UNSUPPORTED_REQ = 181 // FI_DEV_PCIE_COUNT_LCRC_ERROR as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_LCRC_ERROR = 182 // FI_DEV_PCIE_COUNT_LANE_ERROR as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_LANE_ERROR = 183 // FI_DEV_IS_RESETLESS_MIG_SUPPORTED as defined in nvml/nvml.h FI_DEV_IS_RESETLESS_MIG_SUPPORTED = 184 // FI_DEV_POWER_AVERAGE as defined in nvml/nvml.h FI_DEV_POWER_AVERAGE = 185 // FI_DEV_POWER_INSTANT as defined in nvml/nvml.h FI_DEV_POWER_INSTANT = 186 // FI_DEV_POWER_MIN_LIMIT as defined in nvml/nvml.h FI_DEV_POWER_MIN_LIMIT = 187 // FI_DEV_POWER_MAX_LIMIT as defined in nvml/nvml.h FI_DEV_POWER_MAX_LIMIT = 188 // FI_DEV_POWER_DEFAULT_LIMIT as defined in nvml/nvml.h FI_DEV_POWER_DEFAULT_LIMIT = 189 // FI_DEV_POWER_CURRENT_LIMIT as defined in nvml/nvml.h FI_DEV_POWER_CURRENT_LIMIT = 190 // FI_DEV_ENERGY as defined in nvml/nvml.h FI_DEV_ENERGY = 191 // FI_DEV_POWER_REQUESTED_LIMIT as defined in nvml/nvml.h FI_DEV_POWER_REQUESTED_LIMIT = 192 // FI_DEV_TEMPERATURE_SHUTDOWN_TLIMIT as defined in nvml/nvml.h FI_DEV_TEMPERATURE_SHUTDOWN_TLIMIT = 193 // FI_DEV_TEMPERATURE_SLOWDOWN_TLIMIT as defined in nvml/nvml.h FI_DEV_TEMPERATURE_SLOWDOWN_TLIMIT = 194 // FI_DEV_TEMPERATURE_MEM_MAX_TLIMIT as defined in nvml/nvml.h FI_DEV_TEMPERATURE_MEM_MAX_TLIMIT = 195 // FI_DEV_TEMPERATURE_GPU_MAX_TLIMIT as defined in nvml/nvml.h FI_DEV_TEMPERATURE_GPU_MAX_TLIMIT = 196 // FI_DEV_PCIE_COUNT_TX_BYTES as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_TX_BYTES = 197 // FI_DEV_PCIE_COUNT_RX_BYTES as defined in nvml/nvml.h FI_DEV_PCIE_COUNT_RX_BYTES = 198 // FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE as defined in nvml/nvml.h FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE = 199 // FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX as defined in nvml/nvml.h FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX = 200 // FI_DEV_NVLINK_COUNT_XMIT_PACKETS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_XMIT_PACKETS = 201 // FI_DEV_NVLINK_COUNT_XMIT_BYTES as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_XMIT_BYTES = 202 // FI_DEV_NVLINK_COUNT_RCV_PACKETS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RCV_PACKETS = 203 // FI_DEV_NVLINK_COUNT_RCV_BYTES as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RCV_BYTES = 204 // FI_DEV_NVLINK_COUNT_VL15_DROPPED as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_VL15_DROPPED = 205 // FI_DEV_NVLINK_COUNT_MALFORMED_PACKET_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_MALFORMED_PACKET_ERRORS = 206 // FI_DEV_NVLINK_COUNT_BUFFER_OVERRUN_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_BUFFER_OVERRUN_ERRORS = 207 // FI_DEV_NVLINK_COUNT_RCV_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RCV_ERRORS = 208 // FI_DEV_NVLINK_COUNT_RCV_REMOTE_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RCV_REMOTE_ERRORS = 209 // FI_DEV_NVLINK_COUNT_RCV_GENERAL_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RCV_GENERAL_ERRORS = 210 // FI_DEV_NVLINK_COUNT_LOCAL_LINK_INTEGRITY_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_LOCAL_LINK_INTEGRITY_ERRORS = 211 // FI_DEV_NVLINK_COUNT_XMIT_DISCARDS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_XMIT_DISCARDS = 212 // FI_DEV_NVLINK_COUNT_LINK_RECOVERY_SUCCESSFUL_EVENTS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_LINK_RECOVERY_SUCCESSFUL_EVENTS = 213 // FI_DEV_NVLINK_COUNT_LINK_RECOVERY_FAILED_EVENTS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_LINK_RECOVERY_FAILED_EVENTS = 214 // FI_DEV_NVLINK_COUNT_LINK_RECOVERY_EVENTS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_LINK_RECOVERY_EVENTS = 215 // FI_DEV_NVLINK_COUNT_RAW_BER_LANE0 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RAW_BER_LANE0 = 216 // FI_DEV_NVLINK_COUNT_RAW_BER_LANE1 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RAW_BER_LANE1 = 217 // FI_DEV_NVLINK_COUNT_RAW_BER as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_RAW_BER = 218 // FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS = 219 // FI_DEV_NVLINK_COUNT_EFFECTIVE_BER as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_EFFECTIVE_BER = 220 // FI_DEV_NVLINK_COUNT_SYMBOL_ERRORS as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_SYMBOL_ERRORS = 221 // FI_DEV_NVLINK_COUNT_SYMBOL_BER as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_SYMBOL_BER = 222 // FI_DEV_NVLINK_GET_POWER_THRESHOLD_MIN as defined in nvml/nvml.h FI_DEV_NVLINK_GET_POWER_THRESHOLD_MIN = 223 // FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS as defined in nvml/nvml.h FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS = 224 // FI_DEV_NVLINK_GET_POWER_THRESHOLD_SUPPORTED as defined in nvml/nvml.h FI_DEV_NVLINK_GET_POWER_THRESHOLD_SUPPORTED = 225 // FI_DEV_RESET_STATUS as defined in nvml/nvml.h FI_DEV_RESET_STATUS = 226 // FI_DEV_DRAIN_AND_RESET_STATUS as defined in nvml/nvml.h FI_DEV_DRAIN_AND_RESET_STATUS = 227 // FI_DEV_PCIE_OUTBOUND_ATOMICS_MASK as defined in nvml/nvml.h FI_DEV_PCIE_OUTBOUND_ATOMICS_MASK = 228 // FI_DEV_PCIE_INBOUND_ATOMICS_MASK as defined in nvml/nvml.h FI_DEV_PCIE_INBOUND_ATOMICS_MASK = 229 // FI_DEV_GET_GPU_RECOVERY_ACTION as defined in nvml/nvml.h FI_DEV_GET_GPU_RECOVERY_ACTION = 230 // FI_DEV_C2C_LINK_ERROR_INTR as defined in nvml/nvml.h FI_DEV_C2C_LINK_ERROR_INTR = 231 // FI_DEV_C2C_LINK_ERROR_REPLAY as defined in nvml/nvml.h FI_DEV_C2C_LINK_ERROR_REPLAY = 232 // FI_DEV_C2C_LINK_ERROR_REPLAY_B2B as defined in nvml/nvml.h FI_DEV_C2C_LINK_ERROR_REPLAY_B2B = 233 // FI_DEV_C2C_LINK_POWER_STATE as defined in nvml/nvml.h FI_DEV_C2C_LINK_POWER_STATE = 234 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_0 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_0 = 235 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_1 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_1 = 236 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_2 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_2 = 237 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_3 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_3 = 238 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_4 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_4 = 239 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_5 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_5 = 240 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_6 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_6 = 241 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_7 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_7 = 242 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_8 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_8 = 243 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_9 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_9 = 244 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_10 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_10 = 245 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_11 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_11 = 246 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_12 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_12 = 247 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_13 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_13 = 248 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_14 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_14 = 249 // FI_DEV_NVLINK_COUNT_FEC_HISTORY_15 as defined in nvml/nvml.h FI_DEV_NVLINK_COUNT_FEC_HISTORY_15 = 250 // FI_DEV_CLOCKS_EVENT_REASON_SW_POWER_CAP as defined in nvml/nvml.h FI_DEV_CLOCKS_EVENT_REASON_SW_POWER_CAP = 74 // FI_DEV_CLOCKS_EVENT_REASON_SYNC_BOOST as defined in nvml/nvml.h FI_DEV_CLOCKS_EVENT_REASON_SYNC_BOOST = 76 // FI_DEV_CLOCKS_EVENT_REASON_SW_THERM_SLOWDOWN as defined in nvml/nvml.h FI_DEV_CLOCKS_EVENT_REASON_SW_THERM_SLOWDOWN = 251 // FI_DEV_CLOCKS_EVENT_REASON_HW_THERM_SLOWDOWN as defined in nvml/nvml.h FI_DEV_CLOCKS_EVENT_REASON_HW_THERM_SLOWDOWN = 252 // FI_DEV_CLOCKS_EVENT_REASON_HW_POWER_BRAKE_SLOWDOWN as defined in nvml/nvml.h FI_DEV_CLOCKS_EVENT_REASON_HW_POWER_BRAKE_SLOWDOWN = 253 // FI_DEV_POWER_SYNC_BALANCING_FREQ as defined in nvml/nvml.h FI_DEV_POWER_SYNC_BALANCING_FREQ = 254 // FI_DEV_POWER_SYNC_BALANCING_AF as defined in nvml/nvml.h FI_DEV_POWER_SYNC_BALANCING_AF = 255 // FI_PWR_SMOOTHING_ENABLED as defined in nvml/nvml.h FI_PWR_SMOOTHING_ENABLED = 256 // FI_PWR_SMOOTHING_PRIV_LVL as defined in nvml/nvml.h FI_PWR_SMOOTHING_PRIV_LVL = 257 // FI_PWR_SMOOTHING_IMM_RAMP_DOWN_ENABLED as defined in nvml/nvml.h FI_PWR_SMOOTHING_IMM_RAMP_DOWN_ENABLED = 258 // FI_PWR_SMOOTHING_APPLIED_TMP_CEIL as defined in nvml/nvml.h FI_PWR_SMOOTHING_APPLIED_TMP_CEIL = 259 // FI_PWR_SMOOTHING_APPLIED_TMP_FLOOR as defined in nvml/nvml.h FI_PWR_SMOOTHING_APPLIED_TMP_FLOOR = 260 // FI_PWR_SMOOTHING_MAX_PERCENT_TMP_FLOOR_SETTING as defined in nvml/nvml.h FI_PWR_SMOOTHING_MAX_PERCENT_TMP_FLOOR_SETTING = 261 // FI_PWR_SMOOTHING_MIN_PERCENT_TMP_FLOOR_SETTING as defined in nvml/nvml.h FI_PWR_SMOOTHING_MIN_PERCENT_TMP_FLOOR_SETTING = 262 // FI_PWR_SMOOTHING_HW_CIRCUITRY_PERCENT_LIFETIME_REMAINING as defined in nvml/nvml.h FI_PWR_SMOOTHING_HW_CIRCUITRY_PERCENT_LIFETIME_REMAINING = 263 // FI_PWR_SMOOTHING_MAX_NUM_PRESET_PROFILES as defined in nvml/nvml.h FI_PWR_SMOOTHING_MAX_NUM_PRESET_PROFILES = 264 // FI_PWR_SMOOTHING_PROFILE_PERCENT_TMP_FLOOR as defined in nvml/nvml.h FI_PWR_SMOOTHING_PROFILE_PERCENT_TMP_FLOOR = 265 // FI_PWR_SMOOTHING_PROFILE_RAMP_UP_RATE as defined in nvml/nvml.h FI_PWR_SMOOTHING_PROFILE_RAMP_UP_RATE = 266 // FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_RATE as defined in nvml/nvml.h FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_RATE = 267 // FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_HYST_VAL as defined in nvml/nvml.h FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_HYST_VAL = 268 // FI_PWR_SMOOTHING_ACTIVE_PRESET_PROFILE as defined in nvml/nvml.h FI_PWR_SMOOTHING_ACTIVE_PRESET_PROFILE = 269 // FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PERCENT_TMP_FLOOR as defined in nvml/nvml.h FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PERCENT_TMP_FLOOR = 270 // FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_UP_RATE as defined in nvml/nvml.h FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_UP_RATE = 271 // FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_RATE as defined in nvml/nvml.h FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_RATE = 272 // FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_HYST_VAL as defined in nvml/nvml.h FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_HYST_VAL = 273 // FI_MAX as defined in nvml/nvml.h FI_MAX = 274 // NVLINK_LOW_POWER_THRESHOLD_UNIT_100US as defined in nvml/nvml.h NVLINK_LOW_POWER_THRESHOLD_UNIT_100US = 0 // NVLINK_LOW_POWER_THRESHOLD_UNIT_50US as defined in nvml/nvml.h NVLINK_LOW_POWER_THRESHOLD_UNIT_50US = 1 // NVLINK_POWER_STATE_HIGH_SPEED as defined in nvml/nvml.h NVLINK_POWER_STATE_HIGH_SPEED = 0 // NVLINK_POWER_STATE_LOW as defined in nvml/nvml.h NVLINK_POWER_STATE_LOW = 1 // NVLINK_LOW_POWER_THRESHOLD_MIN as defined in nvml/nvml.h NVLINK_LOW_POWER_THRESHOLD_MIN = 1 // NVLINK_LOW_POWER_THRESHOLD_MAX as defined in nvml/nvml.h NVLINK_LOW_POWER_THRESHOLD_MAX = 8191 // NVLINK_LOW_POWER_THRESHOLD_RESET as defined in nvml/nvml.h NVLINK_LOW_POWER_THRESHOLD_RESET = 4294967295 // NVLINK_LOW_POWER_THRESHOLD_DEFAULT as defined in nvml/nvml.h NVLINK_LOW_POWER_THRESHOLD_DEFAULT = 4294967295 // C2C_POWER_STATE_FULL_POWER as defined in nvml/nvml.h C2C_POWER_STATE_FULL_POWER = 0 // C2C_POWER_STATE_LOW_POWER as defined in nvml/nvml.h C2C_POWER_STATE_LOW_POWER = 1 // EventTypeNone as defined in nvml/nvml.h EventTypeNone = 0 // EventTypeSingleBitEccError as defined in nvml/nvml.h EventTypeSingleBitEccError = 1 // EventTypeDoubleBitEccError as defined in nvml/nvml.h EventTypeDoubleBitEccError = 2 // EventTypePState as defined in nvml/nvml.h EventTypePState = 4 // EventTypeXidCriticalError as defined in nvml/nvml.h EventTypeXidCriticalError = 8 // EventTypeClock as defined in nvml/nvml.h EventTypeClock = 16 // EventTypePowerSourceChange as defined in nvml/nvml.h EventTypePowerSourceChange = 128 // EventMigConfigChange as defined in nvml/nvml.h EventMigConfigChange = 256 // EventTypeSingleBitEccErrorStorm as defined in nvml/nvml.h EventTypeSingleBitEccErrorStorm = 512 // EventTypeDramRetirementEvent as defined in nvml/nvml.h EventTypeDramRetirementEvent = 1024 // EventTypeDramRetirementFailure as defined in nvml/nvml.h EventTypeDramRetirementFailure = 2048 // EventTypeNonFatalPoisonError as defined in nvml/nvml.h EventTypeNonFatalPoisonError = 4096 // EventTypeFatalPoisonError as defined in nvml/nvml.h EventTypeFatalPoisonError = 8192 // EventTypeGpuUnavailableError as defined in nvml/nvml.h EventTypeGpuUnavailableError = 16384 // EventTypeGpuRecoveryAction as defined in nvml/nvml.h EventTypeGpuRecoveryAction = 32768 // EventTypeAll as defined in nvml/nvml.h EventTypeAll = 65439 // SystemEventTypeGpuDriverUnbind as defined in nvml/nvml.h SystemEventTypeGpuDriverUnbind = 1 // SystemEventTypeGpuDriverBind as defined in nvml/nvml.h SystemEventTypeGpuDriverBind = 2 // SystemEventTypeCount as defined in nvml/nvml.h SystemEventTypeCount = 2 // ClocksEventReasonGpuIdle as defined in nvml/nvml.h ClocksEventReasonGpuIdle = 1 // ClocksEventReasonApplicationsClocksSetting as defined in nvml/nvml.h ClocksEventReasonApplicationsClocksSetting = 2 // ClocksThrottleReasonUserDefinedClocks as defined in nvml/nvml.h ClocksThrottleReasonUserDefinedClocks = 2 // ClocksEventReasonSwPowerCap as defined in nvml/nvml.h ClocksEventReasonSwPowerCap = 4 // ClocksThrottleReasonHwSlowdown as defined in nvml/nvml.h ClocksThrottleReasonHwSlowdown = 8 // ClocksEventReasonSyncBoost as defined in nvml/nvml.h ClocksEventReasonSyncBoost = 16 // ClocksEventReasonSwThermalSlowdown as defined in nvml/nvml.h ClocksEventReasonSwThermalSlowdown = 32 // ClocksThrottleReasonHwThermalSlowdown as defined in nvml/nvml.h ClocksThrottleReasonHwThermalSlowdown = 64 // ClocksThrottleReasonHwPowerBrakeSlowdown as defined in nvml/nvml.h ClocksThrottleReasonHwPowerBrakeSlowdown = 128 // ClocksEventReasonDisplayClockSetting as defined in nvml/nvml.h ClocksEventReasonDisplayClockSetting = 256 // ClocksEventReasonNone as defined in nvml/nvml.h ClocksEventReasonNone = 0 // ClocksEventReasonAll as defined in nvml/nvml.h ClocksEventReasonAll = 511 // ClocksThrottleReasonGpuIdle as defined in nvml/nvml.h ClocksThrottleReasonGpuIdle = 1 // ClocksThrottleReasonApplicationsClocksSetting as defined in nvml/nvml.h ClocksThrottleReasonApplicationsClocksSetting = 2 // ClocksThrottleReasonSyncBoost as defined in nvml/nvml.h ClocksThrottleReasonSyncBoost = 16 // ClocksThrottleReasonSwPowerCap as defined in nvml/nvml.h ClocksThrottleReasonSwPowerCap = 4 // ClocksThrottleReasonSwThermalSlowdown as defined in nvml/nvml.h ClocksThrottleReasonSwThermalSlowdown = 32 // ClocksThrottleReasonDisplayClockSetting as defined in nvml/nvml.h ClocksThrottleReasonDisplayClockSetting = 256 // ClocksThrottleReasonNone as defined in nvml/nvml.h ClocksThrottleReasonNone = 0 // ClocksThrottleReasonAll as defined in nvml/nvml.h ClocksThrottleReasonAll = 511 // NVFBC_SESSION_FLAG_DIFFMAP_ENABLED as defined in nvml/nvml.h NVFBC_SESSION_FLAG_DIFFMAP_ENABLED = 1 // NVFBC_SESSION_FLAG_CLASSIFICATIONMAP_ENABLED as defined in nvml/nvml.h NVFBC_SESSION_FLAG_CLASSIFICATIONMAP_ENABLED = 2 // NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_NO_WAIT as defined in nvml/nvml.h NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_NO_WAIT = 4 // NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_INFINITE as defined in nvml/nvml.h NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_INFINITE = 8 // NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_TIMEOUT as defined in nvml/nvml.h NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_TIMEOUT = 16 // CC_SYSTEM_CPU_CAPS_NONE as defined in nvml/nvml.h CC_SYSTEM_CPU_CAPS_NONE = 0 // CC_SYSTEM_CPU_CAPS_AMD_SEV as defined in nvml/nvml.h CC_SYSTEM_CPU_CAPS_AMD_SEV = 1 // CC_SYSTEM_CPU_CAPS_INTEL_TDX as defined in nvml/nvml.h CC_SYSTEM_CPU_CAPS_INTEL_TDX = 2 // CC_SYSTEM_CPU_CAPS_AMD_SEV_SNP as defined in nvml/nvml.h CC_SYSTEM_CPU_CAPS_AMD_SEV_SNP = 3 // CC_SYSTEM_CPU_CAPS_AMD_SNP_VTOM as defined in nvml/nvml.h CC_SYSTEM_CPU_CAPS_AMD_SNP_VTOM = 4 // CC_SYSTEM_GPUS_CC_NOT_CAPABLE as defined in nvml/nvml.h CC_SYSTEM_GPUS_CC_NOT_CAPABLE = 0 // CC_SYSTEM_GPUS_CC_CAPABLE as defined in nvml/nvml.h CC_SYSTEM_GPUS_CC_CAPABLE = 1 // CC_SYSTEM_DEVTOOLS_MODE_OFF as defined in nvml/nvml.h CC_SYSTEM_DEVTOOLS_MODE_OFF = 0 // CC_SYSTEM_DEVTOOLS_MODE_ON as defined in nvml/nvml.h CC_SYSTEM_DEVTOOLS_MODE_ON = 1 // CC_SYSTEM_ENVIRONMENT_UNAVAILABLE as defined in nvml/nvml.h CC_SYSTEM_ENVIRONMENT_UNAVAILABLE = 0 // CC_SYSTEM_ENVIRONMENT_SIM as defined in nvml/nvml.h CC_SYSTEM_ENVIRONMENT_SIM = 1 // CC_SYSTEM_ENVIRONMENT_PROD as defined in nvml/nvml.h CC_SYSTEM_ENVIRONMENT_PROD = 2 // CC_SYSTEM_FEATURE_DISABLED as defined in nvml/nvml.h CC_SYSTEM_FEATURE_DISABLED = 0 // CC_SYSTEM_FEATURE_ENABLED as defined in nvml/nvml.h CC_SYSTEM_FEATURE_ENABLED = 1 // CC_SYSTEM_MULTIGPU_NONE as defined in nvml/nvml.h CC_SYSTEM_MULTIGPU_NONE = 0 // CC_SYSTEM_MULTIGPU_PROTECTED_PCIE as defined in nvml/nvml.h CC_SYSTEM_MULTIGPU_PROTECTED_PCIE = 1 // CC_SYSTEM_MULTIGPU_NVLE as defined in nvml/nvml.h CC_SYSTEM_MULTIGPU_NVLE = 2 // CC_ACCEPTING_CLIENT_REQUESTS_FALSE as defined in nvml/nvml.h CC_ACCEPTING_CLIENT_REQUESTS_FALSE = 0 // CC_ACCEPTING_CLIENT_REQUESTS_TRUE as defined in nvml/nvml.h CC_ACCEPTING_CLIENT_REQUESTS_TRUE = 1 // GPU_CERT_CHAIN_SIZE as defined in nvml/nvml.h GPU_CERT_CHAIN_SIZE = 4096 // GPU_ATTESTATION_CERT_CHAIN_SIZE as defined in nvml/nvml.h GPU_ATTESTATION_CERT_CHAIN_SIZE = 5120 // CC_GPU_CEC_NONCE_SIZE as defined in nvml/nvml.h CC_GPU_CEC_NONCE_SIZE = 32 // CC_GPU_ATTESTATION_REPORT_SIZE as defined in nvml/nvml.h CC_GPU_ATTESTATION_REPORT_SIZE = 8192 // CC_GPU_CEC_ATTESTATION_REPORT_SIZE as defined in nvml/nvml.h CC_GPU_CEC_ATTESTATION_REPORT_SIZE = 4096 // CC_CEC_ATTESTATION_REPORT_NOT_PRESENT as defined in nvml/nvml.h CC_CEC_ATTESTATION_REPORT_NOT_PRESENT = 0 // CC_CEC_ATTESTATION_REPORT_PRESENT as defined in nvml/nvml.h CC_CEC_ATTESTATION_REPORT_PRESENT = 1 // CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MIN as defined in nvml/nvml.h CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MIN = 50 // CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MAX as defined in nvml/nvml.h CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MAX = 65 // GPU_FABRIC_UUID_LEN as defined in nvml/nvml.h GPU_FABRIC_UUID_LEN = 16 // GPU_FABRIC_STATE_NOT_SUPPORTED as defined in nvml/nvml.h GPU_FABRIC_STATE_NOT_SUPPORTED = 0 // GPU_FABRIC_STATE_NOT_STARTED as defined in nvml/nvml.h GPU_FABRIC_STATE_NOT_STARTED = 1 // GPU_FABRIC_STATE_IN_PROGRESS as defined in nvml/nvml.h GPU_FABRIC_STATE_IN_PROGRESS = 2 // GPU_FABRIC_STATE_COMPLETED as defined in nvml/nvml.h GPU_FABRIC_STATE_COMPLETED = 3 // GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_NOT_SUPPORTED as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_NOT_SUPPORTED = 0 // GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_TRUE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_TRUE = 1 // GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_FALSE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_FALSE = 2 // GPU_FABRIC_HEALTH_MASK_SHIFT_DEGRADED_BW as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_SHIFT_DEGRADED_BW = 0 // GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW = 3 // GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_NOT_SUPPORTED as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_NOT_SUPPORTED = 0 // GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_TRUE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_TRUE = 1 // GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_FALSE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_FALSE = 2 // GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_RECOVERY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_RECOVERY = 2 // GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_RECOVERY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_RECOVERY = 3 // GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_NOT_SUPPORTED as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_NOT_SUPPORTED = 0 // GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_TRUE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_TRUE = 1 // GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_FALSE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_FALSE = 2 // GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_UNHEALTHY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_UNHEALTHY = 4 // GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_UNHEALTHY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_UNHEALTHY = 3 // GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_NOT_SUPPORTED as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_NOT_SUPPORTED = 0 // GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_TRUE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_TRUE = 1 // GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_FALSE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_FALSE = 2 // GPU_FABRIC_HEALTH_MASK_SHIFT_ACCESS_TIMEOUT_RECOVERY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_SHIFT_ACCESS_TIMEOUT_RECOVERY = 6 // GPU_FABRIC_HEALTH_MASK_WIDTH_ACCESS_TIMEOUT_RECOVERY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_WIDTH_ACCESS_TIMEOUT_RECOVERY = 3 // GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NOT_SUPPORTED as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NOT_SUPPORTED = 0 // GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NONE as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NONE = 1 // GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_SYSGUID as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_SYSGUID = 2 // GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_CHASSIS_SN as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_CHASSIS_SN = 3 // GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NO_PARTITION as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NO_PARTITION = 4 // GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INSUFFICIENT_NVLINKS as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INSUFFICIENT_NVLINKS = 5 // GPU_FABRIC_HEALTH_MASK_SHIFT_INCORRECT_CONFIGURATION as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_SHIFT_INCORRECT_CONFIGURATION = 8 // GPU_FABRIC_HEALTH_MASK_WIDTH_INCORRECT_CONFIGURATION as defined in nvml/nvml.h GPU_FABRIC_HEALTH_MASK_WIDTH_INCORRECT_CONFIGURATION = 15 // GPU_FABRIC_HEALTH_SUMMARY_NOT_SUPPORTED as defined in nvml/nvml.h GPU_FABRIC_HEALTH_SUMMARY_NOT_SUPPORTED = 0 // GPU_FABRIC_HEALTH_SUMMARY_HEALTHY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_SUMMARY_HEALTHY = 1 // GPU_FABRIC_HEALTH_SUMMARY_UNHEALTHY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_SUMMARY_UNHEALTHY = 2 // GPU_FABRIC_HEALTH_SUMMARY_LIMITED_CAPACITY as defined in nvml/nvml.h GPU_FABRIC_HEALTH_SUMMARY_LIMITED_CAPACITY = 3 // INIT_FLAG_NO_GPUS as defined in nvml/nvml.h INIT_FLAG_NO_GPUS = 1 // INIT_FLAG_NO_ATTACH as defined in nvml/nvml.h INIT_FLAG_NO_ATTACH = 2 // DEVICE_INFOROM_VERSION_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_INFOROM_VERSION_BUFFER_SIZE = 16 // DEVICE_UUID_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_UUID_BUFFER_SIZE = 80 // DEVICE_UUID_V2_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_UUID_V2_BUFFER_SIZE = 96 // DEVICE_PART_NUMBER_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_PART_NUMBER_BUFFER_SIZE = 80 // SYSTEM_DRIVER_VERSION_BUFFER_SIZE as defined in nvml/nvml.h SYSTEM_DRIVER_VERSION_BUFFER_SIZE = 80 // SYSTEM_NVML_VERSION_BUFFER_SIZE as defined in nvml/nvml.h SYSTEM_NVML_VERSION_BUFFER_SIZE = 80 // DEVICE_NAME_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_NAME_BUFFER_SIZE = 64 // DEVICE_NAME_V2_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_NAME_V2_BUFFER_SIZE = 96 // DEVICE_SERIAL_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_SERIAL_BUFFER_SIZE = 30 // DEVICE_VBIOS_VERSION_BUFFER_SIZE as defined in nvml/nvml.h DEVICE_VBIOS_VERSION_BUFFER_SIZE = 32 // AFFINITY_SCOPE_NODE as defined in nvml/nvml.h AFFINITY_SCOPE_NODE = 0 // AFFINITY_SCOPE_SOCKET as defined in nvml/nvml.h AFFINITY_SCOPE_SOCKET = 1 // NVLINK_BER_MANTISSA_SHIFT as defined in nvml/nvml.h NVLINK_BER_MANTISSA_SHIFT = 8 // NVLINK_BER_MANTISSA_WIDTH as defined in nvml/nvml.h NVLINK_BER_MANTISSA_WIDTH = 15 // NVLINK_BER_EXP_SHIFT as defined in nvml/nvml.h NVLINK_BER_EXP_SHIFT = 0 // NVLINK_BER_EXP_WIDTH as defined in nvml/nvml.h NVLINK_BER_EXP_WIDTH = 255 // NVLINK_STATE_INACTIVE as defined in nvml/nvml.h NVLINK_STATE_INACTIVE = 0 // NVLINK_STATE_ACTIVE as defined in nvml/nvml.h NVLINK_STATE_ACTIVE = 1 // NVLINK_STATE_SLEEP as defined in nvml/nvml.h NVLINK_STATE_SLEEP = 2 // NVLINK_TOTAL_SUPPORTED_BW_MODES as defined in nvml/nvml.h NVLINK_TOTAL_SUPPORTED_BW_MODES = 23 // NVLINK_FIRMWARE_UCODE_TYPE_MSE as defined in nvml/nvml.h NVLINK_FIRMWARE_UCODE_TYPE_MSE = 1 // NVLINK_FIRMWARE_UCODE_TYPE_NETIR as defined in nvml/nvml.h NVLINK_FIRMWARE_UCODE_TYPE_NETIR = 2 // NVLINK_FIRMWARE_UCODE_TYPE_NETIR_UPHY as defined in nvml/nvml.h NVLINK_FIRMWARE_UCODE_TYPE_NETIR_UPHY = 3 // NVLINK_FIRMWARE_UCODE_TYPE_NETIR_CLN as defined in nvml/nvml.h NVLINK_FIRMWARE_UCODE_TYPE_NETIR_CLN = 4 // NVLINK_FIRMWARE_UCODE_TYPE_NETIR_DLN as defined in nvml/nvml.h NVLINK_FIRMWARE_UCODE_TYPE_NETIR_DLN = 5 // NVLINK_FIRMWARE_VERSION_LENGTH as defined in nvml/nvml.h NVLINK_FIRMWARE_VERSION_LENGTH = 100 // PRM_DATA_MAX_SIZE as defined in nvml/nvml.h PRM_DATA_MAX_SIZE = 496 // DEVICE_MIG_DISABLE as defined in nvml/nvml.h DEVICE_MIG_DISABLE = 0 // DEVICE_MIG_ENABLE as defined in nvml/nvml.h DEVICE_MIG_ENABLE = 1 // GPU_INSTANCE_PROFILE_1_SLICE as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_1_SLICE = 0 // GPU_INSTANCE_PROFILE_2_SLICE as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_2_SLICE = 1 // GPU_INSTANCE_PROFILE_3_SLICE as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_3_SLICE = 2 // GPU_INSTANCE_PROFILE_4_SLICE as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_4_SLICE = 3 // GPU_INSTANCE_PROFILE_7_SLICE as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_7_SLICE = 4 // GPU_INSTANCE_PROFILE_8_SLICE as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_8_SLICE = 5 // GPU_INSTANCE_PROFILE_6_SLICE as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_6_SLICE = 6 // GPU_INSTANCE_PROFILE_1_SLICE_REV1 as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_1_SLICE_REV1 = 7 // GPU_INSTANCE_PROFILE_2_SLICE_REV1 as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_2_SLICE_REV1 = 8 // GPU_INSTANCE_PROFILE_1_SLICE_REV2 as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_1_SLICE_REV2 = 9 // GPU_INSTANCE_PROFILE_1_SLICE_GFX as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_1_SLICE_GFX = 10 // GPU_INSTANCE_PROFILE_2_SLICE_GFX as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_2_SLICE_GFX = 11 // GPU_INSTANCE_PROFILE_4_SLICE_GFX as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_4_SLICE_GFX = 12 // GPU_INSTANCE_PROFILE_1_SLICE_NO_ME as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_1_SLICE_NO_ME = 13 // GPU_INSTANCE_PROFILE_2_SLICE_NO_ME as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_2_SLICE_NO_ME = 14 // GPU_INSTANCE_PROFILE_1_SLICE_ALL_ME as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_1_SLICE_ALL_ME = 15 // GPU_INSTANCE_PROFILE_2_SLICE_ALL_ME as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_2_SLICE_ALL_ME = 16 // GPU_INSTANCE_PROFILE_COUNT as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_COUNT = 17 // GPU_INSTANCE_PROFILE_CAPS_P2P as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_CAPS_P2P = 1 // GPU_INTSTANCE_PROFILE_CAPS_P2P as defined in nvml/nvml.h GPU_INTSTANCE_PROFILE_CAPS_P2P = 1 // GPU_INSTANCE_PROFILE_CAPS_GFX as defined in nvml/nvml.h GPU_INSTANCE_PROFILE_CAPS_GFX = 2 // COMPUTE_INSTANCE_PROFILE_CAPS_GFX as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_CAPS_GFX = 1 // COMPUTE_INSTANCE_PROFILE_1_SLICE as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_1_SLICE = 0 // COMPUTE_INSTANCE_PROFILE_2_SLICE as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_2_SLICE = 1 // COMPUTE_INSTANCE_PROFILE_3_SLICE as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_3_SLICE = 2 // COMPUTE_INSTANCE_PROFILE_4_SLICE as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_4_SLICE = 3 // COMPUTE_INSTANCE_PROFILE_7_SLICE as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_7_SLICE = 4 // COMPUTE_INSTANCE_PROFILE_8_SLICE as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_8_SLICE = 5 // COMPUTE_INSTANCE_PROFILE_6_SLICE as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_6_SLICE = 6 // COMPUTE_INSTANCE_PROFILE_1_SLICE_REV1 as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_1_SLICE_REV1 = 7 // COMPUTE_INSTANCE_PROFILE_COUNT as defined in nvml/nvml.h COMPUTE_INSTANCE_PROFILE_COUNT = 8 // COMPUTE_INSTANCE_ENGINE_PROFILE_SHARED as defined in nvml/nvml.h COMPUTE_INSTANCE_ENGINE_PROFILE_SHARED = 0 // COMPUTE_INSTANCE_ENGINE_PROFILE_COUNT as defined in nvml/nvml.h COMPUTE_INSTANCE_ENGINE_PROFILE_COUNT = 1 // GPM_METRICS_GET_VERSION as defined in nvml/nvml.h GPM_METRICS_GET_VERSION = 1 // GPM_SUPPORT_VERSION as defined in nvml/nvml.h GPM_SUPPORT_VERSION = 1 // DEV_CAP_EGM as defined in nvml/nvml.h DEV_CAP_EGM = 1 // WORKLOAD_POWER_MAX_PROFILES as defined in nvml/nvml.h WORKLOAD_POWER_MAX_PROFILES = 255 // POWER_SMOOTHING_MAX_NUM_PROFILES as defined in nvml/nvml.h POWER_SMOOTHING_MAX_NUM_PROFILES = 5 // POWER_SMOOTHING_NUM_PROFILE_PARAMS as defined in nvml/nvml.h POWER_SMOOTHING_NUM_PROFILE_PARAMS = 4 // POWER_SMOOTHING_ADMIN_OVERRIDE_NOT_SET as defined in nvml/nvml.h POWER_SMOOTHING_ADMIN_OVERRIDE_NOT_SET = 4294967295 // POWER_SMOOTHING_PROFILE_PARAM_PERCENT_TMP_FLOOR as defined in nvml/nvml.h POWER_SMOOTHING_PROFILE_PARAM_PERCENT_TMP_FLOOR = 0 // POWER_SMOOTHING_PROFILE_PARAM_RAMP_UP_RATE as defined in nvml/nvml.h POWER_SMOOTHING_PROFILE_PARAM_RAMP_UP_RATE = 1 // POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_RATE as defined in nvml/nvml.h POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_RATE = 2 // POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_HYSTERESIS as defined in nvml/nvml.h POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_HYSTERESIS = 3 ) // BridgeChipType as declared in nvml/nvml.h type BridgeChipType int32 // BridgeChipType enumeration from nvml/nvml.h const ( BRIDGE_CHIP_PLX BridgeChipType = iota BRIDGE_CHIP_BRO4 BridgeChipType = 1 ) // NvLinkUtilizationCountUnits as declared in nvml/nvml.h type NvLinkUtilizationCountUnits int32 // NvLinkUtilizationCountUnits enumeration from nvml/nvml.h const ( NVLINK_COUNTER_UNIT_CYCLES NvLinkUtilizationCountUnits = iota NVLINK_COUNTER_UNIT_PACKETS NvLinkUtilizationCountUnits = 1 NVLINK_COUNTER_UNIT_BYTES NvLinkUtilizationCountUnits = 2 NVLINK_COUNTER_UNIT_RESERVED NvLinkUtilizationCountUnits = 3 NVLINK_COUNTER_UNIT_COUNT NvLinkUtilizationCountUnits = 4 ) // NvLinkUtilizationCountPktTypes as declared in nvml/nvml.h type NvLinkUtilizationCountPktTypes int32 // NvLinkUtilizationCountPktTypes enumeration from nvml/nvml.h const ( NVLINK_COUNTER_PKTFILTER_NOP NvLinkUtilizationCountPktTypes = 1 NVLINK_COUNTER_PKTFILTER_READ NvLinkUtilizationCountPktTypes = 2 NVLINK_COUNTER_PKTFILTER_WRITE NvLinkUtilizationCountPktTypes = 4 NVLINK_COUNTER_PKTFILTER_RATOM NvLinkUtilizationCountPktTypes = 8 NVLINK_COUNTER_PKTFILTER_NRATOM NvLinkUtilizationCountPktTypes = 16 NVLINK_COUNTER_PKTFILTER_FLUSH NvLinkUtilizationCountPktTypes = 32 NVLINK_COUNTER_PKTFILTER_RESPDATA NvLinkUtilizationCountPktTypes = 64 NVLINK_COUNTER_PKTFILTER_RESPNODATA NvLinkUtilizationCountPktTypes = 128 NVLINK_COUNTER_PKTFILTER_ALL NvLinkUtilizationCountPktTypes = 255 ) // NvLinkCapability as declared in nvml/nvml.h type NvLinkCapability int32 // NvLinkCapability enumeration from nvml/nvml.h const ( NVLINK_CAP_P2P_SUPPORTED NvLinkCapability = iota NVLINK_CAP_SYSMEM_ACCESS NvLinkCapability = 1 NVLINK_CAP_P2P_ATOMICS NvLinkCapability = 2 NVLINK_CAP_SYSMEM_ATOMICS NvLinkCapability = 3 NVLINK_CAP_SLI_BRIDGE NvLinkCapability = 4 NVLINK_CAP_VALID NvLinkCapability = 5 NVLINK_CAP_COUNT NvLinkCapability = 6 ) // NvLinkErrorCounter as declared in nvml/nvml.h type NvLinkErrorCounter int32 // NvLinkErrorCounter enumeration from nvml/nvml.h const ( NVLINK_ERROR_DL_REPLAY NvLinkErrorCounter = iota NVLINK_ERROR_DL_RECOVERY NvLinkErrorCounter = 1 NVLINK_ERROR_DL_CRC_FLIT NvLinkErrorCounter = 2 NVLINK_ERROR_DL_CRC_DATA NvLinkErrorCounter = 3 NVLINK_ERROR_DL_ECC_DATA NvLinkErrorCounter = 4 NVLINK_ERROR_COUNT NvLinkErrorCounter = 5 ) // IntNvLinkDeviceType as declared in nvml/nvml.h type IntNvLinkDeviceType int32 // IntNvLinkDeviceType enumeration from nvml/nvml.h const ( NVLINK_DEVICE_TYPE_GPU IntNvLinkDeviceType = iota NVLINK_DEVICE_TYPE_IBMNPU IntNvLinkDeviceType = 1 NVLINK_DEVICE_TYPE_SWITCH IntNvLinkDeviceType = 2 NVLINK_DEVICE_TYPE_UNKNOWN IntNvLinkDeviceType = 255 ) // GpuTopologyLevel as declared in nvml/nvml.h type GpuTopologyLevel int32 // GpuTopologyLevel enumeration from nvml/nvml.h const ( TOPOLOGY_INTERNAL GpuTopologyLevel = iota TOPOLOGY_SINGLE GpuTopologyLevel = 10 TOPOLOGY_MULTIPLE GpuTopologyLevel = 20 TOPOLOGY_HOSTBRIDGE GpuTopologyLevel = 30 TOPOLOGY_NODE GpuTopologyLevel = 40 TOPOLOGY_SYSTEM GpuTopologyLevel = 50 ) // GpuP2PStatus as declared in nvml/nvml.h type GpuP2PStatus int32 // GpuP2PStatus enumeration from nvml/nvml.h const ( P2P_STATUS_OK GpuP2PStatus = iota P2P_STATUS_CHIPSET_NOT_SUPPORED GpuP2PStatus = 1 P2P_STATUS_CHIPSET_NOT_SUPPORTED GpuP2PStatus = 1 P2P_STATUS_GPU_NOT_SUPPORTED GpuP2PStatus = 2 P2P_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED GpuP2PStatus = 3 P2P_STATUS_DISABLED_BY_REGKEY GpuP2PStatus = 4 P2P_STATUS_NOT_SUPPORTED GpuP2PStatus = 5 P2P_STATUS_UNKNOWN GpuP2PStatus = 6 ) // GpuP2PCapsIndex as declared in nvml/nvml.h type GpuP2PCapsIndex int32 // GpuP2PCapsIndex enumeration from nvml/nvml.h const ( P2P_CAPS_INDEX_READ GpuP2PCapsIndex = iota P2P_CAPS_INDEX_WRITE GpuP2PCapsIndex = 1 P2P_CAPS_INDEX_NVLINK GpuP2PCapsIndex = 2 P2P_CAPS_INDEX_ATOMICS GpuP2PCapsIndex = 3 P2P_CAPS_INDEX_PCI GpuP2PCapsIndex = 4 P2P_CAPS_INDEX_PROP GpuP2PCapsIndex = 4 P2P_CAPS_INDEX_UNKNOWN GpuP2PCapsIndex = 5 ) // SamplingType as declared in nvml/nvml.h type SamplingType int32 // SamplingType enumeration from nvml/nvml.h const ( TOTAL_POWER_SAMPLES SamplingType = iota GPU_UTILIZATION_SAMPLES SamplingType = 1 MEMORY_UTILIZATION_SAMPLES SamplingType = 2 ENC_UTILIZATION_SAMPLES SamplingType = 3 DEC_UTILIZATION_SAMPLES SamplingType = 4 PROCESSOR_CLK_SAMPLES SamplingType = 5 MEMORY_CLK_SAMPLES SamplingType = 6 MODULE_POWER_SAMPLES SamplingType = 7 JPG_UTILIZATION_SAMPLES SamplingType = 8 OFA_UTILIZATION_SAMPLES SamplingType = 9 SAMPLINGTYPE_COUNT SamplingType = 10 ) // PcieUtilCounter as declared in nvml/nvml.h type PcieUtilCounter int32 // PcieUtilCounter enumeration from nvml/nvml.h const ( PCIE_UTIL_TX_BYTES PcieUtilCounter = iota PCIE_UTIL_RX_BYTES PcieUtilCounter = 1 PCIE_UTIL_COUNT PcieUtilCounter = 2 ) // ValueType as declared in nvml/nvml.h type ValueType int32 // ValueType enumeration from nvml/nvml.h const ( VALUE_TYPE_DOUBLE ValueType = iota VALUE_TYPE_UNSIGNED_INT ValueType = 1 VALUE_TYPE_UNSIGNED_LONG ValueType = 2 VALUE_TYPE_UNSIGNED_LONG_LONG ValueType = 3 VALUE_TYPE_SIGNED_LONG_LONG ValueType = 4 VALUE_TYPE_SIGNED_INT ValueType = 5 VALUE_TYPE_UNSIGNED_SHORT ValueType = 6 VALUE_TYPE_COUNT ValueType = 7 ) // PerfPolicyType as declared in nvml/nvml.h type PerfPolicyType int32 // PerfPolicyType enumeration from nvml/nvml.h const ( PERF_POLICY_POWER PerfPolicyType = iota PERF_POLICY_THERMAL PerfPolicyType = 1 PERF_POLICY_SYNC_BOOST PerfPolicyType = 2 PERF_POLICY_BOARD_LIMIT PerfPolicyType = 3 PERF_POLICY_LOW_UTILIZATION PerfPolicyType = 4 PERF_POLICY_RELIABILITY PerfPolicyType = 5 PERF_POLICY_TOTAL_APP_CLOCKS PerfPolicyType = 10 PERF_POLICY_TOTAL_BASE_CLOCKS PerfPolicyType = 11 PERF_POLICY_COUNT PerfPolicyType = 12 ) // CoolerControl as declared in nvml/nvml.h type CoolerControl int32 // CoolerControl enumeration from nvml/nvml.h const ( THERMAL_COOLER_SIGNAL_NONE CoolerControl = iota THERMAL_COOLER_SIGNAL_TOGGLE CoolerControl = 1 THERMAL_COOLER_SIGNAL_VARIABLE CoolerControl = 2 THERMAL_COOLER_SIGNAL_COUNT CoolerControl = 3 ) // CoolerTarget as declared in nvml/nvml.h type CoolerTarget int32 // CoolerTarget enumeration from nvml/nvml.h const ( THERMAL_COOLER_TARGET_NONE CoolerTarget = 1 THERMAL_COOLER_TARGET_GPU CoolerTarget = 2 THERMAL_COOLER_TARGET_MEMORY CoolerTarget = 4 THERMAL_COOLER_TARGET_POWER_SUPPLY CoolerTarget = 8 THERMAL_COOLER_TARGET_GPU_RELATED CoolerTarget = 14 ) // EnableState as declared in nvml/nvml.h type EnableState int32 // EnableState enumeration from nvml/nvml.h const ( FEATURE_DISABLED EnableState = iota FEATURE_ENABLED EnableState = 1 ) // BrandType as declared in nvml/nvml.h type BrandType int32 // BrandType enumeration from nvml/nvml.h const ( BRAND_UNKNOWN BrandType = iota BRAND_QUADRO BrandType = 1 BRAND_TESLA BrandType = 2 BRAND_NVS BrandType = 3 BRAND_GRID BrandType = 4 BRAND_GEFORCE BrandType = 5 BRAND_TITAN BrandType = 6 BRAND_NVIDIA_VAPPS BrandType = 7 BRAND_NVIDIA_VPC BrandType = 8 BRAND_NVIDIA_VCS BrandType = 9 BRAND_NVIDIA_VWS BrandType = 10 BRAND_NVIDIA_CLOUD_GAMING BrandType = 11 BRAND_NVIDIA_VGAMING BrandType = 11 BRAND_QUADRO_RTX BrandType = 12 BRAND_NVIDIA_RTX BrandType = 13 BRAND_NVIDIA BrandType = 14 BRAND_GEFORCE_RTX BrandType = 15 BRAND_TITAN_RTX BrandType = 16 BRAND_COUNT BrandType = 18 ) // TemperatureThresholds as declared in nvml/nvml.h type TemperatureThresholds int32 // TemperatureThresholds enumeration from nvml/nvml.h const ( TEMPERATURE_THRESHOLD_SHUTDOWN TemperatureThresholds = iota TEMPERATURE_THRESHOLD_SLOWDOWN TemperatureThresholds = 1 TEMPERATURE_THRESHOLD_MEM_MAX TemperatureThresholds = 2 TEMPERATURE_THRESHOLD_GPU_MAX TemperatureThresholds = 3 TEMPERATURE_THRESHOLD_ACOUSTIC_MIN TemperatureThresholds = 4 TEMPERATURE_THRESHOLD_ACOUSTIC_CURR TemperatureThresholds = 5 TEMPERATURE_THRESHOLD_ACOUSTIC_MAX TemperatureThresholds = 6 TEMPERATURE_THRESHOLD_GPS_CURR TemperatureThresholds = 7 TEMPERATURE_THRESHOLD_COUNT TemperatureThresholds = 8 ) // TemperatureSensors as declared in nvml/nvml.h type TemperatureSensors int32 // TemperatureSensors enumeration from nvml/nvml.h const ( TEMPERATURE_GPU TemperatureSensors = iota TEMPERATURE_COUNT TemperatureSensors = 1 ) // ComputeMode as declared in nvml/nvml.h type ComputeMode int32 // ComputeMode enumeration from nvml/nvml.h const ( COMPUTEMODE_DEFAULT ComputeMode = iota COMPUTEMODE_EXCLUSIVE_THREAD ComputeMode = 1 COMPUTEMODE_PROHIBITED ComputeMode = 2 COMPUTEMODE_EXCLUSIVE_PROCESS ComputeMode = 3 COMPUTEMODE_COUNT ComputeMode = 4 ) // MemoryErrorType as declared in nvml/nvml.h type MemoryErrorType int32 // MemoryErrorType enumeration from nvml/nvml.h const ( MEMORY_ERROR_TYPE_CORRECTED MemoryErrorType = iota MEMORY_ERROR_TYPE_UNCORRECTED MemoryErrorType = 1 MEMORY_ERROR_TYPE_COUNT MemoryErrorType = 2 ) // NvlinkVersion as declared in nvml/nvml.h type NvlinkVersion int32 // NvlinkVersion enumeration from nvml/nvml.h const ( NVLINK_VERSION_INVALID NvlinkVersion = iota NVLINK_VERSION_1_0 NvlinkVersion = 1 NVLINK_VERSION_2_0 NvlinkVersion = 2 NVLINK_VERSION_2_2 NvlinkVersion = 3 NVLINK_VERSION_3_0 NvlinkVersion = 4 NVLINK_VERSION_3_1 NvlinkVersion = 5 NVLINK_VERSION_4_0 NvlinkVersion = 6 NVLINK_VERSION_5_0 NvlinkVersion = 7 ) // EccCounterType as declared in nvml/nvml.h type EccCounterType int32 // EccCounterType enumeration from nvml/nvml.h const ( VOLATILE_ECC EccCounterType = iota AGGREGATE_ECC EccCounterType = 1 ECC_COUNTER_TYPE_COUNT EccCounterType = 2 ) // ClockType as declared in nvml/nvml.h type ClockType int32 // ClockType enumeration from nvml/nvml.h const ( CLOCK_GRAPHICS ClockType = iota CLOCK_SM ClockType = 1 CLOCK_MEM ClockType = 2 CLOCK_VIDEO ClockType = 3 CLOCK_COUNT ClockType = 4 ) // ClockId as declared in nvml/nvml.h type ClockId int32 // ClockId enumeration from nvml/nvml.h const ( CLOCK_ID_CURRENT ClockId = iota CLOCK_ID_APP_CLOCK_TARGET ClockId = 1 CLOCK_ID_APP_CLOCK_DEFAULT ClockId = 2 CLOCK_ID_CUSTOMER_BOOST_MAX ClockId = 3 CLOCK_ID_COUNT ClockId = 4 ) // DriverModel as declared in nvml/nvml.h type DriverModel int32 // DriverModel enumeration from nvml/nvml.h const ( DRIVER_WDDM DriverModel = iota DRIVER_WDM DriverModel = 1 DRIVER_MCDM DriverModel = 2 ) // Pstates as declared in nvml/nvml.h type Pstates int32 // Pstates enumeration from nvml/nvml.h const ( PSTATE_0 Pstates = iota PSTATE_1 Pstates = 1 PSTATE_2 Pstates = 2 PSTATE_3 Pstates = 3 PSTATE_4 Pstates = 4 PSTATE_5 Pstates = 5 PSTATE_6 Pstates = 6 PSTATE_7 Pstates = 7 PSTATE_8 Pstates = 8 PSTATE_9 Pstates = 9 PSTATE_10 Pstates = 10 PSTATE_11 Pstates = 11 PSTATE_12 Pstates = 12 PSTATE_13 Pstates = 13 PSTATE_14 Pstates = 14 PSTATE_15 Pstates = 15 PSTATE_UNKNOWN Pstates = 32 ) // GpuOperationMode as declared in nvml/nvml.h type GpuOperationMode int32 // GpuOperationMode enumeration from nvml/nvml.h const ( GOM_ALL_ON GpuOperationMode = iota GOM_COMPUTE GpuOperationMode = 1 GOM_LOW_DP GpuOperationMode = 2 ) // InforomObject as declared in nvml/nvml.h type InforomObject int32 // InforomObject enumeration from nvml/nvml.h const ( INFOROM_OEM InforomObject = iota INFOROM_ECC InforomObject = 1 INFOROM_POWER InforomObject = 2 INFOROM_DEN InforomObject = 3 INFOROM_COUNT InforomObject = 4 ) // Return as declared in nvml/nvml.h type Return int32 // Return enumeration from nvml/nvml.h const ( SUCCESS Return = iota ERROR_UNINITIALIZED Return = 1 ERROR_INVALID_ARGUMENT Return = 2 ERROR_NOT_SUPPORTED Return = 3 ERROR_NO_PERMISSION Return = 4 ERROR_ALREADY_INITIALIZED Return = 5 ERROR_NOT_FOUND Return = 6 ERROR_INSUFFICIENT_SIZE Return = 7 ERROR_INSUFFICIENT_POWER Return = 8 ERROR_DRIVER_NOT_LOADED Return = 9 ERROR_TIMEOUT Return = 10 ERROR_IRQ_ISSUE Return = 11 ERROR_LIBRARY_NOT_FOUND Return = 12 ERROR_FUNCTION_NOT_FOUND Return = 13 ERROR_CORRUPTED_INFOROM Return = 14 ERROR_GPU_IS_LOST Return = 15 ERROR_RESET_REQUIRED Return = 16 ERROR_OPERATING_SYSTEM Return = 17 ERROR_LIB_RM_VERSION_MISMATCH Return = 18 ERROR_IN_USE Return = 19 ERROR_MEMORY Return = 20 ERROR_NO_DATA Return = 21 ERROR_VGPU_ECC_NOT_SUPPORTED Return = 22 ERROR_INSUFFICIENT_RESOURCES Return = 23 ERROR_FREQ_NOT_SUPPORTED Return = 24 ERROR_ARGUMENT_VERSION_MISMATCH Return = 25 ERROR_DEPRECATED Return = 26 ERROR_NOT_READY Return = 27 ERROR_GPU_NOT_FOUND Return = 28 ERROR_INVALID_STATE Return = 29 ERROR_RESET_TYPE_NOT_SUPPORTED Return = 30 ERROR_UNKNOWN Return = 999 ) // MemoryLocation as declared in nvml/nvml.h type MemoryLocation int32 // MemoryLocation enumeration from nvml/nvml.h const ( MEMORY_LOCATION_L1_CACHE MemoryLocation = iota MEMORY_LOCATION_L2_CACHE MemoryLocation = 1 MEMORY_LOCATION_DRAM MemoryLocation = 2 MEMORY_LOCATION_DEVICE_MEMORY MemoryLocation = 2 MEMORY_LOCATION_REGISTER_FILE MemoryLocation = 3 MEMORY_LOCATION_TEXTURE_MEMORY MemoryLocation = 4 MEMORY_LOCATION_TEXTURE_SHM MemoryLocation = 5 MEMORY_LOCATION_CBU MemoryLocation = 6 MEMORY_LOCATION_SRAM MemoryLocation = 7 MEMORY_LOCATION_COUNT MemoryLocation = 8 ) // PageRetirementCause as declared in nvml/nvml.h type PageRetirementCause int32 // PageRetirementCause enumeration from nvml/nvml.h const ( PAGE_RETIREMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS PageRetirementCause = iota PAGE_RETIREMENT_CAUSE_DOUBLE_BIT_ECC_ERROR PageRetirementCause = 1 PAGE_RETIREMENT_CAUSE_COUNT PageRetirementCause = 2 ) // RestrictedAPI as declared in nvml/nvml.h type RestrictedAPI int32 // RestrictedAPI enumeration from nvml/nvml.h const ( RESTRICTED_API_SET_APPLICATION_CLOCKS RestrictedAPI = iota RESTRICTED_API_SET_AUTO_BOOSTED_CLOCKS RestrictedAPI = 1 RESTRICTED_API_COUNT RestrictedAPI = 2 ) // GpuUtilizationDomainId as declared in nvml/nvml.h type GpuUtilizationDomainId int32 // GpuUtilizationDomainId enumeration from nvml/nvml.h const ( GPU_UTILIZATION_DOMAIN_GPU GpuUtilizationDomainId = iota GPU_UTILIZATION_DOMAIN_FB GpuUtilizationDomainId = 1 GPU_UTILIZATION_DOMAIN_VID GpuUtilizationDomainId = 2 GPU_UTILIZATION_DOMAIN_BUS GpuUtilizationDomainId = 3 ) // GpuVirtualizationMode as declared in nvml/nvml.h type GpuVirtualizationMode int32 // GpuVirtualizationMode enumeration from nvml/nvml.h const ( GPU_VIRTUALIZATION_MODE_NONE GpuVirtualizationMode = iota GPU_VIRTUALIZATION_MODE_PASSTHROUGH GpuVirtualizationMode = 1 GPU_VIRTUALIZATION_MODE_VGPU GpuVirtualizationMode = 2 GPU_VIRTUALIZATION_MODE_HOST_VGPU GpuVirtualizationMode = 3 GPU_VIRTUALIZATION_MODE_HOST_VSGA GpuVirtualizationMode = 4 ) // HostVgpuMode as declared in nvml/nvml.h type HostVgpuMode int32 // HostVgpuMode enumeration from nvml/nvml.h const ( HOST_VGPU_MODE_NON_SRIOV HostVgpuMode = iota HOST_VGPU_MODE_SRIOV HostVgpuMode = 1 ) // VgpuVmIdType as declared in nvml/nvml.h type VgpuVmIdType int32 // VgpuVmIdType enumeration from nvml/nvml.h const ( VGPU_VM_ID_DOMAIN_ID VgpuVmIdType = iota VGPU_VM_ID_UUID VgpuVmIdType = 1 ) // VgpuGuestInfoState as declared in nvml/nvml.h type VgpuGuestInfoState int32 // VgpuGuestInfoState enumeration from nvml/nvml.h const ( VGPU_INSTANCE_GUEST_INFO_STATE_UNINITIALIZED VgpuGuestInfoState = iota VGPU_INSTANCE_GUEST_INFO_STATE_INITIALIZED VgpuGuestInfoState = 1 ) // VgpuCapability as declared in nvml/nvml.h type VgpuCapability int32 // VgpuCapability enumeration from nvml/nvml.h const ( VGPU_CAP_NVLINK_P2P VgpuCapability = iota VGPU_CAP_GPUDIRECT VgpuCapability = 1 VGPU_CAP_MULTI_VGPU_EXCLUSIVE VgpuCapability = 2 VGPU_CAP_EXCLUSIVE_TYPE VgpuCapability = 3 VGPU_CAP_EXCLUSIVE_SIZE VgpuCapability = 4 VGPU_CAP_COUNT VgpuCapability = 5 ) // VgpuDriverCapability as declared in nvml/nvml.h type VgpuDriverCapability int32 // VgpuDriverCapability enumeration from nvml/nvml.h const ( VGPU_DRIVER_CAP_HETEROGENEOUS_MULTI_VGPU VgpuDriverCapability = iota VGPU_DRIVER_CAP_WARM_UPDATE VgpuDriverCapability = 1 VGPU_DRIVER_CAP_COUNT VgpuDriverCapability = 2 ) // DeviceVgpuCapability as declared in nvml/nvml.h type DeviceVgpuCapability int32 // DeviceVgpuCapability enumeration from nvml/nvml.h const ( DEVICE_VGPU_CAP_FRACTIONAL_MULTI_VGPU DeviceVgpuCapability = iota DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_PROFILES DeviceVgpuCapability = 1 DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_SIZES DeviceVgpuCapability = 2 DEVICE_VGPU_CAP_READ_DEVICE_BUFFER_BW DeviceVgpuCapability = 3 DEVICE_VGPU_CAP_WRITE_DEVICE_BUFFER_BW DeviceVgpuCapability = 4 DEVICE_VGPU_CAP_DEVICE_STREAMING DeviceVgpuCapability = 5 DEVICE_VGPU_CAP_MINI_QUARTER_GPU DeviceVgpuCapability = 6 DEVICE_VGPU_CAP_COMPUTE_MEDIA_ENGINE_GPU DeviceVgpuCapability = 7 DEVICE_VGPU_CAP_WARM_UPDATE DeviceVgpuCapability = 8 DEVICE_VGPU_CAP_HOMOGENEOUS_PLACEMENTS DeviceVgpuCapability = 9 DEVICE_VGPU_CAP_MIG_TIMESLICING_SUPPORTED DeviceVgpuCapability = 10 DEVICE_VGPU_CAP_MIG_TIMESLICING_ENABLED DeviceVgpuCapability = 11 DEVICE_VGPU_CAP_COUNT DeviceVgpuCapability = 12 ) // DeviceGpuRecoveryAction as declared in nvml/nvml.h type DeviceGpuRecoveryAction int32 // DeviceGpuRecoveryAction enumeration from nvml/nvml.h const ( GPU_RECOVERY_ACTION_NONE DeviceGpuRecoveryAction = iota GPU_RECOVERY_ACTION_GPU_RESET DeviceGpuRecoveryAction = 1 GPU_RECOVERY_ACTION_NODE_REBOOT DeviceGpuRecoveryAction = 2 GPU_RECOVERY_ACTION_DRAIN_P2P DeviceGpuRecoveryAction = 3 GPU_RECOVERY_ACTION_DRAIN_AND_RESET DeviceGpuRecoveryAction = 4 ) // FanState as declared in nvml/nvml.h type FanState int32 // FanState enumeration from nvml/nvml.h const ( FAN_NORMAL FanState = iota FAN_FAILED FanState = 1 ) // LedColor as declared in nvml/nvml.h type LedColor int32 // LedColor enumeration from nvml/nvml.h const ( LED_COLOR_GREEN LedColor = iota LED_COLOR_AMBER LedColor = 1 ) // EncoderType as declared in nvml/nvml.h type EncoderType int32 // EncoderType enumeration from nvml/nvml.h const ( ENCODER_QUERY_H264 EncoderType = iota ENCODER_QUERY_HEVC EncoderType = 1 ENCODER_QUERY_AV1 EncoderType = 2 ENCODER_QUERY_UNKNOWN EncoderType = 255 ) // FBCSessionType as declared in nvml/nvml.h type FBCSessionType int32 // FBCSessionType enumeration from nvml/nvml.h const ( FBC_SESSION_TYPE_UNKNOWN FBCSessionType = iota FBC_SESSION_TYPE_TOSYS FBCSessionType = 1 FBC_SESSION_TYPE_CUDA FBCSessionType = 2 FBC_SESSION_TYPE_VID FBCSessionType = 3 FBC_SESSION_TYPE_HWENC FBCSessionType = 4 ) // DetachGpuState as declared in nvml/nvml.h type DetachGpuState int32 // DetachGpuState enumeration from nvml/nvml.h const ( DETACH_GPU_KEEP DetachGpuState = iota DETACH_GPU_REMOVE DetachGpuState = 1 ) // PcieLinkState as declared in nvml/nvml.h type PcieLinkState int32 // PcieLinkState enumeration from nvml/nvml.h const ( PCIE_LINK_KEEP PcieLinkState = iota PCIE_LINK_SHUT_DOWN PcieLinkState = 1 ) // ClockLimitId as declared in nvml/nvml.h type ClockLimitId int32 // ClockLimitId enumeration from nvml/nvml.h const ( CLOCK_LIMIT_ID_RANGE_START ClockLimitId = -256 CLOCK_LIMIT_ID_TDP ClockLimitId = -255 CLOCK_LIMIT_ID_UNLIMITED ClockLimitId = -254 ) // VgpuVmCompatibility as declared in nvml/nvml.h type VgpuVmCompatibility int32 // VgpuVmCompatibility enumeration from nvml/nvml.h const ( VGPU_VM_COMPATIBILITY_NONE VgpuVmCompatibility = iota VGPU_VM_COMPATIBILITY_COLD VgpuVmCompatibility = 1 VGPU_VM_COMPATIBILITY_HIBERNATE VgpuVmCompatibility = 2 VGPU_VM_COMPATIBILITY_SLEEP VgpuVmCompatibility = 4 VGPU_VM_COMPATIBILITY_LIVE VgpuVmCompatibility = 8 ) // VgpuPgpuCompatibilityLimitCode as declared in nvml/nvml.h type VgpuPgpuCompatibilityLimitCode int32 // VgpuPgpuCompatibilityLimitCode enumeration from nvml/nvml.h const ( VGPU_COMPATIBILITY_LIMIT_NONE VgpuPgpuCompatibilityLimitCode = iota VGPU_COMPATIBILITY_LIMIT_HOST_DRIVER VgpuPgpuCompatibilityLimitCode = 1 VGPU_COMPATIBILITY_LIMIT_GUEST_DRIVER VgpuPgpuCompatibilityLimitCode = 2 VGPU_COMPATIBILITY_LIMIT_GPU VgpuPgpuCompatibilityLimitCode = 4 VGPU_COMPATIBILITY_LIMIT_OTHER VgpuPgpuCompatibilityLimitCode = -2147483648 ) // DeviceAddressingModeType as declared in nvml/nvml.h type DeviceAddressingModeType int32 // DeviceAddressingModeType enumeration from nvml/nvml.h const ( DEVICE_ADDRESSING_MODE_NONE DeviceAddressingModeType = iota DEVICE_ADDRESSING_MODE_HMM DeviceAddressingModeType = 1 DEVICE_ADDRESSING_MODE_ATS DeviceAddressingModeType = 2 ) // ThermalTarget as declared in nvml/nvml.h type ThermalTarget int32 // ThermalTarget enumeration from nvml/nvml.h const ( THERMAL_TARGET_NONE ThermalTarget = iota THERMAL_TARGET_GPU ThermalTarget = 1 THERMAL_TARGET_MEMORY ThermalTarget = 2 THERMAL_TARGET_POWER_SUPPLY ThermalTarget = 4 THERMAL_TARGET_BOARD ThermalTarget = 8 THERMAL_TARGET_VCD_BOARD ThermalTarget = 9 THERMAL_TARGET_VCD_INLET ThermalTarget = 10 THERMAL_TARGET_VCD_OUTLET ThermalTarget = 11 THERMAL_TARGET_ALL ThermalTarget = 15 THERMAL_TARGET_UNKNOWN ThermalTarget = -1 ) // ThermalController as declared in nvml/nvml.h type ThermalController int32 // ThermalController enumeration from nvml/nvml.h const ( THERMAL_CONTROLLER_NONE ThermalController = iota THERMAL_CONTROLLER_GPU_INTERNAL ThermalController = 1 THERMAL_CONTROLLER_ADM1032 ThermalController = 2 THERMAL_CONTROLLER_ADT7461 ThermalController = 3 THERMAL_CONTROLLER_MAX6649 ThermalController = 4 THERMAL_CONTROLLER_MAX1617 ThermalController = 5 THERMAL_CONTROLLER_LM99 ThermalController = 6 THERMAL_CONTROLLER_LM89 ThermalController = 7 THERMAL_CONTROLLER_LM64 ThermalController = 8 THERMAL_CONTROLLER_G781 ThermalController = 9 THERMAL_CONTROLLER_ADT7473 ThermalController = 10 THERMAL_CONTROLLER_SBMAX6649 ThermalController = 11 THERMAL_CONTROLLER_VBIOSEVT ThermalController = 12 THERMAL_CONTROLLER_OS ThermalController = 13 THERMAL_CONTROLLER_NVSYSCON_CANOAS ThermalController = 14 THERMAL_CONTROLLER_NVSYSCON_E551 ThermalController = 15 THERMAL_CONTROLLER_MAX6649R ThermalController = 16 THERMAL_CONTROLLER_ADT7473S ThermalController = 17 THERMAL_CONTROLLER_UNKNOWN ThermalController = -1 ) // UUIDType as declared in nvml/nvml.h type UUIDType int32 // UUIDType enumeration from nvml/nvml.h const ( UUID_TYPE_NONE UUIDType = iota UUID_TYPE_ASCII UUIDType = 1 UUID_TYPE_BINARY UUIDType = 2 ) // GridLicenseFeatureCode as declared in nvml/nvml.h type GridLicenseFeatureCode int32 // GridLicenseFeatureCode enumeration from nvml/nvml.h const ( GRID_LICENSE_FEATURE_CODE_UNKNOWN GridLicenseFeatureCode = iota GRID_LICENSE_FEATURE_CODE_VGPU GridLicenseFeatureCode = 1 GRID_LICENSE_FEATURE_CODE_NVIDIA_RTX GridLicenseFeatureCode = 2 GRID_LICENSE_FEATURE_CODE_VWORKSTATION GridLicenseFeatureCode = 2 GRID_LICENSE_FEATURE_CODE_GAMING GridLicenseFeatureCode = 3 GRID_LICENSE_FEATURE_CODE_COMPUTE GridLicenseFeatureCode = 4 ) // GpmMetricId as declared in nvml/nvml.h type GpmMetricId int32 // GpmMetricId enumeration from nvml/nvml.h const ( GPM_METRIC_GRAPHICS_UTIL GpmMetricId = 1 GPM_METRIC_SM_UTIL GpmMetricId = 2 GPM_METRIC_SM_OCCUPANCY GpmMetricId = 3 GPM_METRIC_INTEGER_UTIL GpmMetricId = 4 GPM_METRIC_ANY_TENSOR_UTIL GpmMetricId = 5 GPM_METRIC_DFMA_TENSOR_UTIL GpmMetricId = 6 GPM_METRIC_HMMA_TENSOR_UTIL GpmMetricId = 7 GPM_METRIC_IMMA_TENSOR_UTIL GpmMetricId = 9 GPM_METRIC_DRAM_BW_UTIL GpmMetricId = 10 GPM_METRIC_FP64_UTIL GpmMetricId = 11 GPM_METRIC_FP32_UTIL GpmMetricId = 12 GPM_METRIC_FP16_UTIL GpmMetricId = 13 GPM_METRIC_PCIE_TX_PER_SEC GpmMetricId = 20 GPM_METRIC_PCIE_RX_PER_SEC GpmMetricId = 21 GPM_METRIC_NVDEC_0_UTIL GpmMetricId = 30 GPM_METRIC_NVDEC_1_UTIL GpmMetricId = 31 GPM_METRIC_NVDEC_2_UTIL GpmMetricId = 32 GPM_METRIC_NVDEC_3_UTIL GpmMetricId = 33 GPM_METRIC_NVDEC_4_UTIL GpmMetricId = 34 GPM_METRIC_NVDEC_5_UTIL GpmMetricId = 35 GPM_METRIC_NVDEC_6_UTIL GpmMetricId = 36 GPM_METRIC_NVDEC_7_UTIL GpmMetricId = 37 GPM_METRIC_NVJPG_0_UTIL GpmMetricId = 40 GPM_METRIC_NVJPG_1_UTIL GpmMetricId = 41 GPM_METRIC_NVJPG_2_UTIL GpmMetricId = 42 GPM_METRIC_NVJPG_3_UTIL GpmMetricId = 43 GPM_METRIC_NVJPG_4_UTIL GpmMetricId = 44 GPM_METRIC_NVJPG_5_UTIL GpmMetricId = 45 GPM_METRIC_NVJPG_6_UTIL GpmMetricId = 46 GPM_METRIC_NVJPG_7_UTIL GpmMetricId = 47 GPM_METRIC_NVOFA_0_UTIL GpmMetricId = 50 GPM_METRIC_NVOFA_1_UTIL GpmMetricId = 51 GPM_METRIC_NVLINK_TOTAL_RX_PER_SEC GpmMetricId = 60 GPM_METRIC_NVLINK_TOTAL_TX_PER_SEC GpmMetricId = 61 GPM_METRIC_NVLINK_L0_RX_PER_SEC GpmMetricId = 62 GPM_METRIC_NVLINK_L0_TX_PER_SEC GpmMetricId = 63 GPM_METRIC_NVLINK_L1_RX_PER_SEC GpmMetricId = 64 GPM_METRIC_NVLINK_L1_TX_PER_SEC GpmMetricId = 65 GPM_METRIC_NVLINK_L2_RX_PER_SEC GpmMetricId = 66 GPM_METRIC_NVLINK_L2_TX_PER_SEC GpmMetricId = 67 GPM_METRIC_NVLINK_L3_RX_PER_SEC GpmMetricId = 68 GPM_METRIC_NVLINK_L3_TX_PER_SEC GpmMetricId = 69 GPM_METRIC_NVLINK_L4_RX_PER_SEC GpmMetricId = 70 GPM_METRIC_NVLINK_L4_TX_PER_SEC GpmMetricId = 71 GPM_METRIC_NVLINK_L5_RX_PER_SEC GpmMetricId = 72 GPM_METRIC_NVLINK_L5_TX_PER_SEC GpmMetricId = 73 GPM_METRIC_NVLINK_L6_RX_PER_SEC GpmMetricId = 74 GPM_METRIC_NVLINK_L6_TX_PER_SEC GpmMetricId = 75 GPM_METRIC_NVLINK_L7_RX_PER_SEC GpmMetricId = 76 GPM_METRIC_NVLINK_L7_TX_PER_SEC GpmMetricId = 77 GPM_METRIC_NVLINK_L8_RX_PER_SEC GpmMetricId = 78 GPM_METRIC_NVLINK_L8_TX_PER_SEC GpmMetricId = 79 GPM_METRIC_NVLINK_L9_RX_PER_SEC GpmMetricId = 80 GPM_METRIC_NVLINK_L9_TX_PER_SEC GpmMetricId = 81 GPM_METRIC_NVLINK_L10_RX_PER_SEC GpmMetricId = 82 GPM_METRIC_NVLINK_L10_TX_PER_SEC GpmMetricId = 83 GPM_METRIC_NVLINK_L11_RX_PER_SEC GpmMetricId = 84 GPM_METRIC_NVLINK_L11_TX_PER_SEC GpmMetricId = 85 GPM_METRIC_NVLINK_L12_RX_PER_SEC GpmMetricId = 86 GPM_METRIC_NVLINK_L12_TX_PER_SEC GpmMetricId = 87 GPM_METRIC_NVLINK_L13_RX_PER_SEC GpmMetricId = 88 GPM_METRIC_NVLINK_L13_TX_PER_SEC GpmMetricId = 89 GPM_METRIC_NVLINK_L14_RX_PER_SEC GpmMetricId = 90 GPM_METRIC_NVLINK_L14_TX_PER_SEC GpmMetricId = 91 GPM_METRIC_NVLINK_L15_RX_PER_SEC GpmMetricId = 92 GPM_METRIC_NVLINK_L15_TX_PER_SEC GpmMetricId = 93 GPM_METRIC_NVLINK_L16_RX_PER_SEC GpmMetricId = 94 GPM_METRIC_NVLINK_L16_TX_PER_SEC GpmMetricId = 95 GPM_METRIC_NVLINK_L17_RX_PER_SEC GpmMetricId = 96 GPM_METRIC_NVLINK_L17_TX_PER_SEC GpmMetricId = 97 GPM_METRIC_C2C_TOTAL_TX_PER_SEC GpmMetricId = 100 GPM_METRIC_C2C_TOTAL_RX_PER_SEC GpmMetricId = 101 GPM_METRIC_C2C_DATA_TX_PER_SEC GpmMetricId = 102 GPM_METRIC_C2C_DATA_RX_PER_SEC GpmMetricId = 103 GPM_METRIC_C2C_LINK0_TOTAL_TX_PER_SEC GpmMetricId = 104 GPM_METRIC_C2C_LINK0_TOTAL_RX_PER_SEC GpmMetricId = 105 GPM_METRIC_C2C_LINK0_DATA_TX_PER_SEC GpmMetricId = 106 GPM_METRIC_C2C_LINK0_DATA_RX_PER_SEC GpmMetricId = 107 GPM_METRIC_C2C_LINK1_TOTAL_TX_PER_SEC GpmMetricId = 108 GPM_METRIC_C2C_LINK1_TOTAL_RX_PER_SEC GpmMetricId = 109 GPM_METRIC_C2C_LINK1_DATA_TX_PER_SEC GpmMetricId = 110 GPM_METRIC_C2C_LINK1_DATA_RX_PER_SEC GpmMetricId = 111 GPM_METRIC_C2C_LINK2_TOTAL_TX_PER_SEC GpmMetricId = 112 GPM_METRIC_C2C_LINK2_TOTAL_RX_PER_SEC GpmMetricId = 113 GPM_METRIC_C2C_LINK2_DATA_TX_PER_SEC GpmMetricId = 114 GPM_METRIC_C2C_LINK2_DATA_RX_PER_SEC GpmMetricId = 115 GPM_METRIC_C2C_LINK3_TOTAL_TX_PER_SEC GpmMetricId = 116 GPM_METRIC_C2C_LINK3_TOTAL_RX_PER_SEC GpmMetricId = 117 GPM_METRIC_C2C_LINK3_DATA_TX_PER_SEC GpmMetricId = 118 GPM_METRIC_C2C_LINK3_DATA_RX_PER_SEC GpmMetricId = 119 GPM_METRIC_C2C_LINK4_TOTAL_TX_PER_SEC GpmMetricId = 120 GPM_METRIC_C2C_LINK4_TOTAL_RX_PER_SEC GpmMetricId = 121 GPM_METRIC_C2C_LINK4_DATA_TX_PER_SEC GpmMetricId = 122 GPM_METRIC_C2C_LINK4_DATA_RX_PER_SEC GpmMetricId = 123 GPM_METRIC_C2C_LINK5_TOTAL_TX_PER_SEC GpmMetricId = 124 GPM_METRIC_C2C_LINK5_TOTAL_RX_PER_SEC GpmMetricId = 125 GPM_METRIC_C2C_LINK5_DATA_TX_PER_SEC GpmMetricId = 126 GPM_METRIC_C2C_LINK5_DATA_RX_PER_SEC GpmMetricId = 127 GPM_METRIC_C2C_LINK6_TOTAL_TX_PER_SEC GpmMetricId = 128 GPM_METRIC_C2C_LINK6_TOTAL_RX_PER_SEC GpmMetricId = 129 GPM_METRIC_C2C_LINK6_DATA_TX_PER_SEC GpmMetricId = 130 GPM_METRIC_C2C_LINK6_DATA_RX_PER_SEC GpmMetricId = 131 GPM_METRIC_C2C_LINK7_TOTAL_TX_PER_SEC GpmMetricId = 132 GPM_METRIC_C2C_LINK7_TOTAL_RX_PER_SEC GpmMetricId = 133 GPM_METRIC_C2C_LINK7_DATA_TX_PER_SEC GpmMetricId = 134 GPM_METRIC_C2C_LINK7_DATA_RX_PER_SEC GpmMetricId = 135 GPM_METRIC_C2C_LINK8_TOTAL_TX_PER_SEC GpmMetricId = 136 GPM_METRIC_C2C_LINK8_TOTAL_RX_PER_SEC GpmMetricId = 137 GPM_METRIC_C2C_LINK8_DATA_TX_PER_SEC GpmMetricId = 138 GPM_METRIC_C2C_LINK8_DATA_RX_PER_SEC GpmMetricId = 139 GPM_METRIC_C2C_LINK9_TOTAL_TX_PER_SEC GpmMetricId = 140 GPM_METRIC_C2C_LINK9_TOTAL_RX_PER_SEC GpmMetricId = 141 GPM_METRIC_C2C_LINK9_DATA_TX_PER_SEC GpmMetricId = 142 GPM_METRIC_C2C_LINK9_DATA_RX_PER_SEC GpmMetricId = 143 GPM_METRIC_C2C_LINK10_TOTAL_TX_PER_SEC GpmMetricId = 144 GPM_METRIC_C2C_LINK10_TOTAL_RX_PER_SEC GpmMetricId = 145 GPM_METRIC_C2C_LINK10_DATA_TX_PER_SEC GpmMetricId = 146 GPM_METRIC_C2C_LINK10_DATA_RX_PER_SEC GpmMetricId = 147 GPM_METRIC_C2C_LINK11_TOTAL_TX_PER_SEC GpmMetricId = 148 GPM_METRIC_C2C_LINK11_TOTAL_RX_PER_SEC GpmMetricId = 149 GPM_METRIC_C2C_LINK11_DATA_TX_PER_SEC GpmMetricId = 150 GPM_METRIC_C2C_LINK11_DATA_RX_PER_SEC GpmMetricId = 151 GPM_METRIC_C2C_LINK12_TOTAL_TX_PER_SEC GpmMetricId = 152 GPM_METRIC_C2C_LINK12_TOTAL_RX_PER_SEC GpmMetricId = 153 GPM_METRIC_C2C_LINK12_DATA_TX_PER_SEC GpmMetricId = 154 GPM_METRIC_C2C_LINK12_DATA_RX_PER_SEC GpmMetricId = 155 GPM_METRIC_C2C_LINK13_TOTAL_TX_PER_SEC GpmMetricId = 156 GPM_METRIC_C2C_LINK13_TOTAL_RX_PER_SEC GpmMetricId = 157 GPM_METRIC_C2C_LINK13_DATA_TX_PER_SEC GpmMetricId = 158 GPM_METRIC_C2C_LINK13_DATA_RX_PER_SEC GpmMetricId = 159 GPM_METRIC_HOSTMEM_CACHE_HIT GpmMetricId = 160 GPM_METRIC_HOSTMEM_CACHE_MISS GpmMetricId = 161 GPM_METRIC_PEERMEM_CACHE_HIT GpmMetricId = 162 GPM_METRIC_PEERMEM_CACHE_MISS GpmMetricId = 163 GPM_METRIC_DRAM_CACHE_HIT GpmMetricId = 164 GPM_METRIC_DRAM_CACHE_MISS GpmMetricId = 165 GPM_METRIC_NVENC_0_UTIL GpmMetricId = 166 GPM_METRIC_NVENC_1_UTIL GpmMetricId = 167 GPM_METRIC_NVENC_2_UTIL GpmMetricId = 168 GPM_METRIC_NVENC_3_UTIL GpmMetricId = 169 GPM_METRIC_GR0_CTXSW_CYCLES_ELAPSED GpmMetricId = 170 GPM_METRIC_GR0_CTXSW_CYCLES_ACTIVE GpmMetricId = 171 GPM_METRIC_GR0_CTXSW_REQUESTS GpmMetricId = 172 GPM_METRIC_GR0_CTXSW_CYCLES_PER_REQ GpmMetricId = 173 GPM_METRIC_GR0_CTXSW_ACTIVE_PCT GpmMetricId = 174 GPM_METRIC_GR1_CTXSW_CYCLES_ELAPSED GpmMetricId = 175 GPM_METRIC_GR1_CTXSW_CYCLES_ACTIVE GpmMetricId = 176 GPM_METRIC_GR1_CTXSW_REQUESTS GpmMetricId = 177 GPM_METRIC_GR1_CTXSW_CYCLES_PER_REQ GpmMetricId = 178 GPM_METRIC_GR1_CTXSW_ACTIVE_PCT GpmMetricId = 179 GPM_METRIC_GR2_CTXSW_CYCLES_ELAPSED GpmMetricId = 180 GPM_METRIC_GR2_CTXSW_CYCLES_ACTIVE GpmMetricId = 181 GPM_METRIC_GR2_CTXSW_REQUESTS GpmMetricId = 182 GPM_METRIC_GR2_CTXSW_CYCLES_PER_REQ GpmMetricId = 183 GPM_METRIC_GR2_CTXSW_ACTIVE_PCT GpmMetricId = 184 GPM_METRIC_GR3_CTXSW_CYCLES_ELAPSED GpmMetricId = 185 GPM_METRIC_GR3_CTXSW_CYCLES_ACTIVE GpmMetricId = 186 GPM_METRIC_GR3_CTXSW_REQUESTS GpmMetricId = 187 GPM_METRIC_GR3_CTXSW_CYCLES_PER_REQ GpmMetricId = 188 GPM_METRIC_GR3_CTXSW_ACTIVE_PCT GpmMetricId = 189 GPM_METRIC_GR4_CTXSW_CYCLES_ELAPSED GpmMetricId = 190 GPM_METRIC_GR4_CTXSW_CYCLES_ACTIVE GpmMetricId = 191 GPM_METRIC_GR4_CTXSW_REQUESTS GpmMetricId = 192 GPM_METRIC_GR4_CTXSW_CYCLES_PER_REQ GpmMetricId = 193 GPM_METRIC_GR4_CTXSW_ACTIVE_PCT GpmMetricId = 194 GPM_METRIC_GR5_CTXSW_CYCLES_ELAPSED GpmMetricId = 195 GPM_METRIC_GR5_CTXSW_CYCLES_ACTIVE GpmMetricId = 196 GPM_METRIC_GR5_CTXSW_REQUESTS GpmMetricId = 197 GPM_METRIC_GR5_CTXSW_CYCLES_PER_REQ GpmMetricId = 198 GPM_METRIC_GR5_CTXSW_ACTIVE_PCT GpmMetricId = 199 GPM_METRIC_GR6_CTXSW_CYCLES_ELAPSED GpmMetricId = 200 GPM_METRIC_GR6_CTXSW_CYCLES_ACTIVE GpmMetricId = 201 GPM_METRIC_GR6_CTXSW_REQUESTS GpmMetricId = 202 GPM_METRIC_GR6_CTXSW_CYCLES_PER_REQ GpmMetricId = 203 GPM_METRIC_GR6_CTXSW_ACTIVE_PCT GpmMetricId = 204 GPM_METRIC_GR7_CTXSW_CYCLES_ELAPSED GpmMetricId = 205 GPM_METRIC_GR7_CTXSW_CYCLES_ACTIVE GpmMetricId = 206 GPM_METRIC_GR7_CTXSW_REQUESTS GpmMetricId = 207 GPM_METRIC_GR7_CTXSW_CYCLES_PER_REQ GpmMetricId = 208 GPM_METRIC_GR7_CTXSW_ACTIVE_PCT GpmMetricId = 209 GPM_METRIC_MAX GpmMetricId = 210 ) // PowerProfileType as declared in nvml/nvml.h type PowerProfileType int32 // PowerProfileType enumeration from nvml/nvml.h const ( POWER_PROFILE_MAX_P PowerProfileType = iota POWER_PROFILE_MAX_Q PowerProfileType = 1 POWER_PROFILE_COMPUTE PowerProfileType = 2 POWER_PROFILE_MEMORY_BOUND PowerProfileType = 3 POWER_PROFILE_NETWORK PowerProfileType = 4 POWER_PROFILE_BALANCED PowerProfileType = 5 POWER_PROFILE_LLM_INFERENCE PowerProfileType = 6 POWER_PROFILE_LLM_TRAINING PowerProfileType = 7 POWER_PROFILE_RBM PowerProfileType = 8 POWER_PROFILE_DCPCIE PowerProfileType = 9 POWER_PROFILE_HMMA_SPARSE PowerProfileType = 10 POWER_PROFILE_HMMA_DENSE PowerProfileType = 11 POWER_PROFILE_SYNC_BALANCED PowerProfileType = 12 POWER_PROFILE_HPC PowerProfileType = 13 POWER_PROFILE_MIG PowerProfileType = 14 POWER_PROFILE_MAX PowerProfileType = 15 ) NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/const_static.go000066400000000000000000000015601520540370700275330ustar00rootroot00000000000000// Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml import ( "reflect" ) const ( SYSTEM_PROCESS_NAME_BUFFER_SIZE = 256 ) func STRUCT_VERSION(data interface{}, version uint32) uint32 { return uint32(uint32(reflect.Indirect(reflect.ValueOf(data)).Type().Size()) | (version << uint32(24))) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/device.go000066400000000000000000003664051520540370700263110ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml import ( "fmt" "reflect" "unsafe" ) // nvmlDeviceHandle attempts to convert a device d to an nvmlDevice. // This is required for functions such as GetTopologyCommonAncestor which // accept Device arguments that need to be passed to internal nvml* functions // as nvmlDevice parameters. func nvmlDeviceHandle(d Device) nvmlDevice { var helper func(val reflect.Value) nvmlDevice helper = func(val reflect.Value) nvmlDevice { if val.Kind() == reflect.Interface { val = val.Elem() } if val.Kind() == reflect.Ptr { val = val.Elem() } if val.Type() == reflect.TypeOf(nvmlDevice{}) { return val.Interface().(nvmlDevice) } if val.Kind() != reflect.Struct { panic(fmt.Errorf("unable to convert non-struct type %v to nvmlDevice", val.Kind())) } for i := 0; i < val.Type().NumField(); i++ { if !val.Type().Field(i).Anonymous { continue } if !val.Field(i).Type().Implements(reflect.TypeOf((*Device)(nil)).Elem()) { continue } return helper(val.Field(i)) } panic(fmt.Errorf("unable to convert %T to nvmlDevice", d)) } return helper(reflect.ValueOf(d)) } // EccBitType type EccBitType = MemoryErrorType // GpuInstanceInfo includes an interface type for Device instead of nvmlDevice type GpuInstanceInfo struct { Device Device Id uint32 ProfileId uint32 Placement GpuInstancePlacement } func (g nvmlGpuInstanceInfo) convert() GpuInstanceInfo { out := GpuInstanceInfo{ Device: g.Device, Id: g.Id, ProfileId: g.ProfileId, Placement: g.Placement, } return out } // ComputeInstanceInfo includes an interface type for Device instead of nvmlDevice type ComputeInstanceInfo struct { Device Device GpuInstance GpuInstance Id uint32 ProfileId uint32 Placement ComputeInstancePlacement } func (c nvmlComputeInstanceInfo) convert() ComputeInstanceInfo { out := ComputeInstanceInfo{ Device: c.Device, GpuInstance: c.GpuInstance, Id: c.Id, ProfileId: c.ProfileId, Placement: c.Placement, } return out } // nvml.DeviceGetCount() func (l *library) DeviceGetCount() (int, Return) { var deviceCount uint32 ret := nvmlDeviceGetCount(&deviceCount) return int(deviceCount), ret } // nvml.DeviceGetHandleByIndex() func (l *library) DeviceGetHandleByIndex(index int) (Device, Return) { var device nvmlDevice ret := nvmlDeviceGetHandleByIndex(uint32(index), &device) return device, ret } // nvml.DeviceGetHandleBySerial() // // Deprecated: Use DeviceGetHandleByUUID instead. func (l *library) DeviceGetHandleBySerial(serial string) (Device, Return) { var device nvmlDevice ret := nvmlDeviceGetHandleBySerial(serial+string(rune(0)), &device) return device, ret } // nvml.DeviceGetHandleByUUID() func (l *library) DeviceGetHandleByUUID(uuid string) (Device, Return) { var device nvmlDevice ret := nvmlDeviceGetHandleByUUID(uuid+string(rune(0)), &device) return device, ret } // nvml.DeviceGetHandleByUUIDV() func (l *library) DeviceGetHandleByUUIDV(uuid *UUID) (Device, Return) { var device nvmlDevice ret := nvmlDeviceGetHandleByUUIDV(uuid, &device) return device, ret } // nvml.DeviceGetHandleByPciBusId() func (l *library) DeviceGetHandleByPciBusId(pciBusId string) (Device, Return) { var device nvmlDevice ret := nvmlDeviceGetHandleByPciBusId(pciBusId+string(rune(0)), &device) return device, ret } // nvml.DeviceGetName() func (l *library) DeviceGetName(device Device) (string, Return) { return device.GetName() } func (device nvmlDevice) GetName() (string, Return) { name := make([]byte, DEVICE_NAME_V2_BUFFER_SIZE) ret := nvmlDeviceGetName(device, &name[0], DEVICE_NAME_V2_BUFFER_SIZE) return string(name[:clen(name)]), ret } // nvml.DeviceGetBrand() func (l *library) DeviceGetBrand(device Device) (BrandType, Return) { return device.GetBrand() } func (device nvmlDevice) GetBrand() (BrandType, Return) { var brandType BrandType ret := nvmlDeviceGetBrand(device, &brandType) return brandType, ret } // nvml.DeviceGetIndex() func (l *library) DeviceGetIndex(device Device) (int, Return) { return device.GetIndex() } func (device nvmlDevice) GetIndex() (int, Return) { var index uint32 ret := nvmlDeviceGetIndex(device, &index) return int(index), ret } // nvml.DeviceGetSerial() func (l *library) DeviceGetSerial(device Device) (string, Return) { return device.GetSerial() } func (device nvmlDevice) GetSerial() (string, Return) { serial := make([]byte, DEVICE_SERIAL_BUFFER_SIZE) ret := nvmlDeviceGetSerial(device, &serial[0], DEVICE_SERIAL_BUFFER_SIZE) return string(serial[:clen(serial)]), ret } // nvml.DeviceGetCpuAffinity() func (l *library) DeviceGetCpuAffinity(device Device, numCPUs int) ([]uint, Return) { return device.GetCpuAffinity(numCPUs) } func (device nvmlDevice) GetCpuAffinity(numCPUs int) ([]uint, Return) { cpuSetSize := uint32((numCPUs-1)/int(unsafe.Sizeof(uint(0))) + 1) cpuSet := make([]uint, cpuSetSize) ret := nvmlDeviceGetCpuAffinity(device, cpuSetSize, &cpuSet[0]) return cpuSet, ret } // nvml.DeviceSetCpuAffinity() func (l *library) DeviceSetCpuAffinity(device Device) Return { return device.SetCpuAffinity() } func (device nvmlDevice) SetCpuAffinity() Return { return nvmlDeviceSetCpuAffinity(device) } // nvml.DeviceClearCpuAffinity() func (l *library) DeviceClearCpuAffinity(device Device) Return { return device.ClearCpuAffinity() } func (device nvmlDevice) ClearCpuAffinity() Return { return nvmlDeviceClearCpuAffinity(device) } // nvml.DeviceGetMemoryAffinity() func (l *library) DeviceGetMemoryAffinity(device Device, numNodes int, scope AffinityScope) ([]uint, Return) { return device.GetMemoryAffinity(numNodes, scope) } func (device nvmlDevice) GetMemoryAffinity(numNodes int, scope AffinityScope) ([]uint, Return) { nodeSetSize := uint32((numNodes-1)/int(unsafe.Sizeof(uint(0))) + 1) nodeSet := make([]uint, nodeSetSize) ret := nvmlDeviceGetMemoryAffinity(device, nodeSetSize, &nodeSet[0], scope) return nodeSet, ret } // nvml.DeviceGetCpuAffinityWithinScope() func (l *library) DeviceGetCpuAffinityWithinScope(device Device, numCPUs int, scope AffinityScope) ([]uint, Return) { return device.GetCpuAffinityWithinScope(numCPUs, scope) } func (device nvmlDevice) GetCpuAffinityWithinScope(numCPUs int, scope AffinityScope) ([]uint, Return) { cpuSetSize := uint32((numCPUs-1)/int(unsafe.Sizeof(uint(0))) + 1) cpuSet := make([]uint, cpuSetSize) ret := nvmlDeviceGetCpuAffinityWithinScope(device, cpuSetSize, &cpuSet[0], scope) return cpuSet, ret } // nvml.DeviceGetTopologyCommonAncestor() func (l *library) DeviceGetTopologyCommonAncestor(device1 Device, device2 Device) (GpuTopologyLevel, Return) { return device1.GetTopologyCommonAncestor(device2) } func (device1 nvmlDevice) GetTopologyCommonAncestor(device2 Device) (GpuTopologyLevel, Return) { var pathInfo GpuTopologyLevel ret := nvmlDeviceGetTopologyCommonAncestorStub(device1, nvmlDeviceHandle(device2), &pathInfo) return pathInfo, ret } // nvmlDeviceGetTopologyCommonAncestorStub allows us to override this for testing. var nvmlDeviceGetTopologyCommonAncestorStub = nvmlDeviceGetTopologyCommonAncestor // nvml.DeviceGetTopologyNearestGpus() func (l *library) DeviceGetTopologyNearestGpus(device Device, level GpuTopologyLevel) ([]Device, Return) { return device.GetTopologyNearestGpus(level) } func (device nvmlDevice) GetTopologyNearestGpus(level GpuTopologyLevel) ([]Device, Return) { var count uint32 ret := nvmlDeviceGetTopologyNearestGpus(device, level, &count, nil) if ret != SUCCESS { return nil, ret } if count == 0 { return []Device{}, ret } deviceArray := make([]nvmlDevice, count) ret = nvmlDeviceGetTopologyNearestGpus(device, level, &count, &deviceArray[0]) return convertSlice[nvmlDevice, Device](deviceArray), ret } // nvml.DeviceGetP2PStatus() func (l *library) DeviceGetP2PStatus(device1 Device, device2 Device, p2pIndex GpuP2PCapsIndex) (GpuP2PStatus, Return) { return device1.GetP2PStatus(device2, p2pIndex) } func (device1 nvmlDevice) GetP2PStatus(device2 Device, p2pIndex GpuP2PCapsIndex) (GpuP2PStatus, Return) { var p2pStatus GpuP2PStatus ret := nvmlDeviceGetP2PStatus(device1, nvmlDeviceHandle(device2), p2pIndex, &p2pStatus) return p2pStatus, ret } // nvml.DeviceGetUUID() func (l *library) DeviceGetUUID(device Device) (string, Return) { return device.GetUUID() } func (device nvmlDevice) GetUUID() (string, Return) { uuid := make([]byte, DEVICE_UUID_V2_BUFFER_SIZE) ret := nvmlDeviceGetUUID(device, &uuid[0], DEVICE_UUID_V2_BUFFER_SIZE) return string(uuid[:clen(uuid)]), ret } // nvml.DeviceGetMinorNumber() func (l *library) DeviceGetMinorNumber(device Device) (int, Return) { return device.GetMinorNumber() } func (device nvmlDevice) GetMinorNumber() (int, Return) { var minorNumber uint32 ret := nvmlDeviceGetMinorNumber(device, &minorNumber) return int(minorNumber), ret } // nvml.DeviceGetBoardPartNumber() func (l *library) DeviceGetBoardPartNumber(device Device) (string, Return) { return device.GetBoardPartNumber() } func (device nvmlDevice) GetBoardPartNumber() (string, Return) { partNumber := make([]byte, DEVICE_PART_NUMBER_BUFFER_SIZE) ret := nvmlDeviceGetBoardPartNumber(device, &partNumber[0], DEVICE_PART_NUMBER_BUFFER_SIZE) return string(partNumber[:clen(partNumber)]), ret } // nvml.DeviceGetInforomVersion() func (l *library) DeviceGetInforomVersion(device Device, object InforomObject) (string, Return) { return device.GetInforomVersion(object) } func (device nvmlDevice) GetInforomVersion(object InforomObject) (string, Return) { version := make([]byte, DEVICE_INFOROM_VERSION_BUFFER_SIZE) ret := nvmlDeviceGetInforomVersion(device, object, &version[0], DEVICE_INFOROM_VERSION_BUFFER_SIZE) return string(version[:clen(version)]), ret } // nvml.DeviceGetInforomImageVersion() func (l *library) DeviceGetInforomImageVersion(device Device) (string, Return) { return device.GetInforomImageVersion() } func (device nvmlDevice) GetInforomImageVersion() (string, Return) { version := make([]byte, DEVICE_INFOROM_VERSION_BUFFER_SIZE) ret := nvmlDeviceGetInforomImageVersion(device, &version[0], DEVICE_INFOROM_VERSION_BUFFER_SIZE) return string(version[:clen(version)]), ret } // nvml.DeviceGetInforomConfigurationChecksum() func (l *library) DeviceGetInforomConfigurationChecksum(device Device) (uint32, Return) { return device.GetInforomConfigurationChecksum() } func (device nvmlDevice) GetInforomConfigurationChecksum() (uint32, Return) { var checksum uint32 ret := nvmlDeviceGetInforomConfigurationChecksum(device, &checksum) return checksum, ret } // nvml.DeviceValidateInforom() func (l *library) DeviceValidateInforom(device Device) Return { return device.ValidateInforom() } func (device nvmlDevice) ValidateInforom() Return { return nvmlDeviceValidateInforom(device) } // nvml.DeviceGetDisplayMode() func (l *library) DeviceGetDisplayMode(device Device) (EnableState, Return) { return device.GetDisplayMode() } func (device nvmlDevice) GetDisplayMode() (EnableState, Return) { var display EnableState ret := nvmlDeviceGetDisplayMode(device, &display) return display, ret } // nvml.DeviceGetDisplayActive() func (l *library) DeviceGetDisplayActive(device Device) (EnableState, Return) { return device.GetDisplayActive() } func (device nvmlDevice) GetDisplayActive() (EnableState, Return) { var isActive EnableState ret := nvmlDeviceGetDisplayActive(device, &isActive) return isActive, ret } // nvml.DeviceGetPersistenceMode() func (l *library) DeviceGetPersistenceMode(device Device) (EnableState, Return) { return device.GetPersistenceMode() } func (device nvmlDevice) GetPersistenceMode() (EnableState, Return) { var mode EnableState ret := nvmlDeviceGetPersistenceMode(device, &mode) return mode, ret } // nvml.DeviceGetPciInfo() func (l *library) DeviceGetPciInfo(device Device) (PciInfo, Return) { return device.GetPciInfo() } func (device nvmlDevice) GetPciInfo() (PciInfo, Return) { var pci PciInfo ret := nvmlDeviceGetPciInfo(device, &pci) return pci, ret } // nvml.DeviceGetMaxPcieLinkGeneration() func (l *library) DeviceGetMaxPcieLinkGeneration(device Device) (int, Return) { return device.GetMaxPcieLinkGeneration() } func (device nvmlDevice) GetMaxPcieLinkGeneration() (int, Return) { var maxLinkGen uint32 ret := nvmlDeviceGetMaxPcieLinkGeneration(device, &maxLinkGen) return int(maxLinkGen), ret } // nvml.DeviceGetMaxPcieLinkWidth() func (l *library) DeviceGetMaxPcieLinkWidth(device Device) (int, Return) { return device.GetMaxPcieLinkWidth() } func (device nvmlDevice) GetMaxPcieLinkWidth() (int, Return) { var maxLinkWidth uint32 ret := nvmlDeviceGetMaxPcieLinkWidth(device, &maxLinkWidth) return int(maxLinkWidth), ret } // nvml.DeviceGetCurrPcieLinkGeneration() func (l *library) DeviceGetCurrPcieLinkGeneration(device Device) (int, Return) { return device.GetCurrPcieLinkGeneration() } func (device nvmlDevice) GetCurrPcieLinkGeneration() (int, Return) { var currLinkGen uint32 ret := nvmlDeviceGetCurrPcieLinkGeneration(device, &currLinkGen) return int(currLinkGen), ret } // nvml.DeviceGetCurrPcieLinkWidth() func (l *library) DeviceGetCurrPcieLinkWidth(device Device) (int, Return) { return device.GetCurrPcieLinkWidth() } func (device nvmlDevice) GetCurrPcieLinkWidth() (int, Return) { var currLinkWidth uint32 ret := nvmlDeviceGetCurrPcieLinkWidth(device, &currLinkWidth) return int(currLinkWidth), ret } // nvml.DeviceGetPcieThroughput() func (l *library) DeviceGetPcieThroughput(device Device, counter PcieUtilCounter) (uint32, Return) { return device.GetPcieThroughput(counter) } func (device nvmlDevice) GetPcieThroughput(counter PcieUtilCounter) (uint32, Return) { var value uint32 ret := nvmlDeviceGetPcieThroughput(device, counter, &value) return value, ret } // nvml.DeviceGetPcieReplayCounter() func (l *library) DeviceGetPcieReplayCounter(device Device) (int, Return) { return device.GetPcieReplayCounter() } func (device nvmlDevice) GetPcieReplayCounter() (int, Return) { var value uint32 ret := nvmlDeviceGetPcieReplayCounter(device, &value) return int(value), ret } // nvml.nvmlDeviceGetClockInfo() func (l *library) DeviceGetClockInfo(device Device, clockType ClockType) (uint32, Return) { return device.GetClockInfo(clockType) } func (device nvmlDevice) GetClockInfo(clockType ClockType) (uint32, Return) { var clock uint32 ret := nvmlDeviceGetClockInfo(device, clockType, &clock) return clock, ret } // nvml.DeviceGetMaxClockInfo() func (l *library) DeviceGetMaxClockInfo(device Device, clockType ClockType) (uint32, Return) { return device.GetMaxClockInfo(clockType) } func (device nvmlDevice) GetMaxClockInfo(clockType ClockType) (uint32, Return) { var clock uint32 ret := nvmlDeviceGetMaxClockInfo(device, clockType, &clock) return clock, ret } // nvml.DeviceGetApplicationsClock() // // Deprecated: Applications clocks are deprecated and will be removed in CUDA 14.0. func (l *library) DeviceGetApplicationsClock(device Device, clockType ClockType) (uint32, Return) { return device.GetApplicationsClock(clockType) } // Deprecated: Applications clocks are deprecated and will be removed in CUDA 14.0. func (device nvmlDevice) GetApplicationsClock(clockType ClockType) (uint32, Return) { var clockMHz uint32 ret := nvmlDeviceGetApplicationsClock(device, clockType, &clockMHz) return clockMHz, ret } // nvml.DeviceGetDefaultApplicationsClock() // // Deprecated: Applications clocks are deprecated and will be removed in CUDA 14.0. func (l *library) DeviceGetDefaultApplicationsClock(device Device, clockType ClockType) (uint32, Return) { return device.GetDefaultApplicationsClock(clockType) } // Deprecated: Applications clocks are deprecated and will be removed in CUDA 14.0. func (device nvmlDevice) GetDefaultApplicationsClock(clockType ClockType) (uint32, Return) { var clockMHz uint32 ret := nvmlDeviceGetDefaultApplicationsClock(device, clockType, &clockMHz) return clockMHz, ret } // nvml.DeviceResetApplicationsClocks() // // Deprecated: Use DeviceResetMemoryLockedClocks for Memory Clocks and DeviceResetGpuLockedClocks for Graphics Clocks instead func (l *library) DeviceResetApplicationsClocks(device Device) Return { return device.ResetApplicationsClocks() } // Deprecated: Use DeviceResetMemoryLockedClocks for Memory Clocks and DeviceResetGpuLockedClocks for Graphics Clocks instead func (device nvmlDevice) ResetApplicationsClocks() Return { return nvmlDeviceResetApplicationsClocks(device) } // nvml.DeviceGetClock() func (l *library) DeviceGetClock(device Device, clockType ClockType, clockId ClockId) (uint32, Return) { return device.GetClock(clockType, clockId) } func (device nvmlDevice) GetClock(clockType ClockType, clockId ClockId) (uint32, Return) { var clockMHz uint32 ret := nvmlDeviceGetClock(device, clockType, clockId, &clockMHz) return clockMHz, ret } // nvml.DeviceGetMaxCustomerBoostClock() func (l *library) DeviceGetMaxCustomerBoostClock(device Device, clockType ClockType) (uint32, Return) { return device.GetMaxCustomerBoostClock(clockType) } func (device nvmlDevice) GetMaxCustomerBoostClock(clockType ClockType) (uint32, Return) { var clockMHz uint32 ret := nvmlDeviceGetMaxCustomerBoostClock(device, clockType, &clockMHz) return clockMHz, ret } // nvml.DeviceGetSupportedMemoryClocks() func (l *library) DeviceGetSupportedMemoryClocks(device Device) (int, uint32, Return) { return device.GetSupportedMemoryClocks() } func (device nvmlDevice) GetSupportedMemoryClocks() (int, uint32, Return) { var count, clocksMHz uint32 ret := nvmlDeviceGetSupportedMemoryClocks(device, &count, &clocksMHz) return int(count), clocksMHz, ret } // nvml.DeviceGetSupportedGraphicsClocks() func (l *library) DeviceGetSupportedGraphicsClocks(device Device, memoryClockMHz int) (int, uint32, Return) { return device.GetSupportedGraphicsClocks(memoryClockMHz) } func (device nvmlDevice) GetSupportedGraphicsClocks(memoryClockMHz int) (int, uint32, Return) { var count, clocksMHz uint32 ret := nvmlDeviceGetSupportedGraphicsClocks(device, uint32(memoryClockMHz), &count, &clocksMHz) return int(count), clocksMHz, ret } // nvml.DeviceGetAutoBoostedClocksEnabled() func (l *library) DeviceGetAutoBoostedClocksEnabled(device Device) (EnableState, EnableState, Return) { return device.GetAutoBoostedClocksEnabled() } func (device nvmlDevice) GetAutoBoostedClocksEnabled() (EnableState, EnableState, Return) { var isEnabled, defaultIsEnabled EnableState ret := nvmlDeviceGetAutoBoostedClocksEnabled(device, &isEnabled, &defaultIsEnabled) return isEnabled, defaultIsEnabled, ret } // nvml.DeviceSetAutoBoostedClocksEnabled() func (l *library) DeviceSetAutoBoostedClocksEnabled(device Device, enabled EnableState) Return { return device.SetAutoBoostedClocksEnabled(enabled) } func (device nvmlDevice) SetAutoBoostedClocksEnabled(enabled EnableState) Return { return nvmlDeviceSetAutoBoostedClocksEnabled(device, enabled) } // nvml.DeviceSetDefaultAutoBoostedClocksEnabled() func (l *library) DeviceSetDefaultAutoBoostedClocksEnabled(device Device, enabled EnableState, flags uint32) Return { return device.SetDefaultAutoBoostedClocksEnabled(enabled, flags) } func (device nvmlDevice) SetDefaultAutoBoostedClocksEnabled(enabled EnableState, flags uint32) Return { return nvmlDeviceSetDefaultAutoBoostedClocksEnabled(device, enabled, flags) } // nvml.DeviceGetFanSpeed() func (l *library) DeviceGetFanSpeed(device Device) (uint32, Return) { return device.GetFanSpeed() } func (device nvmlDevice) GetFanSpeed() (uint32, Return) { var speed uint32 ret := nvmlDeviceGetFanSpeed(device, &speed) return speed, ret } // nvml.DeviceGetFanSpeed_v2() func (l *library) DeviceGetFanSpeed_v2(device Device, fan int) (uint32, Return) { return device.GetFanSpeed_v2(fan) } func (device nvmlDevice) GetFanSpeed_v2(fan int) (uint32, Return) { var speed uint32 ret := nvmlDeviceGetFanSpeed_v2(device, uint32(fan), &speed) return speed, ret } // nvml.DeviceGetNumFans() func (l *library) DeviceGetNumFans(device Device) (int, Return) { return device.GetNumFans() } func (device nvmlDevice) GetNumFans() (int, Return) { var numFans uint32 ret := nvmlDeviceGetNumFans(device, &numFans) return int(numFans), ret } // nvml.DeviceGetTemperature() // // Deprecated: Use DeviceGetTemperatureV instead. func (l *library) DeviceGetTemperature(device Device, sensorType TemperatureSensors) (uint32, Return) { return device.GetTemperature(sensorType) } // Deprecated: Use DeviceGetTemperatureV instead. func (device nvmlDevice) GetTemperature(sensorType TemperatureSensors) (uint32, Return) { var temp uint32 ret := nvmlDeviceGetTemperature(device, sensorType, &temp) return temp, ret } // nvml.DeviceGetTemperatureThreshold() func (l *library) DeviceGetTemperatureThreshold(device Device, thresholdType TemperatureThresholds) (uint32, Return) { return device.GetTemperatureThreshold(thresholdType) } func (device nvmlDevice) GetTemperatureThreshold(thresholdType TemperatureThresholds) (uint32, Return) { var temp uint32 ret := nvmlDeviceGetTemperatureThreshold(device, thresholdType, &temp) return temp, ret } // nvml.DeviceSetTemperatureThreshold() func (l *library) DeviceSetTemperatureThreshold(device Device, thresholdType TemperatureThresholds, temp int) Return { return device.SetTemperatureThreshold(thresholdType, temp) } func (device nvmlDevice) SetTemperatureThreshold(thresholdType TemperatureThresholds, temp int) Return { t := int32(temp) ret := nvmlDeviceSetTemperatureThreshold(device, thresholdType, &t) return ret } // nvml.DeviceGetPerformanceState() func (l *library) DeviceGetPerformanceState(device Device) (Pstates, Return) { return device.GetPerformanceState() } func (device nvmlDevice) GetPerformanceState() (Pstates, Return) { var pState Pstates ret := nvmlDeviceGetPerformanceState(device, &pState) return pState, ret } // nvml.DeviceGetCurrentClocksThrottleReasons() // // Deprecated: Use DeviceGetCurrentClocksEventReasons instead func (l *library) DeviceGetCurrentClocksThrottleReasons(device Device) (uint64, Return) { return device.GetCurrentClocksThrottleReasons() } // Deprecated: Use DeviceGetCurrentClocksEventReasons instead func (device nvmlDevice) GetCurrentClocksThrottleReasons() (uint64, Return) { var clocksThrottleReasons uint64 ret := nvmlDeviceGetCurrentClocksThrottleReasons(device, &clocksThrottleReasons) return clocksThrottleReasons, ret } // nvml.DeviceGetSupportedClocksThrottleReasons() // // Deprecated: Use DeviceGetSupportedClocksEventReasons instead func (l *library) DeviceGetSupportedClocksThrottleReasons(device Device) (uint64, Return) { return device.GetSupportedClocksThrottleReasons() } // Deprecated: Use DeviceGetSupportedClocksEventReasons instead func (device nvmlDevice) GetSupportedClocksThrottleReasons() (uint64, Return) { var supportedClocksThrottleReasons uint64 ret := nvmlDeviceGetSupportedClocksThrottleReasons(device, &supportedClocksThrottleReasons) return supportedClocksThrottleReasons, ret } // nvml.DeviceGetPowerState() // // Deprecated: Use DeviceGetPerformanceState instead func (l *library) DeviceGetPowerState(device Device) (Pstates, Return) { return device.GetPowerState() } // Deprecated: Use DeviceGetPerformanceState instead func (device nvmlDevice) GetPowerState() (Pstates, Return) { var pState Pstates ret := nvmlDeviceGetPowerState(device, &pState) return pState, ret } // nvml.DeviceGetPowerManagementMode() // // Deprecated: This will be removed in a future version func (l *library) DeviceGetPowerManagementMode(device Device) (EnableState, Return) { return device.GetPowerManagementMode() } // Deprecated: This will be removed in a future version func (device nvmlDevice) GetPowerManagementMode() (EnableState, Return) { var mode EnableState ret := nvmlDeviceGetPowerManagementMode(device, &mode) return mode, ret } // nvml.DeviceGetPowerManagementLimit() func (l *library) DeviceGetPowerManagementLimit(device Device) (uint32, Return) { return device.GetPowerManagementLimit() } func (device nvmlDevice) GetPowerManagementLimit() (uint32, Return) { var limit uint32 ret := nvmlDeviceGetPowerManagementLimit(device, &limit) return limit, ret } // nvml.DeviceGetPowerManagementLimitConstraints() func (l *library) DeviceGetPowerManagementLimitConstraints(device Device) (uint32, uint32, Return) { return device.GetPowerManagementLimitConstraints() } func (device nvmlDevice) GetPowerManagementLimitConstraints() (uint32, uint32, Return) { var minLimit, maxLimit uint32 ret := nvmlDeviceGetPowerManagementLimitConstraints(device, &minLimit, &maxLimit) return minLimit, maxLimit, ret } // nvml.DeviceGetPowerManagementDefaultLimit() func (l *library) DeviceGetPowerManagementDefaultLimit(device Device) (uint32, Return) { return device.GetPowerManagementDefaultLimit() } func (device nvmlDevice) GetPowerManagementDefaultLimit() (uint32, Return) { var defaultLimit uint32 ret := nvmlDeviceGetPowerManagementDefaultLimit(device, &defaultLimit) return defaultLimit, ret } // nvml.DeviceGetPowerUsage() func (l *library) DeviceGetPowerUsage(device Device) (uint32, Return) { return device.GetPowerUsage() } func (device nvmlDevice) GetPowerUsage() (uint32, Return) { var power uint32 ret := nvmlDeviceGetPowerUsage(device, &power) return power, ret } func (l *library) DeviceGetPowerMizerMode_v1(device Device) (DevicePowerMizerModes_v1, Return) { return device.GetPowerMizerMode_v1() } func (device nvmlDevice) GetPowerMizerMode_v1() (DevicePowerMizerModes_v1, Return) { var devicePowerMizerModes DevicePowerMizerModes_v1 ret := nvmlDeviceGetPowerMizerMode_v1(device, &devicePowerMizerModes) return devicePowerMizerModes, ret } // nvml.DeviceGetTotalEnergyConsumption() func (l *library) DeviceGetTotalEnergyConsumption(device Device) (uint64, Return) { return device.GetTotalEnergyConsumption() } func (device nvmlDevice) GetTotalEnergyConsumption() (uint64, Return) { var energy uint64 ret := nvmlDeviceGetTotalEnergyConsumption(device, &energy) return energy, ret } // nvml.DeviceGetEnforcedPowerLimit() func (l *library) DeviceGetEnforcedPowerLimit(device Device) (uint32, Return) { return device.GetEnforcedPowerLimit() } func (device nvmlDevice) GetEnforcedPowerLimit() (uint32, Return) { var limit uint32 ret := nvmlDeviceGetEnforcedPowerLimit(device, &limit) return limit, ret } // nvml.DeviceGetGpuOperationMode() func (l *library) DeviceGetGpuOperationMode(device Device) (GpuOperationMode, GpuOperationMode, Return) { return device.GetGpuOperationMode() } func (device nvmlDevice) GetGpuOperationMode() (GpuOperationMode, GpuOperationMode, Return) { var current, pending GpuOperationMode ret := nvmlDeviceGetGpuOperationMode(device, ¤t, &pending) return current, pending, ret } // nvml.DeviceGetMemoryInfo() func (l *library) DeviceGetMemoryInfo(device Device) (Memory, Return) { return device.GetMemoryInfo() } func (device nvmlDevice) GetMemoryInfo() (Memory, Return) { var memory Memory ret := nvmlDeviceGetMemoryInfo(device, &memory) return memory, ret } // nvml.DeviceGetMemoryInfo_v2() func (l *library) DeviceGetMemoryInfo_v2(device Device) (Memory_v2, Return) { return device.GetMemoryInfo_v2() } func (device nvmlDevice) GetMemoryInfo_v2() (Memory_v2, Return) { var memory Memory_v2 memory.Version = STRUCT_VERSION(memory, 2) ret := nvmlDeviceGetMemoryInfo_v2(device, &memory) return memory, ret } // nvml.DeviceGetComputeMode() func (l *library) DeviceGetComputeMode(device Device) (ComputeMode, Return) { return device.GetComputeMode() } func (device nvmlDevice) GetComputeMode() (ComputeMode, Return) { var mode ComputeMode ret := nvmlDeviceGetComputeMode(device, &mode) return mode, ret } // nvml.DeviceGetCudaComputeCapability() func (l *library) DeviceGetCudaComputeCapability(device Device) (int, int, Return) { return device.GetCudaComputeCapability() } func (device nvmlDevice) GetCudaComputeCapability() (int, int, Return) { var major, minor int32 ret := nvmlDeviceGetCudaComputeCapability(device, &major, &minor) return int(major), int(minor), ret } // nvml.DeviceGetEccMode() func (l *library) DeviceGetEccMode(device Device) (EnableState, EnableState, Return) { return device.GetEccMode() } func (device nvmlDevice) GetEccMode() (EnableState, EnableState, Return) { var current, pending EnableState ret := nvmlDeviceGetEccMode(device, ¤t, &pending) return current, pending, ret } // nvml.DeviceGetBoardId() func (l *library) DeviceGetBoardId(device Device) (uint32, Return) { return device.GetBoardId() } func (device nvmlDevice) GetBoardId() (uint32, Return) { var boardId uint32 ret := nvmlDeviceGetBoardId(device, &boardId) return boardId, ret } // nvml.DeviceGetMultiGpuBoard() func (l *library) DeviceGetMultiGpuBoard(device Device) (int, Return) { return device.GetMultiGpuBoard() } func (device nvmlDevice) GetMultiGpuBoard() (int, Return) { var multiGpuBool uint32 ret := nvmlDeviceGetMultiGpuBoard(device, &multiGpuBool) return int(multiGpuBool), ret } // nvml.DeviceGetTotalEccErrors() func (l *library) DeviceGetTotalEccErrors(device Device, errorType MemoryErrorType, counterType EccCounterType) (uint64, Return) { return device.GetTotalEccErrors(errorType, counterType) } func (device nvmlDevice) GetTotalEccErrors(errorType MemoryErrorType, counterType EccCounterType) (uint64, Return) { var eccCounts uint64 ret := nvmlDeviceGetTotalEccErrors(device, errorType, counterType, &eccCounts) return eccCounts, ret } // nvml.DeviceGetDetailedEccErrors() // // Deprecated: See DeviceGetMemoryErrorCounter func (l *library) DeviceGetDetailedEccErrors(device Device, errorType MemoryErrorType, counterType EccCounterType) (EccErrorCounts, Return) { return device.GetDetailedEccErrors(errorType, counterType) } // Deprecated: See DeviceGetMemoryErrorCounter func (device nvmlDevice) GetDetailedEccErrors(errorType MemoryErrorType, counterType EccCounterType) (EccErrorCounts, Return) { var eccCounts EccErrorCounts ret := nvmlDeviceGetDetailedEccErrors(device, errorType, counterType, &eccCounts) return eccCounts, ret } // nvml.DeviceGetMemoryErrorCounter() func (l *library) DeviceGetMemoryErrorCounter(device Device, errorType MemoryErrorType, counterType EccCounterType, locationType MemoryLocation) (uint64, Return) { return device.GetMemoryErrorCounter(errorType, counterType, locationType) } func (device nvmlDevice) GetMemoryErrorCounter(errorType MemoryErrorType, counterType EccCounterType, locationType MemoryLocation) (uint64, Return) { var count uint64 ret := nvmlDeviceGetMemoryErrorCounter(device, errorType, counterType, locationType, &count) return count, ret } // nvml.DeviceGetUtilizationRates() func (l *library) DeviceGetUtilizationRates(device Device) (Utilization, Return) { return device.GetUtilizationRates() } func (device nvmlDevice) GetUtilizationRates() (Utilization, Return) { var utilization Utilization ret := nvmlDeviceGetUtilizationRates(device, &utilization) return utilization, ret } // nvml.DeviceGetEncoderUtilization() func (l *library) DeviceGetEncoderUtilization(device Device) (uint32, uint32, Return) { return device.GetEncoderUtilization() } func (device nvmlDevice) GetEncoderUtilization() (uint32, uint32, Return) { var utilization, samplingPeriodUs uint32 ret := nvmlDeviceGetEncoderUtilization(device, &utilization, &samplingPeriodUs) return utilization, samplingPeriodUs, ret } // nvml.DeviceGetEncoderCapacity() func (l *library) DeviceGetEncoderCapacity(device Device, encoderQueryType EncoderType) (int, Return) { return device.GetEncoderCapacity(encoderQueryType) } func (device nvmlDevice) GetEncoderCapacity(encoderQueryType EncoderType) (int, Return) { var encoderCapacity uint32 ret := nvmlDeviceGetEncoderCapacity(device, encoderQueryType, &encoderCapacity) return int(encoderCapacity), ret } // nvml.DeviceGetEncoderStats() func (l *library) DeviceGetEncoderStats(device Device) (int, uint32, uint32, Return) { return device.GetEncoderStats() } func (device nvmlDevice) GetEncoderStats() (int, uint32, uint32, Return) { var sessionCount, averageFps, averageLatency uint32 ret := nvmlDeviceGetEncoderStats(device, &sessionCount, &averageFps, &averageLatency) return int(sessionCount), averageFps, averageLatency, ret } // nvml.DeviceGetEncoderSessions() func (l *library) DeviceGetEncoderSessions(device Device) ([]EncoderSessionInfo, Return) { return device.GetEncoderSessions() } func (device nvmlDevice) GetEncoderSessions() ([]EncoderSessionInfo, Return) { var sessionCount uint32 = 1 // Will be reduced upon returning for { sessionInfos := make([]EncoderSessionInfo, sessionCount) ret := nvmlDeviceGetEncoderSessions(device, &sessionCount, &sessionInfos[0]) if ret == SUCCESS { return sessionInfos[:sessionCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } sessionCount *= 2 } } // nvml.DeviceGetDecoderUtilization() func (l *library) DeviceGetDecoderUtilization(device Device) (uint32, uint32, Return) { return device.GetDecoderUtilization() } func (device nvmlDevice) GetDecoderUtilization() (uint32, uint32, Return) { var utilization, samplingPeriodUs uint32 ret := nvmlDeviceGetDecoderUtilization(device, &utilization, &samplingPeriodUs) return utilization, samplingPeriodUs, ret } // nvml.DeviceGetFBCStats() func (l *library) DeviceGetFBCStats(device Device) (FBCStats, Return) { return device.GetFBCStats() } func (device nvmlDevice) GetFBCStats() (FBCStats, Return) { var fbcStats FBCStats ret := nvmlDeviceGetFBCStats(device, &fbcStats) return fbcStats, ret } // nvml.DeviceGetFBCSessions() func (l *library) DeviceGetFBCSessions(device Device) ([]FBCSessionInfo, Return) { return device.GetFBCSessions() } func (device nvmlDevice) GetFBCSessions() ([]FBCSessionInfo, Return) { var sessionCount uint32 = 1 // Will be reduced upon returning for { sessionInfo := make([]FBCSessionInfo, sessionCount) ret := nvmlDeviceGetFBCSessions(device, &sessionCount, &sessionInfo[0]) if ret == SUCCESS { return sessionInfo[:sessionCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } sessionCount *= 2 } } // nvml.DeviceGetDriverModel() func (l *library) DeviceGetDriverModel(device Device) (DriverModel, DriverModel, Return) { return device.GetDriverModel() } func (device nvmlDevice) GetDriverModel() (DriverModel, DriverModel, Return) { var current, pending DriverModel ret := nvmlDeviceGetDriverModel(device, ¤t, &pending) return current, pending, ret } // nvml.DeviceGetVbiosVersion() func (l *library) DeviceGetVbiosVersion(device Device) (string, Return) { return device.GetVbiosVersion() } func (device nvmlDevice) GetVbiosVersion() (string, Return) { version := make([]byte, DEVICE_VBIOS_VERSION_BUFFER_SIZE) ret := nvmlDeviceGetVbiosVersion(device, &version[0], DEVICE_VBIOS_VERSION_BUFFER_SIZE) return string(version[:clen(version)]), ret } // nvml.DeviceGetBridgeChipInfo() func (l *library) DeviceGetBridgeChipInfo(device Device) (BridgeChipHierarchy, Return) { return device.GetBridgeChipInfo() } func (device nvmlDevice) GetBridgeChipInfo() (BridgeChipHierarchy, Return) { var bridgeHierarchy BridgeChipHierarchy ret := nvmlDeviceGetBridgeChipInfo(device, &bridgeHierarchy) return bridgeHierarchy, ret } // nvml.DeviceGetComputeRunningProcesses() func deviceGetComputeRunningProcesses_v1(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo_v1, infoCount) ret := nvmlDeviceGetComputeRunningProcesses_v1(device, &infoCount, &infos[0]) if ret == SUCCESS { return ProcessInfo_v1Slice(infos[:infoCount]).ToProcessInfoSlice(), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func deviceGetComputeRunningProcesses_v2(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo_v2, infoCount) ret := nvmlDeviceGetComputeRunningProcesses_v2(device, &infoCount, &infos[0]) if ret == SUCCESS { return ProcessInfo_v2Slice(infos[:infoCount]).ToProcessInfoSlice(), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func deviceGetComputeRunningProcesses_v3(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo, infoCount) ret := nvmlDeviceGetComputeRunningProcesses_v3(device, &infoCount, &infos[0]) if ret == SUCCESS { return infos[:infoCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func (l *library) DeviceGetComputeRunningProcesses(device Device) ([]ProcessInfo, Return) { return device.GetComputeRunningProcesses() } func (device nvmlDevice) GetComputeRunningProcesses() ([]ProcessInfo, Return) { return deviceGetComputeRunningProcesses(device) } // nvml.DeviceGetGraphicsRunningProcesses() func deviceGetGraphicsRunningProcesses_v1(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo_v1, infoCount) ret := nvmlDeviceGetGraphicsRunningProcesses_v1(device, &infoCount, &infos[0]) if ret == SUCCESS { return ProcessInfo_v1Slice(infos[:infoCount]).ToProcessInfoSlice(), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func deviceGetGraphicsRunningProcesses_v2(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo_v2, infoCount) ret := nvmlDeviceGetGraphicsRunningProcesses_v2(device, &infoCount, &infos[0]) if ret == SUCCESS { return ProcessInfo_v2Slice(infos[:infoCount]).ToProcessInfoSlice(), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func deviceGetGraphicsRunningProcesses_v3(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo, infoCount) ret := nvmlDeviceGetGraphicsRunningProcesses_v3(device, &infoCount, &infos[0]) if ret == SUCCESS { return infos[:infoCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func (l *library) DeviceGetGraphicsRunningProcesses(device Device) ([]ProcessInfo, Return) { return device.GetGraphicsRunningProcesses() } func (device nvmlDevice) GetGraphicsRunningProcesses() ([]ProcessInfo, Return) { return deviceGetGraphicsRunningProcesses(device) } // nvml.DeviceGetMPSComputeRunningProcesses() func deviceGetMPSComputeRunningProcesses_v1(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo_v1, infoCount) ret := nvmlDeviceGetMPSComputeRunningProcesses_v1(device, &infoCount, &infos[0]) if ret == SUCCESS { return ProcessInfo_v1Slice(infos[:infoCount]).ToProcessInfoSlice(), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func deviceGetMPSComputeRunningProcesses_v2(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo_v2, infoCount) ret := nvmlDeviceGetMPSComputeRunningProcesses_v2(device, &infoCount, &infos[0]) if ret == SUCCESS { return ProcessInfo_v2Slice(infos[:infoCount]).ToProcessInfoSlice(), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func deviceGetMPSComputeRunningProcesses_v3(device nvmlDevice) ([]ProcessInfo, Return) { var infoCount uint32 = 1 // Will be reduced upon returning for { infos := make([]ProcessInfo, infoCount) ret := nvmlDeviceGetMPSComputeRunningProcesses_v3(device, &infoCount, &infos[0]) if ret == SUCCESS { return infos[:infoCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } infoCount *= 2 } } func (l *library) DeviceGetMPSComputeRunningProcesses(device Device) ([]ProcessInfo, Return) { return device.GetMPSComputeRunningProcesses() } func (device nvmlDevice) GetMPSComputeRunningProcesses() ([]ProcessInfo, Return) { return deviceGetMPSComputeRunningProcesses(device) } // nvml.DeviceOnSameBoard() func (l *library) DeviceOnSameBoard(device1 Device, device2 Device) (int, Return) { return device1.OnSameBoard(device2) } func (device1 nvmlDevice) OnSameBoard(device2 Device) (int, Return) { var onSameBoard int32 ret := nvmlDeviceOnSameBoard(device1, nvmlDeviceHandle(device2), &onSameBoard) return int(onSameBoard), ret } // nvml.DeviceGetAPIRestriction() func (l *library) DeviceGetAPIRestriction(device Device, apiType RestrictedAPI) (EnableState, Return) { return device.GetAPIRestriction(apiType) } func (device nvmlDevice) GetAPIRestriction(apiType RestrictedAPI) (EnableState, Return) { var isRestricted EnableState ret := nvmlDeviceGetAPIRestriction(device, apiType, &isRestricted) return isRestricted, ret } // nvml.DeviceGetSamples() func (l *library) DeviceGetSamples(device Device, samplingType SamplingType, lastSeenTimestamp uint64) (ValueType, []Sample, Return) { return device.GetSamples(samplingType, lastSeenTimestamp) } func (device nvmlDevice) GetSamples(samplingType SamplingType, lastSeenTimestamp uint64) (ValueType, []Sample, Return) { var sampleValType ValueType var sampleCount uint32 ret := nvmlDeviceGetSamples(device, samplingType, lastSeenTimestamp, &sampleValType, &sampleCount, nil) if ret != SUCCESS { return sampleValType, nil, ret } if sampleCount == 0 { return sampleValType, []Sample{}, ret } samples := make([]Sample, sampleCount) ret = nvmlDeviceGetSamples(device, samplingType, lastSeenTimestamp, &sampleValType, &sampleCount, &samples[0]) return sampleValType, samples, ret } // nvml.DeviceGetBAR1MemoryInfo() func (l *library) DeviceGetBAR1MemoryInfo(device Device) (BAR1Memory, Return) { return device.GetBAR1MemoryInfo() } func (device nvmlDevice) GetBAR1MemoryInfo() (BAR1Memory, Return) { var bar1Memory BAR1Memory ret := nvmlDeviceGetBAR1MemoryInfo(device, &bar1Memory) return bar1Memory, ret } // nvml.DeviceGetViolationStatus() // // Deprecated: Use DeviceGetFieldValues instead. func (l *library) DeviceGetViolationStatus(device Device, perfPolicyType PerfPolicyType) (ViolationTime, Return) { return device.GetViolationStatus(perfPolicyType) } // Deprecated: Use DeviceGetFieldValues instead. func (device nvmlDevice) GetViolationStatus(perfPolicyType PerfPolicyType) (ViolationTime, Return) { var violTime ViolationTime ret := nvmlDeviceGetViolationStatus(device, perfPolicyType, &violTime) return violTime, ret } // nvml.DeviceGetIrqNum() func (l *library) DeviceGetIrqNum(device Device) (int, Return) { return device.GetIrqNum() } func (device nvmlDevice) GetIrqNum() (int, Return) { var irqNum uint32 ret := nvmlDeviceGetIrqNum(device, &irqNum) return int(irqNum), ret } // nvml.DeviceGetNumGpuCores() func (l *library) DeviceGetNumGpuCores(device Device) (int, Return) { return device.GetNumGpuCores() } func (device nvmlDevice) GetNumGpuCores() (int, Return) { var numCores uint32 ret := nvmlDeviceGetNumGpuCores(device, &numCores) return int(numCores), ret } // nvml.DeviceGetPowerSource() func (l *library) DeviceGetPowerSource(device Device) (PowerSource, Return) { return device.GetPowerSource() } func (device nvmlDevice) GetPowerSource() (PowerSource, Return) { var powerSource PowerSource ret := nvmlDeviceGetPowerSource(device, &powerSource) return powerSource, ret } // nvml.DeviceGetMemoryBusWidth() func (l *library) DeviceGetMemoryBusWidth(device Device) (uint32, Return) { return device.GetMemoryBusWidth() } func (device nvmlDevice) GetMemoryBusWidth() (uint32, Return) { var busWidth uint32 ret := nvmlDeviceGetMemoryBusWidth(device, &busWidth) return busWidth, ret } // nvml.DeviceGetPcieLinkMaxSpeed() func (l *library) DeviceGetPcieLinkMaxSpeed(device Device) (uint32, Return) { return device.GetPcieLinkMaxSpeed() } func (device nvmlDevice) GetPcieLinkMaxSpeed() (uint32, Return) { var maxSpeed uint32 ret := nvmlDeviceGetPcieLinkMaxSpeed(device, &maxSpeed) return maxSpeed, ret } // nvml.DeviceGetAdaptiveClockInfoStatus() func (l *library) DeviceGetAdaptiveClockInfoStatus(device Device) (uint32, Return) { return device.GetAdaptiveClockInfoStatus() } func (device nvmlDevice) GetAdaptiveClockInfoStatus() (uint32, Return) { var adaptiveClockStatus uint32 ret := nvmlDeviceGetAdaptiveClockInfoStatus(device, &adaptiveClockStatus) return adaptiveClockStatus, ret } // nvml.DeviceGetAccountingMode() func (l *library) DeviceGetAccountingMode(device Device) (EnableState, Return) { return device.GetAccountingMode() } func (device nvmlDevice) GetAccountingMode() (EnableState, Return) { var mode EnableState ret := nvmlDeviceGetAccountingMode(device, &mode) return mode, ret } func (l *library) DeviceGetPdi(device Device) (Pdi, Return) { return device.GetPdi() } func (device nvmlDevice) GetPdi() (Pdi, Return) { var pdi Pdi pdi.Version = STRUCT_VERSION(pdi, 1) ret := nvmlDeviceGetPdi(device, &pdi) return pdi, ret } // nvml.DeviceGetAccountingStats() func (l *library) DeviceGetAccountingStats(device Device, pid uint32) (AccountingStats, Return) { return device.GetAccountingStats(pid) } func (device nvmlDevice) GetAccountingStats(pid uint32) (AccountingStats, Return) { var stats AccountingStats ret := nvmlDeviceGetAccountingStats(device, pid, &stats) return stats, ret } // nvml.DeviceGetAccountingPids() func (l *library) DeviceGetAccountingPids(device Device) ([]int, Return) { return device.GetAccountingPids() } func (device nvmlDevice) GetAccountingPids() ([]int, Return) { var count uint32 = 1 // Will be reduced upon returning for { pids := make([]uint32, count) ret := nvmlDeviceGetAccountingPids(device, &count, &pids[0]) if ret == SUCCESS { return uint32SliceToIntSlice(pids[:count]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } count *= 2 } } // nvml.DeviceGetAccountingBufferSize() func (l *library) DeviceGetAccountingBufferSize(device Device) (int, Return) { return device.GetAccountingBufferSize() } func (device nvmlDevice) GetAccountingBufferSize() (int, Return) { var bufferSize uint32 ret := nvmlDeviceGetAccountingBufferSize(device, &bufferSize) return int(bufferSize), ret } // nvml.DeviceGetRetiredPages() func (l *library) DeviceGetRetiredPages(device Device, cause PageRetirementCause) ([]uint64, Return) { return device.GetRetiredPages(cause) } func (device nvmlDevice) GetRetiredPages(cause PageRetirementCause) ([]uint64, Return) { var pageCount uint32 = 1 // Will be reduced upon returning for { addresses := make([]uint64, pageCount) ret := nvmlDeviceGetRetiredPages(device, cause, &pageCount, &addresses[0]) if ret == SUCCESS { return addresses[:pageCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } pageCount *= 2 } } // nvml.DeviceGetRetiredPages_v2() func (l *library) DeviceGetRetiredPages_v2(device Device, cause PageRetirementCause) ([]uint64, []uint64, Return) { return device.GetRetiredPages_v2(cause) } func (device nvmlDevice) GetRetiredPages_v2(cause PageRetirementCause) ([]uint64, []uint64, Return) { var pageCount uint32 = 1 // Will be reduced upon returning for { addresses := make([]uint64, pageCount) timestamps := make([]uint64, pageCount) ret := nvmlDeviceGetRetiredPages_v2(device, cause, &pageCount, &addresses[0], ×tamps[0]) if ret == SUCCESS { return addresses[:pageCount], timestamps[:pageCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, nil, ret } pageCount *= 2 } } // nvml.DeviceGetRetiredPagesPendingStatus() func (l *library) DeviceGetRetiredPagesPendingStatus(device Device) (EnableState, Return) { return device.GetRetiredPagesPendingStatus() } func (device nvmlDevice) GetRetiredPagesPendingStatus() (EnableState, Return) { var isPending EnableState ret := nvmlDeviceGetRetiredPagesPendingStatus(device, &isPending) return isPending, ret } // nvml.DeviceSetPersistenceMode() func (l *library) DeviceSetPersistenceMode(device Device, mode EnableState) Return { return device.SetPersistenceMode(mode) } func (device nvmlDevice) SetPersistenceMode(mode EnableState) Return { return nvmlDeviceSetPersistenceMode(device, mode) } // nvml.DeviceSetComputeMode() func (l *library) DeviceSetComputeMode(device Device, mode ComputeMode) Return { return device.SetComputeMode(mode) } func (device nvmlDevice) SetComputeMode(mode ComputeMode) Return { return nvmlDeviceSetComputeMode(device, mode) } // nvml.DeviceSetEccMode() func (l *library) DeviceSetEccMode(device Device, ecc EnableState) Return { return device.SetEccMode(ecc) } func (device nvmlDevice) SetEccMode(ecc EnableState) Return { return nvmlDeviceSetEccMode(device, ecc) } // nvml.DeviceClearEccErrorCounts() func (l *library) DeviceClearEccErrorCounts(device Device, counterType EccCounterType) Return { return device.ClearEccErrorCounts(counterType) } func (device nvmlDevice) ClearEccErrorCounts(counterType EccCounterType) Return { return nvmlDeviceClearEccErrorCounts(device, counterType) } // nvml.DeviceSetDriverModel() func (l *library) DeviceSetDriverModel(device Device, driverModel DriverModel, flags uint32) Return { return device.SetDriverModel(driverModel, flags) } func (device nvmlDevice) SetDriverModel(driverModel DriverModel, flags uint32) Return { return nvmlDeviceSetDriverModel(device, driverModel, flags) } // nvml.DeviceSetGpuLockedClocks() func (l *library) DeviceSetGpuLockedClocks(device Device, minGpuClockMHz uint32, maxGpuClockMHz uint32) Return { return device.SetGpuLockedClocks(minGpuClockMHz, maxGpuClockMHz) } func (device nvmlDevice) SetGpuLockedClocks(minGpuClockMHz uint32, maxGpuClockMHz uint32) Return { return nvmlDeviceSetGpuLockedClocks(device, minGpuClockMHz, maxGpuClockMHz) } // nvml.DeviceResetGpuLockedClocks() func (l *library) DeviceResetGpuLockedClocks(device Device) Return { return device.ResetGpuLockedClocks() } func (device nvmlDevice) ResetGpuLockedClocks() Return { return nvmlDeviceResetGpuLockedClocks(device) } // nvmlDeviceSetMemoryLockedClocks() func (l *library) DeviceSetMemoryLockedClocks(device Device, minMemClockMHz uint32, maxMemClockMHz uint32) Return { return device.SetMemoryLockedClocks(minMemClockMHz, maxMemClockMHz) } func (device nvmlDevice) SetMemoryLockedClocks(minMemClockMHz uint32, maxMemClockMHz uint32) Return { return nvmlDeviceSetMemoryLockedClocks(device, minMemClockMHz, maxMemClockMHz) } // nvmlDeviceResetMemoryLockedClocks() func (l *library) DeviceResetMemoryLockedClocks(device Device) Return { return device.ResetMemoryLockedClocks() } func (device nvmlDevice) ResetMemoryLockedClocks() Return { return nvmlDeviceResetMemoryLockedClocks(device) } // nvml.DeviceGetClkMonStatus() func (l *library) DeviceGetClkMonStatus(device Device) (ClkMonStatus, Return) { return device.GetClkMonStatus() } func (device nvmlDevice) GetClkMonStatus() (ClkMonStatus, Return) { var status ClkMonStatus ret := nvmlDeviceGetClkMonStatus(device, &status) return status, ret } // nvml.DeviceSetApplicationsClocks() // // Deprecated: Use DeviceSetMemoryLockedClocks for Memory Clocks and DeviceSetGpuLockedClocks for Graphics Clocks instead func (l *library) DeviceSetApplicationsClocks(device Device, memClockMHz uint32, graphicsClockMHz uint32) Return { return device.SetApplicationsClocks(memClockMHz, graphicsClockMHz) } // Deprecated: Use DeviceSetMemoryLockedClocks for Memory Clocks and DeviceSetGpuLockedClocks for Graphics Clocks instead func (device nvmlDevice) SetApplicationsClocks(memClockMHz uint32, graphicsClockMHz uint32) Return { return nvmlDeviceSetApplicationsClocks(device, memClockMHz, graphicsClockMHz) } // nvml.DeviceSetPowerManagementLimit() func (l *library) DeviceSetPowerManagementLimit(device Device, limit uint32) Return { return device.SetPowerManagementLimit(limit) } func (device nvmlDevice) SetPowerManagementLimit(limit uint32) Return { return nvmlDeviceSetPowerManagementLimit(device, limit) } // nvml.DeviceSetPowerManagementLimit_v2() func (l *library) DeviceSetPowerManagementLimit_v2(device Device, powerValue *PowerValue_v2) Return { return device.SetPowerManagementLimit_v2(powerValue) } func (device nvmlDevice) SetPowerManagementLimit_v2(powerValue *PowerValue_v2) Return { return nvmlDeviceSetPowerManagementLimit_v2(device, powerValue) } // nvml.DeviceSetGpuOperationMode() func (l *library) DeviceSetGpuOperationMode(device Device, mode GpuOperationMode) Return { return device.SetGpuOperationMode(mode) } func (device nvmlDevice) SetGpuOperationMode(mode GpuOperationMode) Return { return nvmlDeviceSetGpuOperationMode(device, mode) } // nvml.DeviceSetAPIRestriction() func (l *library) DeviceSetAPIRestriction(device Device, apiType RestrictedAPI, isRestricted EnableState) Return { return device.SetAPIRestriction(apiType, isRestricted) } func (device nvmlDevice) SetAPIRestriction(apiType RestrictedAPI, isRestricted EnableState) Return { return nvmlDeviceSetAPIRestriction(device, apiType, isRestricted) } // nvml.DeviceSetAccountingMode() func (l *library) DeviceSetAccountingMode(device Device, mode EnableState) Return { return device.SetAccountingMode(mode) } func (device nvmlDevice) SetAccountingMode(mode EnableState) Return { return nvmlDeviceSetAccountingMode(device, mode) } // nvml.DeviceClearAccountingPids() func (l *library) DeviceClearAccountingPids(device Device) Return { return device.ClearAccountingPids() } func (device nvmlDevice) ClearAccountingPids() Return { return nvmlDeviceClearAccountingPids(device) } // nvml.DeviceGetNvLinkState() func (l *library) DeviceGetNvLinkState(device Device, link int) (EnableState, Return) { return device.GetNvLinkState(link) } func (device nvmlDevice) GetNvLinkState(link int) (EnableState, Return) { var isActive EnableState ret := nvmlDeviceGetNvLinkState(device, uint32(link), &isActive) return isActive, ret } // nvml.DeviceGetNvLinkVersion() func (l *library) DeviceGetNvLinkVersion(device Device, link int) (uint32, Return) { return device.GetNvLinkVersion(link) } func (device nvmlDevice) GetNvLinkVersion(link int) (uint32, Return) { var version uint32 ret := nvmlDeviceGetNvLinkVersion(device, uint32(link), &version) return version, ret } // nvml.DeviceGetNvLinkCapability() func (l *library) DeviceGetNvLinkCapability(device Device, link int, capability NvLinkCapability) (uint32, Return) { return device.GetNvLinkCapability(link, capability) } func (device nvmlDevice) GetNvLinkCapability(link int, capability NvLinkCapability) (uint32, Return) { var capResult uint32 ret := nvmlDeviceGetNvLinkCapability(device, uint32(link), capability, &capResult) return capResult, ret } // nvml.DeviceGetNvLinkRemotePciInfo() func (l *library) DeviceGetNvLinkRemotePciInfo(device Device, link int) (PciInfo, Return) { return device.GetNvLinkRemotePciInfo(link) } func (device nvmlDevice) GetNvLinkRemotePciInfo(link int) (PciInfo, Return) { var pci PciInfo ret := nvmlDeviceGetNvLinkRemotePciInfo(device, uint32(link), &pci) return pci, ret } // nvml.DeviceGetNvLinkErrorCounter() func (l *library) DeviceGetNvLinkErrorCounter(device Device, link int, counter NvLinkErrorCounter) (uint64, Return) { return device.GetNvLinkErrorCounter(link, counter) } func (device nvmlDevice) GetNvLinkErrorCounter(link int, counter NvLinkErrorCounter) (uint64, Return) { var counterValue uint64 ret := nvmlDeviceGetNvLinkErrorCounter(device, uint32(link), counter, &counterValue) return counterValue, ret } // nvml.DeviceResetNvLinkErrorCounters() func (l *library) DeviceResetNvLinkErrorCounters(device Device, link int) Return { return device.ResetNvLinkErrorCounters(link) } func (device nvmlDevice) ResetNvLinkErrorCounters(link int) Return { return nvmlDeviceResetNvLinkErrorCounters(device, uint32(link)) } // nvml.DeviceSetNvLinkUtilizationControl() // // Deprecated: Setting utilization counter control is no longer supported. func (l *library) DeviceSetNvLinkUtilizationControl(device Device, link int, counter int, control *NvLinkUtilizationControl, reset bool) Return { return device.SetNvLinkUtilizationControl(link, counter, control, reset) } // Deprecated: Setting utilization counter control is no longer supported. func (device nvmlDevice) SetNvLinkUtilizationControl(link int, counter int, control *NvLinkUtilizationControl, reset bool) Return { resetValue := uint32(0) if reset { resetValue = 1 } return nvmlDeviceSetNvLinkUtilizationControl(device, uint32(link), uint32(counter), control, resetValue) } // nvml.DeviceGetNvLinkUtilizationControl() // // Deprecated: Getting utilization counter control is no longer supported. func (l *library) DeviceGetNvLinkUtilizationControl(device Device, link int, counter int) (NvLinkUtilizationControl, Return) { return device.GetNvLinkUtilizationControl(link, counter) } // Deprecated: Getting utilization counter control is no longer supported. func (device nvmlDevice) GetNvLinkUtilizationControl(link int, counter int) (NvLinkUtilizationControl, Return) { var control NvLinkUtilizationControl ret := nvmlDeviceGetNvLinkUtilizationControl(device, uint32(link), uint32(counter), &control) return control, ret } // nvml.DeviceGetNvLinkUtilizationCounter() // // Deprecated: Use DeviceGetFieldValues with NVML_FI_DEV_NVLINK_THROUGHPUT_* as field values instead. func (l *library) DeviceGetNvLinkUtilizationCounter(device Device, link int, counter int) (uint64, uint64, Return) { return device.GetNvLinkUtilizationCounter(link, counter) } // Deprecated: Use DeviceGetFieldValues with NVML_FI_DEV_NVLINK_THROUGHPUT_* as field values instead. func (device nvmlDevice) GetNvLinkUtilizationCounter(link int, counter int) (uint64, uint64, Return) { var rxCounter, txCounter uint64 ret := nvmlDeviceGetNvLinkUtilizationCounter(device, uint32(link), uint32(counter), &rxCounter, &txCounter) return rxCounter, txCounter, ret } // nvml.DeviceFreezeNvLinkUtilizationCounter() // // Deprecated: Freezing NVLINK utilization counters is no longer supported. func (l *library) DeviceFreezeNvLinkUtilizationCounter(device Device, link int, counter int, freeze EnableState) Return { return device.FreezeNvLinkUtilizationCounter(link, counter, freeze) } // Deprecated: Freezing NVLINK utilization counters is no longer supported. func (device nvmlDevice) FreezeNvLinkUtilizationCounter(link int, counter int, freeze EnableState) Return { return nvmlDeviceFreezeNvLinkUtilizationCounter(device, uint32(link), uint32(counter), freeze) } // nvml.DeviceResetNvLinkUtilizationCounter() // // Deprecated: Resetting NVLINK utilization counters is no longer supported. func (l *library) DeviceResetNvLinkUtilizationCounter(device Device, link int, counter int) Return { return device.ResetNvLinkUtilizationCounter(link, counter) } // Deprecated: Resetting NVLINK utilization counters is no longer supported. func (device nvmlDevice) ResetNvLinkUtilizationCounter(link int, counter int) Return { return nvmlDeviceResetNvLinkUtilizationCounter(device, uint32(link), uint32(counter)) } // nvml.DeviceGetNvLinkRemoteDeviceType() func (l *library) DeviceGetNvLinkRemoteDeviceType(device Device, link int) (IntNvLinkDeviceType, Return) { return device.GetNvLinkRemoteDeviceType(link) } func (device nvmlDevice) GetNvLinkRemoteDeviceType(link int) (IntNvLinkDeviceType, Return) { var nvLinkDeviceType IntNvLinkDeviceType ret := nvmlDeviceGetNvLinkRemoteDeviceType(device, uint32(link), &nvLinkDeviceType) return nvLinkDeviceType, ret } // nvml.DeviceRegisterEvents() func (l *library) DeviceRegisterEvents(device Device, eventTypes uint64, set EventSet) Return { return device.RegisterEvents(eventTypes, set) } func (device nvmlDevice) RegisterEvents(eventTypes uint64, set EventSet) Return { return nvmlDeviceRegisterEvents(device, eventTypes, set.(nvmlEventSet)) } // nvmlDeviceGetSupportedEventTypes() func (l *library) DeviceGetSupportedEventTypes(device Device) (uint64, Return) { return device.GetSupportedEventTypes() } func (device nvmlDevice) GetSupportedEventTypes() (uint64, Return) { var eventTypes uint64 ret := nvmlDeviceGetSupportedEventTypes(device, &eventTypes) return eventTypes, ret } // nvml.DeviceModifyDrainState() func (l *library) DeviceModifyDrainState(pciInfo *PciInfo, newState EnableState) Return { return nvmlDeviceModifyDrainState(pciInfo, newState) } // nvml.DeviceQueryDrainState() func (l *library) DeviceQueryDrainState(pciInfo *PciInfo) (EnableState, Return) { var currentState EnableState ret := nvmlDeviceQueryDrainState(pciInfo, ¤tState) return currentState, ret } // nvml.DeviceRemoveGpu() func (l *library) DeviceRemoveGpu(pciInfo *PciInfo) Return { return nvmlDeviceRemoveGpu(pciInfo) } // nvml.DeviceRemoveGpu_v2() func (l *library) DeviceRemoveGpu_v2(pciInfo *PciInfo, gpuState DetachGpuState, linkState PcieLinkState) Return { return nvmlDeviceRemoveGpu_v2(pciInfo, gpuState, linkState) } // nvml.DeviceDiscoverGpus() func (l *library) DeviceDiscoverGpus() (PciInfo, Return) { var pciInfo PciInfo ret := nvmlDeviceDiscoverGpus(&pciInfo) return pciInfo, ret } // nvml.DeviceGetFieldValues() func (l *library) DeviceGetFieldValues(device Device, values []FieldValue) Return { return device.GetFieldValues(values) } func (device nvmlDevice) GetFieldValues(values []FieldValue) Return { valuesCount := len(values) return nvmlDeviceGetFieldValues(device, int32(valuesCount), &values[0]) } // nvml.DeviceGetVirtualizationMode() func (l *library) DeviceGetVirtualizationMode(device Device) (GpuVirtualizationMode, Return) { return device.GetVirtualizationMode() } func (device nvmlDevice) GetVirtualizationMode() (GpuVirtualizationMode, Return) { var pVirtualMode GpuVirtualizationMode ret := nvmlDeviceGetVirtualizationMode(device, &pVirtualMode) return pVirtualMode, ret } // nvml.DeviceGetHostVgpuMode() func (l *library) DeviceGetHostVgpuMode(device Device) (HostVgpuMode, Return) { return device.GetHostVgpuMode() } func (device nvmlDevice) GetHostVgpuMode() (HostVgpuMode, Return) { var pHostVgpuMode HostVgpuMode ret := nvmlDeviceGetHostVgpuMode(device, &pHostVgpuMode) return pHostVgpuMode, ret } // nvml.DeviceSetVirtualizationMode() func (l *library) DeviceSetVirtualizationMode(device Device, virtualMode GpuVirtualizationMode) Return { return device.SetVirtualizationMode(virtualMode) } func (device nvmlDevice) SetVirtualizationMode(virtualMode GpuVirtualizationMode) Return { return nvmlDeviceSetVirtualizationMode(device, virtualMode) } // nvml.DeviceGetGridLicensableFeatures() func (l *library) DeviceGetGridLicensableFeatures(device Device) (GridLicensableFeatures, Return) { return device.GetGridLicensableFeatures() } func (device nvmlDevice) GetGridLicensableFeatures() (GridLicensableFeatures, Return) { var pGridLicensableFeatures GridLicensableFeatures ret := nvmlDeviceGetGridLicensableFeatures(device, &pGridLicensableFeatures) return pGridLicensableFeatures, ret } // nvml.DeviceGetProcessUtilization() func (l *library) DeviceGetProcessUtilization(device Device, lastSeenTimestamp uint64) ([]ProcessUtilizationSample, Return) { return device.GetProcessUtilization(lastSeenTimestamp) } func (device nvmlDevice) GetProcessUtilization(lastSeenTimestamp uint64) ([]ProcessUtilizationSample, Return) { var processSamplesCount uint32 ret := nvmlDeviceGetProcessUtilization(device, nil, &processSamplesCount, lastSeenTimestamp) if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } if processSamplesCount == 0 { return []ProcessUtilizationSample{}, ret } utilization := make([]ProcessUtilizationSample, processSamplesCount) ret = nvmlDeviceGetProcessUtilization(device, &utilization[0], &processSamplesCount, lastSeenTimestamp) return utilization[:processSamplesCount], ret } // nvml.DeviceGetSupportedVgpus() func (l *library) DeviceGetSupportedVgpus(device Device) ([]VgpuTypeId, Return) { return device.GetSupportedVgpus() } func (device nvmlDevice) GetSupportedVgpus() ([]VgpuTypeId, Return) { var vgpuCount uint32 = 1 // Will be reduced upon returning for { vgpuTypeIds := make([]nvmlVgpuTypeId, vgpuCount) ret := nvmlDeviceGetSupportedVgpus(device, &vgpuCount, &vgpuTypeIds[0]) if ret == SUCCESS { return convertSlice[nvmlVgpuTypeId, VgpuTypeId](vgpuTypeIds[:vgpuCount]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } vgpuCount *= 2 } } // nvml.DeviceGetCreatableVgpus() func (l *library) DeviceGetCreatableVgpus(device Device) ([]VgpuTypeId, Return) { return device.GetCreatableVgpus() } func (device nvmlDevice) GetCreatableVgpus() ([]VgpuTypeId, Return) { var vgpuCount uint32 = 1 // Will be reduced upon returning for { vgpuTypeIds := make([]nvmlVgpuTypeId, vgpuCount) ret := nvmlDeviceGetCreatableVgpus(device, &vgpuCount, &vgpuTypeIds[0]) if ret == SUCCESS { return convertSlice[nvmlVgpuTypeId, VgpuTypeId](vgpuTypeIds[:vgpuCount]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } vgpuCount *= 2 } } // nvml.DeviceGetActiveVgpus() func (l *library) DeviceGetActiveVgpus(device Device) ([]VgpuInstance, Return) { return device.GetActiveVgpus() } func (device nvmlDevice) GetActiveVgpus() ([]VgpuInstance, Return) { var vgpuCount uint32 = 1 // Will be reduced upon returning for { vgpuInstances := make([]nvmlVgpuInstance, vgpuCount) ret := nvmlDeviceGetActiveVgpus(device, &vgpuCount, &vgpuInstances[0]) if ret == SUCCESS { return convertSlice[nvmlVgpuInstance, VgpuInstance](vgpuInstances[:vgpuCount]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } vgpuCount *= 2 } } // nvml.DeviceGetVgpuMetadata() func (l *library) DeviceGetVgpuMetadata(device Device) (VgpuPgpuMetadata, Return) { return device.GetVgpuMetadata() } func (device nvmlDevice) GetVgpuMetadata() (VgpuPgpuMetadata, Return) { var vgpuPgpuMetadata VgpuPgpuMetadata opaqueDataSize := unsafe.Sizeof(vgpuPgpuMetadata.nvmlVgpuPgpuMetadata.OpaqueData) vgpuPgpuMetadataSize := unsafe.Sizeof(vgpuPgpuMetadata.nvmlVgpuPgpuMetadata) - opaqueDataSize for { bufferSize := uint32(vgpuPgpuMetadataSize + opaqueDataSize) buffer := make([]byte, bufferSize) nvmlVgpuPgpuMetadataPtr := (*nvmlVgpuPgpuMetadata)(unsafe.Pointer(&buffer[0])) ret := nvmlDeviceGetVgpuMetadata(device, nvmlVgpuPgpuMetadataPtr, &bufferSize) if ret == SUCCESS { vgpuPgpuMetadata.nvmlVgpuPgpuMetadata = *nvmlVgpuPgpuMetadataPtr vgpuPgpuMetadata.OpaqueData = buffer[vgpuPgpuMetadataSize:bufferSize] return vgpuPgpuMetadata, ret } if ret != ERROR_INSUFFICIENT_SIZE { return vgpuPgpuMetadata, ret } opaqueDataSize = 2 * opaqueDataSize } } // nvml.DeviceGetPgpuMetadataString() func (l *library) DeviceGetPgpuMetadataString(device Device) (string, Return) { return device.GetPgpuMetadataString() } func (device nvmlDevice) GetPgpuMetadataString() (string, Return) { var bufferSize uint32 = 1 // Will be reduced upon returning for { pgpuMetadata := make([]byte, bufferSize) ret := nvmlDeviceGetPgpuMetadataString(device, &pgpuMetadata[0], &bufferSize) if ret == SUCCESS { return string(pgpuMetadata[:clen(pgpuMetadata)]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return "", ret } bufferSize *= 2 } } // nvml.DeviceGetVgpuUtilization() func (l *library) DeviceGetVgpuUtilization(device Device, lastSeenTimestamp uint64) (ValueType, []VgpuInstanceUtilizationSample, Return) { return device.GetVgpuUtilization(lastSeenTimestamp) } func (device nvmlDevice) GetVgpuUtilization(lastSeenTimestamp uint64) (ValueType, []VgpuInstanceUtilizationSample, Return) { var sampleValType ValueType var vgpuInstanceSamplesCount uint32 = 1 // Will be reduced upon returning for { utilizationSamples := make([]VgpuInstanceUtilizationSample, vgpuInstanceSamplesCount) ret := nvmlDeviceGetVgpuUtilization(device, lastSeenTimestamp, &sampleValType, &vgpuInstanceSamplesCount, &utilizationSamples[0]) if ret == SUCCESS { return sampleValType, utilizationSamples[:vgpuInstanceSamplesCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return sampleValType, nil, ret } vgpuInstanceSamplesCount *= 2 } } // nvml.DeviceGetAttributes() func (l *library) DeviceGetAttributes(device Device) (DeviceAttributes, Return) { return device.GetAttributes() } func (device nvmlDevice) GetAttributes() (DeviceAttributes, Return) { var attributes DeviceAttributes ret := nvmlDeviceGetAttributes(device, &attributes) return attributes, ret } // nvml.DeviceGetRemappedRows() func (l *library) DeviceGetRemappedRows(device Device) (int, int, bool, bool, Return) { return device.GetRemappedRows() } func (device nvmlDevice) GetRemappedRows() (int, int, bool, bool, Return) { var corrRows, uncRows, isPending, failureOccured uint32 ret := nvmlDeviceGetRemappedRows(device, &corrRows, &uncRows, &isPending, &failureOccured) return int(corrRows), int(uncRows), (isPending != 0), (failureOccured != 0), ret } // nvml.DeviceGetRowRemapperHistogram() func (l *library) DeviceGetRowRemapperHistogram(device Device) (RowRemapperHistogramValues, Return) { return device.GetRowRemapperHistogram() } func (device nvmlDevice) GetRowRemapperHistogram() (RowRemapperHistogramValues, Return) { var values RowRemapperHistogramValues ret := nvmlDeviceGetRowRemapperHistogram(device, &values) return values, ret } // nvml.DeviceGetArchitecture() func (l *library) DeviceGetArchitecture(device Device) (DeviceArchitecture, Return) { return device.GetArchitecture() } func (device nvmlDevice) GetArchitecture() (DeviceArchitecture, Return) { var arch DeviceArchitecture ret := nvmlDeviceGetArchitecture(device, &arch) return arch, ret } // nvml.DeviceGetVgpuProcessUtilization() func (l *library) DeviceGetVgpuProcessUtilization(device Device, lastSeenTimestamp uint64) ([]VgpuProcessUtilizationSample, Return) { return device.GetVgpuProcessUtilization(lastSeenTimestamp) } func (device nvmlDevice) GetVgpuProcessUtilization(lastSeenTimestamp uint64) ([]VgpuProcessUtilizationSample, Return) { var vgpuProcessSamplesCount uint32 = 1 // Will be reduced upon returning for { utilizationSamples := make([]VgpuProcessUtilizationSample, vgpuProcessSamplesCount) ret := nvmlDeviceGetVgpuProcessUtilization(device, lastSeenTimestamp, &vgpuProcessSamplesCount, &utilizationSamples[0]) if ret == SUCCESS { return utilizationSamples[:vgpuProcessSamplesCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } vgpuProcessSamplesCount *= 2 } } // nvml.GetExcludedDeviceCount() func (l *library) GetExcludedDeviceCount() (int, Return) { var deviceCount uint32 ret := nvmlGetExcludedDeviceCount(&deviceCount) return int(deviceCount), ret } // nvml.GetExcludedDeviceInfoByIndex() func (l *library) GetExcludedDeviceInfoByIndex(index int) (ExcludedDeviceInfo, Return) { var info ExcludedDeviceInfo ret := nvmlGetExcludedDeviceInfoByIndex(uint32(index), &info) return info, ret } func (l *library) DeviceReadWritePRM_v1(device Device, buffer *PRMTLV_v1) Return { return device.ReadWritePRM_v1(buffer) } func (device nvmlDevice) ReadWritePRM_v1(buffer *PRMTLV_v1) Return { return nvmlDeviceReadWritePRM_v1(device, buffer) } // nvml.DeviceSetMigMode() func (l *library) DeviceSetMigMode(device Device, mode int) (Return, Return) { return device.SetMigMode(mode) } func (device nvmlDevice) SetMigMode(mode int) (Return, Return) { var activationStatus Return ret := nvmlDeviceSetMigMode(device, uint32(mode), &activationStatus) return activationStatus, ret } // nvml.DeviceGetMigMode() func (l *library) DeviceGetMigMode(device Device) (int, int, Return) { return device.GetMigMode() } func (device nvmlDevice) GetMigMode() (int, int, Return) { var currentMode, pendingMode uint32 ret := nvmlDeviceGetMigMode(device, ¤tMode, &pendingMode) return int(currentMode), int(pendingMode), ret } // nvml.DeviceGetGpuInstanceProfileInfo() func (l *library) DeviceGetGpuInstanceProfileInfo(device Device, profile int) (GpuInstanceProfileInfo, Return) { return device.GetGpuInstanceProfileInfo(profile) } func (device nvmlDevice) GetGpuInstanceProfileInfo(profile int) (GpuInstanceProfileInfo, Return) { var info GpuInstanceProfileInfo ret := nvmlDeviceGetGpuInstanceProfileInfo(device, uint32(profile), &info) return info, ret } // nvml.DeviceGetGpuInstanceProfileInfoV() type GpuInstanceProfileInfoHandler struct { device nvmlDevice profile int } func (handler GpuInstanceProfileInfoHandler) V1() (GpuInstanceProfileInfo, Return) { return DeviceGetGpuInstanceProfileInfo(handler.device, handler.profile) } func (handler GpuInstanceProfileInfoHandler) V2() (GpuInstanceProfileInfo_v2, Return) { var info GpuInstanceProfileInfo_v2 info.Version = STRUCT_VERSION(info, 2) ret := nvmlDeviceGetGpuInstanceProfileInfoV(handler.device, uint32(handler.profile), &info) return info, ret } func (handler GpuInstanceProfileInfoHandler) V3() (GpuInstanceProfileInfo_v3, Return) { var info GpuInstanceProfileInfo_v3 info.Version = STRUCT_VERSION(info, 3) ret := nvmlDeviceGetGpuInstanceProfileInfoV(handler.device, uint32(handler.profile), (*GpuInstanceProfileInfo_v2)(unsafe.Pointer(&info))) return info, ret } func (l *library) DeviceGetGpuInstanceProfileInfoV(device Device, profile int) GpuInstanceProfileInfoHandler { return device.GetGpuInstanceProfileInfoV(profile) } func (device nvmlDevice) GetGpuInstanceProfileInfoV(profile int) GpuInstanceProfileInfoHandler { return GpuInstanceProfileInfoHandler{device, profile} } type GpuInstanceProfileInfoByIdHandler struct { device nvmlDevice profileId int } func (handler GpuInstanceProfileInfoByIdHandler) V2() (GpuInstanceProfileInfo_v2, Return) { var info GpuInstanceProfileInfo_v2 info.Version = STRUCT_VERSION(info, 2) ret := nvmlDeviceGetGpuInstanceProfileInfoByIdV(handler.device, uint32(handler.profileId), &info) return info, ret } func (handler GpuInstanceProfileInfoByIdHandler) V3() (GpuInstanceProfileInfo_v3, Return) { var info GpuInstanceProfileInfo_v3 info.Version = STRUCT_VERSION(info, 3) ret := nvmlDeviceGetGpuInstanceProfileInfoV(handler.device, uint32(handler.profileId), (*GpuInstanceProfileInfo_v2)(unsafe.Pointer(&info))) return info, ret } func (l *library) DeviceGetGpuInstanceProfileInfoByIdV(device Device, profileId int) GpuInstanceProfileInfoByIdHandler { return device.GetGpuInstanceProfileInfoByIdV(profileId) } func (device nvmlDevice) GetGpuInstanceProfileInfoByIdV(profileId int) GpuInstanceProfileInfoByIdHandler { return GpuInstanceProfileInfoByIdHandler{device, profileId} } // nvml.DeviceGetGpuInstancePossiblePlacements() func (l *library) DeviceGetGpuInstancePossiblePlacements(device Device, info *GpuInstanceProfileInfo) ([]GpuInstancePlacement, Return) { return device.GetGpuInstancePossiblePlacements(info) } func (device nvmlDevice) GetGpuInstancePossiblePlacements(info *GpuInstanceProfileInfo) ([]GpuInstancePlacement, Return) { if info == nil { return nil, ERROR_INVALID_ARGUMENT } var count uint32 ret := nvmlDeviceGetGpuInstancePossiblePlacements(device, info.Id, nil, &count) if ret != SUCCESS { return nil, ret } if count == 0 { return []GpuInstancePlacement{}, ret } placements := make([]GpuInstancePlacement, count) ret = nvmlDeviceGetGpuInstancePossiblePlacements(device, info.Id, &placements[0], &count) return placements[:count], ret } // nvml.DeviceGetGpuInstanceRemainingCapacity() func (l *library) DeviceGetGpuInstanceRemainingCapacity(device Device, info *GpuInstanceProfileInfo) (int, Return) { return device.GetGpuInstanceRemainingCapacity(info) } func (device nvmlDevice) GetGpuInstanceRemainingCapacity(info *GpuInstanceProfileInfo) (int, Return) { if info == nil { return 0, ERROR_INVALID_ARGUMENT } var count uint32 ret := nvmlDeviceGetGpuInstanceRemainingCapacity(device, info.Id, &count) return int(count), ret } // nvml.DeviceCreateGpuInstance() func (l *library) DeviceCreateGpuInstance(device Device, info *GpuInstanceProfileInfo) (GpuInstance, Return) { return device.CreateGpuInstance(info) } func (device nvmlDevice) CreateGpuInstance(info *GpuInstanceProfileInfo) (GpuInstance, Return) { if info == nil { return nil, ERROR_INVALID_ARGUMENT } var gpuInstance nvmlGpuInstance ret := nvmlDeviceCreateGpuInstance(device, info.Id, &gpuInstance) return gpuInstance, ret } // nvml.DeviceCreateGpuInstanceWithPlacement() func (l *library) DeviceCreateGpuInstanceWithPlacement(device Device, info *GpuInstanceProfileInfo, placement *GpuInstancePlacement) (GpuInstance, Return) { return device.CreateGpuInstanceWithPlacement(info, placement) } func (device nvmlDevice) CreateGpuInstanceWithPlacement(info *GpuInstanceProfileInfo, placement *GpuInstancePlacement) (GpuInstance, Return) { if info == nil { return nil, ERROR_INVALID_ARGUMENT } var gpuInstance nvmlGpuInstance ret := nvmlDeviceCreateGpuInstanceWithPlacement(device, info.Id, placement, &gpuInstance) return gpuInstance, ret } // nvml.GpuInstanceDestroy() func (l *library) GpuInstanceDestroy(gpuInstance GpuInstance) Return { return gpuInstance.Destroy() } func (gpuInstance nvmlGpuInstance) Destroy() Return { return nvmlGpuInstanceDestroy(gpuInstance) } // nvml.DeviceGetGpuInstances() func (l *library) DeviceGetGpuInstances(device Device, info *GpuInstanceProfileInfo) ([]GpuInstance, Return) { return device.GetGpuInstances(info) } func (device nvmlDevice) GetGpuInstances(info *GpuInstanceProfileInfo) ([]GpuInstance, Return) { if info == nil { return nil, ERROR_INVALID_ARGUMENT } var count = info.InstanceCount gpuInstances := make([]nvmlGpuInstance, count) ret := nvmlDeviceGetGpuInstances(device, info.Id, &gpuInstances[0], &count) return convertSlice[nvmlGpuInstance, GpuInstance](gpuInstances[:count]), ret } // nvml.DeviceGetGpuInstanceById() func (l *library) DeviceGetGpuInstanceById(device Device, id int) (GpuInstance, Return) { return device.GetGpuInstanceById(id) } func (device nvmlDevice) GetGpuInstanceById(id int) (GpuInstance, Return) { var gpuInstance nvmlGpuInstance ret := nvmlDeviceGetGpuInstanceById(device, uint32(id), &gpuInstance) return gpuInstance, ret } // nvml.GpuInstanceGetInfo() func (l *library) GpuInstanceGetInfo(gpuInstance GpuInstance) (GpuInstanceInfo, Return) { return gpuInstance.GetInfo() } func (gpuInstance nvmlGpuInstance) GetInfo() (GpuInstanceInfo, Return) { var info nvmlGpuInstanceInfo ret := nvmlGpuInstanceGetInfo(gpuInstance, &info) return info.convert(), ret } // nvml.GpuInstanceGetComputeInstanceProfileInfo() func (l *library) GpuInstanceGetComputeInstanceProfileInfo(gpuInstance GpuInstance, profile int, engProfile int) (ComputeInstanceProfileInfo, Return) { return gpuInstance.GetComputeInstanceProfileInfo(profile, engProfile) } func (gpuInstance nvmlGpuInstance) GetComputeInstanceProfileInfo(profile int, engProfile int) (ComputeInstanceProfileInfo, Return) { var info ComputeInstanceProfileInfo ret := nvmlGpuInstanceGetComputeInstanceProfileInfo(gpuInstance, uint32(profile), uint32(engProfile), &info) return info, ret } // nvml.GpuInstanceGetComputeInstanceProfileInfoV() type ComputeInstanceProfileInfoHandler struct { gpuInstance nvmlGpuInstance profile int engProfile int } func (handler ComputeInstanceProfileInfoHandler) V1() (ComputeInstanceProfileInfo, Return) { return GpuInstanceGetComputeInstanceProfileInfo(handler.gpuInstance, handler.profile, handler.engProfile) } func (handler ComputeInstanceProfileInfoHandler) V2() (ComputeInstanceProfileInfo_v2, Return) { var info ComputeInstanceProfileInfo_v2 info.Version = STRUCT_VERSION(info, 2) ret := nvmlGpuInstanceGetComputeInstanceProfileInfoV(handler.gpuInstance, uint32(handler.profile), uint32(handler.engProfile), &info) return info, ret } func (handler ComputeInstanceProfileInfoHandler) V3() (ComputeInstanceProfileInfo_v3, Return) { var info ComputeInstanceProfileInfo_v3 info.Version = STRUCT_VERSION(info, 3) ret := nvmlGpuInstanceGetComputeInstanceProfileInfoV(handler.gpuInstance, uint32(handler.profile), uint32(handler.engProfile), (*ComputeInstanceProfileInfo_v2)(unsafe.Pointer(&info))) return info, ret } func (l *library) GpuInstanceGetComputeInstanceProfileInfoV(gpuInstance GpuInstance, profile int, engProfile int) ComputeInstanceProfileInfoHandler { return gpuInstance.GetComputeInstanceProfileInfoV(profile, engProfile) } func (gpuInstance nvmlGpuInstance) GetComputeInstanceProfileInfoV(profile int, engProfile int) ComputeInstanceProfileInfoHandler { return ComputeInstanceProfileInfoHandler{gpuInstance, profile, engProfile} } // nvml.GpuInstanceGetComputeInstanceRemainingCapacity() func (l *library) GpuInstanceGetComputeInstanceRemainingCapacity(gpuInstance GpuInstance, info *ComputeInstanceProfileInfo) (int, Return) { return gpuInstance.GetComputeInstanceRemainingCapacity(info) } func (gpuInstance nvmlGpuInstance) GetComputeInstanceRemainingCapacity(info *ComputeInstanceProfileInfo) (int, Return) { if info == nil { return 0, ERROR_INVALID_ARGUMENT } var count uint32 ret := nvmlGpuInstanceGetComputeInstanceRemainingCapacity(gpuInstance, info.Id, &count) return int(count), ret } // nvml.GpuInstanceCreateComputeInstance() func (l *library) GpuInstanceCreateComputeInstance(gpuInstance GpuInstance, info *ComputeInstanceProfileInfo) (ComputeInstance, Return) { return gpuInstance.CreateComputeInstance(info) } func (gpuInstance nvmlGpuInstance) CreateComputeInstance(info *ComputeInstanceProfileInfo) (ComputeInstance, Return) { if info == nil { return nil, ERROR_INVALID_ARGUMENT } var computeInstance nvmlComputeInstance ret := nvmlGpuInstanceCreateComputeInstance(gpuInstance, info.Id, &computeInstance) return computeInstance, ret } // nvml.ComputeInstanceDestroy() func (l *library) ComputeInstanceDestroy(computeInstance ComputeInstance) Return { return computeInstance.Destroy() } func (computeInstance nvmlComputeInstance) Destroy() Return { return nvmlComputeInstanceDestroy(computeInstance) } // nvml.GpuInstanceGetComputeInstances() func (l *library) GpuInstanceGetComputeInstances(gpuInstance GpuInstance, info *ComputeInstanceProfileInfo) ([]ComputeInstance, Return) { return gpuInstance.GetComputeInstances(info) } func (gpuInstance nvmlGpuInstance) GetComputeInstances(info *ComputeInstanceProfileInfo) ([]ComputeInstance, Return) { if info == nil { return nil, ERROR_INVALID_ARGUMENT } var count = info.InstanceCount computeInstances := make([]nvmlComputeInstance, count) ret := nvmlGpuInstanceGetComputeInstances(gpuInstance, info.Id, &computeInstances[0], &count) return convertSlice[nvmlComputeInstance, ComputeInstance](computeInstances[:count]), ret } // nvml.GpuInstanceGetComputeInstanceById() func (l *library) GpuInstanceGetComputeInstanceById(gpuInstance GpuInstance, id int) (ComputeInstance, Return) { return gpuInstance.GetComputeInstanceById(id) } func (gpuInstance nvmlGpuInstance) GetComputeInstanceById(id int) (ComputeInstance, Return) { var computeInstance nvmlComputeInstance ret := nvmlGpuInstanceGetComputeInstanceById(gpuInstance, uint32(id), &computeInstance) return computeInstance, ret } // nvml.ComputeInstanceGetInfo() func (l *library) ComputeInstanceGetInfo(computeInstance ComputeInstance) (ComputeInstanceInfo, Return) { return computeInstance.GetInfo() } func (computeInstance nvmlComputeInstance) GetInfo() (ComputeInstanceInfo, Return) { var info nvmlComputeInstanceInfo ret := nvmlComputeInstanceGetInfo(computeInstance, &info) return info.convert(), ret } // nvml.DeviceIsMigDeviceHandle() func (l *library) DeviceIsMigDeviceHandle(device Device) (bool, Return) { return device.IsMigDeviceHandle() } func (device nvmlDevice) IsMigDeviceHandle() (bool, Return) { var isMigDevice uint32 ret := nvmlDeviceIsMigDeviceHandle(device, &isMigDevice) return (isMigDevice != 0), ret } // nvml DeviceGetGpuInstanceId() func (l *library) DeviceGetGpuInstanceId(device Device) (int, Return) { return device.GetGpuInstanceId() } func (device nvmlDevice) GetGpuInstanceId() (int, Return) { var id uint32 ret := nvmlDeviceGetGpuInstanceId(device, &id) return int(id), ret } // nvml.DeviceGetComputeInstanceId() func (l *library) DeviceGetComputeInstanceId(device Device) (int, Return) { return device.GetComputeInstanceId() } func (device nvmlDevice) GetComputeInstanceId() (int, Return) { var id uint32 ret := nvmlDeviceGetComputeInstanceId(device, &id) return int(id), ret } // nvml.DeviceGetMaxMigDeviceCount() func (l *library) DeviceGetMaxMigDeviceCount(device Device) (int, Return) { return device.GetMaxMigDeviceCount() } func (device nvmlDevice) GetMaxMigDeviceCount() (int, Return) { var count uint32 ret := nvmlDeviceGetMaxMigDeviceCount(device, &count) return int(count), ret } // nvml.DeviceGetMigDeviceHandleByIndex() func (l *library) DeviceGetMigDeviceHandleByIndex(device Device, index int) (Device, Return) { return device.GetMigDeviceHandleByIndex(index) } func (device nvmlDevice) GetMigDeviceHandleByIndex(index int) (Device, Return) { var migDevice nvmlDevice ret := nvmlDeviceGetMigDeviceHandleByIndex(device, uint32(index), &migDevice) return migDevice, ret } // nvml.DeviceGetDeviceHandleFromMigDeviceHandle() func (l *library) DeviceGetDeviceHandleFromMigDeviceHandle(migdevice Device) (Device, Return) { return migdevice.GetDeviceHandleFromMigDeviceHandle() } func (migDevice nvmlDevice) GetDeviceHandleFromMigDeviceHandle() (Device, Return) { var device nvmlDevice ret := nvmlDeviceGetDeviceHandleFromMigDeviceHandle(migDevice, &device) return device, ret } // nvml.DeviceGetBusType() func (l *library) DeviceGetBusType(device Device) (BusType, Return) { return device.GetBusType() } func (device nvmlDevice) GetBusType() (BusType, Return) { var busType BusType ret := nvmlDeviceGetBusType(device, &busType) return busType, ret } // nvml.DeviceSetDefaultFanSpeed_v2() func (l *library) DeviceSetDefaultFanSpeed_v2(device Device, fan int) Return { return device.SetDefaultFanSpeed_v2(fan) } func (device nvmlDevice) SetDefaultFanSpeed_v2(fan int) Return { return nvmlDeviceSetDefaultFanSpeed_v2(device, uint32(fan)) } // nvml.DeviceGetMinMaxFanSpeed() func (l *library) DeviceGetMinMaxFanSpeed(device Device) (int, int, Return) { return device.GetMinMaxFanSpeed() } func (device nvmlDevice) GetMinMaxFanSpeed() (int, int, Return) { var minSpeed, maxSpeed uint32 ret := nvmlDeviceGetMinMaxFanSpeed(device, &minSpeed, &maxSpeed) return int(minSpeed), int(maxSpeed), ret } // nvml.DeviceGetThermalSettings() func (l *library) DeviceGetThermalSettings(device Device, sensorIndex uint32) (GpuThermalSettings, Return) { return device.GetThermalSettings(sensorIndex) } func (device nvmlDevice) GetThermalSettings(sensorIndex uint32) (GpuThermalSettings, Return) { var pThermalSettings GpuThermalSettings ret := nvmlDeviceGetThermalSettings(device, sensorIndex, &pThermalSettings) return pThermalSettings, ret } // nvml.DeviceGetDefaultEccMode() func (l *library) DeviceGetDefaultEccMode(device Device) (EnableState, Return) { return device.GetDefaultEccMode() } func (device nvmlDevice) GetDefaultEccMode() (EnableState, Return) { var defaultMode EnableState ret := nvmlDeviceGetDefaultEccMode(device, &defaultMode) return defaultMode, ret } // nvml.DeviceGetPcieSpeed() func (l *library) DeviceGetPcieSpeed(device Device) (int, Return) { return device.GetPcieSpeed() } func (device nvmlDevice) GetPcieSpeed() (int, Return) { var pcieSpeed uint32 ret := nvmlDeviceGetPcieSpeed(device, &pcieSpeed) return int(pcieSpeed), ret } // nvml.DeviceGetGspFirmwareVersion() func (l *library) DeviceGetGspFirmwareVersion(device Device) (string, Return) { return device.GetGspFirmwareVersion() } func (device nvmlDevice) GetGspFirmwareVersion() (string, Return) { version := make([]byte, GSP_FIRMWARE_VERSION_BUF_SIZE) ret := nvmlDeviceGetGspFirmwareVersion(device, &version[0]) return string(version[:clen(version)]), ret } // nvml.DeviceGetGspFirmwareMode() func (l *library) DeviceGetGspFirmwareMode(device Device) (bool, bool, Return) { return device.GetGspFirmwareMode() } func (device nvmlDevice) GetGspFirmwareMode() (bool, bool, Return) { var isEnabled, defaultMode uint32 ret := nvmlDeviceGetGspFirmwareMode(device, &isEnabled, &defaultMode) return (isEnabled != 0), (defaultMode != 0), ret } // nvml.DeviceGetDynamicPstatesInfo() func (l *library) DeviceGetDynamicPstatesInfo(device Device) (GpuDynamicPstatesInfo, Return) { return device.GetDynamicPstatesInfo() } func (device nvmlDevice) GetDynamicPstatesInfo() (GpuDynamicPstatesInfo, Return) { var pDynamicPstatesInfo GpuDynamicPstatesInfo ret := nvmlDeviceGetDynamicPstatesInfo(device, &pDynamicPstatesInfo) return pDynamicPstatesInfo, ret } // nvml.DeviceSetFanSpeed_v2() func (l *library) DeviceSetFanSpeed_v2(device Device, fan int, speed int) Return { return device.SetFanSpeed_v2(fan, speed) } func (device nvmlDevice) SetFanSpeed_v2(fan int, speed int) Return { return nvmlDeviceSetFanSpeed_v2(device, uint32(fan), uint32(speed)) } // nvml.DeviceGetGpcClkVfOffset() func (l *library) DeviceGetGpcClkVfOffset(device Device) (int, Return) { return device.GetGpcClkVfOffset() } func (device nvmlDevice) GetGpcClkVfOffset() (int, Return) { var offset int32 ret := nvmlDeviceGetGpcClkVfOffset(device, &offset) return int(offset), ret } // nvml.DeviceSetGpcClkVfOffset() // // Deprecated: Use DeviceSetClockOffsets instead. func (l *library) DeviceSetGpcClkVfOffset(device Device, offset int) Return { return device.SetGpcClkVfOffset(offset) } // Deprecated: Use DeviceSetClockOffsets instead. func (device nvmlDevice) SetGpcClkVfOffset(offset int) Return { return nvmlDeviceSetGpcClkVfOffset(device, int32(offset)) } // nvml.DeviceGetMinMaxClockOfPState() func (l *library) DeviceGetMinMaxClockOfPState(device Device, clockType ClockType, pstate Pstates) (uint32, uint32, Return) { return device.GetMinMaxClockOfPState(clockType, pstate) } func (device nvmlDevice) GetMinMaxClockOfPState(clockType ClockType, pstate Pstates) (uint32, uint32, Return) { var minClockMHz, maxClockMHz uint32 ret := nvmlDeviceGetMinMaxClockOfPState(device, clockType, pstate, &minClockMHz, &maxClockMHz) return minClockMHz, maxClockMHz, ret } // nvml.DeviceGetSupportedPerformanceStates() func (l *library) DeviceGetSupportedPerformanceStates(device Device) ([]Pstates, Return) { return device.GetSupportedPerformanceStates() } func (device nvmlDevice) GetSupportedPerformanceStates() ([]Pstates, Return) { pstates := make([]Pstates, MAX_GPU_PERF_PSTATES) ret := nvmlDeviceGetSupportedPerformanceStates(device, &pstates[0], MAX_GPU_PERF_PSTATES) for i := 0; i < MAX_GPU_PERF_PSTATES; i++ { if pstates[i] == PSTATE_UNKNOWN { return pstates[0:i], ret } } return pstates, ret } // nvml.DeviceGetTargetFanSpeed() func (l *library) DeviceGetTargetFanSpeed(device Device, fan int) (int, Return) { return device.GetTargetFanSpeed(fan) } func (device nvmlDevice) GetTargetFanSpeed(fan int) (int, Return) { var targetSpeed uint32 ret := nvmlDeviceGetTargetFanSpeed(device, uint32(fan), &targetSpeed) return int(targetSpeed), ret } // nvml.DeviceGetMemClkVfOffset() func (l *library) DeviceGetMemClkVfOffset(device Device) (int, Return) { return device.GetMemClkVfOffset() } func (device nvmlDevice) GetMemClkVfOffset() (int, Return) { var offset int32 ret := nvmlDeviceGetMemClkVfOffset(device, &offset) return int(offset), ret } // nvml.DeviceSetMemClkVfOffset() // // Deprecated: Use DeviceSetMemClkVfOffset instead func (l *library) DeviceSetMemClkVfOffset(device Device, offset int) Return { return device.SetMemClkVfOffset(offset) } // Deprecated: Use DeviceSetMemClkVfOffset instead func (device nvmlDevice) SetMemClkVfOffset(offset int) Return { return nvmlDeviceSetMemClkVfOffset(device, int32(offset)) } // nvml.DeviceGetGpcClkMinMaxVfOffset() func (l *library) DeviceGetGpcClkMinMaxVfOffset(device Device) (int, int, Return) { return device.GetGpcClkMinMaxVfOffset() } func (device nvmlDevice) GetGpcClkMinMaxVfOffset() (int, int, Return) { var minOffset, maxOffset int32 ret := nvmlDeviceGetGpcClkMinMaxVfOffset(device, &minOffset, &maxOffset) return int(minOffset), int(maxOffset), ret } // nvml.DeviceGetMemClkMinMaxVfOffset() func (l *library) DeviceGetMemClkMinMaxVfOffset(device Device) (int, int, Return) { return device.GetMemClkMinMaxVfOffset() } func (device nvmlDevice) GetMemClkMinMaxVfOffset() (int, int, Return) { var minOffset, maxOffset int32 ret := nvmlDeviceGetMemClkMinMaxVfOffset(device, &minOffset, &maxOffset) return int(minOffset), int(maxOffset), ret } // nvml.DeviceGetGpuMaxPcieLinkGeneration() func (l *library) DeviceGetGpuMaxPcieLinkGeneration(device Device) (int, Return) { return device.GetGpuMaxPcieLinkGeneration() } func (device nvmlDevice) GetGpuMaxPcieLinkGeneration() (int, Return) { var maxLinkGenDevice uint32 ret := nvmlDeviceGetGpuMaxPcieLinkGeneration(device, &maxLinkGenDevice) return int(maxLinkGenDevice), ret } // nvml.DeviceGetFanControlPolicy_v2() func (l *library) DeviceGetFanControlPolicy_v2(device Device, fan int) (FanControlPolicy, Return) { return device.GetFanControlPolicy_v2(fan) } func (device nvmlDevice) GetFanControlPolicy_v2(fan int) (FanControlPolicy, Return) { var policy FanControlPolicy ret := nvmlDeviceGetFanControlPolicy_v2(device, uint32(fan), &policy) return policy, ret } // nvml.DeviceSetFanControlPolicy() func (l *library) DeviceSetFanControlPolicy(device Device, fan int, policy FanControlPolicy) Return { return device.SetFanControlPolicy(fan, policy) } func (device nvmlDevice) SetFanControlPolicy(fan int, policy FanControlPolicy) Return { return nvmlDeviceSetFanControlPolicy(device, uint32(fan), policy) } // nvml.DeviceClearFieldValues() func (l *library) DeviceClearFieldValues(device Device, values []FieldValue) Return { return device.ClearFieldValues(values) } func (device nvmlDevice) ClearFieldValues(values []FieldValue) Return { valuesCount := len(values) return nvmlDeviceClearFieldValues(device, int32(valuesCount), &values[0]) } // nvml.DeviceGetVgpuCapabilities() func (l *library) DeviceGetVgpuCapabilities(device Device, capability DeviceVgpuCapability) (bool, Return) { return device.GetVgpuCapabilities(capability) } func (device nvmlDevice) GetVgpuCapabilities(capability DeviceVgpuCapability) (bool, Return) { var capResult uint32 ret := nvmlDeviceGetVgpuCapabilities(device, capability, &capResult) return (capResult != 0), ret } // nvml.DeviceGetVgpuSchedulerLog() func (l *library) DeviceGetVgpuSchedulerLog(device Device) (VgpuSchedulerLog, Return) { return device.GetVgpuSchedulerLog() } func (device nvmlDevice) GetVgpuSchedulerLog() (VgpuSchedulerLog, Return) { var pSchedulerLog VgpuSchedulerLog ret := nvmlDeviceGetVgpuSchedulerLog(device, &pSchedulerLog) return pSchedulerLog, ret } // nvml.DeviceGetVgpuSchedulerState() func (l *library) DeviceGetVgpuSchedulerState(device Device) (VgpuSchedulerGetState, Return) { return device.GetVgpuSchedulerState() } func (device nvmlDevice) GetVgpuSchedulerState() (VgpuSchedulerGetState, Return) { var pSchedulerState VgpuSchedulerGetState ret := nvmlDeviceGetVgpuSchedulerState(device, &pSchedulerState) return pSchedulerState, ret } // nvml.DeviceSetVgpuSchedulerState() func (l *library) DeviceSetVgpuSchedulerState(device Device, pSchedulerState *VgpuSchedulerSetState) Return { return device.SetVgpuSchedulerState(pSchedulerState) } func (device nvmlDevice) SetVgpuSchedulerState(pSchedulerState *VgpuSchedulerSetState) Return { return nvmlDeviceSetVgpuSchedulerState(device, pSchedulerState) } // nvml.DeviceGetVgpuSchedulerCapabilities() func (l *library) DeviceGetVgpuSchedulerCapabilities(device Device) (VgpuSchedulerCapabilities, Return) { return device.GetVgpuSchedulerCapabilities() } func (device nvmlDevice) GetVgpuSchedulerCapabilities() (VgpuSchedulerCapabilities, Return) { var pCapabilities VgpuSchedulerCapabilities ret := nvmlDeviceGetVgpuSchedulerCapabilities(device, &pCapabilities) return pCapabilities, ret } // nvml.GpuInstanceGetComputeInstancePossiblePlacements() func (l *library) GpuInstanceGetComputeInstancePossiblePlacements(gpuInstance GpuInstance, info *ComputeInstanceProfileInfo) ([]ComputeInstancePlacement, Return) { return gpuInstance.GetComputeInstancePossiblePlacements(info) } func (gpuInstance nvmlGpuInstance) GetComputeInstancePossiblePlacements(info *ComputeInstanceProfileInfo) ([]ComputeInstancePlacement, Return) { var count uint32 ret := nvmlGpuInstanceGetComputeInstancePossiblePlacements(gpuInstance, info.Id, nil, &count) if ret != SUCCESS { return nil, ret } if count == 0 { return []ComputeInstancePlacement{}, ret } placementArray := make([]ComputeInstancePlacement, count) ret = nvmlGpuInstanceGetComputeInstancePossiblePlacements(gpuInstance, info.Id, &placementArray[0], &count) return placementArray, ret } // nvml.GpuInstanceCreateComputeInstanceWithPlacement() func (l *library) GpuInstanceCreateComputeInstanceWithPlacement(gpuInstance GpuInstance, info *ComputeInstanceProfileInfo, placement *ComputeInstancePlacement) (ComputeInstance, Return) { return gpuInstance.CreateComputeInstanceWithPlacement(info, placement) } func (gpuInstance nvmlGpuInstance) CreateComputeInstanceWithPlacement(info *ComputeInstanceProfileInfo, placement *ComputeInstancePlacement) (ComputeInstance, Return) { var computeInstance nvmlComputeInstance ret := nvmlGpuInstanceCreateComputeInstanceWithPlacement(gpuInstance, info.Id, placement, &computeInstance) return computeInstance, ret } // nvml.DeviceGetGpuFabricInfo() // // Deprecated: Use DeviceGetGpuFabricInfoV instead func (l *library) DeviceGetGpuFabricInfo(device Device) (GpuFabricInfo, Return) { return device.GetGpuFabricInfo() } // Deprecated: Use DeviceGetGpuFabricInfoV instead func (device nvmlDevice) GetGpuFabricInfo() (GpuFabricInfo, Return) { var gpuFabricInfo GpuFabricInfo ret := nvmlDeviceGetGpuFabricInfo(device, &gpuFabricInfo) return gpuFabricInfo, ret } // nvml.DeviceSetNvLinkDeviceLowPowerThreshold() func (l *library) DeviceSetNvLinkDeviceLowPowerThreshold(device Device, info *NvLinkPowerThres) Return { return device.SetNvLinkDeviceLowPowerThreshold(info) } func (device nvmlDevice) SetNvLinkDeviceLowPowerThreshold(info *NvLinkPowerThres) Return { return nvmlDeviceSetNvLinkDeviceLowPowerThreshold(device, info) } // nvml.DeviceGetModuleId() func (l *library) DeviceGetModuleId(device Device) (int, Return) { return device.GetModuleId() } func (device nvmlDevice) GetModuleId() (int, Return) { var moduleID uint32 ret := nvmlDeviceGetModuleId(device, &moduleID) return int(moduleID), ret } // nvml.DeviceGetCurrentClocksEventReasons() func (l *library) DeviceGetCurrentClocksEventReasons(device Device) (uint64, Return) { return device.GetCurrentClocksEventReasons() } func (device nvmlDevice) GetCurrentClocksEventReasons() (uint64, Return) { var clocksEventReasons uint64 ret := nvmlDeviceGetCurrentClocksEventReasons(device, &clocksEventReasons) return clocksEventReasons, ret } // nvml.DeviceGetSupportedClocksEventReasons() func (l *library) DeviceGetSupportedClocksEventReasons(device Device) (uint64, Return) { return device.GetSupportedClocksEventReasons() } func (device nvmlDevice) GetSupportedClocksEventReasons() (uint64, Return) { var supportedClocksEventReasons uint64 ret := nvmlDeviceGetSupportedClocksEventReasons(device, &supportedClocksEventReasons) return supportedClocksEventReasons, ret } // nvml.DeviceGetJpgUtilization() func (l *library) DeviceGetJpgUtilization(device Device) (uint32, uint32, Return) { return device.GetJpgUtilization() } func (device nvmlDevice) GetJpgUtilization() (uint32, uint32, Return) { var utilization, samplingPeriodUs uint32 ret := nvmlDeviceGetJpgUtilization(device, &utilization, &samplingPeriodUs) return utilization, samplingPeriodUs, ret } // nvml.DeviceGetOfaUtilization() func (l *library) DeviceGetOfaUtilization(device Device) (uint32, uint32, Return) { return device.GetOfaUtilization() } func (device nvmlDevice) GetOfaUtilization() (uint32, uint32, Return) { var utilization, samplingPeriodUs uint32 ret := nvmlDeviceGetOfaUtilization(device, &utilization, &samplingPeriodUs) return utilization, samplingPeriodUs, ret } // nvml.DeviceGetRunningProcessDetailList() func (l *library) DeviceGetRunningProcessDetailList(device Device) (ProcessDetailList, Return) { return device.GetRunningProcessDetailList() } func (device nvmlDevice) GetRunningProcessDetailList() (ProcessDetailList, Return) { var plist ProcessDetailList plist.Version = STRUCT_VERSION(plist, 1) ret := nvmlDeviceGetRunningProcessDetailList(device, &plist) return plist, ret } // nvml.DeviceGetConfComputeMemSizeInfo() func (l *library) DeviceGetConfComputeMemSizeInfo(device Device) (ConfComputeMemSizeInfo, Return) { return device.GetConfComputeMemSizeInfo() } func (device nvmlDevice) GetConfComputeMemSizeInfo() (ConfComputeMemSizeInfo, Return) { var memInfo ConfComputeMemSizeInfo ret := nvmlDeviceGetConfComputeMemSizeInfo(device, &memInfo) return memInfo, ret } // nvml.DeviceGetConfComputeProtectedMemoryUsage() func (l *library) DeviceGetConfComputeProtectedMemoryUsage(device Device) (Memory, Return) { return device.GetConfComputeProtectedMemoryUsage() } func (device nvmlDevice) GetConfComputeProtectedMemoryUsage() (Memory, Return) { var memory Memory ret := nvmlDeviceGetConfComputeProtectedMemoryUsage(device, &memory) return memory, ret } // nvml.DeviceGetConfComputeGpuCertificate() func (l *library) DeviceGetConfComputeGpuCertificate(device Device) (ConfComputeGpuCertificate, Return) { return device.GetConfComputeGpuCertificate() } func (device nvmlDevice) GetConfComputeGpuCertificate() (ConfComputeGpuCertificate, Return) { var gpuCert ConfComputeGpuCertificate ret := nvmlDeviceGetConfComputeGpuCertificate(device, &gpuCert) return gpuCert, ret } // nvml.DeviceGetConfComputeGpuAttestationReport() func (l *library) DeviceGetConfComputeGpuAttestationReport(device Device, gpuAtstReport *ConfComputeGpuAttestationReport) Return { return device.GetConfComputeGpuAttestationReport(gpuAtstReport) } func (device nvmlDevice) GetConfComputeGpuAttestationReport(gpuAtstReport *ConfComputeGpuAttestationReport) Return { return nvmlDeviceGetConfComputeGpuAttestationReport(device, gpuAtstReport) } // nvml.DeviceSetConfComputeUnprotectedMemSize() func (l *library) DeviceSetConfComputeUnprotectedMemSize(device Device, sizeKiB uint64) Return { return device.SetConfComputeUnprotectedMemSize(sizeKiB) } func (device nvmlDevice) SetConfComputeUnprotectedMemSize(sizeKiB uint64) Return { return nvmlDeviceSetConfComputeUnprotectedMemSize(device, sizeKiB) } // nvml.DeviceGetC2cModeInfoV() type C2cModeInfoHandler struct { device nvmlDevice } func (handler C2cModeInfoHandler) V1() (C2cModeInfo_v1, Return) { var c2cModeInfo C2cModeInfo_v1 ret := nvmlDeviceGetC2cModeInfoV(handler.device, &c2cModeInfo) return c2cModeInfo, ret } func (l *library) DeviceGetC2cModeInfoV(device Device) C2cModeInfoHandler { return device.GetC2cModeInfoV() } func (device nvmlDevice) GetC2cModeInfoV() C2cModeInfoHandler { return C2cModeInfoHandler{device} } // nvml.DeviceGetLastBBXFlushTime() func (l *library) DeviceGetLastBBXFlushTime(device Device) (uint64, uint, Return) { return device.GetLastBBXFlushTime() } func (device nvmlDevice) GetLastBBXFlushTime() (uint64, uint, Return) { var timestamp uint64 var durationUs uint ret := nvmlDeviceGetLastBBXFlushTime(device, ×tamp, &durationUs) return timestamp, durationUs, ret } // nvml.DeviceGetNumaNodeId() func (l *library) DeviceGetNumaNodeId(device Device) (int, Return) { return device.GetNumaNodeId() } func (device nvmlDevice) GetNumaNodeId() (int, Return) { var node uint32 ret := nvmlDeviceGetNumaNodeId(device, &node) return int(node), ret } func (l *library) DeviceGetAddressingMode(device Device) (DeviceAddressingMode, Return) { return device.GetAddressingMode() } func (device nvmlDevice) GetAddressingMode() (DeviceAddressingMode, Return) { var deviceAddressingMode DeviceAddressingMode deviceAddressingMode.Version = STRUCT_VERSION(deviceAddressingMode, 1) ret := nvmlDeviceGetAddressingMode(device, &deviceAddressingMode) return deviceAddressingMode, ret } func (l *library) DeviceGetRepairStatus(device Device) (RepairStatus, Return) { return device.GetRepairStatus() } func (device nvmlDevice) GetRepairStatus() (RepairStatus, Return) { var repairStatus RepairStatus repairStatus.Version = STRUCT_VERSION(repairStatus, 1) ret := nvmlDeviceGetRepairStatus(device, &repairStatus) return repairStatus, ret } // nvml.DeviceGetPciInfoExt() func (l *library) DeviceGetPciInfoExt(device Device) (PciInfoExt, Return) { return device.GetPciInfoExt() } func (device nvmlDevice) GetPciInfoExt() (PciInfoExt, Return) { var pciInfo PciInfoExt pciInfo.Version = STRUCT_VERSION(pciInfo, 1) ret := nvmlDeviceGetPciInfoExt(device, &pciInfo) return pciInfo, ret } // nvml.DeviceGetGpuFabricInfoV() type GpuFabricInfoHandler struct { device nvmlDevice } func (handler GpuFabricInfoHandler) V1() (GpuFabricInfo, Return) { return handler.device.GetGpuFabricInfo() } func (handler GpuFabricInfoHandler) V2() (GpuFabricInfo_v2, Return) { var info GpuFabricInfo_v2 info.Version = STRUCT_VERSION(info, 2) ret := nvmlDeviceGetGpuFabricInfoV(handler.device, (*GpuFabricInfoV)(unsafe.Pointer(&info))) return info, ret } func (handler GpuFabricInfoHandler) V3() (GpuFabricInfo_v3, Return) { var info GpuFabricInfo_v3 info.Version = STRUCT_VERSION(info, 3) ret := nvmlDeviceGetGpuFabricInfoV(handler.device, (*GpuFabricInfoV)(unsafe.Pointer(&info))) return info, ret } func (l *library) DeviceGetGpuFabricInfoV(device Device) GpuFabricInfoHandler { return device.GetGpuFabricInfoV() } func (device nvmlDevice) GetGpuFabricInfoV() GpuFabricInfoHandler { return GpuFabricInfoHandler{device} } // nvml.DeviceGetProcessesUtilizationInfo() func (l *library) DeviceGetProcessesUtilizationInfo(device Device) (ProcessesUtilizationInfo, Return) { return device.GetProcessesUtilizationInfo() } func (device nvmlDevice) GetProcessesUtilizationInfo() (ProcessesUtilizationInfo, Return) { var processesUtilInfo ProcessesUtilizationInfo ret := nvmlDeviceGetProcessesUtilizationInfo(device, &processesUtilInfo) return processesUtilInfo, ret } // nvml.DeviceGetVgpuHeterogeneousMode() func (l *library) DeviceGetVgpuHeterogeneousMode(device Device) (VgpuHeterogeneousMode, Return) { return device.GetVgpuHeterogeneousMode() } func (device nvmlDevice) GetVgpuHeterogeneousMode() (VgpuHeterogeneousMode, Return) { var heterogeneousMode VgpuHeterogeneousMode heterogeneousMode.Version = STRUCT_VERSION(heterogeneousMode, 1) ret := nvmlDeviceGetVgpuHeterogeneousMode(device, &heterogeneousMode) return heterogeneousMode, ret } // nvml.DeviceSetVgpuHeterogeneousMode() func (l *library) DeviceSetVgpuHeterogeneousMode(device Device, heterogeneousMode VgpuHeterogeneousMode) Return { return device.SetVgpuHeterogeneousMode(heterogeneousMode) } func (device nvmlDevice) SetVgpuHeterogeneousMode(heterogeneousMode VgpuHeterogeneousMode) Return { ret := nvmlDeviceSetVgpuHeterogeneousMode(device, &heterogeneousMode) return ret } // nvml.DeviceGetVgpuTypeSupportedPlacements() func (l *library) DeviceGetVgpuTypeSupportedPlacements(device Device, vgpuTypeId VgpuTypeId) (VgpuPlacementList, Return) { return device.GetVgpuTypeSupportedPlacements(vgpuTypeId) } func (device nvmlDevice) GetVgpuTypeSupportedPlacements(vgpuTypeId VgpuTypeId) (VgpuPlacementList, Return) { return vgpuTypeId.GetSupportedPlacements(device) } func (vgpuTypeId nvmlVgpuTypeId) GetSupportedPlacements(device Device) (VgpuPlacementList, Return) { var placementList VgpuPlacementList placementList.Version = STRUCT_VERSION(placementList, 1) ret := nvmlDeviceGetVgpuTypeSupportedPlacements(nvmlDeviceHandle(device), vgpuTypeId, &placementList) return placementList, ret } // nvml.DeviceGetVgpuTypeCreatablePlacements() func (l *library) DeviceGetVgpuTypeCreatablePlacements(device Device, vgpuTypeId VgpuTypeId) (VgpuPlacementList, Return) { return device.GetVgpuTypeCreatablePlacements(vgpuTypeId) } func (device nvmlDevice) GetVgpuTypeCreatablePlacements(vgpuTypeId VgpuTypeId) (VgpuPlacementList, Return) { return vgpuTypeId.GetCreatablePlacements(device) } func (vgpuTypeId nvmlVgpuTypeId) GetCreatablePlacements(device Device) (VgpuPlacementList, Return) { var placementList VgpuPlacementList placementList.Version = STRUCT_VERSION(placementList, 1) ret := nvmlDeviceGetVgpuTypeCreatablePlacements(nvmlDeviceHandle(device), vgpuTypeId, &placementList) return placementList, ret } // nvml.DeviceSetVgpuCapabilities() func (l *library) DeviceSetVgpuCapabilities(device Device, capability DeviceVgpuCapability, state EnableState) Return { return device.SetVgpuCapabilities(capability, state) } func (device nvmlDevice) SetVgpuCapabilities(capability DeviceVgpuCapability, state EnableState) Return { ret := nvmlDeviceSetVgpuCapabilities(device, capability, state) return ret } // nvml.DeviceGetVgpuInstancesUtilizationInfo() func (l *library) DeviceGetVgpuInstancesUtilizationInfo(device Device) (VgpuInstancesUtilizationInfo, Return) { return device.GetVgpuInstancesUtilizationInfo() } func (device nvmlDevice) GetVgpuInstancesUtilizationInfo() (VgpuInstancesUtilizationInfo, Return) { var vgpuUtilInfo VgpuInstancesUtilizationInfo ret := nvmlDeviceGetVgpuInstancesUtilizationInfo(device, &vgpuUtilInfo) return vgpuUtilInfo, ret } // nvml.DeviceGetVgpuProcessesUtilizationInfo() func (l *library) DeviceGetVgpuProcessesUtilizationInfo(device Device) (VgpuProcessesUtilizationInfo, Return) { return device.GetVgpuProcessesUtilizationInfo() } func (device nvmlDevice) GetVgpuProcessesUtilizationInfo() (VgpuProcessesUtilizationInfo, Return) { var vgpuProcUtilInfo VgpuProcessesUtilizationInfo vgpuProcUtilInfo.Version = STRUCT_VERSION(vgpuProcUtilInfo, 1) ret := nvmlDeviceGetVgpuProcessesUtilizationInfo(device, &vgpuProcUtilInfo) return vgpuProcUtilInfo, ret } // nvml.DeviceGetSramEccErrorStatus() func (l *library) DeviceGetSramEccErrorStatus(device Device) (EccSramErrorStatus, Return) { return device.GetSramEccErrorStatus() } func (device nvmlDevice) GetSramEccErrorStatus() (EccSramErrorStatus, Return) { var status EccSramErrorStatus status.Version = STRUCT_VERSION(status, 1) ret := nvmlDeviceGetSramEccErrorStatus(device, &status) return status, ret } // nvml.DeviceGetClockOffsets() func (l *library) DeviceGetClockOffsets(device Device) (ClockOffset, Return) { return device.GetClockOffsets() } func (device nvmlDevice) GetClockOffsets() (ClockOffset, Return) { var info ClockOffset info.Version = STRUCT_VERSION(info, 1) ret := nvmlDeviceGetClockOffsets(device, &info) return info, ret } // nvml.DeviceSetClockOffsets() func (l *library) DeviceSetClockOffsets(device Device, info ClockOffset) Return { return device.SetClockOffsets(info) } func (device nvmlDevice) SetClockOffsets(info ClockOffset) Return { return nvmlDeviceSetClockOffsets(device, &info) } // nvml.DeviceGetDriverModel_v2() func (l *library) DeviceGetDriverModel_v2(device Device) (DriverModel, DriverModel, Return) { return device.GetDriverModel_v2() } func (device nvmlDevice) GetDriverModel_v2() (DriverModel, DriverModel, Return) { var current, pending DriverModel ret := nvmlDeviceGetDriverModel_v2(device, ¤t, &pending) return current, pending, ret } // nvml.DeviceGetCapabilities() func (l *library) DeviceGetCapabilities(device Device) (DeviceCapabilities, Return) { return device.GetCapabilities() } func (device nvmlDevice) GetCapabilities() (DeviceCapabilities, Return) { var caps DeviceCapabilities caps.Version = STRUCT_VERSION(caps, 1) ret := nvmlDeviceGetCapabilities(device, &caps) return caps, ret } // nvml.DeviceGetFanSpeedRPM() func (l *library) DeviceGetFanSpeedRPM(device Device) (FanSpeedInfo, Return) { return device.GetFanSpeedRPM() } func (device nvmlDevice) GetFanSpeedRPM() (FanSpeedInfo, Return) { var fanSpeed FanSpeedInfo fanSpeed.Version = STRUCT_VERSION(fanSpeed, 1) ret := nvmlDeviceGetFanSpeedRPM(device, &fanSpeed) return fanSpeed, ret } // nvml.DeviceGetCoolerInfo() func (l *library) DeviceGetCoolerInfo(device Device) (CoolerInfo, Return) { return device.GetCoolerInfo() } func (device nvmlDevice) GetCoolerInfo() (CoolerInfo, Return) { var coolerInfo CoolerInfo coolerInfo.Version = STRUCT_VERSION(coolerInfo, 1) ret := nvmlDeviceGetCoolerInfo(device, &coolerInfo) return coolerInfo, ret } // nvml.DeviceGetTemperatureV() type TemperatureHandler struct { device nvmlDevice } func (handler TemperatureHandler) V1() (Temperature, Return) { var temperature Temperature temperature.Version = STRUCT_VERSION(temperature, 1) ret := nvmlDeviceGetTemperatureV(handler.device, &temperature) return temperature, ret } func (l *library) DeviceGetTemperatureV(device Device) TemperatureHandler { return device.GetTemperatureV() } func (device nvmlDevice) GetTemperatureV() TemperatureHandler { return TemperatureHandler{device} } // nvml.DeviceGetMarginTemperature() func (l *library) DeviceGetMarginTemperature(device Device) (MarginTemperature, Return) { return device.GetMarginTemperature() } func (device nvmlDevice) GetMarginTemperature() (MarginTemperature, Return) { var marginTemp MarginTemperature marginTemp.Version = STRUCT_VERSION(marginTemp, 1) ret := nvmlDeviceGetMarginTemperature(device, &marginTemp) return marginTemp, ret } // nvml.DeviceGetPerformanceModes() func (l *library) DeviceGetPerformanceModes(device Device) (DevicePerfModes, Return) { return device.GetPerformanceModes() } func (device nvmlDevice) GetPerformanceModes() (DevicePerfModes, Return) { var perfModes DevicePerfModes perfModes.Version = STRUCT_VERSION(perfModes, 1) ret := nvmlDeviceGetPerformanceModes(device, &perfModes) return perfModes, ret } // nvml.DeviceGetCurrentClockFreqs() func (l *library) DeviceGetCurrentClockFreqs(device Device) (DeviceCurrentClockFreqs, Return) { return device.GetCurrentClockFreqs() } func (device nvmlDevice) GetCurrentClockFreqs() (DeviceCurrentClockFreqs, Return) { var currentClockFreqs DeviceCurrentClockFreqs currentClockFreqs.Version = STRUCT_VERSION(currentClockFreqs, 1) ret := nvmlDeviceGetCurrentClockFreqs(device, ¤tClockFreqs) return currentClockFreqs, ret } // nvml.DeviceGetDramEncryptionMode() func (l *library) DeviceGetDramEncryptionMode(device Device) (DramEncryptionInfo, DramEncryptionInfo, Return) { return device.GetDramEncryptionMode() } func (device nvmlDevice) GetDramEncryptionMode() (DramEncryptionInfo, DramEncryptionInfo, Return) { var current, pending DramEncryptionInfo current.Version = STRUCT_VERSION(current, 1) pending.Version = STRUCT_VERSION(pending, 1) ret := nvmlDeviceGetDramEncryptionMode(device, ¤t, &pending) return current, pending, ret } // nvml.DeviceSetDramEncryptionMode() func (l *library) DeviceSetDramEncryptionMode(device Device, dramEncryption *DramEncryptionInfo) Return { return device.SetDramEncryptionMode(dramEncryption) } func (device nvmlDevice) SetDramEncryptionMode(dramEncryption *DramEncryptionInfo) Return { return nvmlDeviceSetDramEncryptionMode(device, dramEncryption) } // nvml.DeviceGetPlatformInfo() func (l *library) DeviceGetPlatformInfo(device Device) (PlatformInfo, Return) { return device.GetPlatformInfo() } func (device nvmlDevice) GetPlatformInfo() (PlatformInfo, Return) { var platformInfo PlatformInfo platformInfo.Version = STRUCT_VERSION(platformInfo, 1) ret := nvmlDeviceGetPlatformInfo(device, &platformInfo) return platformInfo, ret } // nvml.DeviceGetNvlinkSupportedBwModes() func (l *library) DeviceGetNvlinkSupportedBwModes(device Device) (NvlinkSupportedBwModes, Return) { return device.GetNvlinkSupportedBwModes() } func (device nvmlDevice) GetNvlinkSupportedBwModes() (NvlinkSupportedBwModes, Return) { var supportedBwMode NvlinkSupportedBwModes supportedBwMode.Version = STRUCT_VERSION(supportedBwMode, 1) ret := nvmlDeviceGetNvlinkSupportedBwModes(device, &supportedBwMode) return supportedBwMode, ret } // nvml.DeviceGetNvlinkBwMode() func (l *library) DeviceGetNvlinkBwMode(device Device) (NvlinkGetBwMode, Return) { return device.GetNvlinkBwMode() } func (device nvmlDevice) GetNvlinkBwMode() (NvlinkGetBwMode, Return) { var getBwMode NvlinkGetBwMode getBwMode.Version = STRUCT_VERSION(getBwMode, 1) ret := nvmlDeviceGetNvlinkBwMode(device, &getBwMode) return getBwMode, ret } // nvml.DeviceSetNvlinkBwMode() func (l *library) DeviceSetNvlinkBwMode(device Device, setBwMode *NvlinkSetBwMode) Return { return device.SetNvlinkBwMode(setBwMode) } func (device nvmlDevice) SetNvlinkBwMode(setBwMode *NvlinkSetBwMode) Return { return nvmlDeviceSetNvlinkBwMode(device, setBwMode) } func (l *library) DeviceGetNvLinkInfo(device Device) NvLinkInfoHandler { return device.GetNvLinkInfo() } func (device nvmlDevice) GetNvLinkInfo() NvLinkInfoHandler { return NvLinkInfoHandler{device} } type NvLinkInfoHandler struct { device nvmlDevice } func (handler NvLinkInfoHandler) V1() (NvLinkInfo_v1, Return) { var info NvLinkInfo_v1 info.Version = STRUCT_VERSION(info, 1) ret := nvmlDeviceGetNvLinkInfo(handler.device, (*NvLinkInfo)(unsafe.Pointer(&info))) return info, ret } func (handler NvLinkInfoHandler) V2() (NvLinkInfo_v2, Return) { var info NvLinkInfo_v2 info.Version = STRUCT_VERSION(info, 2) ret := nvmlDeviceGetNvLinkInfo(handler.device, (*NvLinkInfo)(unsafe.Pointer(&info))) return info, ret } // nvml.DeviceWorkloadPowerProfileGetProfilesInfo() func (l *library) DeviceWorkloadPowerProfileGetProfilesInfo(device Device) (WorkloadPowerProfileProfilesInfo, Return) { return device.WorkloadPowerProfileGetProfilesInfo() } func (device nvmlDevice) WorkloadPowerProfileGetProfilesInfo() (WorkloadPowerProfileProfilesInfo, Return) { var profilesInfo WorkloadPowerProfileProfilesInfo profilesInfo.Version = STRUCT_VERSION(profilesInfo, 1) ret := nvmlDeviceWorkloadPowerProfileGetProfilesInfo(device, &profilesInfo) return profilesInfo, ret } // nvml.DeviceWorkloadPowerProfileGetCurrentProfiles() func (l *library) DeviceWorkloadPowerProfileGetCurrentProfiles(device Device) (WorkloadPowerProfileCurrentProfiles, Return) { return device.WorkloadPowerProfileGetCurrentProfiles() } func (device nvmlDevice) WorkloadPowerProfileGetCurrentProfiles() (WorkloadPowerProfileCurrentProfiles, Return) { var currentProfiles WorkloadPowerProfileCurrentProfiles currentProfiles.Version = STRUCT_VERSION(currentProfiles, 1) ret := nvmlDeviceWorkloadPowerProfileGetCurrentProfiles(device, ¤tProfiles) return currentProfiles, ret } // nvml.DeviceWorkloadPowerProfileSetRequestedProfiles() func (l *library) DeviceWorkloadPowerProfileSetRequestedProfiles(device Device, requestedProfiles *WorkloadPowerProfileRequestedProfiles) Return { return device.WorkloadPowerProfileSetRequestedProfiles(requestedProfiles) } func (device nvmlDevice) WorkloadPowerProfileSetRequestedProfiles(requestedProfiles *WorkloadPowerProfileRequestedProfiles) Return { return nvmlDeviceWorkloadPowerProfileSetRequestedProfiles(device, requestedProfiles) } // nvml.DeviceWorkloadPowerProfileClearRequestedProfiles() func (l *library) DeviceWorkloadPowerProfileClearRequestedProfiles(device Device, requestedProfiles *WorkloadPowerProfileRequestedProfiles) Return { return device.WorkloadPowerProfileClearRequestedProfiles(requestedProfiles) } func (device nvmlDevice) WorkloadPowerProfileClearRequestedProfiles(requestedProfiles *WorkloadPowerProfileRequestedProfiles) Return { return nvmlDeviceWorkloadPowerProfileClearRequestedProfiles(device, requestedProfiles) } // nvml.DevicePowerSmoothingActivatePresetProfile() func (l *library) DevicePowerSmoothingActivatePresetProfile(device Device, profile *PowerSmoothingProfile) Return { return device.PowerSmoothingActivatePresetProfile(profile) } func (device nvmlDevice) PowerSmoothingActivatePresetProfile(profile *PowerSmoothingProfile) Return { return nvmlDevicePowerSmoothingActivatePresetProfile(device, profile) } // nvml.DevicePowerSmoothingUpdatePresetProfileParam() func (l *library) DevicePowerSmoothingUpdatePresetProfileParam(device Device, profile *PowerSmoothingProfile) Return { return device.PowerSmoothingUpdatePresetProfileParam(profile) } func (device nvmlDevice) PowerSmoothingUpdatePresetProfileParam(profile *PowerSmoothingProfile) Return { return nvmlDevicePowerSmoothingUpdatePresetProfileParam(device, profile) } // nvml.DevicePowerSmoothingSetState() func (l *library) DevicePowerSmoothingSetState(device Device, state *PowerSmoothingState) Return { return device.PowerSmoothingSetState(state) } func (device nvmlDevice) PowerSmoothingSetState(state *PowerSmoothingState) Return { return nvmlDevicePowerSmoothingSetState(device, state) } func (l *library) DeviceGetSramUniqueUncorrectedEccErrorCounts(device Device, errorCounts *EccSramUniqueUncorrectedErrorCounts) Return { return device.GetSramUniqueUncorrectedEccErrorCounts(errorCounts) } func (device nvmlDevice) GetSramUniqueUncorrectedEccErrorCounts(errorCounts *EccSramUniqueUncorrectedErrorCounts) Return { return nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts(device, errorCounts) } // nvml.GpuInstanceGetCreatableVgpus() func (l *library) GpuInstanceGetCreatableVgpus(gpuInstance GpuInstance) (VgpuTypeIdInfo, Return) { return gpuInstance.GetCreatableVgpus() } func (gpuInstance nvmlGpuInstance) GetCreatableVgpus() (VgpuTypeIdInfo, Return) { var vgpuTypeIdInfo VgpuTypeIdInfo vgpuTypeIdInfo.Version = STRUCT_VERSION(vgpuTypeIdInfo, 1) ret := nvmlGpuInstanceGetCreatableVgpus(gpuInstance, &vgpuTypeIdInfo) return vgpuTypeIdInfo, ret } // nvml.GpuInstanceGetActiveVgpus() func (l *library) GpuInstanceGetActiveVgpus(gpuInstance GpuInstance) (ActiveVgpuInstanceInfo, Return) { return gpuInstance.GetActiveVgpus() } func (gpuInstance nvmlGpuInstance) GetActiveVgpus() (ActiveVgpuInstanceInfo, Return) { var activeVgpuInstanceInfo ActiveVgpuInstanceInfo activeVgpuInstanceInfo.Version = STRUCT_VERSION(activeVgpuInstanceInfo, 1) ret := nvmlGpuInstanceGetActiveVgpus(gpuInstance, &activeVgpuInstanceInfo) return activeVgpuInstanceInfo, ret } // nvml.GpuInstanceSetVgpuSchedulerState() func (l *library) GpuInstanceSetVgpuSchedulerState(gpuInstance GpuInstance, scheduler *VgpuSchedulerState) Return { return gpuInstance.SetVgpuSchedulerState(scheduler) } func (gpuInstance nvmlGpuInstance) SetVgpuSchedulerState(scheduler *VgpuSchedulerState) Return { return nvmlGpuInstanceSetVgpuSchedulerState(gpuInstance, scheduler) } // nvml.GpuInstanceGetVgpuSchedulerState() func (l *library) GpuInstanceGetVgpuSchedulerState(gpuInstance GpuInstance) (VgpuSchedulerStateInfo, Return) { return gpuInstance.GetVgpuSchedulerState() } func (gpuInstance nvmlGpuInstance) GetVgpuSchedulerState() (VgpuSchedulerStateInfo, Return) { var schedulerStateInfo VgpuSchedulerStateInfo schedulerStateInfo.Version = STRUCT_VERSION(schedulerStateInfo, 1) ret := nvmlGpuInstanceGetVgpuSchedulerState(gpuInstance, &schedulerStateInfo) return schedulerStateInfo, ret } // nvml.GpuInstanceGetVgpuSchedulerLog() func (l *library) GpuInstanceGetVgpuSchedulerLog(gpuInstance GpuInstance) (VgpuSchedulerLogInfo, Return) { return gpuInstance.GetVgpuSchedulerLog() } func (gpuInstance nvmlGpuInstance) GetVgpuSchedulerLog() (VgpuSchedulerLogInfo, Return) { var schedulerLogInfo VgpuSchedulerLogInfo schedulerLogInfo.Version = STRUCT_VERSION(schedulerLogInfo, 1) ret := nvmlGpuInstanceGetVgpuSchedulerLog(gpuInstance, &schedulerLogInfo) return schedulerLogInfo, ret } // nvml.GpuInstanceGetVgpuTypeCreatablePlacements() func (l *library) GpuInstanceGetVgpuTypeCreatablePlacements(gpuInstance GpuInstance) (VgpuCreatablePlacementInfo, Return) { return gpuInstance.GetVgpuTypeCreatablePlacements() } func (gpuInstance nvmlGpuInstance) GetVgpuTypeCreatablePlacements() (VgpuCreatablePlacementInfo, Return) { var creatablePlacementInfo VgpuCreatablePlacementInfo creatablePlacementInfo.Version = STRUCT_VERSION(creatablePlacementInfo, 1) ret := nvmlGpuInstanceGetVgpuTypeCreatablePlacements(gpuInstance, &creatablePlacementInfo) return creatablePlacementInfo, ret } // nvml.GpuInstanceGetVgpuHeterogeneousMode() func (l *library) GpuInstanceGetVgpuHeterogeneousMode(gpuInstance GpuInstance) (VgpuHeterogeneousMode, Return) { return gpuInstance.GetVgpuHeterogeneousMode() } func (gpuInstance nvmlGpuInstance) GetVgpuHeterogeneousMode() (VgpuHeterogeneousMode, Return) { var heterogeneousMode VgpuHeterogeneousMode heterogeneousMode.Version = STRUCT_VERSION(heterogeneousMode, 1) ret := nvmlGpuInstanceGetVgpuHeterogeneousMode(gpuInstance, &heterogeneousMode) return heterogeneousMode, ret } // nvml.GpuInstanceSetVgpuHeterogeneousMode() func (l *library) GpuInstanceSetVgpuHeterogeneousMode(gpuInstance GpuInstance, heterogeneousMode *VgpuHeterogeneousMode) Return { return gpuInstance.SetVgpuHeterogeneousMode(heterogeneousMode) } func (gpuInstance nvmlGpuInstance) SetVgpuHeterogeneousMode(heterogeneousMode *VgpuHeterogeneousMode) Return { return nvmlGpuInstanceSetVgpuHeterogeneousMode(gpuInstance, heterogeneousMode) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/doc.go000066400000000000000000000014071520540370700256030ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // WARNING: THIS FILE WAS AUTOMATICALLY GENERATED. // Code generated by https://git.io/c-for-go. DO NOT EDIT. /* Package NVML bindings */ package nvml NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/dynamicLibrary_mock.go000066400000000000000000000065271520540370700310300ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package nvml import ( "sync" ) // Ensure, that dynamicLibraryMock does implement dynamicLibrary. // If this is not the case, regenerate this file with moq. var _ dynamicLibrary = &dynamicLibraryMock{} // dynamicLibraryMock is a mock implementation of dynamicLibrary. // // func TestSomethingThatUsesdynamicLibrary(t *testing.T) { // // // make and configure a mocked dynamicLibrary // mockeddynamicLibrary := &dynamicLibraryMock{ // CloseFunc: func() error { // panic("mock out the Close method") // }, // LookupFunc: func(s string) error { // panic("mock out the Lookup method") // }, // OpenFunc: func() error { // panic("mock out the Open method") // }, // } // // // use mockeddynamicLibrary in code that requires dynamicLibrary // // and then make assertions. // // } type dynamicLibraryMock struct { // CloseFunc mocks the Close method. CloseFunc func() error // LookupFunc mocks the Lookup method. LookupFunc func(s string) error // OpenFunc mocks the Open method. OpenFunc func() error // calls tracks calls to the methods. calls struct { // Close holds details about calls to the Close method. Close []struct { } // Lookup holds details about calls to the Lookup method. Lookup []struct { // S is the s argument value. S string } // Open holds details about calls to the Open method. Open []struct { } } lockClose sync.RWMutex lockLookup sync.RWMutex lockOpen sync.RWMutex } // Close calls CloseFunc. func (mock *dynamicLibraryMock) Close() error { callInfo := struct { }{} mock.lockClose.Lock() mock.calls.Close = append(mock.calls.Close, callInfo) mock.lockClose.Unlock() if mock.CloseFunc == nil { var ( errOut error ) return errOut } return mock.CloseFunc() } // CloseCalls gets all the calls that were made to Close. // Check the length with: // // len(mockeddynamicLibrary.CloseCalls()) func (mock *dynamicLibraryMock) CloseCalls() []struct { } { var calls []struct { } mock.lockClose.RLock() calls = mock.calls.Close mock.lockClose.RUnlock() return calls } // Lookup calls LookupFunc. func (mock *dynamicLibraryMock) Lookup(s string) error { callInfo := struct { S string }{ S: s, } mock.lockLookup.Lock() mock.calls.Lookup = append(mock.calls.Lookup, callInfo) mock.lockLookup.Unlock() if mock.LookupFunc == nil { var ( errOut error ) return errOut } return mock.LookupFunc(s) } // LookupCalls gets all the calls that were made to Lookup. // Check the length with: // // len(mockeddynamicLibrary.LookupCalls()) func (mock *dynamicLibraryMock) LookupCalls() []struct { S string } { var calls []struct { S string } mock.lockLookup.RLock() calls = mock.calls.Lookup mock.lockLookup.RUnlock() return calls } // Open calls OpenFunc. func (mock *dynamicLibraryMock) Open() error { callInfo := struct { }{} mock.lockOpen.Lock() mock.calls.Open = append(mock.calls.Open, callInfo) mock.lockOpen.Unlock() if mock.OpenFunc == nil { var ( errOut error ) return errOut } return mock.OpenFunc() } // OpenCalls gets all the calls that were made to Open. // Check the length with: // // len(mockeddynamicLibrary.OpenCalls()) func (mock *dynamicLibraryMock) OpenCalls() []struct { } { var calls []struct { } mock.lockOpen.RLock() calls = mock.calls.Open mock.lockOpen.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/event_set.go000066400000000000000000000045361520540370700270400ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml // EventData includes an interface type for Device instead of nvmlDevice type EventData struct { Device Device EventType uint64 EventData uint64 GpuInstanceId uint32 ComputeInstanceId uint32 } func (e nvmlEventData) convert() EventData { out := EventData{ Device: e.Device, EventType: e.EventType, EventData: e.EventData, GpuInstanceId: e.GpuInstanceId, ComputeInstanceId: e.ComputeInstanceId, } return out } // nvml.EventSetCreate() func (l *library) EventSetCreate() (EventSet, Return) { var Set nvmlEventSet ret := nvmlEventSetCreate(&Set) return Set, ret } // nvml.EventSetWait() func (l *library) EventSetWait(set EventSet, timeoutms uint32) (EventData, Return) { return set.Wait(timeoutms) } func (set nvmlEventSet) Wait(timeoutms uint32) (EventData, Return) { var data nvmlEventData ret := nvmlEventSetWait(set, &data, timeoutms) return data.convert(), ret } // nvml.EventSetFree() func (l *library) EventSetFree(set EventSet) Return { return set.Free() } func (set nvmlEventSet) Free() Return { return nvmlEventSetFree(set) } // nvml.SystemEventSetCreate() func (l *library) SystemEventSetCreate(request *SystemEventSetCreateRequest) Return { return nvmlSystemEventSetCreate(request) } // nvml.SystemEventSetFree() func (l *library) SystemEventSetFree(request *SystemEventSetFreeRequest) Return { return nvmlSystemEventSetFree(request) } // nvml.SystemRegisterEvents() func (l *library) SystemRegisterEvents(request *SystemRegisterEventRequest) Return { return nvmlSystemRegisterEvents(request) } // nvml.SystemEventSetWait() func (l *library) SystemEventSetWait(request *SystemEventSetWaitRequest) Return { return nvmlSystemEventSetWait(request) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/gpm.go000066400000000000000000000115461520540370700256260ustar00rootroot00000000000000// Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml // GpmMetricsGetType includes interface types for GpmSample instead of nvmlGpmSample type GpmMetricsGetType struct { Version uint32 NumMetrics uint32 Sample1 GpmSample Sample2 GpmSample Metrics [210]GpmMetric } func (g *GpmMetricsGetType) convert() *nvmlGpmMetricsGetType { out := &nvmlGpmMetricsGetType{ Version: g.Version, NumMetrics: g.NumMetrics, Sample1: g.Sample1.(nvmlGpmSample), Sample2: g.Sample2.(nvmlGpmSample), } copy(out.Metrics[:], g.Metrics[:]) return out } func (g *nvmlGpmMetricsGetType) convert() *GpmMetricsGetType { out := &GpmMetricsGetType{ Version: g.Version, NumMetrics: g.NumMetrics, Sample1: g.Sample1, Sample2: g.Sample2, } copy(out.Metrics[:], g.Metrics[:]) return out } // nvml.GpmMetricsGet() type GpmMetricsGetVType struct { metricsGet *GpmMetricsGetType } func (l *library) GpmMetricsGetV(metricsGet *GpmMetricsGetType) GpmMetricsGetVType { return GpmMetricsGetVType{metricsGet} } // nvmlGpmMetricsGetStub is a stub function that can be overridden for testing. var nvmlGpmMetricsGetStub = nvmlGpmMetricsGet func (metricsGetV GpmMetricsGetVType) V1() Return { metricsGetV.metricsGet.Version = 1 return gpmMetricsGet(metricsGetV.metricsGet) } func (l *library) GpmMetricsGet(metricsGet *GpmMetricsGetType) Return { metricsGet.Version = GPM_METRICS_GET_VERSION return gpmMetricsGet(metricsGet) } func gpmMetricsGet(metricsGet *GpmMetricsGetType) Return { nvmlMetricsGet := metricsGet.convert() ret := nvmlGpmMetricsGetStub(nvmlMetricsGet) *metricsGet = *nvmlMetricsGet.convert() return ret } // nvml.GpmSampleFree() func (l *library) GpmSampleFree(gpmSample GpmSample) Return { return gpmSample.Free() } func (gpmSample nvmlGpmSample) Free() Return { return nvmlGpmSampleFree(gpmSample) } // nvml.GpmSampleAlloc() func (l *library) GpmSampleAlloc() (GpmSample, Return) { var gpmSample nvmlGpmSample ret := nvmlGpmSampleAlloc(&gpmSample) return gpmSample, ret } // nvml.GpmSampleGet() func (l *library) GpmSampleGet(device Device, gpmSample GpmSample) Return { return gpmSample.Get(device) } func (device nvmlDevice) GpmSampleGet(gpmSample GpmSample) Return { return gpmSample.Get(device) } func (gpmSample nvmlGpmSample) Get(device Device) Return { return nvmlGpmSampleGet(nvmlDeviceHandle(device), gpmSample) } // nvml.GpmQueryDeviceSupport() type GpmSupportV struct { device nvmlDevice } func (l *library) GpmQueryDeviceSupportV(device Device) GpmSupportV { return device.GpmQueryDeviceSupportV() } func (device nvmlDevice) GpmQueryDeviceSupportV() GpmSupportV { return GpmSupportV{device} } func (gpmSupportV GpmSupportV) V1() (GpmSupport, Return) { var gpmSupport GpmSupport gpmSupport.Version = STRUCT_VERSION(gpmSupport, 1) ret := nvmlGpmQueryDeviceSupport(gpmSupportV.device, &gpmSupport) return gpmSupport, ret } func (l *library) GpmQueryDeviceSupport(device Device) (GpmSupport, Return) { return device.GpmQueryDeviceSupport() } func (device nvmlDevice) GpmQueryDeviceSupport() (GpmSupport, Return) { var gpmSupport GpmSupport gpmSupport.Version = STRUCT_VERSION(gpmSupport, GPM_SUPPORT_VERSION) ret := nvmlGpmQueryDeviceSupport(device, &gpmSupport) return gpmSupport, ret } // nvml.GpmMigSampleGet() func (l *library) GpmMigSampleGet(device Device, gpuInstanceId int, gpmSample GpmSample) Return { return gpmSample.MigGet(device, gpuInstanceId) } func (device nvmlDevice) GpmMigSampleGet(gpuInstanceId int, gpmSample GpmSample) Return { return gpmSample.MigGet(device, gpuInstanceId) } func (gpmSample nvmlGpmSample) MigGet(device Device, gpuInstanceId int) Return { return nvmlGpmMigSampleGet(nvmlDeviceHandle(device), uint32(gpuInstanceId), gpmSample) } // nvml.GpmQueryIfStreamingEnabled() func (l *library) GpmQueryIfStreamingEnabled(device Device) (uint32, Return) { return device.GpmQueryIfStreamingEnabled() } func (device nvmlDevice) GpmQueryIfStreamingEnabled() (uint32, Return) { var state uint32 ret := nvmlGpmQueryIfStreamingEnabled(device, &state) return state, ret } // nvml.GpmSetStreamingEnabled() func (l *library) GpmSetStreamingEnabled(device Device, state uint32) Return { return device.GpmSetStreamingEnabled(state) } func (device nvmlDevice) GpmSetStreamingEnabled(state uint32) Return { return nvmlGpmSetStreamingEnabled(device, state) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/init.go000066400000000000000000000022221520540370700257750ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml import "C" // nvml.Init() func (l *library) Init() Return { if err := l.load(); err != nil { return ERROR_LIBRARY_NOT_FOUND } return nvmlInit() } // nvml.InitWithFlags() func (l *library) InitWithFlags(flags uint32) Return { if err := l.load(); err != nil { return ERROR_LIBRARY_NOT_FOUND } return nvmlInitWithFlags(flags) } // nvml.Shutdown() func (l *library) Shutdown() Return { ret := nvmlShutdown() if ret != SUCCESS { return ret } err := l.close() if err != nil { return ERROR_UNKNOWN } return ret } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/lib.go000066400000000000000000000222431520540370700256050ustar00rootroot00000000000000/** # Copyright 2023 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package nvml import ( "errors" "fmt" "sync" "github.com/NVIDIA/go-nvml/pkg/dl" ) import "C" const ( defaultNvmlLibraryName = "libnvidia-ml.so.1" defaultNvmlLibraryLoadFlags = dl.RTLD_LAZY | dl.RTLD_GLOBAL ) var errLibraryNotLoaded = errors.New("library not loaded") var errLibraryAlreadyLoaded = errors.New("library already loaded") // dynamicLibrary is an interface for abstacting the underlying library. // This also allows for mocking and testing. //go:generate moq -stub -out dynamicLibrary_mock.go . dynamicLibrary type dynamicLibrary interface { Lookup(string) error Open() error Close() error } // library represents an nvml library. // This includes a reference to the underlying DynamicLibrary type library struct { sync.Mutex path string refcount refcount dl dynamicLibrary } var _ Interface = (*library)(nil) // libnvml is a global instance of the nvml library. var libnvml = newLibrary() func New(opts ...LibraryOption) Interface { return newLibrary(opts...) } func newLibrary(opts ...LibraryOption) *library { l := &library{} l.init(opts...) return l } func (l *library) init(opts ...LibraryOption) { o := libraryOptions{} for _, opt := range opts { opt(&o) } if o.path == "" { o.path = defaultNvmlLibraryName } if o.flags == 0 { o.flags = defaultNvmlLibraryLoadFlags } l.path = o.path l.dl = dl.New(o.path, o.flags) } func (l *library) Extensions() ExtendedInterface { return l } // LookupSymbol checks whether the specified library symbol exists in the library. // Note that this requires that the library be loaded. func (l *library) LookupSymbol(name string) error { if l == nil || l.refcount == 0 { return fmt.Errorf("error looking up %s: %w", name, errLibraryNotLoaded) } return l.dl.Lookup(name) } // load initializes the library and updates the versioned symbols. // Multiple calls to an already loaded library will return without error. func (l *library) load() (rerr error) { l.Lock() defer l.Unlock() defer func() { l.refcount.IncOnNoError(rerr) }() if l.refcount > 0 { return nil } if err := l.dl.Open(); err != nil { return fmt.Errorf("error opening %s: %w", l.path, err) } // Update the errorStringFunc to point to nvml.ErrorString errorStringFunc = nvmlErrorString // Update all versioned symbols l.updateVersionedSymbols() return nil } // close the underlying library and ensure that the global pointer to the // library is set to nil to ensure that subsequent calls to open will reinitialize it. // Multiple calls to an already closed nvml library will return without error. func (l *library) close() (rerr error) { l.Lock() defer l.Unlock() defer func() { l.refcount.DecOnNoError(rerr) }() if l.refcount != 1 { return nil } if err := l.dl.Close(); err != nil { return fmt.Errorf("error closing %s: %w", l.path, err) } // Update the errorStringFunc to point to defaultErrorStringFunc errorStringFunc = defaultErrorStringFunc return nil } // Default all versioned APIs to v1 (to infer the types) var nvmlInit = nvmlInit_v1 var nvmlDeviceGetPciInfo = nvmlDeviceGetPciInfo_v1 var nvmlDeviceGetCount = nvmlDeviceGetCount_v1 var nvmlDeviceGetHandleByIndex = nvmlDeviceGetHandleByIndex_v1 var nvmlDeviceGetHandleByPciBusId = nvmlDeviceGetHandleByPciBusId_v1 var nvmlDeviceGetNvLinkRemotePciInfo = nvmlDeviceGetNvLinkRemotePciInfo_v1 var nvmlDeviceRemoveGpu = nvmlDeviceRemoveGpu_v1 var nvmlDeviceGetGridLicensableFeatures = nvmlDeviceGetGridLicensableFeatures_v1 var nvmlEventSetWait = nvmlEventSetWait_v1 var nvmlDeviceGetAttributes = nvmlDeviceGetAttributes_v1 var nvmlComputeInstanceGetInfo = nvmlComputeInstanceGetInfo_v1 var deviceGetComputeRunningProcesses = deviceGetComputeRunningProcesses_v1 var deviceGetGraphicsRunningProcesses = deviceGetGraphicsRunningProcesses_v1 var deviceGetMPSComputeRunningProcesses = deviceGetMPSComputeRunningProcesses_v1 var GetBlacklistDeviceCount = GetExcludedDeviceCount var GetBlacklistDeviceInfoByIndex = GetExcludedDeviceInfoByIndex var nvmlDeviceGetGpuInstancePossiblePlacements = nvmlDeviceGetGpuInstancePossiblePlacements_v1 var nvmlVgpuInstanceGetLicenseInfo = nvmlVgpuInstanceGetLicenseInfo_v1 var nvmlDeviceGetDriverModel = nvmlDeviceGetDriverModel_v1 // BlacklistDeviceInfo was replaced by ExcludedDeviceInfo type BlacklistDeviceInfo = ExcludedDeviceInfo type ProcessInfo_v1Slice []ProcessInfo_v1 type ProcessInfo_v2Slice []ProcessInfo_v2 func (pis ProcessInfo_v1Slice) ToProcessInfoSlice() []ProcessInfo { var newInfos []ProcessInfo for _, pi := range pis { info := ProcessInfo{ Pid: pi.Pid, UsedGpuMemory: pi.UsedGpuMemory, GpuInstanceId: 0xFFFFFFFF, // GPU instance ID is invalid in v1 ComputeInstanceId: 0xFFFFFFFF, // Compute instance ID is invalid in v1 } newInfos = append(newInfos, info) } return newInfos } func (pis ProcessInfo_v2Slice) ToProcessInfoSlice() []ProcessInfo { var newInfos []ProcessInfo for _, pi := range pis { info := ProcessInfo(pi) newInfos = append(newInfos, info) } return newInfos } // updateVersionedSymbols checks for versioned symbols in the loaded dynamic library. // If newer versioned symbols exist, these replace the default `v1` symbols initialized above. // When new versioned symbols are added, these would have to be initialized above and have // corresponding checks and subsequent assignments added below. func (l *library) updateVersionedSymbols() { err := l.dl.Lookup("nvmlInit_v2") if err == nil { nvmlInit = nvmlInit_v2 } err = l.dl.Lookup("nvmlDeviceGetPciInfo_v2") if err == nil { nvmlDeviceGetPciInfo = nvmlDeviceGetPciInfo_v2 } err = l.dl.Lookup("nvmlDeviceGetPciInfo_v3") if err == nil { nvmlDeviceGetPciInfo = nvmlDeviceGetPciInfo_v3 } err = l.dl.Lookup("nvmlDeviceGetCount_v2") if err == nil { nvmlDeviceGetCount = nvmlDeviceGetCount_v2 } err = l.dl.Lookup("nvmlDeviceGetHandleByIndex_v2") if err == nil { nvmlDeviceGetHandleByIndex = nvmlDeviceGetHandleByIndex_v2 } err = l.dl.Lookup("nvmlDeviceGetHandleByPciBusId_v2") if err == nil { nvmlDeviceGetHandleByPciBusId = nvmlDeviceGetHandleByPciBusId_v2 } err = l.dl.Lookup("nvmlDeviceGetNvLinkRemotePciInfo_v2") if err == nil { nvmlDeviceGetNvLinkRemotePciInfo = nvmlDeviceGetNvLinkRemotePciInfo_v2 } // Unable to overwrite nvmlDeviceRemoveGpu() because the v2 function takes // a different set of parameters than the v1 function. //err = l.dl.Lookup("nvmlDeviceRemoveGpu_v2") //if err == nil { // nvmlDeviceRemoveGpu = nvmlDeviceRemoveGpu_v2 //} err = l.dl.Lookup("nvmlDeviceGetGridLicensableFeatures_v2") if err == nil { nvmlDeviceGetGridLicensableFeatures = nvmlDeviceGetGridLicensableFeatures_v2 } err = l.dl.Lookup("nvmlDeviceGetGridLicensableFeatures_v3") if err == nil { nvmlDeviceGetGridLicensableFeatures = nvmlDeviceGetGridLicensableFeatures_v3 } err = l.dl.Lookup("nvmlDeviceGetGridLicensableFeatures_v4") if err == nil { nvmlDeviceGetGridLicensableFeatures = nvmlDeviceGetGridLicensableFeatures_v4 } err = l.dl.Lookup("nvmlEventSetWait_v2") if err == nil { nvmlEventSetWait = nvmlEventSetWait_v2 } err = l.dl.Lookup("nvmlDeviceGetAttributes_v2") if err == nil { nvmlDeviceGetAttributes = nvmlDeviceGetAttributes_v2 } err = l.dl.Lookup("nvmlComputeInstanceGetInfo_v2") if err == nil { nvmlComputeInstanceGetInfo = nvmlComputeInstanceGetInfo_v2 } err = l.dl.Lookup("nvmlDeviceGetComputeRunningProcesses_v2") if err == nil { deviceGetComputeRunningProcesses = deviceGetComputeRunningProcesses_v2 } err = l.dl.Lookup("nvmlDeviceGetComputeRunningProcesses_v3") if err == nil { deviceGetComputeRunningProcesses = deviceGetComputeRunningProcesses_v3 } err = l.dl.Lookup("nvmlDeviceGetGraphicsRunningProcesses_v2") if err == nil { deviceGetGraphicsRunningProcesses = deviceGetGraphicsRunningProcesses_v2 } err = l.dl.Lookup("nvmlDeviceGetGraphicsRunningProcesses_v3") if err == nil { deviceGetGraphicsRunningProcesses = deviceGetGraphicsRunningProcesses_v3 } err = l.dl.Lookup("nvmlDeviceGetMPSComputeRunningProcesses_v2") if err == nil { deviceGetMPSComputeRunningProcesses = deviceGetMPSComputeRunningProcesses_v2 } err = l.dl.Lookup("nvmlDeviceGetMPSComputeRunningProcesses_v3") if err == nil { deviceGetMPSComputeRunningProcesses = deviceGetMPSComputeRunningProcesses_v3 } err = l.dl.Lookup("nvmlDeviceGetGpuInstancePossiblePlacements_v2") if err == nil { nvmlDeviceGetGpuInstancePossiblePlacements = nvmlDeviceGetGpuInstancePossiblePlacements_v2 } err = l.dl.Lookup("nvmlVgpuInstanceGetLicenseInfo_v2") if err == nil { nvmlVgpuInstanceGetLicenseInfo = nvmlVgpuInstanceGetLicenseInfo_v2 } err = l.dl.Lookup("nvmlDeviceGetDriverModel_v2") if err == nil { nvmlDeviceGetDriverModel = nvmlDeviceGetDriverModel_v2 } } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/000077500000000000000000000000001520540370700254365ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/computeinstance.go000066400000000000000000000053741520540370700311770ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that ComputeInstance does implement nvml.ComputeInstance. // If this is not the case, regenerate this file with moq. var _ nvml.ComputeInstance = &ComputeInstance{} // ComputeInstance is a mock implementation of nvml.ComputeInstance. // // func TestSomethingThatUsesComputeInstance(t *testing.T) { // // // make and configure a mocked nvml.ComputeInstance // mockedComputeInstance := &ComputeInstance{ // DestroyFunc: func() nvml.Return { // panic("mock out the Destroy method") // }, // GetInfoFunc: func() (nvml.ComputeInstanceInfo, nvml.Return) { // panic("mock out the GetInfo method") // }, // } // // // use mockedComputeInstance in code that requires nvml.ComputeInstance // // and then make assertions. // // } type ComputeInstance struct { // DestroyFunc mocks the Destroy method. DestroyFunc func() nvml.Return // GetInfoFunc mocks the GetInfo method. GetInfoFunc func() (nvml.ComputeInstanceInfo, nvml.Return) // calls tracks calls to the methods. calls struct { // Destroy holds details about calls to the Destroy method. Destroy []struct { } // GetInfo holds details about calls to the GetInfo method. GetInfo []struct { } } lockDestroy sync.RWMutex lockGetInfo sync.RWMutex } // Destroy calls DestroyFunc. func (mock *ComputeInstance) Destroy() nvml.Return { if mock.DestroyFunc == nil { panic("ComputeInstance.DestroyFunc: method is nil but ComputeInstance.Destroy was just called") } callInfo := struct { }{} mock.lockDestroy.Lock() mock.calls.Destroy = append(mock.calls.Destroy, callInfo) mock.lockDestroy.Unlock() return mock.DestroyFunc() } // DestroyCalls gets all the calls that were made to Destroy. // Check the length with: // // len(mockedComputeInstance.DestroyCalls()) func (mock *ComputeInstance) DestroyCalls() []struct { } { var calls []struct { } mock.lockDestroy.RLock() calls = mock.calls.Destroy mock.lockDestroy.RUnlock() return calls } // GetInfo calls GetInfoFunc. func (mock *ComputeInstance) GetInfo() (nvml.ComputeInstanceInfo, nvml.Return) { if mock.GetInfoFunc == nil { panic("ComputeInstance.GetInfoFunc: method is nil but ComputeInstance.GetInfo was just called") } callInfo := struct { }{} mock.lockGetInfo.Lock() mock.calls.GetInfo = append(mock.calls.GetInfo, callInfo) mock.lockGetInfo.Unlock() return mock.GetInfoFunc() } // GetInfoCalls gets all the calls that were made to GetInfo. // Check the length with: // // len(mockedComputeInstance.GetInfoCalls()) func (mock *ComputeInstance) GetInfoCalls() []struct { } { var calls []struct { } mock.lockGetInfo.RLock() calls = mock.calls.GetInfo mock.lockGetInfo.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/device.go000066400000000000000000013647261520540370700272470ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that Device does implement nvml.Device. // If this is not the case, regenerate this file with moq. var _ nvml.Device = &Device{} // Device is a mock implementation of nvml.Device. // // func TestSomethingThatUsesDevice(t *testing.T) { // // // make and configure a mocked nvml.Device // mockedDevice := &Device{ // ClearAccountingPidsFunc: func() nvml.Return { // panic("mock out the ClearAccountingPids method") // }, // ClearCpuAffinityFunc: func() nvml.Return { // panic("mock out the ClearCpuAffinity method") // }, // ClearEccErrorCountsFunc: func(eccCounterType nvml.EccCounterType) nvml.Return { // panic("mock out the ClearEccErrorCounts method") // }, // ClearFieldValuesFunc: func(fieldValues []nvml.FieldValue) nvml.Return { // panic("mock out the ClearFieldValues method") // }, // CreateGpuInstanceFunc: func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (nvml.GpuInstance, nvml.Return) { // panic("mock out the CreateGpuInstance method") // }, // CreateGpuInstanceWithPlacementFunc: func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo, gpuInstancePlacement *nvml.GpuInstancePlacement) (nvml.GpuInstance, nvml.Return) { // panic("mock out the CreateGpuInstanceWithPlacement method") // }, // FreezeNvLinkUtilizationCounterFunc: func(n1 int, n2 int, enableState nvml.EnableState) nvml.Return { // panic("mock out the FreezeNvLinkUtilizationCounter method") // }, // GetAPIRestrictionFunc: func(restrictedAPI nvml.RestrictedAPI) (nvml.EnableState, nvml.Return) { // panic("mock out the GetAPIRestriction method") // }, // GetAccountingBufferSizeFunc: func() (int, nvml.Return) { // panic("mock out the GetAccountingBufferSize method") // }, // GetAccountingModeFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetAccountingMode method") // }, // GetAccountingPidsFunc: func() ([]int, nvml.Return) { // panic("mock out the GetAccountingPids method") // }, // GetAccountingStatsFunc: func(v uint32) (nvml.AccountingStats, nvml.Return) { // panic("mock out the GetAccountingStats method") // }, // GetActiveVgpusFunc: func() ([]nvml.VgpuInstance, nvml.Return) { // panic("mock out the GetActiveVgpus method") // }, // GetAdaptiveClockInfoStatusFunc: func() (uint32, nvml.Return) { // panic("mock out the GetAdaptiveClockInfoStatus method") // }, // GetAddressingModeFunc: func() (nvml.DeviceAddressingMode, nvml.Return) { // panic("mock out the GetAddressingMode method") // }, // GetApplicationsClockFunc: func(clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the GetApplicationsClock method") // }, // GetArchitectureFunc: func() (nvml.DeviceArchitecture, nvml.Return) { // panic("mock out the GetArchitecture method") // }, // GetAttributesFunc: func() (nvml.DeviceAttributes, nvml.Return) { // panic("mock out the GetAttributes method") // }, // GetAutoBoostedClocksEnabledFunc: func() (nvml.EnableState, nvml.EnableState, nvml.Return) { // panic("mock out the GetAutoBoostedClocksEnabled method") // }, // GetBAR1MemoryInfoFunc: func() (nvml.BAR1Memory, nvml.Return) { // panic("mock out the GetBAR1MemoryInfo method") // }, // GetBoardIdFunc: func() (uint32, nvml.Return) { // panic("mock out the GetBoardId method") // }, // GetBoardPartNumberFunc: func() (string, nvml.Return) { // panic("mock out the GetBoardPartNumber method") // }, // GetBrandFunc: func() (nvml.BrandType, nvml.Return) { // panic("mock out the GetBrand method") // }, // GetBridgeChipInfoFunc: func() (nvml.BridgeChipHierarchy, nvml.Return) { // panic("mock out the GetBridgeChipInfo method") // }, // GetBusTypeFunc: func() (nvml.BusType, nvml.Return) { // panic("mock out the GetBusType method") // }, // GetC2cModeInfoVFunc: func() nvml.C2cModeInfoHandler { // panic("mock out the GetC2cModeInfoV method") // }, // GetCapabilitiesFunc: func() (nvml.DeviceCapabilities, nvml.Return) { // panic("mock out the GetCapabilities method") // }, // GetClkMonStatusFunc: func() (nvml.ClkMonStatus, nvml.Return) { // panic("mock out the GetClkMonStatus method") // }, // GetClockFunc: func(clockType nvml.ClockType, clockId nvml.ClockId) (uint32, nvml.Return) { // panic("mock out the GetClock method") // }, // GetClockInfoFunc: func(clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the GetClockInfo method") // }, // GetClockOffsetsFunc: func() (nvml.ClockOffset, nvml.Return) { // panic("mock out the GetClockOffsets method") // }, // GetComputeInstanceIdFunc: func() (int, nvml.Return) { // panic("mock out the GetComputeInstanceId method") // }, // GetComputeModeFunc: func() (nvml.ComputeMode, nvml.Return) { // panic("mock out the GetComputeMode method") // }, // GetComputeRunningProcessesFunc: func() ([]nvml.ProcessInfo, nvml.Return) { // panic("mock out the GetComputeRunningProcesses method") // }, // GetConfComputeGpuAttestationReportFunc: func(confComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport) nvml.Return { // panic("mock out the GetConfComputeGpuAttestationReport method") // }, // GetConfComputeGpuCertificateFunc: func() (nvml.ConfComputeGpuCertificate, nvml.Return) { // panic("mock out the GetConfComputeGpuCertificate method") // }, // GetConfComputeMemSizeInfoFunc: func() (nvml.ConfComputeMemSizeInfo, nvml.Return) { // panic("mock out the GetConfComputeMemSizeInfo method") // }, // GetConfComputeProtectedMemoryUsageFunc: func() (nvml.Memory, nvml.Return) { // panic("mock out the GetConfComputeProtectedMemoryUsage method") // }, // GetCoolerInfoFunc: func() (nvml.CoolerInfo, nvml.Return) { // panic("mock out the GetCoolerInfo method") // }, // GetCpuAffinityFunc: func(n int) ([]uint, nvml.Return) { // panic("mock out the GetCpuAffinity method") // }, // GetCpuAffinityWithinScopeFunc: func(n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { // panic("mock out the GetCpuAffinityWithinScope method") // }, // GetCreatableVgpusFunc: func() ([]nvml.VgpuTypeId, nvml.Return) { // panic("mock out the GetCreatableVgpus method") // }, // GetCudaComputeCapabilityFunc: func() (int, int, nvml.Return) { // panic("mock out the GetCudaComputeCapability method") // }, // GetCurrPcieLinkGenerationFunc: func() (int, nvml.Return) { // panic("mock out the GetCurrPcieLinkGeneration method") // }, // GetCurrPcieLinkWidthFunc: func() (int, nvml.Return) { // panic("mock out the GetCurrPcieLinkWidth method") // }, // GetCurrentClockFreqsFunc: func() (nvml.DeviceCurrentClockFreqs, nvml.Return) { // panic("mock out the GetCurrentClockFreqs method") // }, // GetCurrentClocksEventReasonsFunc: func() (uint64, nvml.Return) { // panic("mock out the GetCurrentClocksEventReasons method") // }, // GetCurrentClocksThrottleReasonsFunc: func() (uint64, nvml.Return) { // panic("mock out the GetCurrentClocksThrottleReasons method") // }, // GetDecoderUtilizationFunc: func() (uint32, uint32, nvml.Return) { // panic("mock out the GetDecoderUtilization method") // }, // GetDefaultApplicationsClockFunc: func(clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the GetDefaultApplicationsClock method") // }, // GetDefaultEccModeFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetDefaultEccMode method") // }, // GetDetailedEccErrorsFunc: func(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (nvml.EccErrorCounts, nvml.Return) { // panic("mock out the GetDetailedEccErrors method") // }, // GetDeviceHandleFromMigDeviceHandleFunc: func() (nvml.Device, nvml.Return) { // panic("mock out the GetDeviceHandleFromMigDeviceHandle method") // }, // GetDisplayActiveFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetDisplayActive method") // }, // GetDisplayModeFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetDisplayMode method") // }, // GetDramEncryptionModeFunc: func() (nvml.DramEncryptionInfo, nvml.DramEncryptionInfo, nvml.Return) { // panic("mock out the GetDramEncryptionMode method") // }, // GetDriverModelFunc: func() (nvml.DriverModel, nvml.DriverModel, nvml.Return) { // panic("mock out the GetDriverModel method") // }, // GetDriverModel_v2Func: func() (nvml.DriverModel, nvml.DriverModel, nvml.Return) { // panic("mock out the GetDriverModel_v2 method") // }, // GetDynamicPstatesInfoFunc: func() (nvml.GpuDynamicPstatesInfo, nvml.Return) { // panic("mock out the GetDynamicPstatesInfo method") // }, // GetEccModeFunc: func() (nvml.EnableState, nvml.EnableState, nvml.Return) { // panic("mock out the GetEccMode method") // }, // GetEncoderCapacityFunc: func(encoderType nvml.EncoderType) (int, nvml.Return) { // panic("mock out the GetEncoderCapacity method") // }, // GetEncoderSessionsFunc: func() ([]nvml.EncoderSessionInfo, nvml.Return) { // panic("mock out the GetEncoderSessions method") // }, // GetEncoderStatsFunc: func() (int, uint32, uint32, nvml.Return) { // panic("mock out the GetEncoderStats method") // }, // GetEncoderUtilizationFunc: func() (uint32, uint32, nvml.Return) { // panic("mock out the GetEncoderUtilization method") // }, // GetEnforcedPowerLimitFunc: func() (uint32, nvml.Return) { // panic("mock out the GetEnforcedPowerLimit method") // }, // GetFBCSessionsFunc: func() ([]nvml.FBCSessionInfo, nvml.Return) { // panic("mock out the GetFBCSessions method") // }, // GetFBCStatsFunc: func() (nvml.FBCStats, nvml.Return) { // panic("mock out the GetFBCStats method") // }, // GetFanControlPolicy_v2Func: func(n int) (nvml.FanControlPolicy, nvml.Return) { // panic("mock out the GetFanControlPolicy_v2 method") // }, // GetFanSpeedFunc: func() (uint32, nvml.Return) { // panic("mock out the GetFanSpeed method") // }, // GetFanSpeedRPMFunc: func() (nvml.FanSpeedInfo, nvml.Return) { // panic("mock out the GetFanSpeedRPM method") // }, // GetFanSpeed_v2Func: func(n int) (uint32, nvml.Return) { // panic("mock out the GetFanSpeed_v2 method") // }, // GetFieldValuesFunc: func(fieldValues []nvml.FieldValue) nvml.Return { // panic("mock out the GetFieldValues method") // }, // GetGpcClkMinMaxVfOffsetFunc: func() (int, int, nvml.Return) { // panic("mock out the GetGpcClkMinMaxVfOffset method") // }, // GetGpcClkVfOffsetFunc: func() (int, nvml.Return) { // panic("mock out the GetGpcClkVfOffset method") // }, // GetGpuFabricInfoFunc: func() (nvml.GpuFabricInfo, nvml.Return) { // panic("mock out the GetGpuFabricInfo method") // }, // GetGpuFabricInfoVFunc: func() nvml.GpuFabricInfoHandler { // panic("mock out the GetGpuFabricInfoV method") // }, // GetGpuInstanceByIdFunc: func(n int) (nvml.GpuInstance, nvml.Return) { // panic("mock out the GetGpuInstanceById method") // }, // GetGpuInstanceIdFunc: func() (int, nvml.Return) { // panic("mock out the GetGpuInstanceId method") // }, // GetGpuInstancePossiblePlacementsFunc: func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstancePlacement, nvml.Return) { // panic("mock out the GetGpuInstancePossiblePlacements method") // }, // GetGpuInstanceProfileInfoFunc: func(n int) (nvml.GpuInstanceProfileInfo, nvml.Return) { // panic("mock out the GetGpuInstanceProfileInfo method") // }, // GetGpuInstanceProfileInfoByIdVFunc: func(n int) nvml.GpuInstanceProfileInfoByIdHandler { // panic("mock out the GetGpuInstanceProfileInfoByIdV method") // }, // GetGpuInstanceProfileInfoVFunc: func(n int) nvml.GpuInstanceProfileInfoHandler { // panic("mock out the GetGpuInstanceProfileInfoV method") // }, // GetGpuInstanceRemainingCapacityFunc: func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (int, nvml.Return) { // panic("mock out the GetGpuInstanceRemainingCapacity method") // }, // GetGpuInstancesFunc: func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstance, nvml.Return) { // panic("mock out the GetGpuInstances method") // }, // GetGpuMaxPcieLinkGenerationFunc: func() (int, nvml.Return) { // panic("mock out the GetGpuMaxPcieLinkGeneration method") // }, // GetGpuOperationModeFunc: func() (nvml.GpuOperationMode, nvml.GpuOperationMode, nvml.Return) { // panic("mock out the GetGpuOperationMode method") // }, // GetGraphicsRunningProcessesFunc: func() ([]nvml.ProcessInfo, nvml.Return) { // panic("mock out the GetGraphicsRunningProcesses method") // }, // GetGridLicensableFeaturesFunc: func() (nvml.GridLicensableFeatures, nvml.Return) { // panic("mock out the GetGridLicensableFeatures method") // }, // GetGspFirmwareModeFunc: func() (bool, bool, nvml.Return) { // panic("mock out the GetGspFirmwareMode method") // }, // GetGspFirmwareVersionFunc: func() (string, nvml.Return) { // panic("mock out the GetGspFirmwareVersion method") // }, // GetHostVgpuModeFunc: func() (nvml.HostVgpuMode, nvml.Return) { // panic("mock out the GetHostVgpuMode method") // }, // GetIndexFunc: func() (int, nvml.Return) { // panic("mock out the GetIndex method") // }, // GetInforomConfigurationChecksumFunc: func() (uint32, nvml.Return) { // panic("mock out the GetInforomConfigurationChecksum method") // }, // GetInforomImageVersionFunc: func() (string, nvml.Return) { // panic("mock out the GetInforomImageVersion method") // }, // GetInforomVersionFunc: func(inforomObject nvml.InforomObject) (string, nvml.Return) { // panic("mock out the GetInforomVersion method") // }, // GetIrqNumFunc: func() (int, nvml.Return) { // panic("mock out the GetIrqNum method") // }, // GetJpgUtilizationFunc: func() (uint32, uint32, nvml.Return) { // panic("mock out the GetJpgUtilization method") // }, // GetLastBBXFlushTimeFunc: func() (uint64, uint, nvml.Return) { // panic("mock out the GetLastBBXFlushTime method") // }, // GetMPSComputeRunningProcessesFunc: func() ([]nvml.ProcessInfo, nvml.Return) { // panic("mock out the GetMPSComputeRunningProcesses method") // }, // GetMarginTemperatureFunc: func() (nvml.MarginTemperature, nvml.Return) { // panic("mock out the GetMarginTemperature method") // }, // GetMaxClockInfoFunc: func(clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the GetMaxClockInfo method") // }, // GetMaxCustomerBoostClockFunc: func(clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the GetMaxCustomerBoostClock method") // }, // GetMaxMigDeviceCountFunc: func() (int, nvml.Return) { // panic("mock out the GetMaxMigDeviceCount method") // }, // GetMaxPcieLinkGenerationFunc: func() (int, nvml.Return) { // panic("mock out the GetMaxPcieLinkGeneration method") // }, // GetMaxPcieLinkWidthFunc: func() (int, nvml.Return) { // panic("mock out the GetMaxPcieLinkWidth method") // }, // GetMemClkMinMaxVfOffsetFunc: func() (int, int, nvml.Return) { // panic("mock out the GetMemClkMinMaxVfOffset method") // }, // GetMemClkVfOffsetFunc: func() (int, nvml.Return) { // panic("mock out the GetMemClkVfOffset method") // }, // GetMemoryAffinityFunc: func(n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { // panic("mock out the GetMemoryAffinity method") // }, // GetMemoryBusWidthFunc: func() (uint32, nvml.Return) { // panic("mock out the GetMemoryBusWidth method") // }, // GetMemoryErrorCounterFunc: func(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType, memoryLocation nvml.MemoryLocation) (uint64, nvml.Return) { // panic("mock out the GetMemoryErrorCounter method") // }, // GetMemoryInfoFunc: func() (nvml.Memory, nvml.Return) { // panic("mock out the GetMemoryInfo method") // }, // GetMemoryInfo_v2Func: func() (nvml.Memory_v2, nvml.Return) { // panic("mock out the GetMemoryInfo_v2 method") // }, // GetMigDeviceHandleByIndexFunc: func(n int) (nvml.Device, nvml.Return) { // panic("mock out the GetMigDeviceHandleByIndex method") // }, // GetMigModeFunc: func() (int, int, nvml.Return) { // panic("mock out the GetMigMode method") // }, // GetMinMaxClockOfPStateFunc: func(clockType nvml.ClockType, pstates nvml.Pstates) (uint32, uint32, nvml.Return) { // panic("mock out the GetMinMaxClockOfPState method") // }, // GetMinMaxFanSpeedFunc: func() (int, int, nvml.Return) { // panic("mock out the GetMinMaxFanSpeed method") // }, // GetMinorNumberFunc: func() (int, nvml.Return) { // panic("mock out the GetMinorNumber method") // }, // GetModuleIdFunc: func() (int, nvml.Return) { // panic("mock out the GetModuleId method") // }, // GetMultiGpuBoardFunc: func() (int, nvml.Return) { // panic("mock out the GetMultiGpuBoard method") // }, // GetNameFunc: func() (string, nvml.Return) { // panic("mock out the GetName method") // }, // GetNumFansFunc: func() (int, nvml.Return) { // panic("mock out the GetNumFans method") // }, // GetNumGpuCoresFunc: func() (int, nvml.Return) { // panic("mock out the GetNumGpuCores method") // }, // GetNumaNodeIdFunc: func() (int, nvml.Return) { // panic("mock out the GetNumaNodeId method") // }, // GetNvLinkCapabilityFunc: func(n int, nvLinkCapability nvml.NvLinkCapability) (uint32, nvml.Return) { // panic("mock out the GetNvLinkCapability method") // }, // GetNvLinkErrorCounterFunc: func(n int, nvLinkErrorCounter nvml.NvLinkErrorCounter) (uint64, nvml.Return) { // panic("mock out the GetNvLinkErrorCounter method") // }, // GetNvLinkInfoFunc: func() nvml.NvLinkInfoHandler { // panic("mock out the GetNvLinkInfo method") // }, // GetNvLinkRemoteDeviceTypeFunc: func(n int) (nvml.IntNvLinkDeviceType, nvml.Return) { // panic("mock out the GetNvLinkRemoteDeviceType method") // }, // GetNvLinkRemotePciInfoFunc: func(n int) (nvml.PciInfo, nvml.Return) { // panic("mock out the GetNvLinkRemotePciInfo method") // }, // GetNvLinkStateFunc: func(n int) (nvml.EnableState, nvml.Return) { // panic("mock out the GetNvLinkState method") // }, // GetNvLinkUtilizationControlFunc: func(n1 int, n2 int) (nvml.NvLinkUtilizationControl, nvml.Return) { // panic("mock out the GetNvLinkUtilizationControl method") // }, // GetNvLinkUtilizationCounterFunc: func(n1 int, n2 int) (uint64, uint64, nvml.Return) { // panic("mock out the GetNvLinkUtilizationCounter method") // }, // GetNvLinkVersionFunc: func(n int) (uint32, nvml.Return) { // panic("mock out the GetNvLinkVersion method") // }, // GetNvlinkBwModeFunc: func() (nvml.NvlinkGetBwMode, nvml.Return) { // panic("mock out the GetNvlinkBwMode method") // }, // GetNvlinkSupportedBwModesFunc: func() (nvml.NvlinkSupportedBwModes, nvml.Return) { // panic("mock out the GetNvlinkSupportedBwModes method") // }, // GetOfaUtilizationFunc: func() (uint32, uint32, nvml.Return) { // panic("mock out the GetOfaUtilization method") // }, // GetP2PStatusFunc: func(device nvml.Device, gpuP2PCapsIndex nvml.GpuP2PCapsIndex) (nvml.GpuP2PStatus, nvml.Return) { // panic("mock out the GetP2PStatus method") // }, // GetPciInfoFunc: func() (nvml.PciInfo, nvml.Return) { // panic("mock out the GetPciInfo method") // }, // GetPciInfoExtFunc: func() (nvml.PciInfoExt, nvml.Return) { // panic("mock out the GetPciInfoExt method") // }, // GetPcieLinkMaxSpeedFunc: func() (uint32, nvml.Return) { // panic("mock out the GetPcieLinkMaxSpeed method") // }, // GetPcieReplayCounterFunc: func() (int, nvml.Return) { // panic("mock out the GetPcieReplayCounter method") // }, // GetPcieSpeedFunc: func() (int, nvml.Return) { // panic("mock out the GetPcieSpeed method") // }, // GetPcieThroughputFunc: func(pcieUtilCounter nvml.PcieUtilCounter) (uint32, nvml.Return) { // panic("mock out the GetPcieThroughput method") // }, // GetPdiFunc: func() (nvml.Pdi, nvml.Return) { // panic("mock out the GetPdi method") // }, // GetPerformanceModesFunc: func() (nvml.DevicePerfModes, nvml.Return) { // panic("mock out the GetPerformanceModes method") // }, // GetPerformanceStateFunc: func() (nvml.Pstates, nvml.Return) { // panic("mock out the GetPerformanceState method") // }, // GetPersistenceModeFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetPersistenceMode method") // }, // GetPgpuMetadataStringFunc: func() (string, nvml.Return) { // panic("mock out the GetPgpuMetadataString method") // }, // GetPlatformInfoFunc: func() (nvml.PlatformInfo, nvml.Return) { // panic("mock out the GetPlatformInfo method") // }, // GetPowerManagementDefaultLimitFunc: func() (uint32, nvml.Return) { // panic("mock out the GetPowerManagementDefaultLimit method") // }, // GetPowerManagementLimitFunc: func() (uint32, nvml.Return) { // panic("mock out the GetPowerManagementLimit method") // }, // GetPowerManagementLimitConstraintsFunc: func() (uint32, uint32, nvml.Return) { // panic("mock out the GetPowerManagementLimitConstraints method") // }, // GetPowerManagementModeFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetPowerManagementMode method") // }, // GetPowerMizerMode_v1Func: func() (nvml.DevicePowerMizerModes_v1, nvml.Return) { // panic("mock out the GetPowerMizerMode_v1 method") // }, // GetPowerSourceFunc: func() (nvml.PowerSource, nvml.Return) { // panic("mock out the GetPowerSource method") // }, // GetPowerStateFunc: func() (nvml.Pstates, nvml.Return) { // panic("mock out the GetPowerState method") // }, // GetPowerUsageFunc: func() (uint32, nvml.Return) { // panic("mock out the GetPowerUsage method") // }, // GetProcessUtilizationFunc: func(v uint64) ([]nvml.ProcessUtilizationSample, nvml.Return) { // panic("mock out the GetProcessUtilization method") // }, // GetProcessesUtilizationInfoFunc: func() (nvml.ProcessesUtilizationInfo, nvml.Return) { // panic("mock out the GetProcessesUtilizationInfo method") // }, // GetRemappedRowsFunc: func() (int, int, bool, bool, nvml.Return) { // panic("mock out the GetRemappedRows method") // }, // GetRepairStatusFunc: func() (nvml.RepairStatus, nvml.Return) { // panic("mock out the GetRepairStatus method") // }, // GetRetiredPagesFunc: func(pageRetirementCause nvml.PageRetirementCause) ([]uint64, nvml.Return) { // panic("mock out the GetRetiredPages method") // }, // GetRetiredPagesPendingStatusFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetRetiredPagesPendingStatus method") // }, // GetRetiredPages_v2Func: func(pageRetirementCause nvml.PageRetirementCause) ([]uint64, []uint64, nvml.Return) { // panic("mock out the GetRetiredPages_v2 method") // }, // GetRowRemapperHistogramFunc: func() (nvml.RowRemapperHistogramValues, nvml.Return) { // panic("mock out the GetRowRemapperHistogram method") // }, // GetRunningProcessDetailListFunc: func() (nvml.ProcessDetailList, nvml.Return) { // panic("mock out the GetRunningProcessDetailList method") // }, // GetSamplesFunc: func(samplingType nvml.SamplingType, v uint64) (nvml.ValueType, []nvml.Sample, nvml.Return) { // panic("mock out the GetSamples method") // }, // GetSerialFunc: func() (string, nvml.Return) { // panic("mock out the GetSerial method") // }, // GetSramEccErrorStatusFunc: func() (nvml.EccSramErrorStatus, nvml.Return) { // panic("mock out the GetSramEccErrorStatus method") // }, // GetSramUniqueUncorrectedEccErrorCountsFunc: func(eccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts) nvml.Return { // panic("mock out the GetSramUniqueUncorrectedEccErrorCounts method") // }, // GetSupportedClocksEventReasonsFunc: func() (uint64, nvml.Return) { // panic("mock out the GetSupportedClocksEventReasons method") // }, // GetSupportedClocksThrottleReasonsFunc: func() (uint64, nvml.Return) { // panic("mock out the GetSupportedClocksThrottleReasons method") // }, // GetSupportedEventTypesFunc: func() (uint64, nvml.Return) { // panic("mock out the GetSupportedEventTypes method") // }, // GetSupportedGraphicsClocksFunc: func(n int) (int, uint32, nvml.Return) { // panic("mock out the GetSupportedGraphicsClocks method") // }, // GetSupportedMemoryClocksFunc: func() (int, uint32, nvml.Return) { // panic("mock out the GetSupportedMemoryClocks method") // }, // GetSupportedPerformanceStatesFunc: func() ([]nvml.Pstates, nvml.Return) { // panic("mock out the GetSupportedPerformanceStates method") // }, // GetSupportedVgpusFunc: func() ([]nvml.VgpuTypeId, nvml.Return) { // panic("mock out the GetSupportedVgpus method") // }, // GetTargetFanSpeedFunc: func(n int) (int, nvml.Return) { // panic("mock out the GetTargetFanSpeed method") // }, // GetTemperatureFunc: func(temperatureSensors nvml.TemperatureSensors) (uint32, nvml.Return) { // panic("mock out the GetTemperature method") // }, // GetTemperatureThresholdFunc: func(temperatureThresholds nvml.TemperatureThresholds) (uint32, nvml.Return) { // panic("mock out the GetTemperatureThreshold method") // }, // GetTemperatureVFunc: func() nvml.TemperatureHandler { // panic("mock out the GetTemperatureV method") // }, // GetThermalSettingsFunc: func(v uint32) (nvml.GpuThermalSettings, nvml.Return) { // panic("mock out the GetThermalSettings method") // }, // GetTopologyCommonAncestorFunc: func(device nvml.Device) (nvml.GpuTopologyLevel, nvml.Return) { // panic("mock out the GetTopologyCommonAncestor method") // }, // GetTopologyNearestGpusFunc: func(gpuTopologyLevel nvml.GpuTopologyLevel) ([]nvml.Device, nvml.Return) { // panic("mock out the GetTopologyNearestGpus method") // }, // GetTotalEccErrorsFunc: func(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (uint64, nvml.Return) { // panic("mock out the GetTotalEccErrors method") // }, // GetTotalEnergyConsumptionFunc: func() (uint64, nvml.Return) { // panic("mock out the GetTotalEnergyConsumption method") // }, // GetUUIDFunc: func() (string, nvml.Return) { // panic("mock out the GetUUID method") // }, // GetUtilizationRatesFunc: func() (nvml.Utilization, nvml.Return) { // panic("mock out the GetUtilizationRates method") // }, // GetVbiosVersionFunc: func() (string, nvml.Return) { // panic("mock out the GetVbiosVersion method") // }, // GetVgpuCapabilitiesFunc: func(deviceVgpuCapability nvml.DeviceVgpuCapability) (bool, nvml.Return) { // panic("mock out the GetVgpuCapabilities method") // }, // GetVgpuHeterogeneousModeFunc: func() (nvml.VgpuHeterogeneousMode, nvml.Return) { // panic("mock out the GetVgpuHeterogeneousMode method") // }, // GetVgpuInstancesUtilizationInfoFunc: func() (nvml.VgpuInstancesUtilizationInfo, nvml.Return) { // panic("mock out the GetVgpuInstancesUtilizationInfo method") // }, // GetVgpuMetadataFunc: func() (nvml.VgpuPgpuMetadata, nvml.Return) { // panic("mock out the GetVgpuMetadata method") // }, // GetVgpuProcessUtilizationFunc: func(v uint64) ([]nvml.VgpuProcessUtilizationSample, nvml.Return) { // panic("mock out the GetVgpuProcessUtilization method") // }, // GetVgpuProcessesUtilizationInfoFunc: func() (nvml.VgpuProcessesUtilizationInfo, nvml.Return) { // panic("mock out the GetVgpuProcessesUtilizationInfo method") // }, // GetVgpuSchedulerCapabilitiesFunc: func() (nvml.VgpuSchedulerCapabilities, nvml.Return) { // panic("mock out the GetVgpuSchedulerCapabilities method") // }, // GetVgpuSchedulerLogFunc: func() (nvml.VgpuSchedulerLog, nvml.Return) { // panic("mock out the GetVgpuSchedulerLog method") // }, // GetVgpuSchedulerStateFunc: func() (nvml.VgpuSchedulerGetState, nvml.Return) { // panic("mock out the GetVgpuSchedulerState method") // }, // GetVgpuTypeCreatablePlacementsFunc: func(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { // panic("mock out the GetVgpuTypeCreatablePlacements method") // }, // GetVgpuTypeSupportedPlacementsFunc: func(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { // panic("mock out the GetVgpuTypeSupportedPlacements method") // }, // GetVgpuUtilizationFunc: func(v uint64) (nvml.ValueType, []nvml.VgpuInstanceUtilizationSample, nvml.Return) { // panic("mock out the GetVgpuUtilization method") // }, // GetViolationStatusFunc: func(perfPolicyType nvml.PerfPolicyType) (nvml.ViolationTime, nvml.Return) { // panic("mock out the GetViolationStatus method") // }, // GetVirtualizationModeFunc: func() (nvml.GpuVirtualizationMode, nvml.Return) { // panic("mock out the GetVirtualizationMode method") // }, // GpmMigSampleGetFunc: func(n int, gpmSample nvml.GpmSample) nvml.Return { // panic("mock out the GpmMigSampleGet method") // }, // GpmQueryDeviceSupportFunc: func() (nvml.GpmSupport, nvml.Return) { // panic("mock out the GpmQueryDeviceSupport method") // }, // GpmQueryDeviceSupportVFunc: func() nvml.GpmSupportV { // panic("mock out the GpmQueryDeviceSupportV method") // }, // GpmQueryIfStreamingEnabledFunc: func() (uint32, nvml.Return) { // panic("mock out the GpmQueryIfStreamingEnabled method") // }, // GpmSampleGetFunc: func(gpmSample nvml.GpmSample) nvml.Return { // panic("mock out the GpmSampleGet method") // }, // GpmSetStreamingEnabledFunc: func(v uint32) nvml.Return { // panic("mock out the GpmSetStreamingEnabled method") // }, // IsMigDeviceHandleFunc: func() (bool, nvml.Return) { // panic("mock out the IsMigDeviceHandle method") // }, // OnSameBoardFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the OnSameBoard method") // }, // PowerSmoothingActivatePresetProfileFunc: func(powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { // panic("mock out the PowerSmoothingActivatePresetProfile method") // }, // PowerSmoothingSetStateFunc: func(powerSmoothingState *nvml.PowerSmoothingState) nvml.Return { // panic("mock out the PowerSmoothingSetState method") // }, // PowerSmoothingUpdatePresetProfileParamFunc: func(powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { // panic("mock out the PowerSmoothingUpdatePresetProfileParam method") // }, // ReadWritePRM_v1Func: func(pRMTLV_v1 *nvml.PRMTLV_v1) nvml.Return { // panic("mock out the ReadWritePRM_v1 method") // }, // RegisterEventsFunc: func(v uint64, eventSet nvml.EventSet) nvml.Return { // panic("mock out the RegisterEvents method") // }, // ResetApplicationsClocksFunc: func() nvml.Return { // panic("mock out the ResetApplicationsClocks method") // }, // ResetGpuLockedClocksFunc: func() nvml.Return { // panic("mock out the ResetGpuLockedClocks method") // }, // ResetMemoryLockedClocksFunc: func() nvml.Return { // panic("mock out the ResetMemoryLockedClocks method") // }, // ResetNvLinkErrorCountersFunc: func(n int) nvml.Return { // panic("mock out the ResetNvLinkErrorCounters method") // }, // ResetNvLinkUtilizationCounterFunc: func(n1 int, n2 int) nvml.Return { // panic("mock out the ResetNvLinkUtilizationCounter method") // }, // SetAPIRestrictionFunc: func(restrictedAPI nvml.RestrictedAPI, enableState nvml.EnableState) nvml.Return { // panic("mock out the SetAPIRestriction method") // }, // SetAccountingModeFunc: func(enableState nvml.EnableState) nvml.Return { // panic("mock out the SetAccountingMode method") // }, // SetApplicationsClocksFunc: func(v1 uint32, v2 uint32) nvml.Return { // panic("mock out the SetApplicationsClocks method") // }, // SetAutoBoostedClocksEnabledFunc: func(enableState nvml.EnableState) nvml.Return { // panic("mock out the SetAutoBoostedClocksEnabled method") // }, // SetClockOffsetsFunc: func(clockOffset nvml.ClockOffset) nvml.Return { // panic("mock out the SetClockOffsets method") // }, // SetComputeModeFunc: func(computeMode nvml.ComputeMode) nvml.Return { // panic("mock out the SetComputeMode method") // }, // SetConfComputeUnprotectedMemSizeFunc: func(v uint64) nvml.Return { // panic("mock out the SetConfComputeUnprotectedMemSize method") // }, // SetCpuAffinityFunc: func() nvml.Return { // panic("mock out the SetCpuAffinity method") // }, // SetDefaultAutoBoostedClocksEnabledFunc: func(enableState nvml.EnableState, v uint32) nvml.Return { // panic("mock out the SetDefaultAutoBoostedClocksEnabled method") // }, // SetDefaultFanSpeed_v2Func: func(n int) nvml.Return { // panic("mock out the SetDefaultFanSpeed_v2 method") // }, // SetDramEncryptionModeFunc: func(dramEncryptionInfo *nvml.DramEncryptionInfo) nvml.Return { // panic("mock out the SetDramEncryptionMode method") // }, // SetDriverModelFunc: func(driverModel nvml.DriverModel, v uint32) nvml.Return { // panic("mock out the SetDriverModel method") // }, // SetEccModeFunc: func(enableState nvml.EnableState) nvml.Return { // panic("mock out the SetEccMode method") // }, // SetFanControlPolicyFunc: func(n int, fanControlPolicy nvml.FanControlPolicy) nvml.Return { // panic("mock out the SetFanControlPolicy method") // }, // SetFanSpeed_v2Func: func(n1 int, n2 int) nvml.Return { // panic("mock out the SetFanSpeed_v2 method") // }, // SetGpcClkVfOffsetFunc: func(n int) nvml.Return { // panic("mock out the SetGpcClkVfOffset method") // }, // SetGpuLockedClocksFunc: func(v1 uint32, v2 uint32) nvml.Return { // panic("mock out the SetGpuLockedClocks method") // }, // SetGpuOperationModeFunc: func(gpuOperationMode nvml.GpuOperationMode) nvml.Return { // panic("mock out the SetGpuOperationMode method") // }, // SetMemClkVfOffsetFunc: func(n int) nvml.Return { // panic("mock out the SetMemClkVfOffset method") // }, // SetMemoryLockedClocksFunc: func(v1 uint32, v2 uint32) nvml.Return { // panic("mock out the SetMemoryLockedClocks method") // }, // SetMigModeFunc: func(n int) (nvml.Return, nvml.Return) { // panic("mock out the SetMigMode method") // }, // SetNvLinkDeviceLowPowerThresholdFunc: func(nvLinkPowerThres *nvml.NvLinkPowerThres) nvml.Return { // panic("mock out the SetNvLinkDeviceLowPowerThreshold method") // }, // SetNvLinkUtilizationControlFunc: func(n1 int, n2 int, nvLinkUtilizationControl *nvml.NvLinkUtilizationControl, b bool) nvml.Return { // panic("mock out the SetNvLinkUtilizationControl method") // }, // SetNvlinkBwModeFunc: func(nvlinkSetBwMode *nvml.NvlinkSetBwMode) nvml.Return { // panic("mock out the SetNvlinkBwMode method") // }, // SetPersistenceModeFunc: func(enableState nvml.EnableState) nvml.Return { // panic("mock out the SetPersistenceMode method") // }, // SetPowerManagementLimitFunc: func(v uint32) nvml.Return { // panic("mock out the SetPowerManagementLimit method") // }, // SetPowerManagementLimit_v2Func: func(powerValue_v2 *nvml.PowerValue_v2) nvml.Return { // panic("mock out the SetPowerManagementLimit_v2 method") // }, // SetTemperatureThresholdFunc: func(temperatureThresholds nvml.TemperatureThresholds, n int) nvml.Return { // panic("mock out the SetTemperatureThreshold method") // }, // SetVgpuCapabilitiesFunc: func(deviceVgpuCapability nvml.DeviceVgpuCapability, enableState nvml.EnableState) nvml.Return { // panic("mock out the SetVgpuCapabilities method") // }, // SetVgpuHeterogeneousModeFunc: func(vgpuHeterogeneousMode nvml.VgpuHeterogeneousMode) nvml.Return { // panic("mock out the SetVgpuHeterogeneousMode method") // }, // SetVgpuSchedulerStateFunc: func(vgpuSchedulerSetState *nvml.VgpuSchedulerSetState) nvml.Return { // panic("mock out the SetVgpuSchedulerState method") // }, // SetVirtualizationModeFunc: func(gpuVirtualizationMode nvml.GpuVirtualizationMode) nvml.Return { // panic("mock out the SetVirtualizationMode method") // }, // ValidateInforomFunc: func() nvml.Return { // panic("mock out the ValidateInforom method") // }, // VgpuTypeGetMaxInstancesFunc: func(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { // panic("mock out the VgpuTypeGetMaxInstances method") // }, // WorkloadPowerProfileClearRequestedProfilesFunc: func(workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { // panic("mock out the WorkloadPowerProfileClearRequestedProfiles method") // }, // WorkloadPowerProfileGetCurrentProfilesFunc: func() (nvml.WorkloadPowerProfileCurrentProfiles, nvml.Return) { // panic("mock out the WorkloadPowerProfileGetCurrentProfiles method") // }, // WorkloadPowerProfileGetProfilesInfoFunc: func() (nvml.WorkloadPowerProfileProfilesInfo, nvml.Return) { // panic("mock out the WorkloadPowerProfileGetProfilesInfo method") // }, // WorkloadPowerProfileSetRequestedProfilesFunc: func(workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { // panic("mock out the WorkloadPowerProfileSetRequestedProfiles method") // }, // } // // // use mockedDevice in code that requires nvml.Device // // and then make assertions. // // } type Device struct { // ClearAccountingPidsFunc mocks the ClearAccountingPids method. ClearAccountingPidsFunc func() nvml.Return // ClearCpuAffinityFunc mocks the ClearCpuAffinity method. ClearCpuAffinityFunc func() nvml.Return // ClearEccErrorCountsFunc mocks the ClearEccErrorCounts method. ClearEccErrorCountsFunc func(eccCounterType nvml.EccCounterType) nvml.Return // ClearFieldValuesFunc mocks the ClearFieldValues method. ClearFieldValuesFunc func(fieldValues []nvml.FieldValue) nvml.Return // CreateGpuInstanceFunc mocks the CreateGpuInstance method. CreateGpuInstanceFunc func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (nvml.GpuInstance, nvml.Return) // CreateGpuInstanceWithPlacementFunc mocks the CreateGpuInstanceWithPlacement method. CreateGpuInstanceWithPlacementFunc func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo, gpuInstancePlacement *nvml.GpuInstancePlacement) (nvml.GpuInstance, nvml.Return) // FreezeNvLinkUtilizationCounterFunc mocks the FreezeNvLinkUtilizationCounter method. FreezeNvLinkUtilizationCounterFunc func(n1 int, n2 int, enableState nvml.EnableState) nvml.Return // GetAPIRestrictionFunc mocks the GetAPIRestriction method. GetAPIRestrictionFunc func(restrictedAPI nvml.RestrictedAPI) (nvml.EnableState, nvml.Return) // GetAccountingBufferSizeFunc mocks the GetAccountingBufferSize method. GetAccountingBufferSizeFunc func() (int, nvml.Return) // GetAccountingModeFunc mocks the GetAccountingMode method. GetAccountingModeFunc func() (nvml.EnableState, nvml.Return) // GetAccountingPidsFunc mocks the GetAccountingPids method. GetAccountingPidsFunc func() ([]int, nvml.Return) // GetAccountingStatsFunc mocks the GetAccountingStats method. GetAccountingStatsFunc func(v uint32) (nvml.AccountingStats, nvml.Return) // GetActiveVgpusFunc mocks the GetActiveVgpus method. GetActiveVgpusFunc func() ([]nvml.VgpuInstance, nvml.Return) // GetAdaptiveClockInfoStatusFunc mocks the GetAdaptiveClockInfoStatus method. GetAdaptiveClockInfoStatusFunc func() (uint32, nvml.Return) // GetAddressingModeFunc mocks the GetAddressingMode method. GetAddressingModeFunc func() (nvml.DeviceAddressingMode, nvml.Return) // GetApplicationsClockFunc mocks the GetApplicationsClock method. GetApplicationsClockFunc func(clockType nvml.ClockType) (uint32, nvml.Return) // GetArchitectureFunc mocks the GetArchitecture method. GetArchitectureFunc func() (nvml.DeviceArchitecture, nvml.Return) // GetAttributesFunc mocks the GetAttributes method. GetAttributesFunc func() (nvml.DeviceAttributes, nvml.Return) // GetAutoBoostedClocksEnabledFunc mocks the GetAutoBoostedClocksEnabled method. GetAutoBoostedClocksEnabledFunc func() (nvml.EnableState, nvml.EnableState, nvml.Return) // GetBAR1MemoryInfoFunc mocks the GetBAR1MemoryInfo method. GetBAR1MemoryInfoFunc func() (nvml.BAR1Memory, nvml.Return) // GetBoardIdFunc mocks the GetBoardId method. GetBoardIdFunc func() (uint32, nvml.Return) // GetBoardPartNumberFunc mocks the GetBoardPartNumber method. GetBoardPartNumberFunc func() (string, nvml.Return) // GetBrandFunc mocks the GetBrand method. GetBrandFunc func() (nvml.BrandType, nvml.Return) // GetBridgeChipInfoFunc mocks the GetBridgeChipInfo method. GetBridgeChipInfoFunc func() (nvml.BridgeChipHierarchy, nvml.Return) // GetBusTypeFunc mocks the GetBusType method. GetBusTypeFunc func() (nvml.BusType, nvml.Return) // GetC2cModeInfoVFunc mocks the GetC2cModeInfoV method. GetC2cModeInfoVFunc func() nvml.C2cModeInfoHandler // GetCapabilitiesFunc mocks the GetCapabilities method. GetCapabilitiesFunc func() (nvml.DeviceCapabilities, nvml.Return) // GetClkMonStatusFunc mocks the GetClkMonStatus method. GetClkMonStatusFunc func() (nvml.ClkMonStatus, nvml.Return) // GetClockFunc mocks the GetClock method. GetClockFunc func(clockType nvml.ClockType, clockId nvml.ClockId) (uint32, nvml.Return) // GetClockInfoFunc mocks the GetClockInfo method. GetClockInfoFunc func(clockType nvml.ClockType) (uint32, nvml.Return) // GetClockOffsetsFunc mocks the GetClockOffsets method. GetClockOffsetsFunc func() (nvml.ClockOffset, nvml.Return) // GetComputeInstanceIdFunc mocks the GetComputeInstanceId method. GetComputeInstanceIdFunc func() (int, nvml.Return) // GetComputeModeFunc mocks the GetComputeMode method. GetComputeModeFunc func() (nvml.ComputeMode, nvml.Return) // GetComputeRunningProcessesFunc mocks the GetComputeRunningProcesses method. GetComputeRunningProcessesFunc func() ([]nvml.ProcessInfo, nvml.Return) // GetConfComputeGpuAttestationReportFunc mocks the GetConfComputeGpuAttestationReport method. GetConfComputeGpuAttestationReportFunc func(confComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport) nvml.Return // GetConfComputeGpuCertificateFunc mocks the GetConfComputeGpuCertificate method. GetConfComputeGpuCertificateFunc func() (nvml.ConfComputeGpuCertificate, nvml.Return) // GetConfComputeMemSizeInfoFunc mocks the GetConfComputeMemSizeInfo method. GetConfComputeMemSizeInfoFunc func() (nvml.ConfComputeMemSizeInfo, nvml.Return) // GetConfComputeProtectedMemoryUsageFunc mocks the GetConfComputeProtectedMemoryUsage method. GetConfComputeProtectedMemoryUsageFunc func() (nvml.Memory, nvml.Return) // GetCoolerInfoFunc mocks the GetCoolerInfo method. GetCoolerInfoFunc func() (nvml.CoolerInfo, nvml.Return) // GetCpuAffinityFunc mocks the GetCpuAffinity method. GetCpuAffinityFunc func(n int) ([]uint, nvml.Return) // GetCpuAffinityWithinScopeFunc mocks the GetCpuAffinityWithinScope method. GetCpuAffinityWithinScopeFunc func(n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) // GetCreatableVgpusFunc mocks the GetCreatableVgpus method. GetCreatableVgpusFunc func() ([]nvml.VgpuTypeId, nvml.Return) // GetCudaComputeCapabilityFunc mocks the GetCudaComputeCapability method. GetCudaComputeCapabilityFunc func() (int, int, nvml.Return) // GetCurrPcieLinkGenerationFunc mocks the GetCurrPcieLinkGeneration method. GetCurrPcieLinkGenerationFunc func() (int, nvml.Return) // GetCurrPcieLinkWidthFunc mocks the GetCurrPcieLinkWidth method. GetCurrPcieLinkWidthFunc func() (int, nvml.Return) // GetCurrentClockFreqsFunc mocks the GetCurrentClockFreqs method. GetCurrentClockFreqsFunc func() (nvml.DeviceCurrentClockFreqs, nvml.Return) // GetCurrentClocksEventReasonsFunc mocks the GetCurrentClocksEventReasons method. GetCurrentClocksEventReasonsFunc func() (uint64, nvml.Return) // GetCurrentClocksThrottleReasonsFunc mocks the GetCurrentClocksThrottleReasons method. GetCurrentClocksThrottleReasonsFunc func() (uint64, nvml.Return) // GetDecoderUtilizationFunc mocks the GetDecoderUtilization method. GetDecoderUtilizationFunc func() (uint32, uint32, nvml.Return) // GetDefaultApplicationsClockFunc mocks the GetDefaultApplicationsClock method. GetDefaultApplicationsClockFunc func(clockType nvml.ClockType) (uint32, nvml.Return) // GetDefaultEccModeFunc mocks the GetDefaultEccMode method. GetDefaultEccModeFunc func() (nvml.EnableState, nvml.Return) // GetDetailedEccErrorsFunc mocks the GetDetailedEccErrors method. GetDetailedEccErrorsFunc func(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (nvml.EccErrorCounts, nvml.Return) // GetDeviceHandleFromMigDeviceHandleFunc mocks the GetDeviceHandleFromMigDeviceHandle method. GetDeviceHandleFromMigDeviceHandleFunc func() (nvml.Device, nvml.Return) // GetDisplayActiveFunc mocks the GetDisplayActive method. GetDisplayActiveFunc func() (nvml.EnableState, nvml.Return) // GetDisplayModeFunc mocks the GetDisplayMode method. GetDisplayModeFunc func() (nvml.EnableState, nvml.Return) // GetDramEncryptionModeFunc mocks the GetDramEncryptionMode method. GetDramEncryptionModeFunc func() (nvml.DramEncryptionInfo, nvml.DramEncryptionInfo, nvml.Return) // GetDriverModelFunc mocks the GetDriverModel method. GetDriverModelFunc func() (nvml.DriverModel, nvml.DriverModel, nvml.Return) // GetDriverModel_v2Func mocks the GetDriverModel_v2 method. GetDriverModel_v2Func func() (nvml.DriverModel, nvml.DriverModel, nvml.Return) // GetDynamicPstatesInfoFunc mocks the GetDynamicPstatesInfo method. GetDynamicPstatesInfoFunc func() (nvml.GpuDynamicPstatesInfo, nvml.Return) // GetEccModeFunc mocks the GetEccMode method. GetEccModeFunc func() (nvml.EnableState, nvml.EnableState, nvml.Return) // GetEncoderCapacityFunc mocks the GetEncoderCapacity method. GetEncoderCapacityFunc func(encoderType nvml.EncoderType) (int, nvml.Return) // GetEncoderSessionsFunc mocks the GetEncoderSessions method. GetEncoderSessionsFunc func() ([]nvml.EncoderSessionInfo, nvml.Return) // GetEncoderStatsFunc mocks the GetEncoderStats method. GetEncoderStatsFunc func() (int, uint32, uint32, nvml.Return) // GetEncoderUtilizationFunc mocks the GetEncoderUtilization method. GetEncoderUtilizationFunc func() (uint32, uint32, nvml.Return) // GetEnforcedPowerLimitFunc mocks the GetEnforcedPowerLimit method. GetEnforcedPowerLimitFunc func() (uint32, nvml.Return) // GetFBCSessionsFunc mocks the GetFBCSessions method. GetFBCSessionsFunc func() ([]nvml.FBCSessionInfo, nvml.Return) // GetFBCStatsFunc mocks the GetFBCStats method. GetFBCStatsFunc func() (nvml.FBCStats, nvml.Return) // GetFanControlPolicy_v2Func mocks the GetFanControlPolicy_v2 method. GetFanControlPolicy_v2Func func(n int) (nvml.FanControlPolicy, nvml.Return) // GetFanSpeedFunc mocks the GetFanSpeed method. GetFanSpeedFunc func() (uint32, nvml.Return) // GetFanSpeedRPMFunc mocks the GetFanSpeedRPM method. GetFanSpeedRPMFunc func() (nvml.FanSpeedInfo, nvml.Return) // GetFanSpeed_v2Func mocks the GetFanSpeed_v2 method. GetFanSpeed_v2Func func(n int) (uint32, nvml.Return) // GetFieldValuesFunc mocks the GetFieldValues method. GetFieldValuesFunc func(fieldValues []nvml.FieldValue) nvml.Return // GetGpcClkMinMaxVfOffsetFunc mocks the GetGpcClkMinMaxVfOffset method. GetGpcClkMinMaxVfOffsetFunc func() (int, int, nvml.Return) // GetGpcClkVfOffsetFunc mocks the GetGpcClkVfOffset method. GetGpcClkVfOffsetFunc func() (int, nvml.Return) // GetGpuFabricInfoFunc mocks the GetGpuFabricInfo method. GetGpuFabricInfoFunc func() (nvml.GpuFabricInfo, nvml.Return) // GetGpuFabricInfoVFunc mocks the GetGpuFabricInfoV method. GetGpuFabricInfoVFunc func() nvml.GpuFabricInfoHandler // GetGpuInstanceByIdFunc mocks the GetGpuInstanceById method. GetGpuInstanceByIdFunc func(n int) (nvml.GpuInstance, nvml.Return) // GetGpuInstanceIdFunc mocks the GetGpuInstanceId method. GetGpuInstanceIdFunc func() (int, nvml.Return) // GetGpuInstancePossiblePlacementsFunc mocks the GetGpuInstancePossiblePlacements method. GetGpuInstancePossiblePlacementsFunc func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstancePlacement, nvml.Return) // GetGpuInstanceProfileInfoFunc mocks the GetGpuInstanceProfileInfo method. GetGpuInstanceProfileInfoFunc func(n int) (nvml.GpuInstanceProfileInfo, nvml.Return) // GetGpuInstanceProfileInfoByIdVFunc mocks the GetGpuInstanceProfileInfoByIdV method. GetGpuInstanceProfileInfoByIdVFunc func(n int) nvml.GpuInstanceProfileInfoByIdHandler // GetGpuInstanceProfileInfoVFunc mocks the GetGpuInstanceProfileInfoV method. GetGpuInstanceProfileInfoVFunc func(n int) nvml.GpuInstanceProfileInfoHandler // GetGpuInstanceRemainingCapacityFunc mocks the GetGpuInstanceRemainingCapacity method. GetGpuInstanceRemainingCapacityFunc func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (int, nvml.Return) // GetGpuInstancesFunc mocks the GetGpuInstances method. GetGpuInstancesFunc func(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstance, nvml.Return) // GetGpuMaxPcieLinkGenerationFunc mocks the GetGpuMaxPcieLinkGeneration method. GetGpuMaxPcieLinkGenerationFunc func() (int, nvml.Return) // GetGpuOperationModeFunc mocks the GetGpuOperationMode method. GetGpuOperationModeFunc func() (nvml.GpuOperationMode, nvml.GpuOperationMode, nvml.Return) // GetGraphicsRunningProcessesFunc mocks the GetGraphicsRunningProcesses method. GetGraphicsRunningProcessesFunc func() ([]nvml.ProcessInfo, nvml.Return) // GetGridLicensableFeaturesFunc mocks the GetGridLicensableFeatures method. GetGridLicensableFeaturesFunc func() (nvml.GridLicensableFeatures, nvml.Return) // GetGspFirmwareModeFunc mocks the GetGspFirmwareMode method. GetGspFirmwareModeFunc func() (bool, bool, nvml.Return) // GetGspFirmwareVersionFunc mocks the GetGspFirmwareVersion method. GetGspFirmwareVersionFunc func() (string, nvml.Return) // GetHostVgpuModeFunc mocks the GetHostVgpuMode method. GetHostVgpuModeFunc func() (nvml.HostVgpuMode, nvml.Return) // GetIndexFunc mocks the GetIndex method. GetIndexFunc func() (int, nvml.Return) // GetInforomConfigurationChecksumFunc mocks the GetInforomConfigurationChecksum method. GetInforomConfigurationChecksumFunc func() (uint32, nvml.Return) // GetInforomImageVersionFunc mocks the GetInforomImageVersion method. GetInforomImageVersionFunc func() (string, nvml.Return) // GetInforomVersionFunc mocks the GetInforomVersion method. GetInforomVersionFunc func(inforomObject nvml.InforomObject) (string, nvml.Return) // GetIrqNumFunc mocks the GetIrqNum method. GetIrqNumFunc func() (int, nvml.Return) // GetJpgUtilizationFunc mocks the GetJpgUtilization method. GetJpgUtilizationFunc func() (uint32, uint32, nvml.Return) // GetLastBBXFlushTimeFunc mocks the GetLastBBXFlushTime method. GetLastBBXFlushTimeFunc func() (uint64, uint, nvml.Return) // GetMPSComputeRunningProcessesFunc mocks the GetMPSComputeRunningProcesses method. GetMPSComputeRunningProcessesFunc func() ([]nvml.ProcessInfo, nvml.Return) // GetMarginTemperatureFunc mocks the GetMarginTemperature method. GetMarginTemperatureFunc func() (nvml.MarginTemperature, nvml.Return) // GetMaxClockInfoFunc mocks the GetMaxClockInfo method. GetMaxClockInfoFunc func(clockType nvml.ClockType) (uint32, nvml.Return) // GetMaxCustomerBoostClockFunc mocks the GetMaxCustomerBoostClock method. GetMaxCustomerBoostClockFunc func(clockType nvml.ClockType) (uint32, nvml.Return) // GetMaxMigDeviceCountFunc mocks the GetMaxMigDeviceCount method. GetMaxMigDeviceCountFunc func() (int, nvml.Return) // GetMaxPcieLinkGenerationFunc mocks the GetMaxPcieLinkGeneration method. GetMaxPcieLinkGenerationFunc func() (int, nvml.Return) // GetMaxPcieLinkWidthFunc mocks the GetMaxPcieLinkWidth method. GetMaxPcieLinkWidthFunc func() (int, nvml.Return) // GetMemClkMinMaxVfOffsetFunc mocks the GetMemClkMinMaxVfOffset method. GetMemClkMinMaxVfOffsetFunc func() (int, int, nvml.Return) // GetMemClkVfOffsetFunc mocks the GetMemClkVfOffset method. GetMemClkVfOffsetFunc func() (int, nvml.Return) // GetMemoryAffinityFunc mocks the GetMemoryAffinity method. GetMemoryAffinityFunc func(n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) // GetMemoryBusWidthFunc mocks the GetMemoryBusWidth method. GetMemoryBusWidthFunc func() (uint32, nvml.Return) // GetMemoryErrorCounterFunc mocks the GetMemoryErrorCounter method. GetMemoryErrorCounterFunc func(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType, memoryLocation nvml.MemoryLocation) (uint64, nvml.Return) // GetMemoryInfoFunc mocks the GetMemoryInfo method. GetMemoryInfoFunc func() (nvml.Memory, nvml.Return) // GetMemoryInfo_v2Func mocks the GetMemoryInfo_v2 method. GetMemoryInfo_v2Func func() (nvml.Memory_v2, nvml.Return) // GetMigDeviceHandleByIndexFunc mocks the GetMigDeviceHandleByIndex method. GetMigDeviceHandleByIndexFunc func(n int) (nvml.Device, nvml.Return) // GetMigModeFunc mocks the GetMigMode method. GetMigModeFunc func() (int, int, nvml.Return) // GetMinMaxClockOfPStateFunc mocks the GetMinMaxClockOfPState method. GetMinMaxClockOfPStateFunc func(clockType nvml.ClockType, pstates nvml.Pstates) (uint32, uint32, nvml.Return) // GetMinMaxFanSpeedFunc mocks the GetMinMaxFanSpeed method. GetMinMaxFanSpeedFunc func() (int, int, nvml.Return) // GetMinorNumberFunc mocks the GetMinorNumber method. GetMinorNumberFunc func() (int, nvml.Return) // GetModuleIdFunc mocks the GetModuleId method. GetModuleIdFunc func() (int, nvml.Return) // GetMultiGpuBoardFunc mocks the GetMultiGpuBoard method. GetMultiGpuBoardFunc func() (int, nvml.Return) // GetNameFunc mocks the GetName method. GetNameFunc func() (string, nvml.Return) // GetNumFansFunc mocks the GetNumFans method. GetNumFansFunc func() (int, nvml.Return) // GetNumGpuCoresFunc mocks the GetNumGpuCores method. GetNumGpuCoresFunc func() (int, nvml.Return) // GetNumaNodeIdFunc mocks the GetNumaNodeId method. GetNumaNodeIdFunc func() (int, nvml.Return) // GetNvLinkCapabilityFunc mocks the GetNvLinkCapability method. GetNvLinkCapabilityFunc func(n int, nvLinkCapability nvml.NvLinkCapability) (uint32, nvml.Return) // GetNvLinkErrorCounterFunc mocks the GetNvLinkErrorCounter method. GetNvLinkErrorCounterFunc func(n int, nvLinkErrorCounter nvml.NvLinkErrorCounter) (uint64, nvml.Return) // GetNvLinkInfoFunc mocks the GetNvLinkInfo method. GetNvLinkInfoFunc func() nvml.NvLinkInfoHandler // GetNvLinkRemoteDeviceTypeFunc mocks the GetNvLinkRemoteDeviceType method. GetNvLinkRemoteDeviceTypeFunc func(n int) (nvml.IntNvLinkDeviceType, nvml.Return) // GetNvLinkRemotePciInfoFunc mocks the GetNvLinkRemotePciInfo method. GetNvLinkRemotePciInfoFunc func(n int) (nvml.PciInfo, nvml.Return) // GetNvLinkStateFunc mocks the GetNvLinkState method. GetNvLinkStateFunc func(n int) (nvml.EnableState, nvml.Return) // GetNvLinkUtilizationControlFunc mocks the GetNvLinkUtilizationControl method. GetNvLinkUtilizationControlFunc func(n1 int, n2 int) (nvml.NvLinkUtilizationControl, nvml.Return) // GetNvLinkUtilizationCounterFunc mocks the GetNvLinkUtilizationCounter method. GetNvLinkUtilizationCounterFunc func(n1 int, n2 int) (uint64, uint64, nvml.Return) // GetNvLinkVersionFunc mocks the GetNvLinkVersion method. GetNvLinkVersionFunc func(n int) (uint32, nvml.Return) // GetNvlinkBwModeFunc mocks the GetNvlinkBwMode method. GetNvlinkBwModeFunc func() (nvml.NvlinkGetBwMode, nvml.Return) // GetNvlinkSupportedBwModesFunc mocks the GetNvlinkSupportedBwModes method. GetNvlinkSupportedBwModesFunc func() (nvml.NvlinkSupportedBwModes, nvml.Return) // GetOfaUtilizationFunc mocks the GetOfaUtilization method. GetOfaUtilizationFunc func() (uint32, uint32, nvml.Return) // GetP2PStatusFunc mocks the GetP2PStatus method. GetP2PStatusFunc func(device nvml.Device, gpuP2PCapsIndex nvml.GpuP2PCapsIndex) (nvml.GpuP2PStatus, nvml.Return) // GetPciInfoFunc mocks the GetPciInfo method. GetPciInfoFunc func() (nvml.PciInfo, nvml.Return) // GetPciInfoExtFunc mocks the GetPciInfoExt method. GetPciInfoExtFunc func() (nvml.PciInfoExt, nvml.Return) // GetPcieLinkMaxSpeedFunc mocks the GetPcieLinkMaxSpeed method. GetPcieLinkMaxSpeedFunc func() (uint32, nvml.Return) // GetPcieReplayCounterFunc mocks the GetPcieReplayCounter method. GetPcieReplayCounterFunc func() (int, nvml.Return) // GetPcieSpeedFunc mocks the GetPcieSpeed method. GetPcieSpeedFunc func() (int, nvml.Return) // GetPcieThroughputFunc mocks the GetPcieThroughput method. GetPcieThroughputFunc func(pcieUtilCounter nvml.PcieUtilCounter) (uint32, nvml.Return) // GetPdiFunc mocks the GetPdi method. GetPdiFunc func() (nvml.Pdi, nvml.Return) // GetPerformanceModesFunc mocks the GetPerformanceModes method. GetPerformanceModesFunc func() (nvml.DevicePerfModes, nvml.Return) // GetPerformanceStateFunc mocks the GetPerformanceState method. GetPerformanceStateFunc func() (nvml.Pstates, nvml.Return) // GetPersistenceModeFunc mocks the GetPersistenceMode method. GetPersistenceModeFunc func() (nvml.EnableState, nvml.Return) // GetPgpuMetadataStringFunc mocks the GetPgpuMetadataString method. GetPgpuMetadataStringFunc func() (string, nvml.Return) // GetPlatformInfoFunc mocks the GetPlatformInfo method. GetPlatformInfoFunc func() (nvml.PlatformInfo, nvml.Return) // GetPowerManagementDefaultLimitFunc mocks the GetPowerManagementDefaultLimit method. GetPowerManagementDefaultLimitFunc func() (uint32, nvml.Return) // GetPowerManagementLimitFunc mocks the GetPowerManagementLimit method. GetPowerManagementLimitFunc func() (uint32, nvml.Return) // GetPowerManagementLimitConstraintsFunc mocks the GetPowerManagementLimitConstraints method. GetPowerManagementLimitConstraintsFunc func() (uint32, uint32, nvml.Return) // GetPowerManagementModeFunc mocks the GetPowerManagementMode method. GetPowerManagementModeFunc func() (nvml.EnableState, nvml.Return) // GetPowerMizerMode_v1Func mocks the GetPowerMizerMode_v1 method. GetPowerMizerMode_v1Func func() (nvml.DevicePowerMizerModes_v1, nvml.Return) // GetPowerSourceFunc mocks the GetPowerSource method. GetPowerSourceFunc func() (nvml.PowerSource, nvml.Return) // GetPowerStateFunc mocks the GetPowerState method. GetPowerStateFunc func() (nvml.Pstates, nvml.Return) // GetPowerUsageFunc mocks the GetPowerUsage method. GetPowerUsageFunc func() (uint32, nvml.Return) // GetProcessUtilizationFunc mocks the GetProcessUtilization method. GetProcessUtilizationFunc func(v uint64) ([]nvml.ProcessUtilizationSample, nvml.Return) // GetProcessesUtilizationInfoFunc mocks the GetProcessesUtilizationInfo method. GetProcessesUtilizationInfoFunc func() (nvml.ProcessesUtilizationInfo, nvml.Return) // GetRemappedRowsFunc mocks the GetRemappedRows method. GetRemappedRowsFunc func() (int, int, bool, bool, nvml.Return) // GetRepairStatusFunc mocks the GetRepairStatus method. GetRepairStatusFunc func() (nvml.RepairStatus, nvml.Return) // GetRetiredPagesFunc mocks the GetRetiredPages method. GetRetiredPagesFunc func(pageRetirementCause nvml.PageRetirementCause) ([]uint64, nvml.Return) // GetRetiredPagesPendingStatusFunc mocks the GetRetiredPagesPendingStatus method. GetRetiredPagesPendingStatusFunc func() (nvml.EnableState, nvml.Return) // GetRetiredPages_v2Func mocks the GetRetiredPages_v2 method. GetRetiredPages_v2Func func(pageRetirementCause nvml.PageRetirementCause) ([]uint64, []uint64, nvml.Return) // GetRowRemapperHistogramFunc mocks the GetRowRemapperHistogram method. GetRowRemapperHistogramFunc func() (nvml.RowRemapperHistogramValues, nvml.Return) // GetRunningProcessDetailListFunc mocks the GetRunningProcessDetailList method. GetRunningProcessDetailListFunc func() (nvml.ProcessDetailList, nvml.Return) // GetSamplesFunc mocks the GetSamples method. GetSamplesFunc func(samplingType nvml.SamplingType, v uint64) (nvml.ValueType, []nvml.Sample, nvml.Return) // GetSerialFunc mocks the GetSerial method. GetSerialFunc func() (string, nvml.Return) // GetSramEccErrorStatusFunc mocks the GetSramEccErrorStatus method. GetSramEccErrorStatusFunc func() (nvml.EccSramErrorStatus, nvml.Return) // GetSramUniqueUncorrectedEccErrorCountsFunc mocks the GetSramUniqueUncorrectedEccErrorCounts method. GetSramUniqueUncorrectedEccErrorCountsFunc func(eccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts) nvml.Return // GetSupportedClocksEventReasonsFunc mocks the GetSupportedClocksEventReasons method. GetSupportedClocksEventReasonsFunc func() (uint64, nvml.Return) // GetSupportedClocksThrottleReasonsFunc mocks the GetSupportedClocksThrottleReasons method. GetSupportedClocksThrottleReasonsFunc func() (uint64, nvml.Return) // GetSupportedEventTypesFunc mocks the GetSupportedEventTypes method. GetSupportedEventTypesFunc func() (uint64, nvml.Return) // GetSupportedGraphicsClocksFunc mocks the GetSupportedGraphicsClocks method. GetSupportedGraphicsClocksFunc func(n int) (int, uint32, nvml.Return) // GetSupportedMemoryClocksFunc mocks the GetSupportedMemoryClocks method. GetSupportedMemoryClocksFunc func() (int, uint32, nvml.Return) // GetSupportedPerformanceStatesFunc mocks the GetSupportedPerformanceStates method. GetSupportedPerformanceStatesFunc func() ([]nvml.Pstates, nvml.Return) // GetSupportedVgpusFunc mocks the GetSupportedVgpus method. GetSupportedVgpusFunc func() ([]nvml.VgpuTypeId, nvml.Return) // GetTargetFanSpeedFunc mocks the GetTargetFanSpeed method. GetTargetFanSpeedFunc func(n int) (int, nvml.Return) // GetTemperatureFunc mocks the GetTemperature method. GetTemperatureFunc func(temperatureSensors nvml.TemperatureSensors) (uint32, nvml.Return) // GetTemperatureThresholdFunc mocks the GetTemperatureThreshold method. GetTemperatureThresholdFunc func(temperatureThresholds nvml.TemperatureThresholds) (uint32, nvml.Return) // GetTemperatureVFunc mocks the GetTemperatureV method. GetTemperatureVFunc func() nvml.TemperatureHandler // GetThermalSettingsFunc mocks the GetThermalSettings method. GetThermalSettingsFunc func(v uint32) (nvml.GpuThermalSettings, nvml.Return) // GetTopologyCommonAncestorFunc mocks the GetTopologyCommonAncestor method. GetTopologyCommonAncestorFunc func(device nvml.Device) (nvml.GpuTopologyLevel, nvml.Return) // GetTopologyNearestGpusFunc mocks the GetTopologyNearestGpus method. GetTopologyNearestGpusFunc func(gpuTopologyLevel nvml.GpuTopologyLevel) ([]nvml.Device, nvml.Return) // GetTotalEccErrorsFunc mocks the GetTotalEccErrors method. GetTotalEccErrorsFunc func(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (uint64, nvml.Return) // GetTotalEnergyConsumptionFunc mocks the GetTotalEnergyConsumption method. GetTotalEnergyConsumptionFunc func() (uint64, nvml.Return) // GetUUIDFunc mocks the GetUUID method. GetUUIDFunc func() (string, nvml.Return) // GetUtilizationRatesFunc mocks the GetUtilizationRates method. GetUtilizationRatesFunc func() (nvml.Utilization, nvml.Return) // GetVbiosVersionFunc mocks the GetVbiosVersion method. GetVbiosVersionFunc func() (string, nvml.Return) // GetVgpuCapabilitiesFunc mocks the GetVgpuCapabilities method. GetVgpuCapabilitiesFunc func(deviceVgpuCapability nvml.DeviceVgpuCapability) (bool, nvml.Return) // GetVgpuHeterogeneousModeFunc mocks the GetVgpuHeterogeneousMode method. GetVgpuHeterogeneousModeFunc func() (nvml.VgpuHeterogeneousMode, nvml.Return) // GetVgpuInstancesUtilizationInfoFunc mocks the GetVgpuInstancesUtilizationInfo method. GetVgpuInstancesUtilizationInfoFunc func() (nvml.VgpuInstancesUtilizationInfo, nvml.Return) // GetVgpuMetadataFunc mocks the GetVgpuMetadata method. GetVgpuMetadataFunc func() (nvml.VgpuPgpuMetadata, nvml.Return) // GetVgpuProcessUtilizationFunc mocks the GetVgpuProcessUtilization method. GetVgpuProcessUtilizationFunc func(v uint64) ([]nvml.VgpuProcessUtilizationSample, nvml.Return) // GetVgpuProcessesUtilizationInfoFunc mocks the GetVgpuProcessesUtilizationInfo method. GetVgpuProcessesUtilizationInfoFunc func() (nvml.VgpuProcessesUtilizationInfo, nvml.Return) // GetVgpuSchedulerCapabilitiesFunc mocks the GetVgpuSchedulerCapabilities method. GetVgpuSchedulerCapabilitiesFunc func() (nvml.VgpuSchedulerCapabilities, nvml.Return) // GetVgpuSchedulerLogFunc mocks the GetVgpuSchedulerLog method. GetVgpuSchedulerLogFunc func() (nvml.VgpuSchedulerLog, nvml.Return) // GetVgpuSchedulerStateFunc mocks the GetVgpuSchedulerState method. GetVgpuSchedulerStateFunc func() (nvml.VgpuSchedulerGetState, nvml.Return) // GetVgpuTypeCreatablePlacementsFunc mocks the GetVgpuTypeCreatablePlacements method. GetVgpuTypeCreatablePlacementsFunc func(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) // GetVgpuTypeSupportedPlacementsFunc mocks the GetVgpuTypeSupportedPlacements method. GetVgpuTypeSupportedPlacementsFunc func(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) // GetVgpuUtilizationFunc mocks the GetVgpuUtilization method. GetVgpuUtilizationFunc func(v uint64) (nvml.ValueType, []nvml.VgpuInstanceUtilizationSample, nvml.Return) // GetViolationStatusFunc mocks the GetViolationStatus method. GetViolationStatusFunc func(perfPolicyType nvml.PerfPolicyType) (nvml.ViolationTime, nvml.Return) // GetVirtualizationModeFunc mocks the GetVirtualizationMode method. GetVirtualizationModeFunc func() (nvml.GpuVirtualizationMode, nvml.Return) // GpmMigSampleGetFunc mocks the GpmMigSampleGet method. GpmMigSampleGetFunc func(n int, gpmSample nvml.GpmSample) nvml.Return // GpmQueryDeviceSupportFunc mocks the GpmQueryDeviceSupport method. GpmQueryDeviceSupportFunc func() (nvml.GpmSupport, nvml.Return) // GpmQueryDeviceSupportVFunc mocks the GpmQueryDeviceSupportV method. GpmQueryDeviceSupportVFunc func() nvml.GpmSupportV // GpmQueryIfStreamingEnabledFunc mocks the GpmQueryIfStreamingEnabled method. GpmQueryIfStreamingEnabledFunc func() (uint32, nvml.Return) // GpmSampleGetFunc mocks the GpmSampleGet method. GpmSampleGetFunc func(gpmSample nvml.GpmSample) nvml.Return // GpmSetStreamingEnabledFunc mocks the GpmSetStreamingEnabled method. GpmSetStreamingEnabledFunc func(v uint32) nvml.Return // IsMigDeviceHandleFunc mocks the IsMigDeviceHandle method. IsMigDeviceHandleFunc func() (bool, nvml.Return) // OnSameBoardFunc mocks the OnSameBoard method. OnSameBoardFunc func(device nvml.Device) (int, nvml.Return) // PowerSmoothingActivatePresetProfileFunc mocks the PowerSmoothingActivatePresetProfile method. PowerSmoothingActivatePresetProfileFunc func(powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return // PowerSmoothingSetStateFunc mocks the PowerSmoothingSetState method. PowerSmoothingSetStateFunc func(powerSmoothingState *nvml.PowerSmoothingState) nvml.Return // PowerSmoothingUpdatePresetProfileParamFunc mocks the PowerSmoothingUpdatePresetProfileParam method. PowerSmoothingUpdatePresetProfileParamFunc func(powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return // ReadWritePRM_v1Func mocks the ReadWritePRM_v1 method. ReadWritePRM_v1Func func(pRMTLV_v1 *nvml.PRMTLV_v1) nvml.Return // RegisterEventsFunc mocks the RegisterEvents method. RegisterEventsFunc func(v uint64, eventSet nvml.EventSet) nvml.Return // ResetApplicationsClocksFunc mocks the ResetApplicationsClocks method. ResetApplicationsClocksFunc func() nvml.Return // ResetGpuLockedClocksFunc mocks the ResetGpuLockedClocks method. ResetGpuLockedClocksFunc func() nvml.Return // ResetMemoryLockedClocksFunc mocks the ResetMemoryLockedClocks method. ResetMemoryLockedClocksFunc func() nvml.Return // ResetNvLinkErrorCountersFunc mocks the ResetNvLinkErrorCounters method. ResetNvLinkErrorCountersFunc func(n int) nvml.Return // ResetNvLinkUtilizationCounterFunc mocks the ResetNvLinkUtilizationCounter method. ResetNvLinkUtilizationCounterFunc func(n1 int, n2 int) nvml.Return // SetAPIRestrictionFunc mocks the SetAPIRestriction method. SetAPIRestrictionFunc func(restrictedAPI nvml.RestrictedAPI, enableState nvml.EnableState) nvml.Return // SetAccountingModeFunc mocks the SetAccountingMode method. SetAccountingModeFunc func(enableState nvml.EnableState) nvml.Return // SetApplicationsClocksFunc mocks the SetApplicationsClocks method. SetApplicationsClocksFunc func(v1 uint32, v2 uint32) nvml.Return // SetAutoBoostedClocksEnabledFunc mocks the SetAutoBoostedClocksEnabled method. SetAutoBoostedClocksEnabledFunc func(enableState nvml.EnableState) nvml.Return // SetClockOffsetsFunc mocks the SetClockOffsets method. SetClockOffsetsFunc func(clockOffset nvml.ClockOffset) nvml.Return // SetComputeModeFunc mocks the SetComputeMode method. SetComputeModeFunc func(computeMode nvml.ComputeMode) nvml.Return // SetConfComputeUnprotectedMemSizeFunc mocks the SetConfComputeUnprotectedMemSize method. SetConfComputeUnprotectedMemSizeFunc func(v uint64) nvml.Return // SetCpuAffinityFunc mocks the SetCpuAffinity method. SetCpuAffinityFunc func() nvml.Return // SetDefaultAutoBoostedClocksEnabledFunc mocks the SetDefaultAutoBoostedClocksEnabled method. SetDefaultAutoBoostedClocksEnabledFunc func(enableState nvml.EnableState, v uint32) nvml.Return // SetDefaultFanSpeed_v2Func mocks the SetDefaultFanSpeed_v2 method. SetDefaultFanSpeed_v2Func func(n int) nvml.Return // SetDramEncryptionModeFunc mocks the SetDramEncryptionMode method. SetDramEncryptionModeFunc func(dramEncryptionInfo *nvml.DramEncryptionInfo) nvml.Return // SetDriverModelFunc mocks the SetDriverModel method. SetDriverModelFunc func(driverModel nvml.DriverModel, v uint32) nvml.Return // SetEccModeFunc mocks the SetEccMode method. SetEccModeFunc func(enableState nvml.EnableState) nvml.Return // SetFanControlPolicyFunc mocks the SetFanControlPolicy method. SetFanControlPolicyFunc func(n int, fanControlPolicy nvml.FanControlPolicy) nvml.Return // SetFanSpeed_v2Func mocks the SetFanSpeed_v2 method. SetFanSpeed_v2Func func(n1 int, n2 int) nvml.Return // SetGpcClkVfOffsetFunc mocks the SetGpcClkVfOffset method. SetGpcClkVfOffsetFunc func(n int) nvml.Return // SetGpuLockedClocksFunc mocks the SetGpuLockedClocks method. SetGpuLockedClocksFunc func(v1 uint32, v2 uint32) nvml.Return // SetGpuOperationModeFunc mocks the SetGpuOperationMode method. SetGpuOperationModeFunc func(gpuOperationMode nvml.GpuOperationMode) nvml.Return // SetMemClkVfOffsetFunc mocks the SetMemClkVfOffset method. SetMemClkVfOffsetFunc func(n int) nvml.Return // SetMemoryLockedClocksFunc mocks the SetMemoryLockedClocks method. SetMemoryLockedClocksFunc func(v1 uint32, v2 uint32) nvml.Return // SetMigModeFunc mocks the SetMigMode method. SetMigModeFunc func(n int) (nvml.Return, nvml.Return) // SetNvLinkDeviceLowPowerThresholdFunc mocks the SetNvLinkDeviceLowPowerThreshold method. SetNvLinkDeviceLowPowerThresholdFunc func(nvLinkPowerThres *nvml.NvLinkPowerThres) nvml.Return // SetNvLinkUtilizationControlFunc mocks the SetNvLinkUtilizationControl method. SetNvLinkUtilizationControlFunc func(n1 int, n2 int, nvLinkUtilizationControl *nvml.NvLinkUtilizationControl, b bool) nvml.Return // SetNvlinkBwModeFunc mocks the SetNvlinkBwMode method. SetNvlinkBwModeFunc func(nvlinkSetBwMode *nvml.NvlinkSetBwMode) nvml.Return // SetPersistenceModeFunc mocks the SetPersistenceMode method. SetPersistenceModeFunc func(enableState nvml.EnableState) nvml.Return // SetPowerManagementLimitFunc mocks the SetPowerManagementLimit method. SetPowerManagementLimitFunc func(v uint32) nvml.Return // SetPowerManagementLimit_v2Func mocks the SetPowerManagementLimit_v2 method. SetPowerManagementLimit_v2Func func(powerValue_v2 *nvml.PowerValue_v2) nvml.Return // SetTemperatureThresholdFunc mocks the SetTemperatureThreshold method. SetTemperatureThresholdFunc func(temperatureThresholds nvml.TemperatureThresholds, n int) nvml.Return // SetVgpuCapabilitiesFunc mocks the SetVgpuCapabilities method. SetVgpuCapabilitiesFunc func(deviceVgpuCapability nvml.DeviceVgpuCapability, enableState nvml.EnableState) nvml.Return // SetVgpuHeterogeneousModeFunc mocks the SetVgpuHeterogeneousMode method. SetVgpuHeterogeneousModeFunc func(vgpuHeterogeneousMode nvml.VgpuHeterogeneousMode) nvml.Return // SetVgpuSchedulerStateFunc mocks the SetVgpuSchedulerState method. SetVgpuSchedulerStateFunc func(vgpuSchedulerSetState *nvml.VgpuSchedulerSetState) nvml.Return // SetVirtualizationModeFunc mocks the SetVirtualizationMode method. SetVirtualizationModeFunc func(gpuVirtualizationMode nvml.GpuVirtualizationMode) nvml.Return // ValidateInforomFunc mocks the ValidateInforom method. ValidateInforomFunc func() nvml.Return // VgpuTypeGetMaxInstancesFunc mocks the VgpuTypeGetMaxInstances method. VgpuTypeGetMaxInstancesFunc func(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) // WorkloadPowerProfileClearRequestedProfilesFunc mocks the WorkloadPowerProfileClearRequestedProfiles method. WorkloadPowerProfileClearRequestedProfilesFunc func(workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return // WorkloadPowerProfileGetCurrentProfilesFunc mocks the WorkloadPowerProfileGetCurrentProfiles method. WorkloadPowerProfileGetCurrentProfilesFunc func() (nvml.WorkloadPowerProfileCurrentProfiles, nvml.Return) // WorkloadPowerProfileGetProfilesInfoFunc mocks the WorkloadPowerProfileGetProfilesInfo method. WorkloadPowerProfileGetProfilesInfoFunc func() (nvml.WorkloadPowerProfileProfilesInfo, nvml.Return) // WorkloadPowerProfileSetRequestedProfilesFunc mocks the WorkloadPowerProfileSetRequestedProfiles method. WorkloadPowerProfileSetRequestedProfilesFunc func(workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return // calls tracks calls to the methods. calls struct { // ClearAccountingPids holds details about calls to the ClearAccountingPids method. ClearAccountingPids []struct { } // ClearCpuAffinity holds details about calls to the ClearCpuAffinity method. ClearCpuAffinity []struct { } // ClearEccErrorCounts holds details about calls to the ClearEccErrorCounts method. ClearEccErrorCounts []struct { // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType } // ClearFieldValues holds details about calls to the ClearFieldValues method. ClearFieldValues []struct { // FieldValues is the fieldValues argument value. FieldValues []nvml.FieldValue } // CreateGpuInstance holds details about calls to the CreateGpuInstance method. CreateGpuInstance []struct { // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // CreateGpuInstanceWithPlacement holds details about calls to the CreateGpuInstanceWithPlacement method. CreateGpuInstanceWithPlacement []struct { // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo // GpuInstancePlacement is the gpuInstancePlacement argument value. GpuInstancePlacement *nvml.GpuInstancePlacement } // FreezeNvLinkUtilizationCounter holds details about calls to the FreezeNvLinkUtilizationCounter method. FreezeNvLinkUtilizationCounter []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int // EnableState is the enableState argument value. EnableState nvml.EnableState } // GetAPIRestriction holds details about calls to the GetAPIRestriction method. GetAPIRestriction []struct { // RestrictedAPI is the restrictedAPI argument value. RestrictedAPI nvml.RestrictedAPI } // GetAccountingBufferSize holds details about calls to the GetAccountingBufferSize method. GetAccountingBufferSize []struct { } // GetAccountingMode holds details about calls to the GetAccountingMode method. GetAccountingMode []struct { } // GetAccountingPids holds details about calls to the GetAccountingPids method. GetAccountingPids []struct { } // GetAccountingStats holds details about calls to the GetAccountingStats method. GetAccountingStats []struct { // V is the v argument value. V uint32 } // GetActiveVgpus holds details about calls to the GetActiveVgpus method. GetActiveVgpus []struct { } // GetAdaptiveClockInfoStatus holds details about calls to the GetAdaptiveClockInfoStatus method. GetAdaptiveClockInfoStatus []struct { } // GetAddressingMode holds details about calls to the GetAddressingMode method. GetAddressingMode []struct { } // GetApplicationsClock holds details about calls to the GetApplicationsClock method. GetApplicationsClock []struct { // ClockType is the clockType argument value. ClockType nvml.ClockType } // GetArchitecture holds details about calls to the GetArchitecture method. GetArchitecture []struct { } // GetAttributes holds details about calls to the GetAttributes method. GetAttributes []struct { } // GetAutoBoostedClocksEnabled holds details about calls to the GetAutoBoostedClocksEnabled method. GetAutoBoostedClocksEnabled []struct { } // GetBAR1MemoryInfo holds details about calls to the GetBAR1MemoryInfo method. GetBAR1MemoryInfo []struct { } // GetBoardId holds details about calls to the GetBoardId method. GetBoardId []struct { } // GetBoardPartNumber holds details about calls to the GetBoardPartNumber method. GetBoardPartNumber []struct { } // GetBrand holds details about calls to the GetBrand method. GetBrand []struct { } // GetBridgeChipInfo holds details about calls to the GetBridgeChipInfo method. GetBridgeChipInfo []struct { } // GetBusType holds details about calls to the GetBusType method. GetBusType []struct { } // GetC2cModeInfoV holds details about calls to the GetC2cModeInfoV method. GetC2cModeInfoV []struct { } // GetCapabilities holds details about calls to the GetCapabilities method. GetCapabilities []struct { } // GetClkMonStatus holds details about calls to the GetClkMonStatus method. GetClkMonStatus []struct { } // GetClock holds details about calls to the GetClock method. GetClock []struct { // ClockType is the clockType argument value. ClockType nvml.ClockType // ClockId is the clockId argument value. ClockId nvml.ClockId } // GetClockInfo holds details about calls to the GetClockInfo method. GetClockInfo []struct { // ClockType is the clockType argument value. ClockType nvml.ClockType } // GetClockOffsets holds details about calls to the GetClockOffsets method. GetClockOffsets []struct { } // GetComputeInstanceId holds details about calls to the GetComputeInstanceId method. GetComputeInstanceId []struct { } // GetComputeMode holds details about calls to the GetComputeMode method. GetComputeMode []struct { } // GetComputeRunningProcesses holds details about calls to the GetComputeRunningProcesses method. GetComputeRunningProcesses []struct { } // GetConfComputeGpuAttestationReport holds details about calls to the GetConfComputeGpuAttestationReport method. GetConfComputeGpuAttestationReport []struct { // ConfComputeGpuAttestationReport is the confComputeGpuAttestationReport argument value. ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport } // GetConfComputeGpuCertificate holds details about calls to the GetConfComputeGpuCertificate method. GetConfComputeGpuCertificate []struct { } // GetConfComputeMemSizeInfo holds details about calls to the GetConfComputeMemSizeInfo method. GetConfComputeMemSizeInfo []struct { } // GetConfComputeProtectedMemoryUsage holds details about calls to the GetConfComputeProtectedMemoryUsage method. GetConfComputeProtectedMemoryUsage []struct { } // GetCoolerInfo holds details about calls to the GetCoolerInfo method. GetCoolerInfo []struct { } // GetCpuAffinity holds details about calls to the GetCpuAffinity method. GetCpuAffinity []struct { // N is the n argument value. N int } // GetCpuAffinityWithinScope holds details about calls to the GetCpuAffinityWithinScope method. GetCpuAffinityWithinScope []struct { // N is the n argument value. N int // AffinityScope is the affinityScope argument value. AffinityScope nvml.AffinityScope } // GetCreatableVgpus holds details about calls to the GetCreatableVgpus method. GetCreatableVgpus []struct { } // GetCudaComputeCapability holds details about calls to the GetCudaComputeCapability method. GetCudaComputeCapability []struct { } // GetCurrPcieLinkGeneration holds details about calls to the GetCurrPcieLinkGeneration method. GetCurrPcieLinkGeneration []struct { } // GetCurrPcieLinkWidth holds details about calls to the GetCurrPcieLinkWidth method. GetCurrPcieLinkWidth []struct { } // GetCurrentClockFreqs holds details about calls to the GetCurrentClockFreqs method. GetCurrentClockFreqs []struct { } // GetCurrentClocksEventReasons holds details about calls to the GetCurrentClocksEventReasons method. GetCurrentClocksEventReasons []struct { } // GetCurrentClocksThrottleReasons holds details about calls to the GetCurrentClocksThrottleReasons method. GetCurrentClocksThrottleReasons []struct { } // GetDecoderUtilization holds details about calls to the GetDecoderUtilization method. GetDecoderUtilization []struct { } // GetDefaultApplicationsClock holds details about calls to the GetDefaultApplicationsClock method. GetDefaultApplicationsClock []struct { // ClockType is the clockType argument value. ClockType nvml.ClockType } // GetDefaultEccMode holds details about calls to the GetDefaultEccMode method. GetDefaultEccMode []struct { } // GetDetailedEccErrors holds details about calls to the GetDetailedEccErrors method. GetDetailedEccErrors []struct { // MemoryErrorType is the memoryErrorType argument value. MemoryErrorType nvml.MemoryErrorType // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType } // GetDeviceHandleFromMigDeviceHandle holds details about calls to the GetDeviceHandleFromMigDeviceHandle method. GetDeviceHandleFromMigDeviceHandle []struct { } // GetDisplayActive holds details about calls to the GetDisplayActive method. GetDisplayActive []struct { } // GetDisplayMode holds details about calls to the GetDisplayMode method. GetDisplayMode []struct { } // GetDramEncryptionMode holds details about calls to the GetDramEncryptionMode method. GetDramEncryptionMode []struct { } // GetDriverModel holds details about calls to the GetDriverModel method. GetDriverModel []struct { } // GetDriverModel_v2 holds details about calls to the GetDriverModel_v2 method. GetDriverModel_v2 []struct { } // GetDynamicPstatesInfo holds details about calls to the GetDynamicPstatesInfo method. GetDynamicPstatesInfo []struct { } // GetEccMode holds details about calls to the GetEccMode method. GetEccMode []struct { } // GetEncoderCapacity holds details about calls to the GetEncoderCapacity method. GetEncoderCapacity []struct { // EncoderType is the encoderType argument value. EncoderType nvml.EncoderType } // GetEncoderSessions holds details about calls to the GetEncoderSessions method. GetEncoderSessions []struct { } // GetEncoderStats holds details about calls to the GetEncoderStats method. GetEncoderStats []struct { } // GetEncoderUtilization holds details about calls to the GetEncoderUtilization method. GetEncoderUtilization []struct { } // GetEnforcedPowerLimit holds details about calls to the GetEnforcedPowerLimit method. GetEnforcedPowerLimit []struct { } // GetFBCSessions holds details about calls to the GetFBCSessions method. GetFBCSessions []struct { } // GetFBCStats holds details about calls to the GetFBCStats method. GetFBCStats []struct { } // GetFanControlPolicy_v2 holds details about calls to the GetFanControlPolicy_v2 method. GetFanControlPolicy_v2 []struct { // N is the n argument value. N int } // GetFanSpeed holds details about calls to the GetFanSpeed method. GetFanSpeed []struct { } // GetFanSpeedRPM holds details about calls to the GetFanSpeedRPM method. GetFanSpeedRPM []struct { } // GetFanSpeed_v2 holds details about calls to the GetFanSpeed_v2 method. GetFanSpeed_v2 []struct { // N is the n argument value. N int } // GetFieldValues holds details about calls to the GetFieldValues method. GetFieldValues []struct { // FieldValues is the fieldValues argument value. FieldValues []nvml.FieldValue } // GetGpcClkMinMaxVfOffset holds details about calls to the GetGpcClkMinMaxVfOffset method. GetGpcClkMinMaxVfOffset []struct { } // GetGpcClkVfOffset holds details about calls to the GetGpcClkVfOffset method. GetGpcClkVfOffset []struct { } // GetGpuFabricInfo holds details about calls to the GetGpuFabricInfo method. GetGpuFabricInfo []struct { } // GetGpuFabricInfoV holds details about calls to the GetGpuFabricInfoV method. GetGpuFabricInfoV []struct { } // GetGpuInstanceById holds details about calls to the GetGpuInstanceById method. GetGpuInstanceById []struct { // N is the n argument value. N int } // GetGpuInstanceId holds details about calls to the GetGpuInstanceId method. GetGpuInstanceId []struct { } // GetGpuInstancePossiblePlacements holds details about calls to the GetGpuInstancePossiblePlacements method. GetGpuInstancePossiblePlacements []struct { // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // GetGpuInstanceProfileInfo holds details about calls to the GetGpuInstanceProfileInfo method. GetGpuInstanceProfileInfo []struct { // N is the n argument value. N int } // GetGpuInstanceProfileInfoByIdV holds details about calls to the GetGpuInstanceProfileInfoByIdV method. GetGpuInstanceProfileInfoByIdV []struct { // N is the n argument value. N int } // GetGpuInstanceProfileInfoV holds details about calls to the GetGpuInstanceProfileInfoV method. GetGpuInstanceProfileInfoV []struct { // N is the n argument value. N int } // GetGpuInstanceRemainingCapacity holds details about calls to the GetGpuInstanceRemainingCapacity method. GetGpuInstanceRemainingCapacity []struct { // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // GetGpuInstances holds details about calls to the GetGpuInstances method. GetGpuInstances []struct { // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // GetGpuMaxPcieLinkGeneration holds details about calls to the GetGpuMaxPcieLinkGeneration method. GetGpuMaxPcieLinkGeneration []struct { } // GetGpuOperationMode holds details about calls to the GetGpuOperationMode method. GetGpuOperationMode []struct { } // GetGraphicsRunningProcesses holds details about calls to the GetGraphicsRunningProcesses method. GetGraphicsRunningProcesses []struct { } // GetGridLicensableFeatures holds details about calls to the GetGridLicensableFeatures method. GetGridLicensableFeatures []struct { } // GetGspFirmwareMode holds details about calls to the GetGspFirmwareMode method. GetGspFirmwareMode []struct { } // GetGspFirmwareVersion holds details about calls to the GetGspFirmwareVersion method. GetGspFirmwareVersion []struct { } // GetHostVgpuMode holds details about calls to the GetHostVgpuMode method. GetHostVgpuMode []struct { } // GetIndex holds details about calls to the GetIndex method. GetIndex []struct { } // GetInforomConfigurationChecksum holds details about calls to the GetInforomConfigurationChecksum method. GetInforomConfigurationChecksum []struct { } // GetInforomImageVersion holds details about calls to the GetInforomImageVersion method. GetInforomImageVersion []struct { } // GetInforomVersion holds details about calls to the GetInforomVersion method. GetInforomVersion []struct { // InforomObject is the inforomObject argument value. InforomObject nvml.InforomObject } // GetIrqNum holds details about calls to the GetIrqNum method. GetIrqNum []struct { } // GetJpgUtilization holds details about calls to the GetJpgUtilization method. GetJpgUtilization []struct { } // GetLastBBXFlushTime holds details about calls to the GetLastBBXFlushTime method. GetLastBBXFlushTime []struct { } // GetMPSComputeRunningProcesses holds details about calls to the GetMPSComputeRunningProcesses method. GetMPSComputeRunningProcesses []struct { } // GetMarginTemperature holds details about calls to the GetMarginTemperature method. GetMarginTemperature []struct { } // GetMaxClockInfo holds details about calls to the GetMaxClockInfo method. GetMaxClockInfo []struct { // ClockType is the clockType argument value. ClockType nvml.ClockType } // GetMaxCustomerBoostClock holds details about calls to the GetMaxCustomerBoostClock method. GetMaxCustomerBoostClock []struct { // ClockType is the clockType argument value. ClockType nvml.ClockType } // GetMaxMigDeviceCount holds details about calls to the GetMaxMigDeviceCount method. GetMaxMigDeviceCount []struct { } // GetMaxPcieLinkGeneration holds details about calls to the GetMaxPcieLinkGeneration method. GetMaxPcieLinkGeneration []struct { } // GetMaxPcieLinkWidth holds details about calls to the GetMaxPcieLinkWidth method. GetMaxPcieLinkWidth []struct { } // GetMemClkMinMaxVfOffset holds details about calls to the GetMemClkMinMaxVfOffset method. GetMemClkMinMaxVfOffset []struct { } // GetMemClkVfOffset holds details about calls to the GetMemClkVfOffset method. GetMemClkVfOffset []struct { } // GetMemoryAffinity holds details about calls to the GetMemoryAffinity method. GetMemoryAffinity []struct { // N is the n argument value. N int // AffinityScope is the affinityScope argument value. AffinityScope nvml.AffinityScope } // GetMemoryBusWidth holds details about calls to the GetMemoryBusWidth method. GetMemoryBusWidth []struct { } // GetMemoryErrorCounter holds details about calls to the GetMemoryErrorCounter method. GetMemoryErrorCounter []struct { // MemoryErrorType is the memoryErrorType argument value. MemoryErrorType nvml.MemoryErrorType // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType // MemoryLocation is the memoryLocation argument value. MemoryLocation nvml.MemoryLocation } // GetMemoryInfo holds details about calls to the GetMemoryInfo method. GetMemoryInfo []struct { } // GetMemoryInfo_v2 holds details about calls to the GetMemoryInfo_v2 method. GetMemoryInfo_v2 []struct { } // GetMigDeviceHandleByIndex holds details about calls to the GetMigDeviceHandleByIndex method. GetMigDeviceHandleByIndex []struct { // N is the n argument value. N int } // GetMigMode holds details about calls to the GetMigMode method. GetMigMode []struct { } // GetMinMaxClockOfPState holds details about calls to the GetMinMaxClockOfPState method. GetMinMaxClockOfPState []struct { // ClockType is the clockType argument value. ClockType nvml.ClockType // Pstates is the pstates argument value. Pstates nvml.Pstates } // GetMinMaxFanSpeed holds details about calls to the GetMinMaxFanSpeed method. GetMinMaxFanSpeed []struct { } // GetMinorNumber holds details about calls to the GetMinorNumber method. GetMinorNumber []struct { } // GetModuleId holds details about calls to the GetModuleId method. GetModuleId []struct { } // GetMultiGpuBoard holds details about calls to the GetMultiGpuBoard method. GetMultiGpuBoard []struct { } // GetName holds details about calls to the GetName method. GetName []struct { } // GetNumFans holds details about calls to the GetNumFans method. GetNumFans []struct { } // GetNumGpuCores holds details about calls to the GetNumGpuCores method. GetNumGpuCores []struct { } // GetNumaNodeId holds details about calls to the GetNumaNodeId method. GetNumaNodeId []struct { } // GetNvLinkCapability holds details about calls to the GetNvLinkCapability method. GetNvLinkCapability []struct { // N is the n argument value. N int // NvLinkCapability is the nvLinkCapability argument value. NvLinkCapability nvml.NvLinkCapability } // GetNvLinkErrorCounter holds details about calls to the GetNvLinkErrorCounter method. GetNvLinkErrorCounter []struct { // N is the n argument value. N int // NvLinkErrorCounter is the nvLinkErrorCounter argument value. NvLinkErrorCounter nvml.NvLinkErrorCounter } // GetNvLinkInfo holds details about calls to the GetNvLinkInfo method. GetNvLinkInfo []struct { } // GetNvLinkRemoteDeviceType holds details about calls to the GetNvLinkRemoteDeviceType method. GetNvLinkRemoteDeviceType []struct { // N is the n argument value. N int } // GetNvLinkRemotePciInfo holds details about calls to the GetNvLinkRemotePciInfo method. GetNvLinkRemotePciInfo []struct { // N is the n argument value. N int } // GetNvLinkState holds details about calls to the GetNvLinkState method. GetNvLinkState []struct { // N is the n argument value. N int } // GetNvLinkUtilizationControl holds details about calls to the GetNvLinkUtilizationControl method. GetNvLinkUtilizationControl []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // GetNvLinkUtilizationCounter holds details about calls to the GetNvLinkUtilizationCounter method. GetNvLinkUtilizationCounter []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // GetNvLinkVersion holds details about calls to the GetNvLinkVersion method. GetNvLinkVersion []struct { // N is the n argument value. N int } // GetNvlinkBwMode holds details about calls to the GetNvlinkBwMode method. GetNvlinkBwMode []struct { } // GetNvlinkSupportedBwModes holds details about calls to the GetNvlinkSupportedBwModes method. GetNvlinkSupportedBwModes []struct { } // GetOfaUtilization holds details about calls to the GetOfaUtilization method. GetOfaUtilization []struct { } // GetP2PStatus holds details about calls to the GetP2PStatus method. GetP2PStatus []struct { // Device is the device argument value. Device nvml.Device // GpuP2PCapsIndex is the gpuP2PCapsIndex argument value. GpuP2PCapsIndex nvml.GpuP2PCapsIndex } // GetPciInfo holds details about calls to the GetPciInfo method. GetPciInfo []struct { } // GetPciInfoExt holds details about calls to the GetPciInfoExt method. GetPciInfoExt []struct { } // GetPcieLinkMaxSpeed holds details about calls to the GetPcieLinkMaxSpeed method. GetPcieLinkMaxSpeed []struct { } // GetPcieReplayCounter holds details about calls to the GetPcieReplayCounter method. GetPcieReplayCounter []struct { } // GetPcieSpeed holds details about calls to the GetPcieSpeed method. GetPcieSpeed []struct { } // GetPcieThroughput holds details about calls to the GetPcieThroughput method. GetPcieThroughput []struct { // PcieUtilCounter is the pcieUtilCounter argument value. PcieUtilCounter nvml.PcieUtilCounter } // GetPdi holds details about calls to the GetPdi method. GetPdi []struct { } // GetPerformanceModes holds details about calls to the GetPerformanceModes method. GetPerformanceModes []struct { } // GetPerformanceState holds details about calls to the GetPerformanceState method. GetPerformanceState []struct { } // GetPersistenceMode holds details about calls to the GetPersistenceMode method. GetPersistenceMode []struct { } // GetPgpuMetadataString holds details about calls to the GetPgpuMetadataString method. GetPgpuMetadataString []struct { } // GetPlatformInfo holds details about calls to the GetPlatformInfo method. GetPlatformInfo []struct { } // GetPowerManagementDefaultLimit holds details about calls to the GetPowerManagementDefaultLimit method. GetPowerManagementDefaultLimit []struct { } // GetPowerManagementLimit holds details about calls to the GetPowerManagementLimit method. GetPowerManagementLimit []struct { } // GetPowerManagementLimitConstraints holds details about calls to the GetPowerManagementLimitConstraints method. GetPowerManagementLimitConstraints []struct { } // GetPowerManagementMode holds details about calls to the GetPowerManagementMode method. GetPowerManagementMode []struct { } // GetPowerMizerMode_v1 holds details about calls to the GetPowerMizerMode_v1 method. GetPowerMizerMode_v1 []struct { } // GetPowerSource holds details about calls to the GetPowerSource method. GetPowerSource []struct { } // GetPowerState holds details about calls to the GetPowerState method. GetPowerState []struct { } // GetPowerUsage holds details about calls to the GetPowerUsage method. GetPowerUsage []struct { } // GetProcessUtilization holds details about calls to the GetProcessUtilization method. GetProcessUtilization []struct { // V is the v argument value. V uint64 } // GetProcessesUtilizationInfo holds details about calls to the GetProcessesUtilizationInfo method. GetProcessesUtilizationInfo []struct { } // GetRemappedRows holds details about calls to the GetRemappedRows method. GetRemappedRows []struct { } // GetRepairStatus holds details about calls to the GetRepairStatus method. GetRepairStatus []struct { } // GetRetiredPages holds details about calls to the GetRetiredPages method. GetRetiredPages []struct { // PageRetirementCause is the pageRetirementCause argument value. PageRetirementCause nvml.PageRetirementCause } // GetRetiredPagesPendingStatus holds details about calls to the GetRetiredPagesPendingStatus method. GetRetiredPagesPendingStatus []struct { } // GetRetiredPages_v2 holds details about calls to the GetRetiredPages_v2 method. GetRetiredPages_v2 []struct { // PageRetirementCause is the pageRetirementCause argument value. PageRetirementCause nvml.PageRetirementCause } // GetRowRemapperHistogram holds details about calls to the GetRowRemapperHistogram method. GetRowRemapperHistogram []struct { } // GetRunningProcessDetailList holds details about calls to the GetRunningProcessDetailList method. GetRunningProcessDetailList []struct { } // GetSamples holds details about calls to the GetSamples method. GetSamples []struct { // SamplingType is the samplingType argument value. SamplingType nvml.SamplingType // V is the v argument value. V uint64 } // GetSerial holds details about calls to the GetSerial method. GetSerial []struct { } // GetSramEccErrorStatus holds details about calls to the GetSramEccErrorStatus method. GetSramEccErrorStatus []struct { } // GetSramUniqueUncorrectedEccErrorCounts holds details about calls to the GetSramUniqueUncorrectedEccErrorCounts method. GetSramUniqueUncorrectedEccErrorCounts []struct { // EccSramUniqueUncorrectedErrorCounts is the eccSramUniqueUncorrectedErrorCounts argument value. EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts } // GetSupportedClocksEventReasons holds details about calls to the GetSupportedClocksEventReasons method. GetSupportedClocksEventReasons []struct { } // GetSupportedClocksThrottleReasons holds details about calls to the GetSupportedClocksThrottleReasons method. GetSupportedClocksThrottleReasons []struct { } // GetSupportedEventTypes holds details about calls to the GetSupportedEventTypes method. GetSupportedEventTypes []struct { } // GetSupportedGraphicsClocks holds details about calls to the GetSupportedGraphicsClocks method. GetSupportedGraphicsClocks []struct { // N is the n argument value. N int } // GetSupportedMemoryClocks holds details about calls to the GetSupportedMemoryClocks method. GetSupportedMemoryClocks []struct { } // GetSupportedPerformanceStates holds details about calls to the GetSupportedPerformanceStates method. GetSupportedPerformanceStates []struct { } // GetSupportedVgpus holds details about calls to the GetSupportedVgpus method. GetSupportedVgpus []struct { } // GetTargetFanSpeed holds details about calls to the GetTargetFanSpeed method. GetTargetFanSpeed []struct { // N is the n argument value. N int } // GetTemperature holds details about calls to the GetTemperature method. GetTemperature []struct { // TemperatureSensors is the temperatureSensors argument value. TemperatureSensors nvml.TemperatureSensors } // GetTemperatureThreshold holds details about calls to the GetTemperatureThreshold method. GetTemperatureThreshold []struct { // TemperatureThresholds is the temperatureThresholds argument value. TemperatureThresholds nvml.TemperatureThresholds } // GetTemperatureV holds details about calls to the GetTemperatureV method. GetTemperatureV []struct { } // GetThermalSettings holds details about calls to the GetThermalSettings method. GetThermalSettings []struct { // V is the v argument value. V uint32 } // GetTopologyCommonAncestor holds details about calls to the GetTopologyCommonAncestor method. GetTopologyCommonAncestor []struct { // Device is the device argument value. Device nvml.Device } // GetTopologyNearestGpus holds details about calls to the GetTopologyNearestGpus method. GetTopologyNearestGpus []struct { // GpuTopologyLevel is the gpuTopologyLevel argument value. GpuTopologyLevel nvml.GpuTopologyLevel } // GetTotalEccErrors holds details about calls to the GetTotalEccErrors method. GetTotalEccErrors []struct { // MemoryErrorType is the memoryErrorType argument value. MemoryErrorType nvml.MemoryErrorType // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType } // GetTotalEnergyConsumption holds details about calls to the GetTotalEnergyConsumption method. GetTotalEnergyConsumption []struct { } // GetUUID holds details about calls to the GetUUID method. GetUUID []struct { } // GetUtilizationRates holds details about calls to the GetUtilizationRates method. GetUtilizationRates []struct { } // GetVbiosVersion holds details about calls to the GetVbiosVersion method. GetVbiosVersion []struct { } // GetVgpuCapabilities holds details about calls to the GetVgpuCapabilities method. GetVgpuCapabilities []struct { // DeviceVgpuCapability is the deviceVgpuCapability argument value. DeviceVgpuCapability nvml.DeviceVgpuCapability } // GetVgpuHeterogeneousMode holds details about calls to the GetVgpuHeterogeneousMode method. GetVgpuHeterogeneousMode []struct { } // GetVgpuInstancesUtilizationInfo holds details about calls to the GetVgpuInstancesUtilizationInfo method. GetVgpuInstancesUtilizationInfo []struct { } // GetVgpuMetadata holds details about calls to the GetVgpuMetadata method. GetVgpuMetadata []struct { } // GetVgpuProcessUtilization holds details about calls to the GetVgpuProcessUtilization method. GetVgpuProcessUtilization []struct { // V is the v argument value. V uint64 } // GetVgpuProcessesUtilizationInfo holds details about calls to the GetVgpuProcessesUtilizationInfo method. GetVgpuProcessesUtilizationInfo []struct { } // GetVgpuSchedulerCapabilities holds details about calls to the GetVgpuSchedulerCapabilities method. GetVgpuSchedulerCapabilities []struct { } // GetVgpuSchedulerLog holds details about calls to the GetVgpuSchedulerLog method. GetVgpuSchedulerLog []struct { } // GetVgpuSchedulerState holds details about calls to the GetVgpuSchedulerState method. GetVgpuSchedulerState []struct { } // GetVgpuTypeCreatablePlacements holds details about calls to the GetVgpuTypeCreatablePlacements method. GetVgpuTypeCreatablePlacements []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // GetVgpuTypeSupportedPlacements holds details about calls to the GetVgpuTypeSupportedPlacements method. GetVgpuTypeSupportedPlacements []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // GetVgpuUtilization holds details about calls to the GetVgpuUtilization method. GetVgpuUtilization []struct { // V is the v argument value. V uint64 } // GetViolationStatus holds details about calls to the GetViolationStatus method. GetViolationStatus []struct { // PerfPolicyType is the perfPolicyType argument value. PerfPolicyType nvml.PerfPolicyType } // GetVirtualizationMode holds details about calls to the GetVirtualizationMode method. GetVirtualizationMode []struct { } // GpmMigSampleGet holds details about calls to the GpmMigSampleGet method. GpmMigSampleGet []struct { // N is the n argument value. N int // GpmSample is the gpmSample argument value. GpmSample nvml.GpmSample } // GpmQueryDeviceSupport holds details about calls to the GpmQueryDeviceSupport method. GpmQueryDeviceSupport []struct { } // GpmQueryDeviceSupportV holds details about calls to the GpmQueryDeviceSupportV method. GpmQueryDeviceSupportV []struct { } // GpmQueryIfStreamingEnabled holds details about calls to the GpmQueryIfStreamingEnabled method. GpmQueryIfStreamingEnabled []struct { } // GpmSampleGet holds details about calls to the GpmSampleGet method. GpmSampleGet []struct { // GpmSample is the gpmSample argument value. GpmSample nvml.GpmSample } // GpmSetStreamingEnabled holds details about calls to the GpmSetStreamingEnabled method. GpmSetStreamingEnabled []struct { // V is the v argument value. V uint32 } // IsMigDeviceHandle holds details about calls to the IsMigDeviceHandle method. IsMigDeviceHandle []struct { } // OnSameBoard holds details about calls to the OnSameBoard method. OnSameBoard []struct { // Device is the device argument value. Device nvml.Device } // PowerSmoothingActivatePresetProfile holds details about calls to the PowerSmoothingActivatePresetProfile method. PowerSmoothingActivatePresetProfile []struct { // PowerSmoothingProfile is the powerSmoothingProfile argument value. PowerSmoothingProfile *nvml.PowerSmoothingProfile } // PowerSmoothingSetState holds details about calls to the PowerSmoothingSetState method. PowerSmoothingSetState []struct { // PowerSmoothingState is the powerSmoothingState argument value. PowerSmoothingState *nvml.PowerSmoothingState } // PowerSmoothingUpdatePresetProfileParam holds details about calls to the PowerSmoothingUpdatePresetProfileParam method. PowerSmoothingUpdatePresetProfileParam []struct { // PowerSmoothingProfile is the powerSmoothingProfile argument value. PowerSmoothingProfile *nvml.PowerSmoothingProfile } // ReadWritePRM_v1 holds details about calls to the ReadWritePRM_v1 method. ReadWritePRM_v1 []struct { // PRMTLV_v1 is the pRMTLV_v1 argument value. PRMTLV_v1 *nvml.PRMTLV_v1 } // RegisterEvents holds details about calls to the RegisterEvents method. RegisterEvents []struct { // V is the v argument value. V uint64 // EventSet is the eventSet argument value. EventSet nvml.EventSet } // ResetApplicationsClocks holds details about calls to the ResetApplicationsClocks method. ResetApplicationsClocks []struct { } // ResetGpuLockedClocks holds details about calls to the ResetGpuLockedClocks method. ResetGpuLockedClocks []struct { } // ResetMemoryLockedClocks holds details about calls to the ResetMemoryLockedClocks method. ResetMemoryLockedClocks []struct { } // ResetNvLinkErrorCounters holds details about calls to the ResetNvLinkErrorCounters method. ResetNvLinkErrorCounters []struct { // N is the n argument value. N int } // ResetNvLinkUtilizationCounter holds details about calls to the ResetNvLinkUtilizationCounter method. ResetNvLinkUtilizationCounter []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // SetAPIRestriction holds details about calls to the SetAPIRestriction method. SetAPIRestriction []struct { // RestrictedAPI is the restrictedAPI argument value. RestrictedAPI nvml.RestrictedAPI // EnableState is the enableState argument value. EnableState nvml.EnableState } // SetAccountingMode holds details about calls to the SetAccountingMode method. SetAccountingMode []struct { // EnableState is the enableState argument value. EnableState nvml.EnableState } // SetApplicationsClocks holds details about calls to the SetApplicationsClocks method. SetApplicationsClocks []struct { // V1 is the v1 argument value. V1 uint32 // V2 is the v2 argument value. V2 uint32 } // SetAutoBoostedClocksEnabled holds details about calls to the SetAutoBoostedClocksEnabled method. SetAutoBoostedClocksEnabled []struct { // EnableState is the enableState argument value. EnableState nvml.EnableState } // SetClockOffsets holds details about calls to the SetClockOffsets method. SetClockOffsets []struct { // ClockOffset is the clockOffset argument value. ClockOffset nvml.ClockOffset } // SetComputeMode holds details about calls to the SetComputeMode method. SetComputeMode []struct { // ComputeMode is the computeMode argument value. ComputeMode nvml.ComputeMode } // SetConfComputeUnprotectedMemSize holds details about calls to the SetConfComputeUnprotectedMemSize method. SetConfComputeUnprotectedMemSize []struct { // V is the v argument value. V uint64 } // SetCpuAffinity holds details about calls to the SetCpuAffinity method. SetCpuAffinity []struct { } // SetDefaultAutoBoostedClocksEnabled holds details about calls to the SetDefaultAutoBoostedClocksEnabled method. SetDefaultAutoBoostedClocksEnabled []struct { // EnableState is the enableState argument value. EnableState nvml.EnableState // V is the v argument value. V uint32 } // SetDefaultFanSpeed_v2 holds details about calls to the SetDefaultFanSpeed_v2 method. SetDefaultFanSpeed_v2 []struct { // N is the n argument value. N int } // SetDramEncryptionMode holds details about calls to the SetDramEncryptionMode method. SetDramEncryptionMode []struct { // DramEncryptionInfo is the dramEncryptionInfo argument value. DramEncryptionInfo *nvml.DramEncryptionInfo } // SetDriverModel holds details about calls to the SetDriverModel method. SetDriverModel []struct { // DriverModel is the driverModel argument value. DriverModel nvml.DriverModel // V is the v argument value. V uint32 } // SetEccMode holds details about calls to the SetEccMode method. SetEccMode []struct { // EnableState is the enableState argument value. EnableState nvml.EnableState } // SetFanControlPolicy holds details about calls to the SetFanControlPolicy method. SetFanControlPolicy []struct { // N is the n argument value. N int // FanControlPolicy is the fanControlPolicy argument value. FanControlPolicy nvml.FanControlPolicy } // SetFanSpeed_v2 holds details about calls to the SetFanSpeed_v2 method. SetFanSpeed_v2 []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // SetGpcClkVfOffset holds details about calls to the SetGpcClkVfOffset method. SetGpcClkVfOffset []struct { // N is the n argument value. N int } // SetGpuLockedClocks holds details about calls to the SetGpuLockedClocks method. SetGpuLockedClocks []struct { // V1 is the v1 argument value. V1 uint32 // V2 is the v2 argument value. V2 uint32 } // SetGpuOperationMode holds details about calls to the SetGpuOperationMode method. SetGpuOperationMode []struct { // GpuOperationMode is the gpuOperationMode argument value. GpuOperationMode nvml.GpuOperationMode } // SetMemClkVfOffset holds details about calls to the SetMemClkVfOffset method. SetMemClkVfOffset []struct { // N is the n argument value. N int } // SetMemoryLockedClocks holds details about calls to the SetMemoryLockedClocks method. SetMemoryLockedClocks []struct { // V1 is the v1 argument value. V1 uint32 // V2 is the v2 argument value. V2 uint32 } // SetMigMode holds details about calls to the SetMigMode method. SetMigMode []struct { // N is the n argument value. N int } // SetNvLinkDeviceLowPowerThreshold holds details about calls to the SetNvLinkDeviceLowPowerThreshold method. SetNvLinkDeviceLowPowerThreshold []struct { // NvLinkPowerThres is the nvLinkPowerThres argument value. NvLinkPowerThres *nvml.NvLinkPowerThres } // SetNvLinkUtilizationControl holds details about calls to the SetNvLinkUtilizationControl method. SetNvLinkUtilizationControl []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int // NvLinkUtilizationControl is the nvLinkUtilizationControl argument value. NvLinkUtilizationControl *nvml.NvLinkUtilizationControl // B is the b argument value. B bool } // SetNvlinkBwMode holds details about calls to the SetNvlinkBwMode method. SetNvlinkBwMode []struct { // NvlinkSetBwMode is the nvlinkSetBwMode argument value. NvlinkSetBwMode *nvml.NvlinkSetBwMode } // SetPersistenceMode holds details about calls to the SetPersistenceMode method. SetPersistenceMode []struct { // EnableState is the enableState argument value. EnableState nvml.EnableState } // SetPowerManagementLimit holds details about calls to the SetPowerManagementLimit method. SetPowerManagementLimit []struct { // V is the v argument value. V uint32 } // SetPowerManagementLimit_v2 holds details about calls to the SetPowerManagementLimit_v2 method. SetPowerManagementLimit_v2 []struct { // PowerValue_v2 is the powerValue_v2 argument value. PowerValue_v2 *nvml.PowerValue_v2 } // SetTemperatureThreshold holds details about calls to the SetTemperatureThreshold method. SetTemperatureThreshold []struct { // TemperatureThresholds is the temperatureThresholds argument value. TemperatureThresholds nvml.TemperatureThresholds // N is the n argument value. N int } // SetVgpuCapabilities holds details about calls to the SetVgpuCapabilities method. SetVgpuCapabilities []struct { // DeviceVgpuCapability is the deviceVgpuCapability argument value. DeviceVgpuCapability nvml.DeviceVgpuCapability // EnableState is the enableState argument value. EnableState nvml.EnableState } // SetVgpuHeterogeneousMode holds details about calls to the SetVgpuHeterogeneousMode method. SetVgpuHeterogeneousMode []struct { // VgpuHeterogeneousMode is the vgpuHeterogeneousMode argument value. VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode } // SetVgpuSchedulerState holds details about calls to the SetVgpuSchedulerState method. SetVgpuSchedulerState []struct { // VgpuSchedulerSetState is the vgpuSchedulerSetState argument value. VgpuSchedulerSetState *nvml.VgpuSchedulerSetState } // SetVirtualizationMode holds details about calls to the SetVirtualizationMode method. SetVirtualizationMode []struct { // GpuVirtualizationMode is the gpuVirtualizationMode argument value. GpuVirtualizationMode nvml.GpuVirtualizationMode } // ValidateInforom holds details about calls to the ValidateInforom method. ValidateInforom []struct { } // VgpuTypeGetMaxInstances holds details about calls to the VgpuTypeGetMaxInstances method. VgpuTypeGetMaxInstances []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // WorkloadPowerProfileClearRequestedProfiles holds details about calls to the WorkloadPowerProfileClearRequestedProfiles method. WorkloadPowerProfileClearRequestedProfiles []struct { // WorkloadPowerProfileRequestedProfiles is the workloadPowerProfileRequestedProfiles argument value. WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } // WorkloadPowerProfileGetCurrentProfiles holds details about calls to the WorkloadPowerProfileGetCurrentProfiles method. WorkloadPowerProfileGetCurrentProfiles []struct { } // WorkloadPowerProfileGetProfilesInfo holds details about calls to the WorkloadPowerProfileGetProfilesInfo method. WorkloadPowerProfileGetProfilesInfo []struct { } // WorkloadPowerProfileSetRequestedProfiles holds details about calls to the WorkloadPowerProfileSetRequestedProfiles method. WorkloadPowerProfileSetRequestedProfiles []struct { // WorkloadPowerProfileRequestedProfiles is the workloadPowerProfileRequestedProfiles argument value. WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } } lockClearAccountingPids sync.RWMutex lockClearCpuAffinity sync.RWMutex lockClearEccErrorCounts sync.RWMutex lockClearFieldValues sync.RWMutex lockCreateGpuInstance sync.RWMutex lockCreateGpuInstanceWithPlacement sync.RWMutex lockFreezeNvLinkUtilizationCounter sync.RWMutex lockGetAPIRestriction sync.RWMutex lockGetAccountingBufferSize sync.RWMutex lockGetAccountingMode sync.RWMutex lockGetAccountingPids sync.RWMutex lockGetAccountingStats sync.RWMutex lockGetActiveVgpus sync.RWMutex lockGetAdaptiveClockInfoStatus sync.RWMutex lockGetAddressingMode sync.RWMutex lockGetApplicationsClock sync.RWMutex lockGetArchitecture sync.RWMutex lockGetAttributes sync.RWMutex lockGetAutoBoostedClocksEnabled sync.RWMutex lockGetBAR1MemoryInfo sync.RWMutex lockGetBoardId sync.RWMutex lockGetBoardPartNumber sync.RWMutex lockGetBrand sync.RWMutex lockGetBridgeChipInfo sync.RWMutex lockGetBusType sync.RWMutex lockGetC2cModeInfoV sync.RWMutex lockGetCapabilities sync.RWMutex lockGetClkMonStatus sync.RWMutex lockGetClock sync.RWMutex lockGetClockInfo sync.RWMutex lockGetClockOffsets sync.RWMutex lockGetComputeInstanceId sync.RWMutex lockGetComputeMode sync.RWMutex lockGetComputeRunningProcesses sync.RWMutex lockGetConfComputeGpuAttestationReport sync.RWMutex lockGetConfComputeGpuCertificate sync.RWMutex lockGetConfComputeMemSizeInfo sync.RWMutex lockGetConfComputeProtectedMemoryUsage sync.RWMutex lockGetCoolerInfo sync.RWMutex lockGetCpuAffinity sync.RWMutex lockGetCpuAffinityWithinScope sync.RWMutex lockGetCreatableVgpus sync.RWMutex lockGetCudaComputeCapability sync.RWMutex lockGetCurrPcieLinkGeneration sync.RWMutex lockGetCurrPcieLinkWidth sync.RWMutex lockGetCurrentClockFreqs sync.RWMutex lockGetCurrentClocksEventReasons sync.RWMutex lockGetCurrentClocksThrottleReasons sync.RWMutex lockGetDecoderUtilization sync.RWMutex lockGetDefaultApplicationsClock sync.RWMutex lockGetDefaultEccMode sync.RWMutex lockGetDetailedEccErrors sync.RWMutex lockGetDeviceHandleFromMigDeviceHandle sync.RWMutex lockGetDisplayActive sync.RWMutex lockGetDisplayMode sync.RWMutex lockGetDramEncryptionMode sync.RWMutex lockGetDriverModel sync.RWMutex lockGetDriverModel_v2 sync.RWMutex lockGetDynamicPstatesInfo sync.RWMutex lockGetEccMode sync.RWMutex lockGetEncoderCapacity sync.RWMutex lockGetEncoderSessions sync.RWMutex lockGetEncoderStats sync.RWMutex lockGetEncoderUtilization sync.RWMutex lockGetEnforcedPowerLimit sync.RWMutex lockGetFBCSessions sync.RWMutex lockGetFBCStats sync.RWMutex lockGetFanControlPolicy_v2 sync.RWMutex lockGetFanSpeed sync.RWMutex lockGetFanSpeedRPM sync.RWMutex lockGetFanSpeed_v2 sync.RWMutex lockGetFieldValues sync.RWMutex lockGetGpcClkMinMaxVfOffset sync.RWMutex lockGetGpcClkVfOffset sync.RWMutex lockGetGpuFabricInfo sync.RWMutex lockGetGpuFabricInfoV sync.RWMutex lockGetGpuInstanceById sync.RWMutex lockGetGpuInstanceId sync.RWMutex lockGetGpuInstancePossiblePlacements sync.RWMutex lockGetGpuInstanceProfileInfo sync.RWMutex lockGetGpuInstanceProfileInfoByIdV sync.RWMutex lockGetGpuInstanceProfileInfoV sync.RWMutex lockGetGpuInstanceRemainingCapacity sync.RWMutex lockGetGpuInstances sync.RWMutex lockGetGpuMaxPcieLinkGeneration sync.RWMutex lockGetGpuOperationMode sync.RWMutex lockGetGraphicsRunningProcesses sync.RWMutex lockGetGridLicensableFeatures sync.RWMutex lockGetGspFirmwareMode sync.RWMutex lockGetGspFirmwareVersion sync.RWMutex lockGetHostVgpuMode sync.RWMutex lockGetIndex sync.RWMutex lockGetInforomConfigurationChecksum sync.RWMutex lockGetInforomImageVersion sync.RWMutex lockGetInforomVersion sync.RWMutex lockGetIrqNum sync.RWMutex lockGetJpgUtilization sync.RWMutex lockGetLastBBXFlushTime sync.RWMutex lockGetMPSComputeRunningProcesses sync.RWMutex lockGetMarginTemperature sync.RWMutex lockGetMaxClockInfo sync.RWMutex lockGetMaxCustomerBoostClock sync.RWMutex lockGetMaxMigDeviceCount sync.RWMutex lockGetMaxPcieLinkGeneration sync.RWMutex lockGetMaxPcieLinkWidth sync.RWMutex lockGetMemClkMinMaxVfOffset sync.RWMutex lockGetMemClkVfOffset sync.RWMutex lockGetMemoryAffinity sync.RWMutex lockGetMemoryBusWidth sync.RWMutex lockGetMemoryErrorCounter sync.RWMutex lockGetMemoryInfo sync.RWMutex lockGetMemoryInfo_v2 sync.RWMutex lockGetMigDeviceHandleByIndex sync.RWMutex lockGetMigMode sync.RWMutex lockGetMinMaxClockOfPState sync.RWMutex lockGetMinMaxFanSpeed sync.RWMutex lockGetMinorNumber sync.RWMutex lockGetModuleId sync.RWMutex lockGetMultiGpuBoard sync.RWMutex lockGetName sync.RWMutex lockGetNumFans sync.RWMutex lockGetNumGpuCores sync.RWMutex lockGetNumaNodeId sync.RWMutex lockGetNvLinkCapability sync.RWMutex lockGetNvLinkErrorCounter sync.RWMutex lockGetNvLinkInfo sync.RWMutex lockGetNvLinkRemoteDeviceType sync.RWMutex lockGetNvLinkRemotePciInfo sync.RWMutex lockGetNvLinkState sync.RWMutex lockGetNvLinkUtilizationControl sync.RWMutex lockGetNvLinkUtilizationCounter sync.RWMutex lockGetNvLinkVersion sync.RWMutex lockGetNvlinkBwMode sync.RWMutex lockGetNvlinkSupportedBwModes sync.RWMutex lockGetOfaUtilization sync.RWMutex lockGetP2PStatus sync.RWMutex lockGetPciInfo sync.RWMutex lockGetPciInfoExt sync.RWMutex lockGetPcieLinkMaxSpeed sync.RWMutex lockGetPcieReplayCounter sync.RWMutex lockGetPcieSpeed sync.RWMutex lockGetPcieThroughput sync.RWMutex lockGetPdi sync.RWMutex lockGetPerformanceModes sync.RWMutex lockGetPerformanceState sync.RWMutex lockGetPersistenceMode sync.RWMutex lockGetPgpuMetadataString sync.RWMutex lockGetPlatformInfo sync.RWMutex lockGetPowerManagementDefaultLimit sync.RWMutex lockGetPowerManagementLimit sync.RWMutex lockGetPowerManagementLimitConstraints sync.RWMutex lockGetPowerManagementMode sync.RWMutex lockGetPowerMizerMode_v1 sync.RWMutex lockGetPowerSource sync.RWMutex lockGetPowerState sync.RWMutex lockGetPowerUsage sync.RWMutex lockGetProcessUtilization sync.RWMutex lockGetProcessesUtilizationInfo sync.RWMutex lockGetRemappedRows sync.RWMutex lockGetRepairStatus sync.RWMutex lockGetRetiredPages sync.RWMutex lockGetRetiredPagesPendingStatus sync.RWMutex lockGetRetiredPages_v2 sync.RWMutex lockGetRowRemapperHistogram sync.RWMutex lockGetRunningProcessDetailList sync.RWMutex lockGetSamples sync.RWMutex lockGetSerial sync.RWMutex lockGetSramEccErrorStatus sync.RWMutex lockGetSramUniqueUncorrectedEccErrorCounts sync.RWMutex lockGetSupportedClocksEventReasons sync.RWMutex lockGetSupportedClocksThrottleReasons sync.RWMutex lockGetSupportedEventTypes sync.RWMutex lockGetSupportedGraphicsClocks sync.RWMutex lockGetSupportedMemoryClocks sync.RWMutex lockGetSupportedPerformanceStates sync.RWMutex lockGetSupportedVgpus sync.RWMutex lockGetTargetFanSpeed sync.RWMutex lockGetTemperature sync.RWMutex lockGetTemperatureThreshold sync.RWMutex lockGetTemperatureV sync.RWMutex lockGetThermalSettings sync.RWMutex lockGetTopologyCommonAncestor sync.RWMutex lockGetTopologyNearestGpus sync.RWMutex lockGetTotalEccErrors sync.RWMutex lockGetTotalEnergyConsumption sync.RWMutex lockGetUUID sync.RWMutex lockGetUtilizationRates sync.RWMutex lockGetVbiosVersion sync.RWMutex lockGetVgpuCapabilities sync.RWMutex lockGetVgpuHeterogeneousMode sync.RWMutex lockGetVgpuInstancesUtilizationInfo sync.RWMutex lockGetVgpuMetadata sync.RWMutex lockGetVgpuProcessUtilization sync.RWMutex lockGetVgpuProcessesUtilizationInfo sync.RWMutex lockGetVgpuSchedulerCapabilities sync.RWMutex lockGetVgpuSchedulerLog sync.RWMutex lockGetVgpuSchedulerState sync.RWMutex lockGetVgpuTypeCreatablePlacements sync.RWMutex lockGetVgpuTypeSupportedPlacements sync.RWMutex lockGetVgpuUtilization sync.RWMutex lockGetViolationStatus sync.RWMutex lockGetVirtualizationMode sync.RWMutex lockGpmMigSampleGet sync.RWMutex lockGpmQueryDeviceSupport sync.RWMutex lockGpmQueryDeviceSupportV sync.RWMutex lockGpmQueryIfStreamingEnabled sync.RWMutex lockGpmSampleGet sync.RWMutex lockGpmSetStreamingEnabled sync.RWMutex lockIsMigDeviceHandle sync.RWMutex lockOnSameBoard sync.RWMutex lockPowerSmoothingActivatePresetProfile sync.RWMutex lockPowerSmoothingSetState sync.RWMutex lockPowerSmoothingUpdatePresetProfileParam sync.RWMutex lockReadWritePRM_v1 sync.RWMutex lockRegisterEvents sync.RWMutex lockResetApplicationsClocks sync.RWMutex lockResetGpuLockedClocks sync.RWMutex lockResetMemoryLockedClocks sync.RWMutex lockResetNvLinkErrorCounters sync.RWMutex lockResetNvLinkUtilizationCounter sync.RWMutex lockSetAPIRestriction sync.RWMutex lockSetAccountingMode sync.RWMutex lockSetApplicationsClocks sync.RWMutex lockSetAutoBoostedClocksEnabled sync.RWMutex lockSetClockOffsets sync.RWMutex lockSetComputeMode sync.RWMutex lockSetConfComputeUnprotectedMemSize sync.RWMutex lockSetCpuAffinity sync.RWMutex lockSetDefaultAutoBoostedClocksEnabled sync.RWMutex lockSetDefaultFanSpeed_v2 sync.RWMutex lockSetDramEncryptionMode sync.RWMutex lockSetDriverModel sync.RWMutex lockSetEccMode sync.RWMutex lockSetFanControlPolicy sync.RWMutex lockSetFanSpeed_v2 sync.RWMutex lockSetGpcClkVfOffset sync.RWMutex lockSetGpuLockedClocks sync.RWMutex lockSetGpuOperationMode sync.RWMutex lockSetMemClkVfOffset sync.RWMutex lockSetMemoryLockedClocks sync.RWMutex lockSetMigMode sync.RWMutex lockSetNvLinkDeviceLowPowerThreshold sync.RWMutex lockSetNvLinkUtilizationControl sync.RWMutex lockSetNvlinkBwMode sync.RWMutex lockSetPersistenceMode sync.RWMutex lockSetPowerManagementLimit sync.RWMutex lockSetPowerManagementLimit_v2 sync.RWMutex lockSetTemperatureThreshold sync.RWMutex lockSetVgpuCapabilities sync.RWMutex lockSetVgpuHeterogeneousMode sync.RWMutex lockSetVgpuSchedulerState sync.RWMutex lockSetVirtualizationMode sync.RWMutex lockValidateInforom sync.RWMutex lockVgpuTypeGetMaxInstances sync.RWMutex lockWorkloadPowerProfileClearRequestedProfiles sync.RWMutex lockWorkloadPowerProfileGetCurrentProfiles sync.RWMutex lockWorkloadPowerProfileGetProfilesInfo sync.RWMutex lockWorkloadPowerProfileSetRequestedProfiles sync.RWMutex } // ClearAccountingPids calls ClearAccountingPidsFunc. func (mock *Device) ClearAccountingPids() nvml.Return { if mock.ClearAccountingPidsFunc == nil { panic("Device.ClearAccountingPidsFunc: method is nil but Device.ClearAccountingPids was just called") } callInfo := struct { }{} mock.lockClearAccountingPids.Lock() mock.calls.ClearAccountingPids = append(mock.calls.ClearAccountingPids, callInfo) mock.lockClearAccountingPids.Unlock() return mock.ClearAccountingPidsFunc() } // ClearAccountingPidsCalls gets all the calls that were made to ClearAccountingPids. // Check the length with: // // len(mockedDevice.ClearAccountingPidsCalls()) func (mock *Device) ClearAccountingPidsCalls() []struct { } { var calls []struct { } mock.lockClearAccountingPids.RLock() calls = mock.calls.ClearAccountingPids mock.lockClearAccountingPids.RUnlock() return calls } // ClearCpuAffinity calls ClearCpuAffinityFunc. func (mock *Device) ClearCpuAffinity() nvml.Return { if mock.ClearCpuAffinityFunc == nil { panic("Device.ClearCpuAffinityFunc: method is nil but Device.ClearCpuAffinity was just called") } callInfo := struct { }{} mock.lockClearCpuAffinity.Lock() mock.calls.ClearCpuAffinity = append(mock.calls.ClearCpuAffinity, callInfo) mock.lockClearCpuAffinity.Unlock() return mock.ClearCpuAffinityFunc() } // ClearCpuAffinityCalls gets all the calls that were made to ClearCpuAffinity. // Check the length with: // // len(mockedDevice.ClearCpuAffinityCalls()) func (mock *Device) ClearCpuAffinityCalls() []struct { } { var calls []struct { } mock.lockClearCpuAffinity.RLock() calls = mock.calls.ClearCpuAffinity mock.lockClearCpuAffinity.RUnlock() return calls } // ClearEccErrorCounts calls ClearEccErrorCountsFunc. func (mock *Device) ClearEccErrorCounts(eccCounterType nvml.EccCounterType) nvml.Return { if mock.ClearEccErrorCountsFunc == nil { panic("Device.ClearEccErrorCountsFunc: method is nil but Device.ClearEccErrorCounts was just called") } callInfo := struct { EccCounterType nvml.EccCounterType }{ EccCounterType: eccCounterType, } mock.lockClearEccErrorCounts.Lock() mock.calls.ClearEccErrorCounts = append(mock.calls.ClearEccErrorCounts, callInfo) mock.lockClearEccErrorCounts.Unlock() return mock.ClearEccErrorCountsFunc(eccCounterType) } // ClearEccErrorCountsCalls gets all the calls that were made to ClearEccErrorCounts. // Check the length with: // // len(mockedDevice.ClearEccErrorCountsCalls()) func (mock *Device) ClearEccErrorCountsCalls() []struct { EccCounterType nvml.EccCounterType } { var calls []struct { EccCounterType nvml.EccCounterType } mock.lockClearEccErrorCounts.RLock() calls = mock.calls.ClearEccErrorCounts mock.lockClearEccErrorCounts.RUnlock() return calls } // ClearFieldValues calls ClearFieldValuesFunc. func (mock *Device) ClearFieldValues(fieldValues []nvml.FieldValue) nvml.Return { if mock.ClearFieldValuesFunc == nil { panic("Device.ClearFieldValuesFunc: method is nil but Device.ClearFieldValues was just called") } callInfo := struct { FieldValues []nvml.FieldValue }{ FieldValues: fieldValues, } mock.lockClearFieldValues.Lock() mock.calls.ClearFieldValues = append(mock.calls.ClearFieldValues, callInfo) mock.lockClearFieldValues.Unlock() return mock.ClearFieldValuesFunc(fieldValues) } // ClearFieldValuesCalls gets all the calls that were made to ClearFieldValues. // Check the length with: // // len(mockedDevice.ClearFieldValuesCalls()) func (mock *Device) ClearFieldValuesCalls() []struct { FieldValues []nvml.FieldValue } { var calls []struct { FieldValues []nvml.FieldValue } mock.lockClearFieldValues.RLock() calls = mock.calls.ClearFieldValues mock.lockClearFieldValues.RUnlock() return calls } // CreateGpuInstance calls CreateGpuInstanceFunc. func (mock *Device) CreateGpuInstance(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (nvml.GpuInstance, nvml.Return) { if mock.CreateGpuInstanceFunc == nil { panic("Device.CreateGpuInstanceFunc: method is nil but Device.CreateGpuInstance was just called") } callInfo := struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockCreateGpuInstance.Lock() mock.calls.CreateGpuInstance = append(mock.calls.CreateGpuInstance, callInfo) mock.lockCreateGpuInstance.Unlock() return mock.CreateGpuInstanceFunc(gpuInstanceProfileInfo) } // CreateGpuInstanceCalls gets all the calls that were made to CreateGpuInstance. // Check the length with: // // len(mockedDevice.CreateGpuInstanceCalls()) func (mock *Device) CreateGpuInstanceCalls() []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockCreateGpuInstance.RLock() calls = mock.calls.CreateGpuInstance mock.lockCreateGpuInstance.RUnlock() return calls } // CreateGpuInstanceWithPlacement calls CreateGpuInstanceWithPlacementFunc. func (mock *Device) CreateGpuInstanceWithPlacement(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo, gpuInstancePlacement *nvml.GpuInstancePlacement) (nvml.GpuInstance, nvml.Return) { if mock.CreateGpuInstanceWithPlacementFunc == nil { panic("Device.CreateGpuInstanceWithPlacementFunc: method is nil but Device.CreateGpuInstanceWithPlacement was just called") } callInfo := struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo GpuInstancePlacement *nvml.GpuInstancePlacement }{ GpuInstanceProfileInfo: gpuInstanceProfileInfo, GpuInstancePlacement: gpuInstancePlacement, } mock.lockCreateGpuInstanceWithPlacement.Lock() mock.calls.CreateGpuInstanceWithPlacement = append(mock.calls.CreateGpuInstanceWithPlacement, callInfo) mock.lockCreateGpuInstanceWithPlacement.Unlock() return mock.CreateGpuInstanceWithPlacementFunc(gpuInstanceProfileInfo, gpuInstancePlacement) } // CreateGpuInstanceWithPlacementCalls gets all the calls that were made to CreateGpuInstanceWithPlacement. // Check the length with: // // len(mockedDevice.CreateGpuInstanceWithPlacementCalls()) func (mock *Device) CreateGpuInstanceWithPlacementCalls() []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo GpuInstancePlacement *nvml.GpuInstancePlacement } { var calls []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo GpuInstancePlacement *nvml.GpuInstancePlacement } mock.lockCreateGpuInstanceWithPlacement.RLock() calls = mock.calls.CreateGpuInstanceWithPlacement mock.lockCreateGpuInstanceWithPlacement.RUnlock() return calls } // FreezeNvLinkUtilizationCounter calls FreezeNvLinkUtilizationCounterFunc. func (mock *Device) FreezeNvLinkUtilizationCounter(n1 int, n2 int, enableState nvml.EnableState) nvml.Return { if mock.FreezeNvLinkUtilizationCounterFunc == nil { panic("Device.FreezeNvLinkUtilizationCounterFunc: method is nil but Device.FreezeNvLinkUtilizationCounter was just called") } callInfo := struct { N1 int N2 int EnableState nvml.EnableState }{ N1: n1, N2: n2, EnableState: enableState, } mock.lockFreezeNvLinkUtilizationCounter.Lock() mock.calls.FreezeNvLinkUtilizationCounter = append(mock.calls.FreezeNvLinkUtilizationCounter, callInfo) mock.lockFreezeNvLinkUtilizationCounter.Unlock() return mock.FreezeNvLinkUtilizationCounterFunc(n1, n2, enableState) } // FreezeNvLinkUtilizationCounterCalls gets all the calls that were made to FreezeNvLinkUtilizationCounter. // Check the length with: // // len(mockedDevice.FreezeNvLinkUtilizationCounterCalls()) func (mock *Device) FreezeNvLinkUtilizationCounterCalls() []struct { N1 int N2 int EnableState nvml.EnableState } { var calls []struct { N1 int N2 int EnableState nvml.EnableState } mock.lockFreezeNvLinkUtilizationCounter.RLock() calls = mock.calls.FreezeNvLinkUtilizationCounter mock.lockFreezeNvLinkUtilizationCounter.RUnlock() return calls } // GetAPIRestriction calls GetAPIRestrictionFunc. func (mock *Device) GetAPIRestriction(restrictedAPI nvml.RestrictedAPI) (nvml.EnableState, nvml.Return) { if mock.GetAPIRestrictionFunc == nil { panic("Device.GetAPIRestrictionFunc: method is nil but Device.GetAPIRestriction was just called") } callInfo := struct { RestrictedAPI nvml.RestrictedAPI }{ RestrictedAPI: restrictedAPI, } mock.lockGetAPIRestriction.Lock() mock.calls.GetAPIRestriction = append(mock.calls.GetAPIRestriction, callInfo) mock.lockGetAPIRestriction.Unlock() return mock.GetAPIRestrictionFunc(restrictedAPI) } // GetAPIRestrictionCalls gets all the calls that were made to GetAPIRestriction. // Check the length with: // // len(mockedDevice.GetAPIRestrictionCalls()) func (mock *Device) GetAPIRestrictionCalls() []struct { RestrictedAPI nvml.RestrictedAPI } { var calls []struct { RestrictedAPI nvml.RestrictedAPI } mock.lockGetAPIRestriction.RLock() calls = mock.calls.GetAPIRestriction mock.lockGetAPIRestriction.RUnlock() return calls } // GetAccountingBufferSize calls GetAccountingBufferSizeFunc. func (mock *Device) GetAccountingBufferSize() (int, nvml.Return) { if mock.GetAccountingBufferSizeFunc == nil { panic("Device.GetAccountingBufferSizeFunc: method is nil but Device.GetAccountingBufferSize was just called") } callInfo := struct { }{} mock.lockGetAccountingBufferSize.Lock() mock.calls.GetAccountingBufferSize = append(mock.calls.GetAccountingBufferSize, callInfo) mock.lockGetAccountingBufferSize.Unlock() return mock.GetAccountingBufferSizeFunc() } // GetAccountingBufferSizeCalls gets all the calls that were made to GetAccountingBufferSize. // Check the length with: // // len(mockedDevice.GetAccountingBufferSizeCalls()) func (mock *Device) GetAccountingBufferSizeCalls() []struct { } { var calls []struct { } mock.lockGetAccountingBufferSize.RLock() calls = mock.calls.GetAccountingBufferSize mock.lockGetAccountingBufferSize.RUnlock() return calls } // GetAccountingMode calls GetAccountingModeFunc. func (mock *Device) GetAccountingMode() (nvml.EnableState, nvml.Return) { if mock.GetAccountingModeFunc == nil { panic("Device.GetAccountingModeFunc: method is nil but Device.GetAccountingMode was just called") } callInfo := struct { }{} mock.lockGetAccountingMode.Lock() mock.calls.GetAccountingMode = append(mock.calls.GetAccountingMode, callInfo) mock.lockGetAccountingMode.Unlock() return mock.GetAccountingModeFunc() } // GetAccountingModeCalls gets all the calls that were made to GetAccountingMode. // Check the length with: // // len(mockedDevice.GetAccountingModeCalls()) func (mock *Device) GetAccountingModeCalls() []struct { } { var calls []struct { } mock.lockGetAccountingMode.RLock() calls = mock.calls.GetAccountingMode mock.lockGetAccountingMode.RUnlock() return calls } // GetAccountingPids calls GetAccountingPidsFunc. func (mock *Device) GetAccountingPids() ([]int, nvml.Return) { if mock.GetAccountingPidsFunc == nil { panic("Device.GetAccountingPidsFunc: method is nil but Device.GetAccountingPids was just called") } callInfo := struct { }{} mock.lockGetAccountingPids.Lock() mock.calls.GetAccountingPids = append(mock.calls.GetAccountingPids, callInfo) mock.lockGetAccountingPids.Unlock() return mock.GetAccountingPidsFunc() } // GetAccountingPidsCalls gets all the calls that were made to GetAccountingPids. // Check the length with: // // len(mockedDevice.GetAccountingPidsCalls()) func (mock *Device) GetAccountingPidsCalls() []struct { } { var calls []struct { } mock.lockGetAccountingPids.RLock() calls = mock.calls.GetAccountingPids mock.lockGetAccountingPids.RUnlock() return calls } // GetAccountingStats calls GetAccountingStatsFunc. func (mock *Device) GetAccountingStats(v uint32) (nvml.AccountingStats, nvml.Return) { if mock.GetAccountingStatsFunc == nil { panic("Device.GetAccountingStatsFunc: method is nil but Device.GetAccountingStats was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockGetAccountingStats.Lock() mock.calls.GetAccountingStats = append(mock.calls.GetAccountingStats, callInfo) mock.lockGetAccountingStats.Unlock() return mock.GetAccountingStatsFunc(v) } // GetAccountingStatsCalls gets all the calls that were made to GetAccountingStats. // Check the length with: // // len(mockedDevice.GetAccountingStatsCalls()) func (mock *Device) GetAccountingStatsCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockGetAccountingStats.RLock() calls = mock.calls.GetAccountingStats mock.lockGetAccountingStats.RUnlock() return calls } // GetActiveVgpus calls GetActiveVgpusFunc. func (mock *Device) GetActiveVgpus() ([]nvml.VgpuInstance, nvml.Return) { if mock.GetActiveVgpusFunc == nil { panic("Device.GetActiveVgpusFunc: method is nil but Device.GetActiveVgpus was just called") } callInfo := struct { }{} mock.lockGetActiveVgpus.Lock() mock.calls.GetActiveVgpus = append(mock.calls.GetActiveVgpus, callInfo) mock.lockGetActiveVgpus.Unlock() return mock.GetActiveVgpusFunc() } // GetActiveVgpusCalls gets all the calls that were made to GetActiveVgpus. // Check the length with: // // len(mockedDevice.GetActiveVgpusCalls()) func (mock *Device) GetActiveVgpusCalls() []struct { } { var calls []struct { } mock.lockGetActiveVgpus.RLock() calls = mock.calls.GetActiveVgpus mock.lockGetActiveVgpus.RUnlock() return calls } // GetAdaptiveClockInfoStatus calls GetAdaptiveClockInfoStatusFunc. func (mock *Device) GetAdaptiveClockInfoStatus() (uint32, nvml.Return) { if mock.GetAdaptiveClockInfoStatusFunc == nil { panic("Device.GetAdaptiveClockInfoStatusFunc: method is nil but Device.GetAdaptiveClockInfoStatus was just called") } callInfo := struct { }{} mock.lockGetAdaptiveClockInfoStatus.Lock() mock.calls.GetAdaptiveClockInfoStatus = append(mock.calls.GetAdaptiveClockInfoStatus, callInfo) mock.lockGetAdaptiveClockInfoStatus.Unlock() return mock.GetAdaptiveClockInfoStatusFunc() } // GetAdaptiveClockInfoStatusCalls gets all the calls that were made to GetAdaptiveClockInfoStatus. // Check the length with: // // len(mockedDevice.GetAdaptiveClockInfoStatusCalls()) func (mock *Device) GetAdaptiveClockInfoStatusCalls() []struct { } { var calls []struct { } mock.lockGetAdaptiveClockInfoStatus.RLock() calls = mock.calls.GetAdaptiveClockInfoStatus mock.lockGetAdaptiveClockInfoStatus.RUnlock() return calls } // GetAddressingMode calls GetAddressingModeFunc. func (mock *Device) GetAddressingMode() (nvml.DeviceAddressingMode, nvml.Return) { if mock.GetAddressingModeFunc == nil { panic("Device.GetAddressingModeFunc: method is nil but Device.GetAddressingMode was just called") } callInfo := struct { }{} mock.lockGetAddressingMode.Lock() mock.calls.GetAddressingMode = append(mock.calls.GetAddressingMode, callInfo) mock.lockGetAddressingMode.Unlock() return mock.GetAddressingModeFunc() } // GetAddressingModeCalls gets all the calls that were made to GetAddressingMode. // Check the length with: // // len(mockedDevice.GetAddressingModeCalls()) func (mock *Device) GetAddressingModeCalls() []struct { } { var calls []struct { } mock.lockGetAddressingMode.RLock() calls = mock.calls.GetAddressingMode mock.lockGetAddressingMode.RUnlock() return calls } // GetApplicationsClock calls GetApplicationsClockFunc. func (mock *Device) GetApplicationsClock(clockType nvml.ClockType) (uint32, nvml.Return) { if mock.GetApplicationsClockFunc == nil { panic("Device.GetApplicationsClockFunc: method is nil but Device.GetApplicationsClock was just called") } callInfo := struct { ClockType nvml.ClockType }{ ClockType: clockType, } mock.lockGetApplicationsClock.Lock() mock.calls.GetApplicationsClock = append(mock.calls.GetApplicationsClock, callInfo) mock.lockGetApplicationsClock.Unlock() return mock.GetApplicationsClockFunc(clockType) } // GetApplicationsClockCalls gets all the calls that were made to GetApplicationsClock. // Check the length with: // // len(mockedDevice.GetApplicationsClockCalls()) func (mock *Device) GetApplicationsClockCalls() []struct { ClockType nvml.ClockType } { var calls []struct { ClockType nvml.ClockType } mock.lockGetApplicationsClock.RLock() calls = mock.calls.GetApplicationsClock mock.lockGetApplicationsClock.RUnlock() return calls } // GetArchitecture calls GetArchitectureFunc. func (mock *Device) GetArchitecture() (nvml.DeviceArchitecture, nvml.Return) { if mock.GetArchitectureFunc == nil { panic("Device.GetArchitectureFunc: method is nil but Device.GetArchitecture was just called") } callInfo := struct { }{} mock.lockGetArchitecture.Lock() mock.calls.GetArchitecture = append(mock.calls.GetArchitecture, callInfo) mock.lockGetArchitecture.Unlock() return mock.GetArchitectureFunc() } // GetArchitectureCalls gets all the calls that were made to GetArchitecture. // Check the length with: // // len(mockedDevice.GetArchitectureCalls()) func (mock *Device) GetArchitectureCalls() []struct { } { var calls []struct { } mock.lockGetArchitecture.RLock() calls = mock.calls.GetArchitecture mock.lockGetArchitecture.RUnlock() return calls } // GetAttributes calls GetAttributesFunc. func (mock *Device) GetAttributes() (nvml.DeviceAttributes, nvml.Return) { if mock.GetAttributesFunc == nil { panic("Device.GetAttributesFunc: method is nil but Device.GetAttributes was just called") } callInfo := struct { }{} mock.lockGetAttributes.Lock() mock.calls.GetAttributes = append(mock.calls.GetAttributes, callInfo) mock.lockGetAttributes.Unlock() return mock.GetAttributesFunc() } // GetAttributesCalls gets all the calls that were made to GetAttributes. // Check the length with: // // len(mockedDevice.GetAttributesCalls()) func (mock *Device) GetAttributesCalls() []struct { } { var calls []struct { } mock.lockGetAttributes.RLock() calls = mock.calls.GetAttributes mock.lockGetAttributes.RUnlock() return calls } // GetAutoBoostedClocksEnabled calls GetAutoBoostedClocksEnabledFunc. func (mock *Device) GetAutoBoostedClocksEnabled() (nvml.EnableState, nvml.EnableState, nvml.Return) { if mock.GetAutoBoostedClocksEnabledFunc == nil { panic("Device.GetAutoBoostedClocksEnabledFunc: method is nil but Device.GetAutoBoostedClocksEnabled was just called") } callInfo := struct { }{} mock.lockGetAutoBoostedClocksEnabled.Lock() mock.calls.GetAutoBoostedClocksEnabled = append(mock.calls.GetAutoBoostedClocksEnabled, callInfo) mock.lockGetAutoBoostedClocksEnabled.Unlock() return mock.GetAutoBoostedClocksEnabledFunc() } // GetAutoBoostedClocksEnabledCalls gets all the calls that were made to GetAutoBoostedClocksEnabled. // Check the length with: // // len(mockedDevice.GetAutoBoostedClocksEnabledCalls()) func (mock *Device) GetAutoBoostedClocksEnabledCalls() []struct { } { var calls []struct { } mock.lockGetAutoBoostedClocksEnabled.RLock() calls = mock.calls.GetAutoBoostedClocksEnabled mock.lockGetAutoBoostedClocksEnabled.RUnlock() return calls } // GetBAR1MemoryInfo calls GetBAR1MemoryInfoFunc. func (mock *Device) GetBAR1MemoryInfo() (nvml.BAR1Memory, nvml.Return) { if mock.GetBAR1MemoryInfoFunc == nil { panic("Device.GetBAR1MemoryInfoFunc: method is nil but Device.GetBAR1MemoryInfo was just called") } callInfo := struct { }{} mock.lockGetBAR1MemoryInfo.Lock() mock.calls.GetBAR1MemoryInfo = append(mock.calls.GetBAR1MemoryInfo, callInfo) mock.lockGetBAR1MemoryInfo.Unlock() return mock.GetBAR1MemoryInfoFunc() } // GetBAR1MemoryInfoCalls gets all the calls that were made to GetBAR1MemoryInfo. // Check the length with: // // len(mockedDevice.GetBAR1MemoryInfoCalls()) func (mock *Device) GetBAR1MemoryInfoCalls() []struct { } { var calls []struct { } mock.lockGetBAR1MemoryInfo.RLock() calls = mock.calls.GetBAR1MemoryInfo mock.lockGetBAR1MemoryInfo.RUnlock() return calls } // GetBoardId calls GetBoardIdFunc. func (mock *Device) GetBoardId() (uint32, nvml.Return) { if mock.GetBoardIdFunc == nil { panic("Device.GetBoardIdFunc: method is nil but Device.GetBoardId was just called") } callInfo := struct { }{} mock.lockGetBoardId.Lock() mock.calls.GetBoardId = append(mock.calls.GetBoardId, callInfo) mock.lockGetBoardId.Unlock() return mock.GetBoardIdFunc() } // GetBoardIdCalls gets all the calls that were made to GetBoardId. // Check the length with: // // len(mockedDevice.GetBoardIdCalls()) func (mock *Device) GetBoardIdCalls() []struct { } { var calls []struct { } mock.lockGetBoardId.RLock() calls = mock.calls.GetBoardId mock.lockGetBoardId.RUnlock() return calls } // GetBoardPartNumber calls GetBoardPartNumberFunc. func (mock *Device) GetBoardPartNumber() (string, nvml.Return) { if mock.GetBoardPartNumberFunc == nil { panic("Device.GetBoardPartNumberFunc: method is nil but Device.GetBoardPartNumber was just called") } callInfo := struct { }{} mock.lockGetBoardPartNumber.Lock() mock.calls.GetBoardPartNumber = append(mock.calls.GetBoardPartNumber, callInfo) mock.lockGetBoardPartNumber.Unlock() return mock.GetBoardPartNumberFunc() } // GetBoardPartNumberCalls gets all the calls that were made to GetBoardPartNumber. // Check the length with: // // len(mockedDevice.GetBoardPartNumberCalls()) func (mock *Device) GetBoardPartNumberCalls() []struct { } { var calls []struct { } mock.lockGetBoardPartNumber.RLock() calls = mock.calls.GetBoardPartNumber mock.lockGetBoardPartNumber.RUnlock() return calls } // GetBrand calls GetBrandFunc. func (mock *Device) GetBrand() (nvml.BrandType, nvml.Return) { if mock.GetBrandFunc == nil { panic("Device.GetBrandFunc: method is nil but Device.GetBrand was just called") } callInfo := struct { }{} mock.lockGetBrand.Lock() mock.calls.GetBrand = append(mock.calls.GetBrand, callInfo) mock.lockGetBrand.Unlock() return mock.GetBrandFunc() } // GetBrandCalls gets all the calls that were made to GetBrand. // Check the length with: // // len(mockedDevice.GetBrandCalls()) func (mock *Device) GetBrandCalls() []struct { } { var calls []struct { } mock.lockGetBrand.RLock() calls = mock.calls.GetBrand mock.lockGetBrand.RUnlock() return calls } // GetBridgeChipInfo calls GetBridgeChipInfoFunc. func (mock *Device) GetBridgeChipInfo() (nvml.BridgeChipHierarchy, nvml.Return) { if mock.GetBridgeChipInfoFunc == nil { panic("Device.GetBridgeChipInfoFunc: method is nil but Device.GetBridgeChipInfo was just called") } callInfo := struct { }{} mock.lockGetBridgeChipInfo.Lock() mock.calls.GetBridgeChipInfo = append(mock.calls.GetBridgeChipInfo, callInfo) mock.lockGetBridgeChipInfo.Unlock() return mock.GetBridgeChipInfoFunc() } // GetBridgeChipInfoCalls gets all the calls that were made to GetBridgeChipInfo. // Check the length with: // // len(mockedDevice.GetBridgeChipInfoCalls()) func (mock *Device) GetBridgeChipInfoCalls() []struct { } { var calls []struct { } mock.lockGetBridgeChipInfo.RLock() calls = mock.calls.GetBridgeChipInfo mock.lockGetBridgeChipInfo.RUnlock() return calls } // GetBusType calls GetBusTypeFunc. func (mock *Device) GetBusType() (nvml.BusType, nvml.Return) { if mock.GetBusTypeFunc == nil { panic("Device.GetBusTypeFunc: method is nil but Device.GetBusType was just called") } callInfo := struct { }{} mock.lockGetBusType.Lock() mock.calls.GetBusType = append(mock.calls.GetBusType, callInfo) mock.lockGetBusType.Unlock() return mock.GetBusTypeFunc() } // GetBusTypeCalls gets all the calls that were made to GetBusType. // Check the length with: // // len(mockedDevice.GetBusTypeCalls()) func (mock *Device) GetBusTypeCalls() []struct { } { var calls []struct { } mock.lockGetBusType.RLock() calls = mock.calls.GetBusType mock.lockGetBusType.RUnlock() return calls } // GetC2cModeInfoV calls GetC2cModeInfoVFunc. func (mock *Device) GetC2cModeInfoV() nvml.C2cModeInfoHandler { if mock.GetC2cModeInfoVFunc == nil { panic("Device.GetC2cModeInfoVFunc: method is nil but Device.GetC2cModeInfoV was just called") } callInfo := struct { }{} mock.lockGetC2cModeInfoV.Lock() mock.calls.GetC2cModeInfoV = append(mock.calls.GetC2cModeInfoV, callInfo) mock.lockGetC2cModeInfoV.Unlock() return mock.GetC2cModeInfoVFunc() } // GetC2cModeInfoVCalls gets all the calls that were made to GetC2cModeInfoV. // Check the length with: // // len(mockedDevice.GetC2cModeInfoVCalls()) func (mock *Device) GetC2cModeInfoVCalls() []struct { } { var calls []struct { } mock.lockGetC2cModeInfoV.RLock() calls = mock.calls.GetC2cModeInfoV mock.lockGetC2cModeInfoV.RUnlock() return calls } // GetCapabilities calls GetCapabilitiesFunc. func (mock *Device) GetCapabilities() (nvml.DeviceCapabilities, nvml.Return) { if mock.GetCapabilitiesFunc == nil { panic("Device.GetCapabilitiesFunc: method is nil but Device.GetCapabilities was just called") } callInfo := struct { }{} mock.lockGetCapabilities.Lock() mock.calls.GetCapabilities = append(mock.calls.GetCapabilities, callInfo) mock.lockGetCapabilities.Unlock() return mock.GetCapabilitiesFunc() } // GetCapabilitiesCalls gets all the calls that were made to GetCapabilities. // Check the length with: // // len(mockedDevice.GetCapabilitiesCalls()) func (mock *Device) GetCapabilitiesCalls() []struct { } { var calls []struct { } mock.lockGetCapabilities.RLock() calls = mock.calls.GetCapabilities mock.lockGetCapabilities.RUnlock() return calls } // GetClkMonStatus calls GetClkMonStatusFunc. func (mock *Device) GetClkMonStatus() (nvml.ClkMonStatus, nvml.Return) { if mock.GetClkMonStatusFunc == nil { panic("Device.GetClkMonStatusFunc: method is nil but Device.GetClkMonStatus was just called") } callInfo := struct { }{} mock.lockGetClkMonStatus.Lock() mock.calls.GetClkMonStatus = append(mock.calls.GetClkMonStatus, callInfo) mock.lockGetClkMonStatus.Unlock() return mock.GetClkMonStatusFunc() } // GetClkMonStatusCalls gets all the calls that were made to GetClkMonStatus. // Check the length with: // // len(mockedDevice.GetClkMonStatusCalls()) func (mock *Device) GetClkMonStatusCalls() []struct { } { var calls []struct { } mock.lockGetClkMonStatus.RLock() calls = mock.calls.GetClkMonStatus mock.lockGetClkMonStatus.RUnlock() return calls } // GetClock calls GetClockFunc. func (mock *Device) GetClock(clockType nvml.ClockType, clockId nvml.ClockId) (uint32, nvml.Return) { if mock.GetClockFunc == nil { panic("Device.GetClockFunc: method is nil but Device.GetClock was just called") } callInfo := struct { ClockType nvml.ClockType ClockId nvml.ClockId }{ ClockType: clockType, ClockId: clockId, } mock.lockGetClock.Lock() mock.calls.GetClock = append(mock.calls.GetClock, callInfo) mock.lockGetClock.Unlock() return mock.GetClockFunc(clockType, clockId) } // GetClockCalls gets all the calls that were made to GetClock. // Check the length with: // // len(mockedDevice.GetClockCalls()) func (mock *Device) GetClockCalls() []struct { ClockType nvml.ClockType ClockId nvml.ClockId } { var calls []struct { ClockType nvml.ClockType ClockId nvml.ClockId } mock.lockGetClock.RLock() calls = mock.calls.GetClock mock.lockGetClock.RUnlock() return calls } // GetClockInfo calls GetClockInfoFunc. func (mock *Device) GetClockInfo(clockType nvml.ClockType) (uint32, nvml.Return) { if mock.GetClockInfoFunc == nil { panic("Device.GetClockInfoFunc: method is nil but Device.GetClockInfo was just called") } callInfo := struct { ClockType nvml.ClockType }{ ClockType: clockType, } mock.lockGetClockInfo.Lock() mock.calls.GetClockInfo = append(mock.calls.GetClockInfo, callInfo) mock.lockGetClockInfo.Unlock() return mock.GetClockInfoFunc(clockType) } // GetClockInfoCalls gets all the calls that were made to GetClockInfo. // Check the length with: // // len(mockedDevice.GetClockInfoCalls()) func (mock *Device) GetClockInfoCalls() []struct { ClockType nvml.ClockType } { var calls []struct { ClockType nvml.ClockType } mock.lockGetClockInfo.RLock() calls = mock.calls.GetClockInfo mock.lockGetClockInfo.RUnlock() return calls } // GetClockOffsets calls GetClockOffsetsFunc. func (mock *Device) GetClockOffsets() (nvml.ClockOffset, nvml.Return) { if mock.GetClockOffsetsFunc == nil { panic("Device.GetClockOffsetsFunc: method is nil but Device.GetClockOffsets was just called") } callInfo := struct { }{} mock.lockGetClockOffsets.Lock() mock.calls.GetClockOffsets = append(mock.calls.GetClockOffsets, callInfo) mock.lockGetClockOffsets.Unlock() return mock.GetClockOffsetsFunc() } // GetClockOffsetsCalls gets all the calls that were made to GetClockOffsets. // Check the length with: // // len(mockedDevice.GetClockOffsetsCalls()) func (mock *Device) GetClockOffsetsCalls() []struct { } { var calls []struct { } mock.lockGetClockOffsets.RLock() calls = mock.calls.GetClockOffsets mock.lockGetClockOffsets.RUnlock() return calls } // GetComputeInstanceId calls GetComputeInstanceIdFunc. func (mock *Device) GetComputeInstanceId() (int, nvml.Return) { if mock.GetComputeInstanceIdFunc == nil { panic("Device.GetComputeInstanceIdFunc: method is nil but Device.GetComputeInstanceId was just called") } callInfo := struct { }{} mock.lockGetComputeInstanceId.Lock() mock.calls.GetComputeInstanceId = append(mock.calls.GetComputeInstanceId, callInfo) mock.lockGetComputeInstanceId.Unlock() return mock.GetComputeInstanceIdFunc() } // GetComputeInstanceIdCalls gets all the calls that were made to GetComputeInstanceId. // Check the length with: // // len(mockedDevice.GetComputeInstanceIdCalls()) func (mock *Device) GetComputeInstanceIdCalls() []struct { } { var calls []struct { } mock.lockGetComputeInstanceId.RLock() calls = mock.calls.GetComputeInstanceId mock.lockGetComputeInstanceId.RUnlock() return calls } // GetComputeMode calls GetComputeModeFunc. func (mock *Device) GetComputeMode() (nvml.ComputeMode, nvml.Return) { if mock.GetComputeModeFunc == nil { panic("Device.GetComputeModeFunc: method is nil but Device.GetComputeMode was just called") } callInfo := struct { }{} mock.lockGetComputeMode.Lock() mock.calls.GetComputeMode = append(mock.calls.GetComputeMode, callInfo) mock.lockGetComputeMode.Unlock() return mock.GetComputeModeFunc() } // GetComputeModeCalls gets all the calls that were made to GetComputeMode. // Check the length with: // // len(mockedDevice.GetComputeModeCalls()) func (mock *Device) GetComputeModeCalls() []struct { } { var calls []struct { } mock.lockGetComputeMode.RLock() calls = mock.calls.GetComputeMode mock.lockGetComputeMode.RUnlock() return calls } // GetComputeRunningProcesses calls GetComputeRunningProcessesFunc. func (mock *Device) GetComputeRunningProcesses() ([]nvml.ProcessInfo, nvml.Return) { if mock.GetComputeRunningProcessesFunc == nil { panic("Device.GetComputeRunningProcessesFunc: method is nil but Device.GetComputeRunningProcesses was just called") } callInfo := struct { }{} mock.lockGetComputeRunningProcesses.Lock() mock.calls.GetComputeRunningProcesses = append(mock.calls.GetComputeRunningProcesses, callInfo) mock.lockGetComputeRunningProcesses.Unlock() return mock.GetComputeRunningProcessesFunc() } // GetComputeRunningProcessesCalls gets all the calls that were made to GetComputeRunningProcesses. // Check the length with: // // len(mockedDevice.GetComputeRunningProcessesCalls()) func (mock *Device) GetComputeRunningProcessesCalls() []struct { } { var calls []struct { } mock.lockGetComputeRunningProcesses.RLock() calls = mock.calls.GetComputeRunningProcesses mock.lockGetComputeRunningProcesses.RUnlock() return calls } // GetConfComputeGpuAttestationReport calls GetConfComputeGpuAttestationReportFunc. func (mock *Device) GetConfComputeGpuAttestationReport(confComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport) nvml.Return { if mock.GetConfComputeGpuAttestationReportFunc == nil { panic("Device.GetConfComputeGpuAttestationReportFunc: method is nil but Device.GetConfComputeGpuAttestationReport was just called") } callInfo := struct { ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport }{ ConfComputeGpuAttestationReport: confComputeGpuAttestationReport, } mock.lockGetConfComputeGpuAttestationReport.Lock() mock.calls.GetConfComputeGpuAttestationReport = append(mock.calls.GetConfComputeGpuAttestationReport, callInfo) mock.lockGetConfComputeGpuAttestationReport.Unlock() return mock.GetConfComputeGpuAttestationReportFunc(confComputeGpuAttestationReport) } // GetConfComputeGpuAttestationReportCalls gets all the calls that were made to GetConfComputeGpuAttestationReport. // Check the length with: // // len(mockedDevice.GetConfComputeGpuAttestationReportCalls()) func (mock *Device) GetConfComputeGpuAttestationReportCalls() []struct { ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport } { var calls []struct { ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport } mock.lockGetConfComputeGpuAttestationReport.RLock() calls = mock.calls.GetConfComputeGpuAttestationReport mock.lockGetConfComputeGpuAttestationReport.RUnlock() return calls } // GetConfComputeGpuCertificate calls GetConfComputeGpuCertificateFunc. func (mock *Device) GetConfComputeGpuCertificate() (nvml.ConfComputeGpuCertificate, nvml.Return) { if mock.GetConfComputeGpuCertificateFunc == nil { panic("Device.GetConfComputeGpuCertificateFunc: method is nil but Device.GetConfComputeGpuCertificate was just called") } callInfo := struct { }{} mock.lockGetConfComputeGpuCertificate.Lock() mock.calls.GetConfComputeGpuCertificate = append(mock.calls.GetConfComputeGpuCertificate, callInfo) mock.lockGetConfComputeGpuCertificate.Unlock() return mock.GetConfComputeGpuCertificateFunc() } // GetConfComputeGpuCertificateCalls gets all the calls that were made to GetConfComputeGpuCertificate. // Check the length with: // // len(mockedDevice.GetConfComputeGpuCertificateCalls()) func (mock *Device) GetConfComputeGpuCertificateCalls() []struct { } { var calls []struct { } mock.lockGetConfComputeGpuCertificate.RLock() calls = mock.calls.GetConfComputeGpuCertificate mock.lockGetConfComputeGpuCertificate.RUnlock() return calls } // GetConfComputeMemSizeInfo calls GetConfComputeMemSizeInfoFunc. func (mock *Device) GetConfComputeMemSizeInfo() (nvml.ConfComputeMemSizeInfo, nvml.Return) { if mock.GetConfComputeMemSizeInfoFunc == nil { panic("Device.GetConfComputeMemSizeInfoFunc: method is nil but Device.GetConfComputeMemSizeInfo was just called") } callInfo := struct { }{} mock.lockGetConfComputeMemSizeInfo.Lock() mock.calls.GetConfComputeMemSizeInfo = append(mock.calls.GetConfComputeMemSizeInfo, callInfo) mock.lockGetConfComputeMemSizeInfo.Unlock() return mock.GetConfComputeMemSizeInfoFunc() } // GetConfComputeMemSizeInfoCalls gets all the calls that were made to GetConfComputeMemSizeInfo. // Check the length with: // // len(mockedDevice.GetConfComputeMemSizeInfoCalls()) func (mock *Device) GetConfComputeMemSizeInfoCalls() []struct { } { var calls []struct { } mock.lockGetConfComputeMemSizeInfo.RLock() calls = mock.calls.GetConfComputeMemSizeInfo mock.lockGetConfComputeMemSizeInfo.RUnlock() return calls } // GetConfComputeProtectedMemoryUsage calls GetConfComputeProtectedMemoryUsageFunc. func (mock *Device) GetConfComputeProtectedMemoryUsage() (nvml.Memory, nvml.Return) { if mock.GetConfComputeProtectedMemoryUsageFunc == nil { panic("Device.GetConfComputeProtectedMemoryUsageFunc: method is nil but Device.GetConfComputeProtectedMemoryUsage was just called") } callInfo := struct { }{} mock.lockGetConfComputeProtectedMemoryUsage.Lock() mock.calls.GetConfComputeProtectedMemoryUsage = append(mock.calls.GetConfComputeProtectedMemoryUsage, callInfo) mock.lockGetConfComputeProtectedMemoryUsage.Unlock() return mock.GetConfComputeProtectedMemoryUsageFunc() } // GetConfComputeProtectedMemoryUsageCalls gets all the calls that were made to GetConfComputeProtectedMemoryUsage. // Check the length with: // // len(mockedDevice.GetConfComputeProtectedMemoryUsageCalls()) func (mock *Device) GetConfComputeProtectedMemoryUsageCalls() []struct { } { var calls []struct { } mock.lockGetConfComputeProtectedMemoryUsage.RLock() calls = mock.calls.GetConfComputeProtectedMemoryUsage mock.lockGetConfComputeProtectedMemoryUsage.RUnlock() return calls } // GetCoolerInfo calls GetCoolerInfoFunc. func (mock *Device) GetCoolerInfo() (nvml.CoolerInfo, nvml.Return) { if mock.GetCoolerInfoFunc == nil { panic("Device.GetCoolerInfoFunc: method is nil but Device.GetCoolerInfo was just called") } callInfo := struct { }{} mock.lockGetCoolerInfo.Lock() mock.calls.GetCoolerInfo = append(mock.calls.GetCoolerInfo, callInfo) mock.lockGetCoolerInfo.Unlock() return mock.GetCoolerInfoFunc() } // GetCoolerInfoCalls gets all the calls that were made to GetCoolerInfo. // Check the length with: // // len(mockedDevice.GetCoolerInfoCalls()) func (mock *Device) GetCoolerInfoCalls() []struct { } { var calls []struct { } mock.lockGetCoolerInfo.RLock() calls = mock.calls.GetCoolerInfo mock.lockGetCoolerInfo.RUnlock() return calls } // GetCpuAffinity calls GetCpuAffinityFunc. func (mock *Device) GetCpuAffinity(n int) ([]uint, nvml.Return) { if mock.GetCpuAffinityFunc == nil { panic("Device.GetCpuAffinityFunc: method is nil but Device.GetCpuAffinity was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetCpuAffinity.Lock() mock.calls.GetCpuAffinity = append(mock.calls.GetCpuAffinity, callInfo) mock.lockGetCpuAffinity.Unlock() return mock.GetCpuAffinityFunc(n) } // GetCpuAffinityCalls gets all the calls that were made to GetCpuAffinity. // Check the length with: // // len(mockedDevice.GetCpuAffinityCalls()) func (mock *Device) GetCpuAffinityCalls() []struct { N int } { var calls []struct { N int } mock.lockGetCpuAffinity.RLock() calls = mock.calls.GetCpuAffinity mock.lockGetCpuAffinity.RUnlock() return calls } // GetCpuAffinityWithinScope calls GetCpuAffinityWithinScopeFunc. func (mock *Device) GetCpuAffinityWithinScope(n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { if mock.GetCpuAffinityWithinScopeFunc == nil { panic("Device.GetCpuAffinityWithinScopeFunc: method is nil but Device.GetCpuAffinityWithinScope was just called") } callInfo := struct { N int AffinityScope nvml.AffinityScope }{ N: n, AffinityScope: affinityScope, } mock.lockGetCpuAffinityWithinScope.Lock() mock.calls.GetCpuAffinityWithinScope = append(mock.calls.GetCpuAffinityWithinScope, callInfo) mock.lockGetCpuAffinityWithinScope.Unlock() return mock.GetCpuAffinityWithinScopeFunc(n, affinityScope) } // GetCpuAffinityWithinScopeCalls gets all the calls that were made to GetCpuAffinityWithinScope. // Check the length with: // // len(mockedDevice.GetCpuAffinityWithinScopeCalls()) func (mock *Device) GetCpuAffinityWithinScopeCalls() []struct { N int AffinityScope nvml.AffinityScope } { var calls []struct { N int AffinityScope nvml.AffinityScope } mock.lockGetCpuAffinityWithinScope.RLock() calls = mock.calls.GetCpuAffinityWithinScope mock.lockGetCpuAffinityWithinScope.RUnlock() return calls } // GetCreatableVgpus calls GetCreatableVgpusFunc. func (mock *Device) GetCreatableVgpus() ([]nvml.VgpuTypeId, nvml.Return) { if mock.GetCreatableVgpusFunc == nil { panic("Device.GetCreatableVgpusFunc: method is nil but Device.GetCreatableVgpus was just called") } callInfo := struct { }{} mock.lockGetCreatableVgpus.Lock() mock.calls.GetCreatableVgpus = append(mock.calls.GetCreatableVgpus, callInfo) mock.lockGetCreatableVgpus.Unlock() return mock.GetCreatableVgpusFunc() } // GetCreatableVgpusCalls gets all the calls that were made to GetCreatableVgpus. // Check the length with: // // len(mockedDevice.GetCreatableVgpusCalls()) func (mock *Device) GetCreatableVgpusCalls() []struct { } { var calls []struct { } mock.lockGetCreatableVgpus.RLock() calls = mock.calls.GetCreatableVgpus mock.lockGetCreatableVgpus.RUnlock() return calls } // GetCudaComputeCapability calls GetCudaComputeCapabilityFunc. func (mock *Device) GetCudaComputeCapability() (int, int, nvml.Return) { if mock.GetCudaComputeCapabilityFunc == nil { panic("Device.GetCudaComputeCapabilityFunc: method is nil but Device.GetCudaComputeCapability was just called") } callInfo := struct { }{} mock.lockGetCudaComputeCapability.Lock() mock.calls.GetCudaComputeCapability = append(mock.calls.GetCudaComputeCapability, callInfo) mock.lockGetCudaComputeCapability.Unlock() return mock.GetCudaComputeCapabilityFunc() } // GetCudaComputeCapabilityCalls gets all the calls that were made to GetCudaComputeCapability. // Check the length with: // // len(mockedDevice.GetCudaComputeCapabilityCalls()) func (mock *Device) GetCudaComputeCapabilityCalls() []struct { } { var calls []struct { } mock.lockGetCudaComputeCapability.RLock() calls = mock.calls.GetCudaComputeCapability mock.lockGetCudaComputeCapability.RUnlock() return calls } // GetCurrPcieLinkGeneration calls GetCurrPcieLinkGenerationFunc. func (mock *Device) GetCurrPcieLinkGeneration() (int, nvml.Return) { if mock.GetCurrPcieLinkGenerationFunc == nil { panic("Device.GetCurrPcieLinkGenerationFunc: method is nil but Device.GetCurrPcieLinkGeneration was just called") } callInfo := struct { }{} mock.lockGetCurrPcieLinkGeneration.Lock() mock.calls.GetCurrPcieLinkGeneration = append(mock.calls.GetCurrPcieLinkGeneration, callInfo) mock.lockGetCurrPcieLinkGeneration.Unlock() return mock.GetCurrPcieLinkGenerationFunc() } // GetCurrPcieLinkGenerationCalls gets all the calls that were made to GetCurrPcieLinkGeneration. // Check the length with: // // len(mockedDevice.GetCurrPcieLinkGenerationCalls()) func (mock *Device) GetCurrPcieLinkGenerationCalls() []struct { } { var calls []struct { } mock.lockGetCurrPcieLinkGeneration.RLock() calls = mock.calls.GetCurrPcieLinkGeneration mock.lockGetCurrPcieLinkGeneration.RUnlock() return calls } // GetCurrPcieLinkWidth calls GetCurrPcieLinkWidthFunc. func (mock *Device) GetCurrPcieLinkWidth() (int, nvml.Return) { if mock.GetCurrPcieLinkWidthFunc == nil { panic("Device.GetCurrPcieLinkWidthFunc: method is nil but Device.GetCurrPcieLinkWidth was just called") } callInfo := struct { }{} mock.lockGetCurrPcieLinkWidth.Lock() mock.calls.GetCurrPcieLinkWidth = append(mock.calls.GetCurrPcieLinkWidth, callInfo) mock.lockGetCurrPcieLinkWidth.Unlock() return mock.GetCurrPcieLinkWidthFunc() } // GetCurrPcieLinkWidthCalls gets all the calls that were made to GetCurrPcieLinkWidth. // Check the length with: // // len(mockedDevice.GetCurrPcieLinkWidthCalls()) func (mock *Device) GetCurrPcieLinkWidthCalls() []struct { } { var calls []struct { } mock.lockGetCurrPcieLinkWidth.RLock() calls = mock.calls.GetCurrPcieLinkWidth mock.lockGetCurrPcieLinkWidth.RUnlock() return calls } // GetCurrentClockFreqs calls GetCurrentClockFreqsFunc. func (mock *Device) GetCurrentClockFreqs() (nvml.DeviceCurrentClockFreqs, nvml.Return) { if mock.GetCurrentClockFreqsFunc == nil { panic("Device.GetCurrentClockFreqsFunc: method is nil but Device.GetCurrentClockFreqs was just called") } callInfo := struct { }{} mock.lockGetCurrentClockFreqs.Lock() mock.calls.GetCurrentClockFreqs = append(mock.calls.GetCurrentClockFreqs, callInfo) mock.lockGetCurrentClockFreqs.Unlock() return mock.GetCurrentClockFreqsFunc() } // GetCurrentClockFreqsCalls gets all the calls that were made to GetCurrentClockFreqs. // Check the length with: // // len(mockedDevice.GetCurrentClockFreqsCalls()) func (mock *Device) GetCurrentClockFreqsCalls() []struct { } { var calls []struct { } mock.lockGetCurrentClockFreqs.RLock() calls = mock.calls.GetCurrentClockFreqs mock.lockGetCurrentClockFreqs.RUnlock() return calls } // GetCurrentClocksEventReasons calls GetCurrentClocksEventReasonsFunc. func (mock *Device) GetCurrentClocksEventReasons() (uint64, nvml.Return) { if mock.GetCurrentClocksEventReasonsFunc == nil { panic("Device.GetCurrentClocksEventReasonsFunc: method is nil but Device.GetCurrentClocksEventReasons was just called") } callInfo := struct { }{} mock.lockGetCurrentClocksEventReasons.Lock() mock.calls.GetCurrentClocksEventReasons = append(mock.calls.GetCurrentClocksEventReasons, callInfo) mock.lockGetCurrentClocksEventReasons.Unlock() return mock.GetCurrentClocksEventReasonsFunc() } // GetCurrentClocksEventReasonsCalls gets all the calls that were made to GetCurrentClocksEventReasons. // Check the length with: // // len(mockedDevice.GetCurrentClocksEventReasonsCalls()) func (mock *Device) GetCurrentClocksEventReasonsCalls() []struct { } { var calls []struct { } mock.lockGetCurrentClocksEventReasons.RLock() calls = mock.calls.GetCurrentClocksEventReasons mock.lockGetCurrentClocksEventReasons.RUnlock() return calls } // GetCurrentClocksThrottleReasons calls GetCurrentClocksThrottleReasonsFunc. func (mock *Device) GetCurrentClocksThrottleReasons() (uint64, nvml.Return) { if mock.GetCurrentClocksThrottleReasonsFunc == nil { panic("Device.GetCurrentClocksThrottleReasonsFunc: method is nil but Device.GetCurrentClocksThrottleReasons was just called") } callInfo := struct { }{} mock.lockGetCurrentClocksThrottleReasons.Lock() mock.calls.GetCurrentClocksThrottleReasons = append(mock.calls.GetCurrentClocksThrottleReasons, callInfo) mock.lockGetCurrentClocksThrottleReasons.Unlock() return mock.GetCurrentClocksThrottleReasonsFunc() } // GetCurrentClocksThrottleReasonsCalls gets all the calls that were made to GetCurrentClocksThrottleReasons. // Check the length with: // // len(mockedDevice.GetCurrentClocksThrottleReasonsCalls()) func (mock *Device) GetCurrentClocksThrottleReasonsCalls() []struct { } { var calls []struct { } mock.lockGetCurrentClocksThrottleReasons.RLock() calls = mock.calls.GetCurrentClocksThrottleReasons mock.lockGetCurrentClocksThrottleReasons.RUnlock() return calls } // GetDecoderUtilization calls GetDecoderUtilizationFunc. func (mock *Device) GetDecoderUtilization() (uint32, uint32, nvml.Return) { if mock.GetDecoderUtilizationFunc == nil { panic("Device.GetDecoderUtilizationFunc: method is nil but Device.GetDecoderUtilization was just called") } callInfo := struct { }{} mock.lockGetDecoderUtilization.Lock() mock.calls.GetDecoderUtilization = append(mock.calls.GetDecoderUtilization, callInfo) mock.lockGetDecoderUtilization.Unlock() return mock.GetDecoderUtilizationFunc() } // GetDecoderUtilizationCalls gets all the calls that were made to GetDecoderUtilization. // Check the length with: // // len(mockedDevice.GetDecoderUtilizationCalls()) func (mock *Device) GetDecoderUtilizationCalls() []struct { } { var calls []struct { } mock.lockGetDecoderUtilization.RLock() calls = mock.calls.GetDecoderUtilization mock.lockGetDecoderUtilization.RUnlock() return calls } // GetDefaultApplicationsClock calls GetDefaultApplicationsClockFunc. func (mock *Device) GetDefaultApplicationsClock(clockType nvml.ClockType) (uint32, nvml.Return) { if mock.GetDefaultApplicationsClockFunc == nil { panic("Device.GetDefaultApplicationsClockFunc: method is nil but Device.GetDefaultApplicationsClock was just called") } callInfo := struct { ClockType nvml.ClockType }{ ClockType: clockType, } mock.lockGetDefaultApplicationsClock.Lock() mock.calls.GetDefaultApplicationsClock = append(mock.calls.GetDefaultApplicationsClock, callInfo) mock.lockGetDefaultApplicationsClock.Unlock() return mock.GetDefaultApplicationsClockFunc(clockType) } // GetDefaultApplicationsClockCalls gets all the calls that were made to GetDefaultApplicationsClock. // Check the length with: // // len(mockedDevice.GetDefaultApplicationsClockCalls()) func (mock *Device) GetDefaultApplicationsClockCalls() []struct { ClockType nvml.ClockType } { var calls []struct { ClockType nvml.ClockType } mock.lockGetDefaultApplicationsClock.RLock() calls = mock.calls.GetDefaultApplicationsClock mock.lockGetDefaultApplicationsClock.RUnlock() return calls } // GetDefaultEccMode calls GetDefaultEccModeFunc. func (mock *Device) GetDefaultEccMode() (nvml.EnableState, nvml.Return) { if mock.GetDefaultEccModeFunc == nil { panic("Device.GetDefaultEccModeFunc: method is nil but Device.GetDefaultEccMode was just called") } callInfo := struct { }{} mock.lockGetDefaultEccMode.Lock() mock.calls.GetDefaultEccMode = append(mock.calls.GetDefaultEccMode, callInfo) mock.lockGetDefaultEccMode.Unlock() return mock.GetDefaultEccModeFunc() } // GetDefaultEccModeCalls gets all the calls that were made to GetDefaultEccMode. // Check the length with: // // len(mockedDevice.GetDefaultEccModeCalls()) func (mock *Device) GetDefaultEccModeCalls() []struct { } { var calls []struct { } mock.lockGetDefaultEccMode.RLock() calls = mock.calls.GetDefaultEccMode mock.lockGetDefaultEccMode.RUnlock() return calls } // GetDetailedEccErrors calls GetDetailedEccErrorsFunc. func (mock *Device) GetDetailedEccErrors(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (nvml.EccErrorCounts, nvml.Return) { if mock.GetDetailedEccErrorsFunc == nil { panic("Device.GetDetailedEccErrorsFunc: method is nil but Device.GetDetailedEccErrors was just called") } callInfo := struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType }{ MemoryErrorType: memoryErrorType, EccCounterType: eccCounterType, } mock.lockGetDetailedEccErrors.Lock() mock.calls.GetDetailedEccErrors = append(mock.calls.GetDetailedEccErrors, callInfo) mock.lockGetDetailedEccErrors.Unlock() return mock.GetDetailedEccErrorsFunc(memoryErrorType, eccCounterType) } // GetDetailedEccErrorsCalls gets all the calls that were made to GetDetailedEccErrors. // Check the length with: // // len(mockedDevice.GetDetailedEccErrorsCalls()) func (mock *Device) GetDetailedEccErrorsCalls() []struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } { var calls []struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } mock.lockGetDetailedEccErrors.RLock() calls = mock.calls.GetDetailedEccErrors mock.lockGetDetailedEccErrors.RUnlock() return calls } // GetDeviceHandleFromMigDeviceHandle calls GetDeviceHandleFromMigDeviceHandleFunc. func (mock *Device) GetDeviceHandleFromMigDeviceHandle() (nvml.Device, nvml.Return) { if mock.GetDeviceHandleFromMigDeviceHandleFunc == nil { panic("Device.GetDeviceHandleFromMigDeviceHandleFunc: method is nil but Device.GetDeviceHandleFromMigDeviceHandle was just called") } callInfo := struct { }{} mock.lockGetDeviceHandleFromMigDeviceHandle.Lock() mock.calls.GetDeviceHandleFromMigDeviceHandle = append(mock.calls.GetDeviceHandleFromMigDeviceHandle, callInfo) mock.lockGetDeviceHandleFromMigDeviceHandle.Unlock() return mock.GetDeviceHandleFromMigDeviceHandleFunc() } // GetDeviceHandleFromMigDeviceHandleCalls gets all the calls that were made to GetDeviceHandleFromMigDeviceHandle. // Check the length with: // // len(mockedDevice.GetDeviceHandleFromMigDeviceHandleCalls()) func (mock *Device) GetDeviceHandleFromMigDeviceHandleCalls() []struct { } { var calls []struct { } mock.lockGetDeviceHandleFromMigDeviceHandle.RLock() calls = mock.calls.GetDeviceHandleFromMigDeviceHandle mock.lockGetDeviceHandleFromMigDeviceHandle.RUnlock() return calls } // GetDisplayActive calls GetDisplayActiveFunc. func (mock *Device) GetDisplayActive() (nvml.EnableState, nvml.Return) { if mock.GetDisplayActiveFunc == nil { panic("Device.GetDisplayActiveFunc: method is nil but Device.GetDisplayActive was just called") } callInfo := struct { }{} mock.lockGetDisplayActive.Lock() mock.calls.GetDisplayActive = append(mock.calls.GetDisplayActive, callInfo) mock.lockGetDisplayActive.Unlock() return mock.GetDisplayActiveFunc() } // GetDisplayActiveCalls gets all the calls that were made to GetDisplayActive. // Check the length with: // // len(mockedDevice.GetDisplayActiveCalls()) func (mock *Device) GetDisplayActiveCalls() []struct { } { var calls []struct { } mock.lockGetDisplayActive.RLock() calls = mock.calls.GetDisplayActive mock.lockGetDisplayActive.RUnlock() return calls } // GetDisplayMode calls GetDisplayModeFunc. func (mock *Device) GetDisplayMode() (nvml.EnableState, nvml.Return) { if mock.GetDisplayModeFunc == nil { panic("Device.GetDisplayModeFunc: method is nil but Device.GetDisplayMode was just called") } callInfo := struct { }{} mock.lockGetDisplayMode.Lock() mock.calls.GetDisplayMode = append(mock.calls.GetDisplayMode, callInfo) mock.lockGetDisplayMode.Unlock() return mock.GetDisplayModeFunc() } // GetDisplayModeCalls gets all the calls that were made to GetDisplayMode. // Check the length with: // // len(mockedDevice.GetDisplayModeCalls()) func (mock *Device) GetDisplayModeCalls() []struct { } { var calls []struct { } mock.lockGetDisplayMode.RLock() calls = mock.calls.GetDisplayMode mock.lockGetDisplayMode.RUnlock() return calls } // GetDramEncryptionMode calls GetDramEncryptionModeFunc. func (mock *Device) GetDramEncryptionMode() (nvml.DramEncryptionInfo, nvml.DramEncryptionInfo, nvml.Return) { if mock.GetDramEncryptionModeFunc == nil { panic("Device.GetDramEncryptionModeFunc: method is nil but Device.GetDramEncryptionMode was just called") } callInfo := struct { }{} mock.lockGetDramEncryptionMode.Lock() mock.calls.GetDramEncryptionMode = append(mock.calls.GetDramEncryptionMode, callInfo) mock.lockGetDramEncryptionMode.Unlock() return mock.GetDramEncryptionModeFunc() } // GetDramEncryptionModeCalls gets all the calls that were made to GetDramEncryptionMode. // Check the length with: // // len(mockedDevice.GetDramEncryptionModeCalls()) func (mock *Device) GetDramEncryptionModeCalls() []struct { } { var calls []struct { } mock.lockGetDramEncryptionMode.RLock() calls = mock.calls.GetDramEncryptionMode mock.lockGetDramEncryptionMode.RUnlock() return calls } // GetDriverModel calls GetDriverModelFunc. func (mock *Device) GetDriverModel() (nvml.DriverModel, nvml.DriverModel, nvml.Return) { if mock.GetDriverModelFunc == nil { panic("Device.GetDriverModelFunc: method is nil but Device.GetDriverModel was just called") } callInfo := struct { }{} mock.lockGetDriverModel.Lock() mock.calls.GetDriverModel = append(mock.calls.GetDriverModel, callInfo) mock.lockGetDriverModel.Unlock() return mock.GetDriverModelFunc() } // GetDriverModelCalls gets all the calls that were made to GetDriverModel. // Check the length with: // // len(mockedDevice.GetDriverModelCalls()) func (mock *Device) GetDriverModelCalls() []struct { } { var calls []struct { } mock.lockGetDriverModel.RLock() calls = mock.calls.GetDriverModel mock.lockGetDriverModel.RUnlock() return calls } // GetDriverModel_v2 calls GetDriverModel_v2Func. func (mock *Device) GetDriverModel_v2() (nvml.DriverModel, nvml.DriverModel, nvml.Return) { if mock.GetDriverModel_v2Func == nil { panic("Device.GetDriverModel_v2Func: method is nil but Device.GetDriverModel_v2 was just called") } callInfo := struct { }{} mock.lockGetDriverModel_v2.Lock() mock.calls.GetDriverModel_v2 = append(mock.calls.GetDriverModel_v2, callInfo) mock.lockGetDriverModel_v2.Unlock() return mock.GetDriverModel_v2Func() } // GetDriverModel_v2Calls gets all the calls that were made to GetDriverModel_v2. // Check the length with: // // len(mockedDevice.GetDriverModel_v2Calls()) func (mock *Device) GetDriverModel_v2Calls() []struct { } { var calls []struct { } mock.lockGetDriverModel_v2.RLock() calls = mock.calls.GetDriverModel_v2 mock.lockGetDriverModel_v2.RUnlock() return calls } // GetDynamicPstatesInfo calls GetDynamicPstatesInfoFunc. func (mock *Device) GetDynamicPstatesInfo() (nvml.GpuDynamicPstatesInfo, nvml.Return) { if mock.GetDynamicPstatesInfoFunc == nil { panic("Device.GetDynamicPstatesInfoFunc: method is nil but Device.GetDynamicPstatesInfo was just called") } callInfo := struct { }{} mock.lockGetDynamicPstatesInfo.Lock() mock.calls.GetDynamicPstatesInfo = append(mock.calls.GetDynamicPstatesInfo, callInfo) mock.lockGetDynamicPstatesInfo.Unlock() return mock.GetDynamicPstatesInfoFunc() } // GetDynamicPstatesInfoCalls gets all the calls that were made to GetDynamicPstatesInfo. // Check the length with: // // len(mockedDevice.GetDynamicPstatesInfoCalls()) func (mock *Device) GetDynamicPstatesInfoCalls() []struct { } { var calls []struct { } mock.lockGetDynamicPstatesInfo.RLock() calls = mock.calls.GetDynamicPstatesInfo mock.lockGetDynamicPstatesInfo.RUnlock() return calls } // GetEccMode calls GetEccModeFunc. func (mock *Device) GetEccMode() (nvml.EnableState, nvml.EnableState, nvml.Return) { if mock.GetEccModeFunc == nil { panic("Device.GetEccModeFunc: method is nil but Device.GetEccMode was just called") } callInfo := struct { }{} mock.lockGetEccMode.Lock() mock.calls.GetEccMode = append(mock.calls.GetEccMode, callInfo) mock.lockGetEccMode.Unlock() return mock.GetEccModeFunc() } // GetEccModeCalls gets all the calls that were made to GetEccMode. // Check the length with: // // len(mockedDevice.GetEccModeCalls()) func (mock *Device) GetEccModeCalls() []struct { } { var calls []struct { } mock.lockGetEccMode.RLock() calls = mock.calls.GetEccMode mock.lockGetEccMode.RUnlock() return calls } // GetEncoderCapacity calls GetEncoderCapacityFunc. func (mock *Device) GetEncoderCapacity(encoderType nvml.EncoderType) (int, nvml.Return) { if mock.GetEncoderCapacityFunc == nil { panic("Device.GetEncoderCapacityFunc: method is nil but Device.GetEncoderCapacity was just called") } callInfo := struct { EncoderType nvml.EncoderType }{ EncoderType: encoderType, } mock.lockGetEncoderCapacity.Lock() mock.calls.GetEncoderCapacity = append(mock.calls.GetEncoderCapacity, callInfo) mock.lockGetEncoderCapacity.Unlock() return mock.GetEncoderCapacityFunc(encoderType) } // GetEncoderCapacityCalls gets all the calls that were made to GetEncoderCapacity. // Check the length with: // // len(mockedDevice.GetEncoderCapacityCalls()) func (mock *Device) GetEncoderCapacityCalls() []struct { EncoderType nvml.EncoderType } { var calls []struct { EncoderType nvml.EncoderType } mock.lockGetEncoderCapacity.RLock() calls = mock.calls.GetEncoderCapacity mock.lockGetEncoderCapacity.RUnlock() return calls } // GetEncoderSessions calls GetEncoderSessionsFunc. func (mock *Device) GetEncoderSessions() ([]nvml.EncoderSessionInfo, nvml.Return) { if mock.GetEncoderSessionsFunc == nil { panic("Device.GetEncoderSessionsFunc: method is nil but Device.GetEncoderSessions was just called") } callInfo := struct { }{} mock.lockGetEncoderSessions.Lock() mock.calls.GetEncoderSessions = append(mock.calls.GetEncoderSessions, callInfo) mock.lockGetEncoderSessions.Unlock() return mock.GetEncoderSessionsFunc() } // GetEncoderSessionsCalls gets all the calls that were made to GetEncoderSessions. // Check the length with: // // len(mockedDevice.GetEncoderSessionsCalls()) func (mock *Device) GetEncoderSessionsCalls() []struct { } { var calls []struct { } mock.lockGetEncoderSessions.RLock() calls = mock.calls.GetEncoderSessions mock.lockGetEncoderSessions.RUnlock() return calls } // GetEncoderStats calls GetEncoderStatsFunc. func (mock *Device) GetEncoderStats() (int, uint32, uint32, nvml.Return) { if mock.GetEncoderStatsFunc == nil { panic("Device.GetEncoderStatsFunc: method is nil but Device.GetEncoderStats was just called") } callInfo := struct { }{} mock.lockGetEncoderStats.Lock() mock.calls.GetEncoderStats = append(mock.calls.GetEncoderStats, callInfo) mock.lockGetEncoderStats.Unlock() return mock.GetEncoderStatsFunc() } // GetEncoderStatsCalls gets all the calls that were made to GetEncoderStats. // Check the length with: // // len(mockedDevice.GetEncoderStatsCalls()) func (mock *Device) GetEncoderStatsCalls() []struct { } { var calls []struct { } mock.lockGetEncoderStats.RLock() calls = mock.calls.GetEncoderStats mock.lockGetEncoderStats.RUnlock() return calls } // GetEncoderUtilization calls GetEncoderUtilizationFunc. func (mock *Device) GetEncoderUtilization() (uint32, uint32, nvml.Return) { if mock.GetEncoderUtilizationFunc == nil { panic("Device.GetEncoderUtilizationFunc: method is nil but Device.GetEncoderUtilization was just called") } callInfo := struct { }{} mock.lockGetEncoderUtilization.Lock() mock.calls.GetEncoderUtilization = append(mock.calls.GetEncoderUtilization, callInfo) mock.lockGetEncoderUtilization.Unlock() return mock.GetEncoderUtilizationFunc() } // GetEncoderUtilizationCalls gets all the calls that were made to GetEncoderUtilization. // Check the length with: // // len(mockedDevice.GetEncoderUtilizationCalls()) func (mock *Device) GetEncoderUtilizationCalls() []struct { } { var calls []struct { } mock.lockGetEncoderUtilization.RLock() calls = mock.calls.GetEncoderUtilization mock.lockGetEncoderUtilization.RUnlock() return calls } // GetEnforcedPowerLimit calls GetEnforcedPowerLimitFunc. func (mock *Device) GetEnforcedPowerLimit() (uint32, nvml.Return) { if mock.GetEnforcedPowerLimitFunc == nil { panic("Device.GetEnforcedPowerLimitFunc: method is nil but Device.GetEnforcedPowerLimit was just called") } callInfo := struct { }{} mock.lockGetEnforcedPowerLimit.Lock() mock.calls.GetEnforcedPowerLimit = append(mock.calls.GetEnforcedPowerLimit, callInfo) mock.lockGetEnforcedPowerLimit.Unlock() return mock.GetEnforcedPowerLimitFunc() } // GetEnforcedPowerLimitCalls gets all the calls that were made to GetEnforcedPowerLimit. // Check the length with: // // len(mockedDevice.GetEnforcedPowerLimitCalls()) func (mock *Device) GetEnforcedPowerLimitCalls() []struct { } { var calls []struct { } mock.lockGetEnforcedPowerLimit.RLock() calls = mock.calls.GetEnforcedPowerLimit mock.lockGetEnforcedPowerLimit.RUnlock() return calls } // GetFBCSessions calls GetFBCSessionsFunc. func (mock *Device) GetFBCSessions() ([]nvml.FBCSessionInfo, nvml.Return) { if mock.GetFBCSessionsFunc == nil { panic("Device.GetFBCSessionsFunc: method is nil but Device.GetFBCSessions was just called") } callInfo := struct { }{} mock.lockGetFBCSessions.Lock() mock.calls.GetFBCSessions = append(mock.calls.GetFBCSessions, callInfo) mock.lockGetFBCSessions.Unlock() return mock.GetFBCSessionsFunc() } // GetFBCSessionsCalls gets all the calls that were made to GetFBCSessions. // Check the length with: // // len(mockedDevice.GetFBCSessionsCalls()) func (mock *Device) GetFBCSessionsCalls() []struct { } { var calls []struct { } mock.lockGetFBCSessions.RLock() calls = mock.calls.GetFBCSessions mock.lockGetFBCSessions.RUnlock() return calls } // GetFBCStats calls GetFBCStatsFunc. func (mock *Device) GetFBCStats() (nvml.FBCStats, nvml.Return) { if mock.GetFBCStatsFunc == nil { panic("Device.GetFBCStatsFunc: method is nil but Device.GetFBCStats was just called") } callInfo := struct { }{} mock.lockGetFBCStats.Lock() mock.calls.GetFBCStats = append(mock.calls.GetFBCStats, callInfo) mock.lockGetFBCStats.Unlock() return mock.GetFBCStatsFunc() } // GetFBCStatsCalls gets all the calls that were made to GetFBCStats. // Check the length with: // // len(mockedDevice.GetFBCStatsCalls()) func (mock *Device) GetFBCStatsCalls() []struct { } { var calls []struct { } mock.lockGetFBCStats.RLock() calls = mock.calls.GetFBCStats mock.lockGetFBCStats.RUnlock() return calls } // GetFanControlPolicy_v2 calls GetFanControlPolicy_v2Func. func (mock *Device) GetFanControlPolicy_v2(n int) (nvml.FanControlPolicy, nvml.Return) { if mock.GetFanControlPolicy_v2Func == nil { panic("Device.GetFanControlPolicy_v2Func: method is nil but Device.GetFanControlPolicy_v2 was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetFanControlPolicy_v2.Lock() mock.calls.GetFanControlPolicy_v2 = append(mock.calls.GetFanControlPolicy_v2, callInfo) mock.lockGetFanControlPolicy_v2.Unlock() return mock.GetFanControlPolicy_v2Func(n) } // GetFanControlPolicy_v2Calls gets all the calls that were made to GetFanControlPolicy_v2. // Check the length with: // // len(mockedDevice.GetFanControlPolicy_v2Calls()) func (mock *Device) GetFanControlPolicy_v2Calls() []struct { N int } { var calls []struct { N int } mock.lockGetFanControlPolicy_v2.RLock() calls = mock.calls.GetFanControlPolicy_v2 mock.lockGetFanControlPolicy_v2.RUnlock() return calls } // GetFanSpeed calls GetFanSpeedFunc. func (mock *Device) GetFanSpeed() (uint32, nvml.Return) { if mock.GetFanSpeedFunc == nil { panic("Device.GetFanSpeedFunc: method is nil but Device.GetFanSpeed was just called") } callInfo := struct { }{} mock.lockGetFanSpeed.Lock() mock.calls.GetFanSpeed = append(mock.calls.GetFanSpeed, callInfo) mock.lockGetFanSpeed.Unlock() return mock.GetFanSpeedFunc() } // GetFanSpeedCalls gets all the calls that were made to GetFanSpeed. // Check the length with: // // len(mockedDevice.GetFanSpeedCalls()) func (mock *Device) GetFanSpeedCalls() []struct { } { var calls []struct { } mock.lockGetFanSpeed.RLock() calls = mock.calls.GetFanSpeed mock.lockGetFanSpeed.RUnlock() return calls } // GetFanSpeedRPM calls GetFanSpeedRPMFunc. func (mock *Device) GetFanSpeedRPM() (nvml.FanSpeedInfo, nvml.Return) { if mock.GetFanSpeedRPMFunc == nil { panic("Device.GetFanSpeedRPMFunc: method is nil but Device.GetFanSpeedRPM was just called") } callInfo := struct { }{} mock.lockGetFanSpeedRPM.Lock() mock.calls.GetFanSpeedRPM = append(mock.calls.GetFanSpeedRPM, callInfo) mock.lockGetFanSpeedRPM.Unlock() return mock.GetFanSpeedRPMFunc() } // GetFanSpeedRPMCalls gets all the calls that were made to GetFanSpeedRPM. // Check the length with: // // len(mockedDevice.GetFanSpeedRPMCalls()) func (mock *Device) GetFanSpeedRPMCalls() []struct { } { var calls []struct { } mock.lockGetFanSpeedRPM.RLock() calls = mock.calls.GetFanSpeedRPM mock.lockGetFanSpeedRPM.RUnlock() return calls } // GetFanSpeed_v2 calls GetFanSpeed_v2Func. func (mock *Device) GetFanSpeed_v2(n int) (uint32, nvml.Return) { if mock.GetFanSpeed_v2Func == nil { panic("Device.GetFanSpeed_v2Func: method is nil but Device.GetFanSpeed_v2 was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetFanSpeed_v2.Lock() mock.calls.GetFanSpeed_v2 = append(mock.calls.GetFanSpeed_v2, callInfo) mock.lockGetFanSpeed_v2.Unlock() return mock.GetFanSpeed_v2Func(n) } // GetFanSpeed_v2Calls gets all the calls that were made to GetFanSpeed_v2. // Check the length with: // // len(mockedDevice.GetFanSpeed_v2Calls()) func (mock *Device) GetFanSpeed_v2Calls() []struct { N int } { var calls []struct { N int } mock.lockGetFanSpeed_v2.RLock() calls = mock.calls.GetFanSpeed_v2 mock.lockGetFanSpeed_v2.RUnlock() return calls } // GetFieldValues calls GetFieldValuesFunc. func (mock *Device) GetFieldValues(fieldValues []nvml.FieldValue) nvml.Return { if mock.GetFieldValuesFunc == nil { panic("Device.GetFieldValuesFunc: method is nil but Device.GetFieldValues was just called") } callInfo := struct { FieldValues []nvml.FieldValue }{ FieldValues: fieldValues, } mock.lockGetFieldValues.Lock() mock.calls.GetFieldValues = append(mock.calls.GetFieldValues, callInfo) mock.lockGetFieldValues.Unlock() return mock.GetFieldValuesFunc(fieldValues) } // GetFieldValuesCalls gets all the calls that were made to GetFieldValues. // Check the length with: // // len(mockedDevice.GetFieldValuesCalls()) func (mock *Device) GetFieldValuesCalls() []struct { FieldValues []nvml.FieldValue } { var calls []struct { FieldValues []nvml.FieldValue } mock.lockGetFieldValues.RLock() calls = mock.calls.GetFieldValues mock.lockGetFieldValues.RUnlock() return calls } // GetGpcClkMinMaxVfOffset calls GetGpcClkMinMaxVfOffsetFunc. func (mock *Device) GetGpcClkMinMaxVfOffset() (int, int, nvml.Return) { if mock.GetGpcClkMinMaxVfOffsetFunc == nil { panic("Device.GetGpcClkMinMaxVfOffsetFunc: method is nil but Device.GetGpcClkMinMaxVfOffset was just called") } callInfo := struct { }{} mock.lockGetGpcClkMinMaxVfOffset.Lock() mock.calls.GetGpcClkMinMaxVfOffset = append(mock.calls.GetGpcClkMinMaxVfOffset, callInfo) mock.lockGetGpcClkMinMaxVfOffset.Unlock() return mock.GetGpcClkMinMaxVfOffsetFunc() } // GetGpcClkMinMaxVfOffsetCalls gets all the calls that were made to GetGpcClkMinMaxVfOffset. // Check the length with: // // len(mockedDevice.GetGpcClkMinMaxVfOffsetCalls()) func (mock *Device) GetGpcClkMinMaxVfOffsetCalls() []struct { } { var calls []struct { } mock.lockGetGpcClkMinMaxVfOffset.RLock() calls = mock.calls.GetGpcClkMinMaxVfOffset mock.lockGetGpcClkMinMaxVfOffset.RUnlock() return calls } // GetGpcClkVfOffset calls GetGpcClkVfOffsetFunc. func (mock *Device) GetGpcClkVfOffset() (int, nvml.Return) { if mock.GetGpcClkVfOffsetFunc == nil { panic("Device.GetGpcClkVfOffsetFunc: method is nil but Device.GetGpcClkVfOffset was just called") } callInfo := struct { }{} mock.lockGetGpcClkVfOffset.Lock() mock.calls.GetGpcClkVfOffset = append(mock.calls.GetGpcClkVfOffset, callInfo) mock.lockGetGpcClkVfOffset.Unlock() return mock.GetGpcClkVfOffsetFunc() } // GetGpcClkVfOffsetCalls gets all the calls that were made to GetGpcClkVfOffset. // Check the length with: // // len(mockedDevice.GetGpcClkVfOffsetCalls()) func (mock *Device) GetGpcClkVfOffsetCalls() []struct { } { var calls []struct { } mock.lockGetGpcClkVfOffset.RLock() calls = mock.calls.GetGpcClkVfOffset mock.lockGetGpcClkVfOffset.RUnlock() return calls } // GetGpuFabricInfo calls GetGpuFabricInfoFunc. func (mock *Device) GetGpuFabricInfo() (nvml.GpuFabricInfo, nvml.Return) { if mock.GetGpuFabricInfoFunc == nil { panic("Device.GetGpuFabricInfoFunc: method is nil but Device.GetGpuFabricInfo was just called") } callInfo := struct { }{} mock.lockGetGpuFabricInfo.Lock() mock.calls.GetGpuFabricInfo = append(mock.calls.GetGpuFabricInfo, callInfo) mock.lockGetGpuFabricInfo.Unlock() return mock.GetGpuFabricInfoFunc() } // GetGpuFabricInfoCalls gets all the calls that were made to GetGpuFabricInfo. // Check the length with: // // len(mockedDevice.GetGpuFabricInfoCalls()) func (mock *Device) GetGpuFabricInfoCalls() []struct { } { var calls []struct { } mock.lockGetGpuFabricInfo.RLock() calls = mock.calls.GetGpuFabricInfo mock.lockGetGpuFabricInfo.RUnlock() return calls } // GetGpuFabricInfoV calls GetGpuFabricInfoVFunc. func (mock *Device) GetGpuFabricInfoV() nvml.GpuFabricInfoHandler { if mock.GetGpuFabricInfoVFunc == nil { panic("Device.GetGpuFabricInfoVFunc: method is nil but Device.GetGpuFabricInfoV was just called") } callInfo := struct { }{} mock.lockGetGpuFabricInfoV.Lock() mock.calls.GetGpuFabricInfoV = append(mock.calls.GetGpuFabricInfoV, callInfo) mock.lockGetGpuFabricInfoV.Unlock() return mock.GetGpuFabricInfoVFunc() } // GetGpuFabricInfoVCalls gets all the calls that were made to GetGpuFabricInfoV. // Check the length with: // // len(mockedDevice.GetGpuFabricInfoVCalls()) func (mock *Device) GetGpuFabricInfoVCalls() []struct { } { var calls []struct { } mock.lockGetGpuFabricInfoV.RLock() calls = mock.calls.GetGpuFabricInfoV mock.lockGetGpuFabricInfoV.RUnlock() return calls } // GetGpuInstanceById calls GetGpuInstanceByIdFunc. func (mock *Device) GetGpuInstanceById(n int) (nvml.GpuInstance, nvml.Return) { if mock.GetGpuInstanceByIdFunc == nil { panic("Device.GetGpuInstanceByIdFunc: method is nil but Device.GetGpuInstanceById was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetGpuInstanceById.Lock() mock.calls.GetGpuInstanceById = append(mock.calls.GetGpuInstanceById, callInfo) mock.lockGetGpuInstanceById.Unlock() return mock.GetGpuInstanceByIdFunc(n) } // GetGpuInstanceByIdCalls gets all the calls that were made to GetGpuInstanceById. // Check the length with: // // len(mockedDevice.GetGpuInstanceByIdCalls()) func (mock *Device) GetGpuInstanceByIdCalls() []struct { N int } { var calls []struct { N int } mock.lockGetGpuInstanceById.RLock() calls = mock.calls.GetGpuInstanceById mock.lockGetGpuInstanceById.RUnlock() return calls } // GetGpuInstanceId calls GetGpuInstanceIdFunc. func (mock *Device) GetGpuInstanceId() (int, nvml.Return) { if mock.GetGpuInstanceIdFunc == nil { panic("Device.GetGpuInstanceIdFunc: method is nil but Device.GetGpuInstanceId was just called") } callInfo := struct { }{} mock.lockGetGpuInstanceId.Lock() mock.calls.GetGpuInstanceId = append(mock.calls.GetGpuInstanceId, callInfo) mock.lockGetGpuInstanceId.Unlock() return mock.GetGpuInstanceIdFunc() } // GetGpuInstanceIdCalls gets all the calls that were made to GetGpuInstanceId. // Check the length with: // // len(mockedDevice.GetGpuInstanceIdCalls()) func (mock *Device) GetGpuInstanceIdCalls() []struct { } { var calls []struct { } mock.lockGetGpuInstanceId.RLock() calls = mock.calls.GetGpuInstanceId mock.lockGetGpuInstanceId.RUnlock() return calls } // GetGpuInstancePossiblePlacements calls GetGpuInstancePossiblePlacementsFunc. func (mock *Device) GetGpuInstancePossiblePlacements(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstancePlacement, nvml.Return) { if mock.GetGpuInstancePossiblePlacementsFunc == nil { panic("Device.GetGpuInstancePossiblePlacementsFunc: method is nil but Device.GetGpuInstancePossiblePlacements was just called") } callInfo := struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockGetGpuInstancePossiblePlacements.Lock() mock.calls.GetGpuInstancePossiblePlacements = append(mock.calls.GetGpuInstancePossiblePlacements, callInfo) mock.lockGetGpuInstancePossiblePlacements.Unlock() return mock.GetGpuInstancePossiblePlacementsFunc(gpuInstanceProfileInfo) } // GetGpuInstancePossiblePlacementsCalls gets all the calls that were made to GetGpuInstancePossiblePlacements. // Check the length with: // // len(mockedDevice.GetGpuInstancePossiblePlacementsCalls()) func (mock *Device) GetGpuInstancePossiblePlacementsCalls() []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockGetGpuInstancePossiblePlacements.RLock() calls = mock.calls.GetGpuInstancePossiblePlacements mock.lockGetGpuInstancePossiblePlacements.RUnlock() return calls } // GetGpuInstanceProfileInfo calls GetGpuInstanceProfileInfoFunc. func (mock *Device) GetGpuInstanceProfileInfo(n int) (nvml.GpuInstanceProfileInfo, nvml.Return) { if mock.GetGpuInstanceProfileInfoFunc == nil { panic("Device.GetGpuInstanceProfileInfoFunc: method is nil but Device.GetGpuInstanceProfileInfo was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetGpuInstanceProfileInfo.Lock() mock.calls.GetGpuInstanceProfileInfo = append(mock.calls.GetGpuInstanceProfileInfo, callInfo) mock.lockGetGpuInstanceProfileInfo.Unlock() return mock.GetGpuInstanceProfileInfoFunc(n) } // GetGpuInstanceProfileInfoCalls gets all the calls that were made to GetGpuInstanceProfileInfo. // Check the length with: // // len(mockedDevice.GetGpuInstanceProfileInfoCalls()) func (mock *Device) GetGpuInstanceProfileInfoCalls() []struct { N int } { var calls []struct { N int } mock.lockGetGpuInstanceProfileInfo.RLock() calls = mock.calls.GetGpuInstanceProfileInfo mock.lockGetGpuInstanceProfileInfo.RUnlock() return calls } // GetGpuInstanceProfileInfoByIdV calls GetGpuInstanceProfileInfoByIdVFunc. func (mock *Device) GetGpuInstanceProfileInfoByIdV(n int) nvml.GpuInstanceProfileInfoByIdHandler { if mock.GetGpuInstanceProfileInfoByIdVFunc == nil { panic("Device.GetGpuInstanceProfileInfoByIdVFunc: method is nil but Device.GetGpuInstanceProfileInfoByIdV was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetGpuInstanceProfileInfoByIdV.Lock() mock.calls.GetGpuInstanceProfileInfoByIdV = append(mock.calls.GetGpuInstanceProfileInfoByIdV, callInfo) mock.lockGetGpuInstanceProfileInfoByIdV.Unlock() return mock.GetGpuInstanceProfileInfoByIdVFunc(n) } // GetGpuInstanceProfileInfoByIdVCalls gets all the calls that were made to GetGpuInstanceProfileInfoByIdV. // Check the length with: // // len(mockedDevice.GetGpuInstanceProfileInfoByIdVCalls()) func (mock *Device) GetGpuInstanceProfileInfoByIdVCalls() []struct { N int } { var calls []struct { N int } mock.lockGetGpuInstanceProfileInfoByIdV.RLock() calls = mock.calls.GetGpuInstanceProfileInfoByIdV mock.lockGetGpuInstanceProfileInfoByIdV.RUnlock() return calls } // GetGpuInstanceProfileInfoV calls GetGpuInstanceProfileInfoVFunc. func (mock *Device) GetGpuInstanceProfileInfoV(n int) nvml.GpuInstanceProfileInfoHandler { if mock.GetGpuInstanceProfileInfoVFunc == nil { panic("Device.GetGpuInstanceProfileInfoVFunc: method is nil but Device.GetGpuInstanceProfileInfoV was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetGpuInstanceProfileInfoV.Lock() mock.calls.GetGpuInstanceProfileInfoV = append(mock.calls.GetGpuInstanceProfileInfoV, callInfo) mock.lockGetGpuInstanceProfileInfoV.Unlock() return mock.GetGpuInstanceProfileInfoVFunc(n) } // GetGpuInstanceProfileInfoVCalls gets all the calls that were made to GetGpuInstanceProfileInfoV. // Check the length with: // // len(mockedDevice.GetGpuInstanceProfileInfoVCalls()) func (mock *Device) GetGpuInstanceProfileInfoVCalls() []struct { N int } { var calls []struct { N int } mock.lockGetGpuInstanceProfileInfoV.RLock() calls = mock.calls.GetGpuInstanceProfileInfoV mock.lockGetGpuInstanceProfileInfoV.RUnlock() return calls } // GetGpuInstanceRemainingCapacity calls GetGpuInstanceRemainingCapacityFunc. func (mock *Device) GetGpuInstanceRemainingCapacity(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (int, nvml.Return) { if mock.GetGpuInstanceRemainingCapacityFunc == nil { panic("Device.GetGpuInstanceRemainingCapacityFunc: method is nil but Device.GetGpuInstanceRemainingCapacity was just called") } callInfo := struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockGetGpuInstanceRemainingCapacity.Lock() mock.calls.GetGpuInstanceRemainingCapacity = append(mock.calls.GetGpuInstanceRemainingCapacity, callInfo) mock.lockGetGpuInstanceRemainingCapacity.Unlock() return mock.GetGpuInstanceRemainingCapacityFunc(gpuInstanceProfileInfo) } // GetGpuInstanceRemainingCapacityCalls gets all the calls that were made to GetGpuInstanceRemainingCapacity. // Check the length with: // // len(mockedDevice.GetGpuInstanceRemainingCapacityCalls()) func (mock *Device) GetGpuInstanceRemainingCapacityCalls() []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockGetGpuInstanceRemainingCapacity.RLock() calls = mock.calls.GetGpuInstanceRemainingCapacity mock.lockGetGpuInstanceRemainingCapacity.RUnlock() return calls } // GetGpuInstances calls GetGpuInstancesFunc. func (mock *Device) GetGpuInstances(gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstance, nvml.Return) { if mock.GetGpuInstancesFunc == nil { panic("Device.GetGpuInstancesFunc: method is nil but Device.GetGpuInstances was just called") } callInfo := struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockGetGpuInstances.Lock() mock.calls.GetGpuInstances = append(mock.calls.GetGpuInstances, callInfo) mock.lockGetGpuInstances.Unlock() return mock.GetGpuInstancesFunc(gpuInstanceProfileInfo) } // GetGpuInstancesCalls gets all the calls that were made to GetGpuInstances. // Check the length with: // // len(mockedDevice.GetGpuInstancesCalls()) func (mock *Device) GetGpuInstancesCalls() []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockGetGpuInstances.RLock() calls = mock.calls.GetGpuInstances mock.lockGetGpuInstances.RUnlock() return calls } // GetGpuMaxPcieLinkGeneration calls GetGpuMaxPcieLinkGenerationFunc. func (mock *Device) GetGpuMaxPcieLinkGeneration() (int, nvml.Return) { if mock.GetGpuMaxPcieLinkGenerationFunc == nil { panic("Device.GetGpuMaxPcieLinkGenerationFunc: method is nil but Device.GetGpuMaxPcieLinkGeneration was just called") } callInfo := struct { }{} mock.lockGetGpuMaxPcieLinkGeneration.Lock() mock.calls.GetGpuMaxPcieLinkGeneration = append(mock.calls.GetGpuMaxPcieLinkGeneration, callInfo) mock.lockGetGpuMaxPcieLinkGeneration.Unlock() return mock.GetGpuMaxPcieLinkGenerationFunc() } // GetGpuMaxPcieLinkGenerationCalls gets all the calls that were made to GetGpuMaxPcieLinkGeneration. // Check the length with: // // len(mockedDevice.GetGpuMaxPcieLinkGenerationCalls()) func (mock *Device) GetGpuMaxPcieLinkGenerationCalls() []struct { } { var calls []struct { } mock.lockGetGpuMaxPcieLinkGeneration.RLock() calls = mock.calls.GetGpuMaxPcieLinkGeneration mock.lockGetGpuMaxPcieLinkGeneration.RUnlock() return calls } // GetGpuOperationMode calls GetGpuOperationModeFunc. func (mock *Device) GetGpuOperationMode() (nvml.GpuOperationMode, nvml.GpuOperationMode, nvml.Return) { if mock.GetGpuOperationModeFunc == nil { panic("Device.GetGpuOperationModeFunc: method is nil but Device.GetGpuOperationMode was just called") } callInfo := struct { }{} mock.lockGetGpuOperationMode.Lock() mock.calls.GetGpuOperationMode = append(mock.calls.GetGpuOperationMode, callInfo) mock.lockGetGpuOperationMode.Unlock() return mock.GetGpuOperationModeFunc() } // GetGpuOperationModeCalls gets all the calls that were made to GetGpuOperationMode. // Check the length with: // // len(mockedDevice.GetGpuOperationModeCalls()) func (mock *Device) GetGpuOperationModeCalls() []struct { } { var calls []struct { } mock.lockGetGpuOperationMode.RLock() calls = mock.calls.GetGpuOperationMode mock.lockGetGpuOperationMode.RUnlock() return calls } // GetGraphicsRunningProcesses calls GetGraphicsRunningProcessesFunc. func (mock *Device) GetGraphicsRunningProcesses() ([]nvml.ProcessInfo, nvml.Return) { if mock.GetGraphicsRunningProcessesFunc == nil { panic("Device.GetGraphicsRunningProcessesFunc: method is nil but Device.GetGraphicsRunningProcesses was just called") } callInfo := struct { }{} mock.lockGetGraphicsRunningProcesses.Lock() mock.calls.GetGraphicsRunningProcesses = append(mock.calls.GetGraphicsRunningProcesses, callInfo) mock.lockGetGraphicsRunningProcesses.Unlock() return mock.GetGraphicsRunningProcessesFunc() } // GetGraphicsRunningProcessesCalls gets all the calls that were made to GetGraphicsRunningProcesses. // Check the length with: // // len(mockedDevice.GetGraphicsRunningProcessesCalls()) func (mock *Device) GetGraphicsRunningProcessesCalls() []struct { } { var calls []struct { } mock.lockGetGraphicsRunningProcesses.RLock() calls = mock.calls.GetGraphicsRunningProcesses mock.lockGetGraphicsRunningProcesses.RUnlock() return calls } // GetGridLicensableFeatures calls GetGridLicensableFeaturesFunc. func (mock *Device) GetGridLicensableFeatures() (nvml.GridLicensableFeatures, nvml.Return) { if mock.GetGridLicensableFeaturesFunc == nil { panic("Device.GetGridLicensableFeaturesFunc: method is nil but Device.GetGridLicensableFeatures was just called") } callInfo := struct { }{} mock.lockGetGridLicensableFeatures.Lock() mock.calls.GetGridLicensableFeatures = append(mock.calls.GetGridLicensableFeatures, callInfo) mock.lockGetGridLicensableFeatures.Unlock() return mock.GetGridLicensableFeaturesFunc() } // GetGridLicensableFeaturesCalls gets all the calls that were made to GetGridLicensableFeatures. // Check the length with: // // len(mockedDevice.GetGridLicensableFeaturesCalls()) func (mock *Device) GetGridLicensableFeaturesCalls() []struct { } { var calls []struct { } mock.lockGetGridLicensableFeatures.RLock() calls = mock.calls.GetGridLicensableFeatures mock.lockGetGridLicensableFeatures.RUnlock() return calls } // GetGspFirmwareMode calls GetGspFirmwareModeFunc. func (mock *Device) GetGspFirmwareMode() (bool, bool, nvml.Return) { if mock.GetGspFirmwareModeFunc == nil { panic("Device.GetGspFirmwareModeFunc: method is nil but Device.GetGspFirmwareMode was just called") } callInfo := struct { }{} mock.lockGetGspFirmwareMode.Lock() mock.calls.GetGspFirmwareMode = append(mock.calls.GetGspFirmwareMode, callInfo) mock.lockGetGspFirmwareMode.Unlock() return mock.GetGspFirmwareModeFunc() } // GetGspFirmwareModeCalls gets all the calls that were made to GetGspFirmwareMode. // Check the length with: // // len(mockedDevice.GetGspFirmwareModeCalls()) func (mock *Device) GetGspFirmwareModeCalls() []struct { } { var calls []struct { } mock.lockGetGspFirmwareMode.RLock() calls = mock.calls.GetGspFirmwareMode mock.lockGetGspFirmwareMode.RUnlock() return calls } // GetGspFirmwareVersion calls GetGspFirmwareVersionFunc. func (mock *Device) GetGspFirmwareVersion() (string, nvml.Return) { if mock.GetGspFirmwareVersionFunc == nil { panic("Device.GetGspFirmwareVersionFunc: method is nil but Device.GetGspFirmwareVersion was just called") } callInfo := struct { }{} mock.lockGetGspFirmwareVersion.Lock() mock.calls.GetGspFirmwareVersion = append(mock.calls.GetGspFirmwareVersion, callInfo) mock.lockGetGspFirmwareVersion.Unlock() return mock.GetGspFirmwareVersionFunc() } // GetGspFirmwareVersionCalls gets all the calls that were made to GetGspFirmwareVersion. // Check the length with: // // len(mockedDevice.GetGspFirmwareVersionCalls()) func (mock *Device) GetGspFirmwareVersionCalls() []struct { } { var calls []struct { } mock.lockGetGspFirmwareVersion.RLock() calls = mock.calls.GetGspFirmwareVersion mock.lockGetGspFirmwareVersion.RUnlock() return calls } // GetHostVgpuMode calls GetHostVgpuModeFunc. func (mock *Device) GetHostVgpuMode() (nvml.HostVgpuMode, nvml.Return) { if mock.GetHostVgpuModeFunc == nil { panic("Device.GetHostVgpuModeFunc: method is nil but Device.GetHostVgpuMode was just called") } callInfo := struct { }{} mock.lockGetHostVgpuMode.Lock() mock.calls.GetHostVgpuMode = append(mock.calls.GetHostVgpuMode, callInfo) mock.lockGetHostVgpuMode.Unlock() return mock.GetHostVgpuModeFunc() } // GetHostVgpuModeCalls gets all the calls that were made to GetHostVgpuMode. // Check the length with: // // len(mockedDevice.GetHostVgpuModeCalls()) func (mock *Device) GetHostVgpuModeCalls() []struct { } { var calls []struct { } mock.lockGetHostVgpuMode.RLock() calls = mock.calls.GetHostVgpuMode mock.lockGetHostVgpuMode.RUnlock() return calls } // GetIndex calls GetIndexFunc. func (mock *Device) GetIndex() (int, nvml.Return) { if mock.GetIndexFunc == nil { panic("Device.GetIndexFunc: method is nil but Device.GetIndex was just called") } callInfo := struct { }{} mock.lockGetIndex.Lock() mock.calls.GetIndex = append(mock.calls.GetIndex, callInfo) mock.lockGetIndex.Unlock() return mock.GetIndexFunc() } // GetIndexCalls gets all the calls that were made to GetIndex. // Check the length with: // // len(mockedDevice.GetIndexCalls()) func (mock *Device) GetIndexCalls() []struct { } { var calls []struct { } mock.lockGetIndex.RLock() calls = mock.calls.GetIndex mock.lockGetIndex.RUnlock() return calls } // GetInforomConfigurationChecksum calls GetInforomConfigurationChecksumFunc. func (mock *Device) GetInforomConfigurationChecksum() (uint32, nvml.Return) { if mock.GetInforomConfigurationChecksumFunc == nil { panic("Device.GetInforomConfigurationChecksumFunc: method is nil but Device.GetInforomConfigurationChecksum was just called") } callInfo := struct { }{} mock.lockGetInforomConfigurationChecksum.Lock() mock.calls.GetInforomConfigurationChecksum = append(mock.calls.GetInforomConfigurationChecksum, callInfo) mock.lockGetInforomConfigurationChecksum.Unlock() return mock.GetInforomConfigurationChecksumFunc() } // GetInforomConfigurationChecksumCalls gets all the calls that were made to GetInforomConfigurationChecksum. // Check the length with: // // len(mockedDevice.GetInforomConfigurationChecksumCalls()) func (mock *Device) GetInforomConfigurationChecksumCalls() []struct { } { var calls []struct { } mock.lockGetInforomConfigurationChecksum.RLock() calls = mock.calls.GetInforomConfigurationChecksum mock.lockGetInforomConfigurationChecksum.RUnlock() return calls } // GetInforomImageVersion calls GetInforomImageVersionFunc. func (mock *Device) GetInforomImageVersion() (string, nvml.Return) { if mock.GetInforomImageVersionFunc == nil { panic("Device.GetInforomImageVersionFunc: method is nil but Device.GetInforomImageVersion was just called") } callInfo := struct { }{} mock.lockGetInforomImageVersion.Lock() mock.calls.GetInforomImageVersion = append(mock.calls.GetInforomImageVersion, callInfo) mock.lockGetInforomImageVersion.Unlock() return mock.GetInforomImageVersionFunc() } // GetInforomImageVersionCalls gets all the calls that were made to GetInforomImageVersion. // Check the length with: // // len(mockedDevice.GetInforomImageVersionCalls()) func (mock *Device) GetInforomImageVersionCalls() []struct { } { var calls []struct { } mock.lockGetInforomImageVersion.RLock() calls = mock.calls.GetInforomImageVersion mock.lockGetInforomImageVersion.RUnlock() return calls } // GetInforomVersion calls GetInforomVersionFunc. func (mock *Device) GetInforomVersion(inforomObject nvml.InforomObject) (string, nvml.Return) { if mock.GetInforomVersionFunc == nil { panic("Device.GetInforomVersionFunc: method is nil but Device.GetInforomVersion was just called") } callInfo := struct { InforomObject nvml.InforomObject }{ InforomObject: inforomObject, } mock.lockGetInforomVersion.Lock() mock.calls.GetInforomVersion = append(mock.calls.GetInforomVersion, callInfo) mock.lockGetInforomVersion.Unlock() return mock.GetInforomVersionFunc(inforomObject) } // GetInforomVersionCalls gets all the calls that were made to GetInforomVersion. // Check the length with: // // len(mockedDevice.GetInforomVersionCalls()) func (mock *Device) GetInforomVersionCalls() []struct { InforomObject nvml.InforomObject } { var calls []struct { InforomObject nvml.InforomObject } mock.lockGetInforomVersion.RLock() calls = mock.calls.GetInforomVersion mock.lockGetInforomVersion.RUnlock() return calls } // GetIrqNum calls GetIrqNumFunc. func (mock *Device) GetIrqNum() (int, nvml.Return) { if mock.GetIrqNumFunc == nil { panic("Device.GetIrqNumFunc: method is nil but Device.GetIrqNum was just called") } callInfo := struct { }{} mock.lockGetIrqNum.Lock() mock.calls.GetIrqNum = append(mock.calls.GetIrqNum, callInfo) mock.lockGetIrqNum.Unlock() return mock.GetIrqNumFunc() } // GetIrqNumCalls gets all the calls that were made to GetIrqNum. // Check the length with: // // len(mockedDevice.GetIrqNumCalls()) func (mock *Device) GetIrqNumCalls() []struct { } { var calls []struct { } mock.lockGetIrqNum.RLock() calls = mock.calls.GetIrqNum mock.lockGetIrqNum.RUnlock() return calls } // GetJpgUtilization calls GetJpgUtilizationFunc. func (mock *Device) GetJpgUtilization() (uint32, uint32, nvml.Return) { if mock.GetJpgUtilizationFunc == nil { panic("Device.GetJpgUtilizationFunc: method is nil but Device.GetJpgUtilization was just called") } callInfo := struct { }{} mock.lockGetJpgUtilization.Lock() mock.calls.GetJpgUtilization = append(mock.calls.GetJpgUtilization, callInfo) mock.lockGetJpgUtilization.Unlock() return mock.GetJpgUtilizationFunc() } // GetJpgUtilizationCalls gets all the calls that were made to GetJpgUtilization. // Check the length with: // // len(mockedDevice.GetJpgUtilizationCalls()) func (mock *Device) GetJpgUtilizationCalls() []struct { } { var calls []struct { } mock.lockGetJpgUtilization.RLock() calls = mock.calls.GetJpgUtilization mock.lockGetJpgUtilization.RUnlock() return calls } // GetLastBBXFlushTime calls GetLastBBXFlushTimeFunc. func (mock *Device) GetLastBBXFlushTime() (uint64, uint, nvml.Return) { if mock.GetLastBBXFlushTimeFunc == nil { panic("Device.GetLastBBXFlushTimeFunc: method is nil but Device.GetLastBBXFlushTime was just called") } callInfo := struct { }{} mock.lockGetLastBBXFlushTime.Lock() mock.calls.GetLastBBXFlushTime = append(mock.calls.GetLastBBXFlushTime, callInfo) mock.lockGetLastBBXFlushTime.Unlock() return mock.GetLastBBXFlushTimeFunc() } // GetLastBBXFlushTimeCalls gets all the calls that were made to GetLastBBXFlushTime. // Check the length with: // // len(mockedDevice.GetLastBBXFlushTimeCalls()) func (mock *Device) GetLastBBXFlushTimeCalls() []struct { } { var calls []struct { } mock.lockGetLastBBXFlushTime.RLock() calls = mock.calls.GetLastBBXFlushTime mock.lockGetLastBBXFlushTime.RUnlock() return calls } // GetMPSComputeRunningProcesses calls GetMPSComputeRunningProcessesFunc. func (mock *Device) GetMPSComputeRunningProcesses() ([]nvml.ProcessInfo, nvml.Return) { if mock.GetMPSComputeRunningProcessesFunc == nil { panic("Device.GetMPSComputeRunningProcessesFunc: method is nil but Device.GetMPSComputeRunningProcesses was just called") } callInfo := struct { }{} mock.lockGetMPSComputeRunningProcesses.Lock() mock.calls.GetMPSComputeRunningProcesses = append(mock.calls.GetMPSComputeRunningProcesses, callInfo) mock.lockGetMPSComputeRunningProcesses.Unlock() return mock.GetMPSComputeRunningProcessesFunc() } // GetMPSComputeRunningProcessesCalls gets all the calls that were made to GetMPSComputeRunningProcesses. // Check the length with: // // len(mockedDevice.GetMPSComputeRunningProcessesCalls()) func (mock *Device) GetMPSComputeRunningProcessesCalls() []struct { } { var calls []struct { } mock.lockGetMPSComputeRunningProcesses.RLock() calls = mock.calls.GetMPSComputeRunningProcesses mock.lockGetMPSComputeRunningProcesses.RUnlock() return calls } // GetMarginTemperature calls GetMarginTemperatureFunc. func (mock *Device) GetMarginTemperature() (nvml.MarginTemperature, nvml.Return) { if mock.GetMarginTemperatureFunc == nil { panic("Device.GetMarginTemperatureFunc: method is nil but Device.GetMarginTemperature was just called") } callInfo := struct { }{} mock.lockGetMarginTemperature.Lock() mock.calls.GetMarginTemperature = append(mock.calls.GetMarginTemperature, callInfo) mock.lockGetMarginTemperature.Unlock() return mock.GetMarginTemperatureFunc() } // GetMarginTemperatureCalls gets all the calls that were made to GetMarginTemperature. // Check the length with: // // len(mockedDevice.GetMarginTemperatureCalls()) func (mock *Device) GetMarginTemperatureCalls() []struct { } { var calls []struct { } mock.lockGetMarginTemperature.RLock() calls = mock.calls.GetMarginTemperature mock.lockGetMarginTemperature.RUnlock() return calls } // GetMaxClockInfo calls GetMaxClockInfoFunc. func (mock *Device) GetMaxClockInfo(clockType nvml.ClockType) (uint32, nvml.Return) { if mock.GetMaxClockInfoFunc == nil { panic("Device.GetMaxClockInfoFunc: method is nil but Device.GetMaxClockInfo was just called") } callInfo := struct { ClockType nvml.ClockType }{ ClockType: clockType, } mock.lockGetMaxClockInfo.Lock() mock.calls.GetMaxClockInfo = append(mock.calls.GetMaxClockInfo, callInfo) mock.lockGetMaxClockInfo.Unlock() return mock.GetMaxClockInfoFunc(clockType) } // GetMaxClockInfoCalls gets all the calls that were made to GetMaxClockInfo. // Check the length with: // // len(mockedDevice.GetMaxClockInfoCalls()) func (mock *Device) GetMaxClockInfoCalls() []struct { ClockType nvml.ClockType } { var calls []struct { ClockType nvml.ClockType } mock.lockGetMaxClockInfo.RLock() calls = mock.calls.GetMaxClockInfo mock.lockGetMaxClockInfo.RUnlock() return calls } // GetMaxCustomerBoostClock calls GetMaxCustomerBoostClockFunc. func (mock *Device) GetMaxCustomerBoostClock(clockType nvml.ClockType) (uint32, nvml.Return) { if mock.GetMaxCustomerBoostClockFunc == nil { panic("Device.GetMaxCustomerBoostClockFunc: method is nil but Device.GetMaxCustomerBoostClock was just called") } callInfo := struct { ClockType nvml.ClockType }{ ClockType: clockType, } mock.lockGetMaxCustomerBoostClock.Lock() mock.calls.GetMaxCustomerBoostClock = append(mock.calls.GetMaxCustomerBoostClock, callInfo) mock.lockGetMaxCustomerBoostClock.Unlock() return mock.GetMaxCustomerBoostClockFunc(clockType) } // GetMaxCustomerBoostClockCalls gets all the calls that were made to GetMaxCustomerBoostClock. // Check the length with: // // len(mockedDevice.GetMaxCustomerBoostClockCalls()) func (mock *Device) GetMaxCustomerBoostClockCalls() []struct { ClockType nvml.ClockType } { var calls []struct { ClockType nvml.ClockType } mock.lockGetMaxCustomerBoostClock.RLock() calls = mock.calls.GetMaxCustomerBoostClock mock.lockGetMaxCustomerBoostClock.RUnlock() return calls } // GetMaxMigDeviceCount calls GetMaxMigDeviceCountFunc. func (mock *Device) GetMaxMigDeviceCount() (int, nvml.Return) { if mock.GetMaxMigDeviceCountFunc == nil { panic("Device.GetMaxMigDeviceCountFunc: method is nil but Device.GetMaxMigDeviceCount was just called") } callInfo := struct { }{} mock.lockGetMaxMigDeviceCount.Lock() mock.calls.GetMaxMigDeviceCount = append(mock.calls.GetMaxMigDeviceCount, callInfo) mock.lockGetMaxMigDeviceCount.Unlock() return mock.GetMaxMigDeviceCountFunc() } // GetMaxMigDeviceCountCalls gets all the calls that were made to GetMaxMigDeviceCount. // Check the length with: // // len(mockedDevice.GetMaxMigDeviceCountCalls()) func (mock *Device) GetMaxMigDeviceCountCalls() []struct { } { var calls []struct { } mock.lockGetMaxMigDeviceCount.RLock() calls = mock.calls.GetMaxMigDeviceCount mock.lockGetMaxMigDeviceCount.RUnlock() return calls } // GetMaxPcieLinkGeneration calls GetMaxPcieLinkGenerationFunc. func (mock *Device) GetMaxPcieLinkGeneration() (int, nvml.Return) { if mock.GetMaxPcieLinkGenerationFunc == nil { panic("Device.GetMaxPcieLinkGenerationFunc: method is nil but Device.GetMaxPcieLinkGeneration was just called") } callInfo := struct { }{} mock.lockGetMaxPcieLinkGeneration.Lock() mock.calls.GetMaxPcieLinkGeneration = append(mock.calls.GetMaxPcieLinkGeneration, callInfo) mock.lockGetMaxPcieLinkGeneration.Unlock() return mock.GetMaxPcieLinkGenerationFunc() } // GetMaxPcieLinkGenerationCalls gets all the calls that were made to GetMaxPcieLinkGeneration. // Check the length with: // // len(mockedDevice.GetMaxPcieLinkGenerationCalls()) func (mock *Device) GetMaxPcieLinkGenerationCalls() []struct { } { var calls []struct { } mock.lockGetMaxPcieLinkGeneration.RLock() calls = mock.calls.GetMaxPcieLinkGeneration mock.lockGetMaxPcieLinkGeneration.RUnlock() return calls } // GetMaxPcieLinkWidth calls GetMaxPcieLinkWidthFunc. func (mock *Device) GetMaxPcieLinkWidth() (int, nvml.Return) { if mock.GetMaxPcieLinkWidthFunc == nil { panic("Device.GetMaxPcieLinkWidthFunc: method is nil but Device.GetMaxPcieLinkWidth was just called") } callInfo := struct { }{} mock.lockGetMaxPcieLinkWidth.Lock() mock.calls.GetMaxPcieLinkWidth = append(mock.calls.GetMaxPcieLinkWidth, callInfo) mock.lockGetMaxPcieLinkWidth.Unlock() return mock.GetMaxPcieLinkWidthFunc() } // GetMaxPcieLinkWidthCalls gets all the calls that were made to GetMaxPcieLinkWidth. // Check the length with: // // len(mockedDevice.GetMaxPcieLinkWidthCalls()) func (mock *Device) GetMaxPcieLinkWidthCalls() []struct { } { var calls []struct { } mock.lockGetMaxPcieLinkWidth.RLock() calls = mock.calls.GetMaxPcieLinkWidth mock.lockGetMaxPcieLinkWidth.RUnlock() return calls } // GetMemClkMinMaxVfOffset calls GetMemClkMinMaxVfOffsetFunc. func (mock *Device) GetMemClkMinMaxVfOffset() (int, int, nvml.Return) { if mock.GetMemClkMinMaxVfOffsetFunc == nil { panic("Device.GetMemClkMinMaxVfOffsetFunc: method is nil but Device.GetMemClkMinMaxVfOffset was just called") } callInfo := struct { }{} mock.lockGetMemClkMinMaxVfOffset.Lock() mock.calls.GetMemClkMinMaxVfOffset = append(mock.calls.GetMemClkMinMaxVfOffset, callInfo) mock.lockGetMemClkMinMaxVfOffset.Unlock() return mock.GetMemClkMinMaxVfOffsetFunc() } // GetMemClkMinMaxVfOffsetCalls gets all the calls that were made to GetMemClkMinMaxVfOffset. // Check the length with: // // len(mockedDevice.GetMemClkMinMaxVfOffsetCalls()) func (mock *Device) GetMemClkMinMaxVfOffsetCalls() []struct { } { var calls []struct { } mock.lockGetMemClkMinMaxVfOffset.RLock() calls = mock.calls.GetMemClkMinMaxVfOffset mock.lockGetMemClkMinMaxVfOffset.RUnlock() return calls } // GetMemClkVfOffset calls GetMemClkVfOffsetFunc. func (mock *Device) GetMemClkVfOffset() (int, nvml.Return) { if mock.GetMemClkVfOffsetFunc == nil { panic("Device.GetMemClkVfOffsetFunc: method is nil but Device.GetMemClkVfOffset was just called") } callInfo := struct { }{} mock.lockGetMemClkVfOffset.Lock() mock.calls.GetMemClkVfOffset = append(mock.calls.GetMemClkVfOffset, callInfo) mock.lockGetMemClkVfOffset.Unlock() return mock.GetMemClkVfOffsetFunc() } // GetMemClkVfOffsetCalls gets all the calls that were made to GetMemClkVfOffset. // Check the length with: // // len(mockedDevice.GetMemClkVfOffsetCalls()) func (mock *Device) GetMemClkVfOffsetCalls() []struct { } { var calls []struct { } mock.lockGetMemClkVfOffset.RLock() calls = mock.calls.GetMemClkVfOffset mock.lockGetMemClkVfOffset.RUnlock() return calls } // GetMemoryAffinity calls GetMemoryAffinityFunc. func (mock *Device) GetMemoryAffinity(n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { if mock.GetMemoryAffinityFunc == nil { panic("Device.GetMemoryAffinityFunc: method is nil but Device.GetMemoryAffinity was just called") } callInfo := struct { N int AffinityScope nvml.AffinityScope }{ N: n, AffinityScope: affinityScope, } mock.lockGetMemoryAffinity.Lock() mock.calls.GetMemoryAffinity = append(mock.calls.GetMemoryAffinity, callInfo) mock.lockGetMemoryAffinity.Unlock() return mock.GetMemoryAffinityFunc(n, affinityScope) } // GetMemoryAffinityCalls gets all the calls that were made to GetMemoryAffinity. // Check the length with: // // len(mockedDevice.GetMemoryAffinityCalls()) func (mock *Device) GetMemoryAffinityCalls() []struct { N int AffinityScope nvml.AffinityScope } { var calls []struct { N int AffinityScope nvml.AffinityScope } mock.lockGetMemoryAffinity.RLock() calls = mock.calls.GetMemoryAffinity mock.lockGetMemoryAffinity.RUnlock() return calls } // GetMemoryBusWidth calls GetMemoryBusWidthFunc. func (mock *Device) GetMemoryBusWidth() (uint32, nvml.Return) { if mock.GetMemoryBusWidthFunc == nil { panic("Device.GetMemoryBusWidthFunc: method is nil but Device.GetMemoryBusWidth was just called") } callInfo := struct { }{} mock.lockGetMemoryBusWidth.Lock() mock.calls.GetMemoryBusWidth = append(mock.calls.GetMemoryBusWidth, callInfo) mock.lockGetMemoryBusWidth.Unlock() return mock.GetMemoryBusWidthFunc() } // GetMemoryBusWidthCalls gets all the calls that were made to GetMemoryBusWidth. // Check the length with: // // len(mockedDevice.GetMemoryBusWidthCalls()) func (mock *Device) GetMemoryBusWidthCalls() []struct { } { var calls []struct { } mock.lockGetMemoryBusWidth.RLock() calls = mock.calls.GetMemoryBusWidth mock.lockGetMemoryBusWidth.RUnlock() return calls } // GetMemoryErrorCounter calls GetMemoryErrorCounterFunc. func (mock *Device) GetMemoryErrorCounter(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType, memoryLocation nvml.MemoryLocation) (uint64, nvml.Return) { if mock.GetMemoryErrorCounterFunc == nil { panic("Device.GetMemoryErrorCounterFunc: method is nil but Device.GetMemoryErrorCounter was just called") } callInfo := struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType MemoryLocation nvml.MemoryLocation }{ MemoryErrorType: memoryErrorType, EccCounterType: eccCounterType, MemoryLocation: memoryLocation, } mock.lockGetMemoryErrorCounter.Lock() mock.calls.GetMemoryErrorCounter = append(mock.calls.GetMemoryErrorCounter, callInfo) mock.lockGetMemoryErrorCounter.Unlock() return mock.GetMemoryErrorCounterFunc(memoryErrorType, eccCounterType, memoryLocation) } // GetMemoryErrorCounterCalls gets all the calls that were made to GetMemoryErrorCounter. // Check the length with: // // len(mockedDevice.GetMemoryErrorCounterCalls()) func (mock *Device) GetMemoryErrorCounterCalls() []struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType MemoryLocation nvml.MemoryLocation } { var calls []struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType MemoryLocation nvml.MemoryLocation } mock.lockGetMemoryErrorCounter.RLock() calls = mock.calls.GetMemoryErrorCounter mock.lockGetMemoryErrorCounter.RUnlock() return calls } // GetMemoryInfo calls GetMemoryInfoFunc. func (mock *Device) GetMemoryInfo() (nvml.Memory, nvml.Return) { if mock.GetMemoryInfoFunc == nil { panic("Device.GetMemoryInfoFunc: method is nil but Device.GetMemoryInfo was just called") } callInfo := struct { }{} mock.lockGetMemoryInfo.Lock() mock.calls.GetMemoryInfo = append(mock.calls.GetMemoryInfo, callInfo) mock.lockGetMemoryInfo.Unlock() return mock.GetMemoryInfoFunc() } // GetMemoryInfoCalls gets all the calls that were made to GetMemoryInfo. // Check the length with: // // len(mockedDevice.GetMemoryInfoCalls()) func (mock *Device) GetMemoryInfoCalls() []struct { } { var calls []struct { } mock.lockGetMemoryInfo.RLock() calls = mock.calls.GetMemoryInfo mock.lockGetMemoryInfo.RUnlock() return calls } // GetMemoryInfo_v2 calls GetMemoryInfo_v2Func. func (mock *Device) GetMemoryInfo_v2() (nvml.Memory_v2, nvml.Return) { if mock.GetMemoryInfo_v2Func == nil { panic("Device.GetMemoryInfo_v2Func: method is nil but Device.GetMemoryInfo_v2 was just called") } callInfo := struct { }{} mock.lockGetMemoryInfo_v2.Lock() mock.calls.GetMemoryInfo_v2 = append(mock.calls.GetMemoryInfo_v2, callInfo) mock.lockGetMemoryInfo_v2.Unlock() return mock.GetMemoryInfo_v2Func() } // GetMemoryInfo_v2Calls gets all the calls that were made to GetMemoryInfo_v2. // Check the length with: // // len(mockedDevice.GetMemoryInfo_v2Calls()) func (mock *Device) GetMemoryInfo_v2Calls() []struct { } { var calls []struct { } mock.lockGetMemoryInfo_v2.RLock() calls = mock.calls.GetMemoryInfo_v2 mock.lockGetMemoryInfo_v2.RUnlock() return calls } // GetMigDeviceHandleByIndex calls GetMigDeviceHandleByIndexFunc. func (mock *Device) GetMigDeviceHandleByIndex(n int) (nvml.Device, nvml.Return) { if mock.GetMigDeviceHandleByIndexFunc == nil { panic("Device.GetMigDeviceHandleByIndexFunc: method is nil but Device.GetMigDeviceHandleByIndex was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetMigDeviceHandleByIndex.Lock() mock.calls.GetMigDeviceHandleByIndex = append(mock.calls.GetMigDeviceHandleByIndex, callInfo) mock.lockGetMigDeviceHandleByIndex.Unlock() return mock.GetMigDeviceHandleByIndexFunc(n) } // GetMigDeviceHandleByIndexCalls gets all the calls that were made to GetMigDeviceHandleByIndex. // Check the length with: // // len(mockedDevice.GetMigDeviceHandleByIndexCalls()) func (mock *Device) GetMigDeviceHandleByIndexCalls() []struct { N int } { var calls []struct { N int } mock.lockGetMigDeviceHandleByIndex.RLock() calls = mock.calls.GetMigDeviceHandleByIndex mock.lockGetMigDeviceHandleByIndex.RUnlock() return calls } // GetMigMode calls GetMigModeFunc. func (mock *Device) GetMigMode() (int, int, nvml.Return) { if mock.GetMigModeFunc == nil { panic("Device.GetMigModeFunc: method is nil but Device.GetMigMode was just called") } callInfo := struct { }{} mock.lockGetMigMode.Lock() mock.calls.GetMigMode = append(mock.calls.GetMigMode, callInfo) mock.lockGetMigMode.Unlock() return mock.GetMigModeFunc() } // GetMigModeCalls gets all the calls that were made to GetMigMode. // Check the length with: // // len(mockedDevice.GetMigModeCalls()) func (mock *Device) GetMigModeCalls() []struct { } { var calls []struct { } mock.lockGetMigMode.RLock() calls = mock.calls.GetMigMode mock.lockGetMigMode.RUnlock() return calls } // GetMinMaxClockOfPState calls GetMinMaxClockOfPStateFunc. func (mock *Device) GetMinMaxClockOfPState(clockType nvml.ClockType, pstates nvml.Pstates) (uint32, uint32, nvml.Return) { if mock.GetMinMaxClockOfPStateFunc == nil { panic("Device.GetMinMaxClockOfPStateFunc: method is nil but Device.GetMinMaxClockOfPState was just called") } callInfo := struct { ClockType nvml.ClockType Pstates nvml.Pstates }{ ClockType: clockType, Pstates: pstates, } mock.lockGetMinMaxClockOfPState.Lock() mock.calls.GetMinMaxClockOfPState = append(mock.calls.GetMinMaxClockOfPState, callInfo) mock.lockGetMinMaxClockOfPState.Unlock() return mock.GetMinMaxClockOfPStateFunc(clockType, pstates) } // GetMinMaxClockOfPStateCalls gets all the calls that were made to GetMinMaxClockOfPState. // Check the length with: // // len(mockedDevice.GetMinMaxClockOfPStateCalls()) func (mock *Device) GetMinMaxClockOfPStateCalls() []struct { ClockType nvml.ClockType Pstates nvml.Pstates } { var calls []struct { ClockType nvml.ClockType Pstates nvml.Pstates } mock.lockGetMinMaxClockOfPState.RLock() calls = mock.calls.GetMinMaxClockOfPState mock.lockGetMinMaxClockOfPState.RUnlock() return calls } // GetMinMaxFanSpeed calls GetMinMaxFanSpeedFunc. func (mock *Device) GetMinMaxFanSpeed() (int, int, nvml.Return) { if mock.GetMinMaxFanSpeedFunc == nil { panic("Device.GetMinMaxFanSpeedFunc: method is nil but Device.GetMinMaxFanSpeed was just called") } callInfo := struct { }{} mock.lockGetMinMaxFanSpeed.Lock() mock.calls.GetMinMaxFanSpeed = append(mock.calls.GetMinMaxFanSpeed, callInfo) mock.lockGetMinMaxFanSpeed.Unlock() return mock.GetMinMaxFanSpeedFunc() } // GetMinMaxFanSpeedCalls gets all the calls that were made to GetMinMaxFanSpeed. // Check the length with: // // len(mockedDevice.GetMinMaxFanSpeedCalls()) func (mock *Device) GetMinMaxFanSpeedCalls() []struct { } { var calls []struct { } mock.lockGetMinMaxFanSpeed.RLock() calls = mock.calls.GetMinMaxFanSpeed mock.lockGetMinMaxFanSpeed.RUnlock() return calls } // GetMinorNumber calls GetMinorNumberFunc. func (mock *Device) GetMinorNumber() (int, nvml.Return) { if mock.GetMinorNumberFunc == nil { panic("Device.GetMinorNumberFunc: method is nil but Device.GetMinorNumber was just called") } callInfo := struct { }{} mock.lockGetMinorNumber.Lock() mock.calls.GetMinorNumber = append(mock.calls.GetMinorNumber, callInfo) mock.lockGetMinorNumber.Unlock() return mock.GetMinorNumberFunc() } // GetMinorNumberCalls gets all the calls that were made to GetMinorNumber. // Check the length with: // // len(mockedDevice.GetMinorNumberCalls()) func (mock *Device) GetMinorNumberCalls() []struct { } { var calls []struct { } mock.lockGetMinorNumber.RLock() calls = mock.calls.GetMinorNumber mock.lockGetMinorNumber.RUnlock() return calls } // GetModuleId calls GetModuleIdFunc. func (mock *Device) GetModuleId() (int, nvml.Return) { if mock.GetModuleIdFunc == nil { panic("Device.GetModuleIdFunc: method is nil but Device.GetModuleId was just called") } callInfo := struct { }{} mock.lockGetModuleId.Lock() mock.calls.GetModuleId = append(mock.calls.GetModuleId, callInfo) mock.lockGetModuleId.Unlock() return mock.GetModuleIdFunc() } // GetModuleIdCalls gets all the calls that were made to GetModuleId. // Check the length with: // // len(mockedDevice.GetModuleIdCalls()) func (mock *Device) GetModuleIdCalls() []struct { } { var calls []struct { } mock.lockGetModuleId.RLock() calls = mock.calls.GetModuleId mock.lockGetModuleId.RUnlock() return calls } // GetMultiGpuBoard calls GetMultiGpuBoardFunc. func (mock *Device) GetMultiGpuBoard() (int, nvml.Return) { if mock.GetMultiGpuBoardFunc == nil { panic("Device.GetMultiGpuBoardFunc: method is nil but Device.GetMultiGpuBoard was just called") } callInfo := struct { }{} mock.lockGetMultiGpuBoard.Lock() mock.calls.GetMultiGpuBoard = append(mock.calls.GetMultiGpuBoard, callInfo) mock.lockGetMultiGpuBoard.Unlock() return mock.GetMultiGpuBoardFunc() } // GetMultiGpuBoardCalls gets all the calls that were made to GetMultiGpuBoard. // Check the length with: // // len(mockedDevice.GetMultiGpuBoardCalls()) func (mock *Device) GetMultiGpuBoardCalls() []struct { } { var calls []struct { } mock.lockGetMultiGpuBoard.RLock() calls = mock.calls.GetMultiGpuBoard mock.lockGetMultiGpuBoard.RUnlock() return calls } // GetName calls GetNameFunc. func (mock *Device) GetName() (string, nvml.Return) { if mock.GetNameFunc == nil { panic("Device.GetNameFunc: method is nil but Device.GetName was just called") } callInfo := struct { }{} mock.lockGetName.Lock() mock.calls.GetName = append(mock.calls.GetName, callInfo) mock.lockGetName.Unlock() return mock.GetNameFunc() } // GetNameCalls gets all the calls that were made to GetName. // Check the length with: // // len(mockedDevice.GetNameCalls()) func (mock *Device) GetNameCalls() []struct { } { var calls []struct { } mock.lockGetName.RLock() calls = mock.calls.GetName mock.lockGetName.RUnlock() return calls } // GetNumFans calls GetNumFansFunc. func (mock *Device) GetNumFans() (int, nvml.Return) { if mock.GetNumFansFunc == nil { panic("Device.GetNumFansFunc: method is nil but Device.GetNumFans was just called") } callInfo := struct { }{} mock.lockGetNumFans.Lock() mock.calls.GetNumFans = append(mock.calls.GetNumFans, callInfo) mock.lockGetNumFans.Unlock() return mock.GetNumFansFunc() } // GetNumFansCalls gets all the calls that were made to GetNumFans. // Check the length with: // // len(mockedDevice.GetNumFansCalls()) func (mock *Device) GetNumFansCalls() []struct { } { var calls []struct { } mock.lockGetNumFans.RLock() calls = mock.calls.GetNumFans mock.lockGetNumFans.RUnlock() return calls } // GetNumGpuCores calls GetNumGpuCoresFunc. func (mock *Device) GetNumGpuCores() (int, nvml.Return) { if mock.GetNumGpuCoresFunc == nil { panic("Device.GetNumGpuCoresFunc: method is nil but Device.GetNumGpuCores was just called") } callInfo := struct { }{} mock.lockGetNumGpuCores.Lock() mock.calls.GetNumGpuCores = append(mock.calls.GetNumGpuCores, callInfo) mock.lockGetNumGpuCores.Unlock() return mock.GetNumGpuCoresFunc() } // GetNumGpuCoresCalls gets all the calls that were made to GetNumGpuCores. // Check the length with: // // len(mockedDevice.GetNumGpuCoresCalls()) func (mock *Device) GetNumGpuCoresCalls() []struct { } { var calls []struct { } mock.lockGetNumGpuCores.RLock() calls = mock.calls.GetNumGpuCores mock.lockGetNumGpuCores.RUnlock() return calls } // GetNumaNodeId calls GetNumaNodeIdFunc. func (mock *Device) GetNumaNodeId() (int, nvml.Return) { if mock.GetNumaNodeIdFunc == nil { panic("Device.GetNumaNodeIdFunc: method is nil but Device.GetNumaNodeId was just called") } callInfo := struct { }{} mock.lockGetNumaNodeId.Lock() mock.calls.GetNumaNodeId = append(mock.calls.GetNumaNodeId, callInfo) mock.lockGetNumaNodeId.Unlock() return mock.GetNumaNodeIdFunc() } // GetNumaNodeIdCalls gets all the calls that were made to GetNumaNodeId. // Check the length with: // // len(mockedDevice.GetNumaNodeIdCalls()) func (mock *Device) GetNumaNodeIdCalls() []struct { } { var calls []struct { } mock.lockGetNumaNodeId.RLock() calls = mock.calls.GetNumaNodeId mock.lockGetNumaNodeId.RUnlock() return calls } // GetNvLinkCapability calls GetNvLinkCapabilityFunc. func (mock *Device) GetNvLinkCapability(n int, nvLinkCapability nvml.NvLinkCapability) (uint32, nvml.Return) { if mock.GetNvLinkCapabilityFunc == nil { panic("Device.GetNvLinkCapabilityFunc: method is nil but Device.GetNvLinkCapability was just called") } callInfo := struct { N int NvLinkCapability nvml.NvLinkCapability }{ N: n, NvLinkCapability: nvLinkCapability, } mock.lockGetNvLinkCapability.Lock() mock.calls.GetNvLinkCapability = append(mock.calls.GetNvLinkCapability, callInfo) mock.lockGetNvLinkCapability.Unlock() return mock.GetNvLinkCapabilityFunc(n, nvLinkCapability) } // GetNvLinkCapabilityCalls gets all the calls that were made to GetNvLinkCapability. // Check the length with: // // len(mockedDevice.GetNvLinkCapabilityCalls()) func (mock *Device) GetNvLinkCapabilityCalls() []struct { N int NvLinkCapability nvml.NvLinkCapability } { var calls []struct { N int NvLinkCapability nvml.NvLinkCapability } mock.lockGetNvLinkCapability.RLock() calls = mock.calls.GetNvLinkCapability mock.lockGetNvLinkCapability.RUnlock() return calls } // GetNvLinkErrorCounter calls GetNvLinkErrorCounterFunc. func (mock *Device) GetNvLinkErrorCounter(n int, nvLinkErrorCounter nvml.NvLinkErrorCounter) (uint64, nvml.Return) { if mock.GetNvLinkErrorCounterFunc == nil { panic("Device.GetNvLinkErrorCounterFunc: method is nil but Device.GetNvLinkErrorCounter was just called") } callInfo := struct { N int NvLinkErrorCounter nvml.NvLinkErrorCounter }{ N: n, NvLinkErrorCounter: nvLinkErrorCounter, } mock.lockGetNvLinkErrorCounter.Lock() mock.calls.GetNvLinkErrorCounter = append(mock.calls.GetNvLinkErrorCounter, callInfo) mock.lockGetNvLinkErrorCounter.Unlock() return mock.GetNvLinkErrorCounterFunc(n, nvLinkErrorCounter) } // GetNvLinkErrorCounterCalls gets all the calls that were made to GetNvLinkErrorCounter. // Check the length with: // // len(mockedDevice.GetNvLinkErrorCounterCalls()) func (mock *Device) GetNvLinkErrorCounterCalls() []struct { N int NvLinkErrorCounter nvml.NvLinkErrorCounter } { var calls []struct { N int NvLinkErrorCounter nvml.NvLinkErrorCounter } mock.lockGetNvLinkErrorCounter.RLock() calls = mock.calls.GetNvLinkErrorCounter mock.lockGetNvLinkErrorCounter.RUnlock() return calls } // GetNvLinkInfo calls GetNvLinkInfoFunc. func (mock *Device) GetNvLinkInfo() nvml.NvLinkInfoHandler { if mock.GetNvLinkInfoFunc == nil { panic("Device.GetNvLinkInfoFunc: method is nil but Device.GetNvLinkInfo was just called") } callInfo := struct { }{} mock.lockGetNvLinkInfo.Lock() mock.calls.GetNvLinkInfo = append(mock.calls.GetNvLinkInfo, callInfo) mock.lockGetNvLinkInfo.Unlock() return mock.GetNvLinkInfoFunc() } // GetNvLinkInfoCalls gets all the calls that were made to GetNvLinkInfo. // Check the length with: // // len(mockedDevice.GetNvLinkInfoCalls()) func (mock *Device) GetNvLinkInfoCalls() []struct { } { var calls []struct { } mock.lockGetNvLinkInfo.RLock() calls = mock.calls.GetNvLinkInfo mock.lockGetNvLinkInfo.RUnlock() return calls } // GetNvLinkRemoteDeviceType calls GetNvLinkRemoteDeviceTypeFunc. func (mock *Device) GetNvLinkRemoteDeviceType(n int) (nvml.IntNvLinkDeviceType, nvml.Return) { if mock.GetNvLinkRemoteDeviceTypeFunc == nil { panic("Device.GetNvLinkRemoteDeviceTypeFunc: method is nil but Device.GetNvLinkRemoteDeviceType was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetNvLinkRemoteDeviceType.Lock() mock.calls.GetNvLinkRemoteDeviceType = append(mock.calls.GetNvLinkRemoteDeviceType, callInfo) mock.lockGetNvLinkRemoteDeviceType.Unlock() return mock.GetNvLinkRemoteDeviceTypeFunc(n) } // GetNvLinkRemoteDeviceTypeCalls gets all the calls that were made to GetNvLinkRemoteDeviceType. // Check the length with: // // len(mockedDevice.GetNvLinkRemoteDeviceTypeCalls()) func (mock *Device) GetNvLinkRemoteDeviceTypeCalls() []struct { N int } { var calls []struct { N int } mock.lockGetNvLinkRemoteDeviceType.RLock() calls = mock.calls.GetNvLinkRemoteDeviceType mock.lockGetNvLinkRemoteDeviceType.RUnlock() return calls } // GetNvLinkRemotePciInfo calls GetNvLinkRemotePciInfoFunc. func (mock *Device) GetNvLinkRemotePciInfo(n int) (nvml.PciInfo, nvml.Return) { if mock.GetNvLinkRemotePciInfoFunc == nil { panic("Device.GetNvLinkRemotePciInfoFunc: method is nil but Device.GetNvLinkRemotePciInfo was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetNvLinkRemotePciInfo.Lock() mock.calls.GetNvLinkRemotePciInfo = append(mock.calls.GetNvLinkRemotePciInfo, callInfo) mock.lockGetNvLinkRemotePciInfo.Unlock() return mock.GetNvLinkRemotePciInfoFunc(n) } // GetNvLinkRemotePciInfoCalls gets all the calls that were made to GetNvLinkRemotePciInfo. // Check the length with: // // len(mockedDevice.GetNvLinkRemotePciInfoCalls()) func (mock *Device) GetNvLinkRemotePciInfoCalls() []struct { N int } { var calls []struct { N int } mock.lockGetNvLinkRemotePciInfo.RLock() calls = mock.calls.GetNvLinkRemotePciInfo mock.lockGetNvLinkRemotePciInfo.RUnlock() return calls } // GetNvLinkState calls GetNvLinkStateFunc. func (mock *Device) GetNvLinkState(n int) (nvml.EnableState, nvml.Return) { if mock.GetNvLinkStateFunc == nil { panic("Device.GetNvLinkStateFunc: method is nil but Device.GetNvLinkState was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetNvLinkState.Lock() mock.calls.GetNvLinkState = append(mock.calls.GetNvLinkState, callInfo) mock.lockGetNvLinkState.Unlock() return mock.GetNvLinkStateFunc(n) } // GetNvLinkStateCalls gets all the calls that were made to GetNvLinkState. // Check the length with: // // len(mockedDevice.GetNvLinkStateCalls()) func (mock *Device) GetNvLinkStateCalls() []struct { N int } { var calls []struct { N int } mock.lockGetNvLinkState.RLock() calls = mock.calls.GetNvLinkState mock.lockGetNvLinkState.RUnlock() return calls } // GetNvLinkUtilizationControl calls GetNvLinkUtilizationControlFunc. func (mock *Device) GetNvLinkUtilizationControl(n1 int, n2 int) (nvml.NvLinkUtilizationControl, nvml.Return) { if mock.GetNvLinkUtilizationControlFunc == nil { panic("Device.GetNvLinkUtilizationControlFunc: method is nil but Device.GetNvLinkUtilizationControl was just called") } callInfo := struct { N1 int N2 int }{ N1: n1, N2: n2, } mock.lockGetNvLinkUtilizationControl.Lock() mock.calls.GetNvLinkUtilizationControl = append(mock.calls.GetNvLinkUtilizationControl, callInfo) mock.lockGetNvLinkUtilizationControl.Unlock() return mock.GetNvLinkUtilizationControlFunc(n1, n2) } // GetNvLinkUtilizationControlCalls gets all the calls that were made to GetNvLinkUtilizationControl. // Check the length with: // // len(mockedDevice.GetNvLinkUtilizationControlCalls()) func (mock *Device) GetNvLinkUtilizationControlCalls() []struct { N1 int N2 int } { var calls []struct { N1 int N2 int } mock.lockGetNvLinkUtilizationControl.RLock() calls = mock.calls.GetNvLinkUtilizationControl mock.lockGetNvLinkUtilizationControl.RUnlock() return calls } // GetNvLinkUtilizationCounter calls GetNvLinkUtilizationCounterFunc. func (mock *Device) GetNvLinkUtilizationCounter(n1 int, n2 int) (uint64, uint64, nvml.Return) { if mock.GetNvLinkUtilizationCounterFunc == nil { panic("Device.GetNvLinkUtilizationCounterFunc: method is nil but Device.GetNvLinkUtilizationCounter was just called") } callInfo := struct { N1 int N2 int }{ N1: n1, N2: n2, } mock.lockGetNvLinkUtilizationCounter.Lock() mock.calls.GetNvLinkUtilizationCounter = append(mock.calls.GetNvLinkUtilizationCounter, callInfo) mock.lockGetNvLinkUtilizationCounter.Unlock() return mock.GetNvLinkUtilizationCounterFunc(n1, n2) } // GetNvLinkUtilizationCounterCalls gets all the calls that were made to GetNvLinkUtilizationCounter. // Check the length with: // // len(mockedDevice.GetNvLinkUtilizationCounterCalls()) func (mock *Device) GetNvLinkUtilizationCounterCalls() []struct { N1 int N2 int } { var calls []struct { N1 int N2 int } mock.lockGetNvLinkUtilizationCounter.RLock() calls = mock.calls.GetNvLinkUtilizationCounter mock.lockGetNvLinkUtilizationCounter.RUnlock() return calls } // GetNvLinkVersion calls GetNvLinkVersionFunc. func (mock *Device) GetNvLinkVersion(n int) (uint32, nvml.Return) { if mock.GetNvLinkVersionFunc == nil { panic("Device.GetNvLinkVersionFunc: method is nil but Device.GetNvLinkVersion was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetNvLinkVersion.Lock() mock.calls.GetNvLinkVersion = append(mock.calls.GetNvLinkVersion, callInfo) mock.lockGetNvLinkVersion.Unlock() return mock.GetNvLinkVersionFunc(n) } // GetNvLinkVersionCalls gets all the calls that were made to GetNvLinkVersion. // Check the length with: // // len(mockedDevice.GetNvLinkVersionCalls()) func (mock *Device) GetNvLinkVersionCalls() []struct { N int } { var calls []struct { N int } mock.lockGetNvLinkVersion.RLock() calls = mock.calls.GetNvLinkVersion mock.lockGetNvLinkVersion.RUnlock() return calls } // GetNvlinkBwMode calls GetNvlinkBwModeFunc. func (mock *Device) GetNvlinkBwMode() (nvml.NvlinkGetBwMode, nvml.Return) { if mock.GetNvlinkBwModeFunc == nil { panic("Device.GetNvlinkBwModeFunc: method is nil but Device.GetNvlinkBwMode was just called") } callInfo := struct { }{} mock.lockGetNvlinkBwMode.Lock() mock.calls.GetNvlinkBwMode = append(mock.calls.GetNvlinkBwMode, callInfo) mock.lockGetNvlinkBwMode.Unlock() return mock.GetNvlinkBwModeFunc() } // GetNvlinkBwModeCalls gets all the calls that were made to GetNvlinkBwMode. // Check the length with: // // len(mockedDevice.GetNvlinkBwModeCalls()) func (mock *Device) GetNvlinkBwModeCalls() []struct { } { var calls []struct { } mock.lockGetNvlinkBwMode.RLock() calls = mock.calls.GetNvlinkBwMode mock.lockGetNvlinkBwMode.RUnlock() return calls } // GetNvlinkSupportedBwModes calls GetNvlinkSupportedBwModesFunc. func (mock *Device) GetNvlinkSupportedBwModes() (nvml.NvlinkSupportedBwModes, nvml.Return) { if mock.GetNvlinkSupportedBwModesFunc == nil { panic("Device.GetNvlinkSupportedBwModesFunc: method is nil but Device.GetNvlinkSupportedBwModes was just called") } callInfo := struct { }{} mock.lockGetNvlinkSupportedBwModes.Lock() mock.calls.GetNvlinkSupportedBwModes = append(mock.calls.GetNvlinkSupportedBwModes, callInfo) mock.lockGetNvlinkSupportedBwModes.Unlock() return mock.GetNvlinkSupportedBwModesFunc() } // GetNvlinkSupportedBwModesCalls gets all the calls that were made to GetNvlinkSupportedBwModes. // Check the length with: // // len(mockedDevice.GetNvlinkSupportedBwModesCalls()) func (mock *Device) GetNvlinkSupportedBwModesCalls() []struct { } { var calls []struct { } mock.lockGetNvlinkSupportedBwModes.RLock() calls = mock.calls.GetNvlinkSupportedBwModes mock.lockGetNvlinkSupportedBwModes.RUnlock() return calls } // GetOfaUtilization calls GetOfaUtilizationFunc. func (mock *Device) GetOfaUtilization() (uint32, uint32, nvml.Return) { if mock.GetOfaUtilizationFunc == nil { panic("Device.GetOfaUtilizationFunc: method is nil but Device.GetOfaUtilization was just called") } callInfo := struct { }{} mock.lockGetOfaUtilization.Lock() mock.calls.GetOfaUtilization = append(mock.calls.GetOfaUtilization, callInfo) mock.lockGetOfaUtilization.Unlock() return mock.GetOfaUtilizationFunc() } // GetOfaUtilizationCalls gets all the calls that were made to GetOfaUtilization. // Check the length with: // // len(mockedDevice.GetOfaUtilizationCalls()) func (mock *Device) GetOfaUtilizationCalls() []struct { } { var calls []struct { } mock.lockGetOfaUtilization.RLock() calls = mock.calls.GetOfaUtilization mock.lockGetOfaUtilization.RUnlock() return calls } // GetP2PStatus calls GetP2PStatusFunc. func (mock *Device) GetP2PStatus(device nvml.Device, gpuP2PCapsIndex nvml.GpuP2PCapsIndex) (nvml.GpuP2PStatus, nvml.Return) { if mock.GetP2PStatusFunc == nil { panic("Device.GetP2PStatusFunc: method is nil but Device.GetP2PStatus was just called") } callInfo := struct { Device nvml.Device GpuP2PCapsIndex nvml.GpuP2PCapsIndex }{ Device: device, GpuP2PCapsIndex: gpuP2PCapsIndex, } mock.lockGetP2PStatus.Lock() mock.calls.GetP2PStatus = append(mock.calls.GetP2PStatus, callInfo) mock.lockGetP2PStatus.Unlock() return mock.GetP2PStatusFunc(device, gpuP2PCapsIndex) } // GetP2PStatusCalls gets all the calls that were made to GetP2PStatus. // Check the length with: // // len(mockedDevice.GetP2PStatusCalls()) func (mock *Device) GetP2PStatusCalls() []struct { Device nvml.Device GpuP2PCapsIndex nvml.GpuP2PCapsIndex } { var calls []struct { Device nvml.Device GpuP2PCapsIndex nvml.GpuP2PCapsIndex } mock.lockGetP2PStatus.RLock() calls = mock.calls.GetP2PStatus mock.lockGetP2PStatus.RUnlock() return calls } // GetPciInfo calls GetPciInfoFunc. func (mock *Device) GetPciInfo() (nvml.PciInfo, nvml.Return) { if mock.GetPciInfoFunc == nil { panic("Device.GetPciInfoFunc: method is nil but Device.GetPciInfo was just called") } callInfo := struct { }{} mock.lockGetPciInfo.Lock() mock.calls.GetPciInfo = append(mock.calls.GetPciInfo, callInfo) mock.lockGetPciInfo.Unlock() return mock.GetPciInfoFunc() } // GetPciInfoCalls gets all the calls that were made to GetPciInfo. // Check the length with: // // len(mockedDevice.GetPciInfoCalls()) func (mock *Device) GetPciInfoCalls() []struct { } { var calls []struct { } mock.lockGetPciInfo.RLock() calls = mock.calls.GetPciInfo mock.lockGetPciInfo.RUnlock() return calls } // GetPciInfoExt calls GetPciInfoExtFunc. func (mock *Device) GetPciInfoExt() (nvml.PciInfoExt, nvml.Return) { if mock.GetPciInfoExtFunc == nil { panic("Device.GetPciInfoExtFunc: method is nil but Device.GetPciInfoExt was just called") } callInfo := struct { }{} mock.lockGetPciInfoExt.Lock() mock.calls.GetPciInfoExt = append(mock.calls.GetPciInfoExt, callInfo) mock.lockGetPciInfoExt.Unlock() return mock.GetPciInfoExtFunc() } // GetPciInfoExtCalls gets all the calls that were made to GetPciInfoExt. // Check the length with: // // len(mockedDevice.GetPciInfoExtCalls()) func (mock *Device) GetPciInfoExtCalls() []struct { } { var calls []struct { } mock.lockGetPciInfoExt.RLock() calls = mock.calls.GetPciInfoExt mock.lockGetPciInfoExt.RUnlock() return calls } // GetPcieLinkMaxSpeed calls GetPcieLinkMaxSpeedFunc. func (mock *Device) GetPcieLinkMaxSpeed() (uint32, nvml.Return) { if mock.GetPcieLinkMaxSpeedFunc == nil { panic("Device.GetPcieLinkMaxSpeedFunc: method is nil but Device.GetPcieLinkMaxSpeed was just called") } callInfo := struct { }{} mock.lockGetPcieLinkMaxSpeed.Lock() mock.calls.GetPcieLinkMaxSpeed = append(mock.calls.GetPcieLinkMaxSpeed, callInfo) mock.lockGetPcieLinkMaxSpeed.Unlock() return mock.GetPcieLinkMaxSpeedFunc() } // GetPcieLinkMaxSpeedCalls gets all the calls that were made to GetPcieLinkMaxSpeed. // Check the length with: // // len(mockedDevice.GetPcieLinkMaxSpeedCalls()) func (mock *Device) GetPcieLinkMaxSpeedCalls() []struct { } { var calls []struct { } mock.lockGetPcieLinkMaxSpeed.RLock() calls = mock.calls.GetPcieLinkMaxSpeed mock.lockGetPcieLinkMaxSpeed.RUnlock() return calls } // GetPcieReplayCounter calls GetPcieReplayCounterFunc. func (mock *Device) GetPcieReplayCounter() (int, nvml.Return) { if mock.GetPcieReplayCounterFunc == nil { panic("Device.GetPcieReplayCounterFunc: method is nil but Device.GetPcieReplayCounter was just called") } callInfo := struct { }{} mock.lockGetPcieReplayCounter.Lock() mock.calls.GetPcieReplayCounter = append(mock.calls.GetPcieReplayCounter, callInfo) mock.lockGetPcieReplayCounter.Unlock() return mock.GetPcieReplayCounterFunc() } // GetPcieReplayCounterCalls gets all the calls that were made to GetPcieReplayCounter. // Check the length with: // // len(mockedDevice.GetPcieReplayCounterCalls()) func (mock *Device) GetPcieReplayCounterCalls() []struct { } { var calls []struct { } mock.lockGetPcieReplayCounter.RLock() calls = mock.calls.GetPcieReplayCounter mock.lockGetPcieReplayCounter.RUnlock() return calls } // GetPcieSpeed calls GetPcieSpeedFunc. func (mock *Device) GetPcieSpeed() (int, nvml.Return) { if mock.GetPcieSpeedFunc == nil { panic("Device.GetPcieSpeedFunc: method is nil but Device.GetPcieSpeed was just called") } callInfo := struct { }{} mock.lockGetPcieSpeed.Lock() mock.calls.GetPcieSpeed = append(mock.calls.GetPcieSpeed, callInfo) mock.lockGetPcieSpeed.Unlock() return mock.GetPcieSpeedFunc() } // GetPcieSpeedCalls gets all the calls that were made to GetPcieSpeed. // Check the length with: // // len(mockedDevice.GetPcieSpeedCalls()) func (mock *Device) GetPcieSpeedCalls() []struct { } { var calls []struct { } mock.lockGetPcieSpeed.RLock() calls = mock.calls.GetPcieSpeed mock.lockGetPcieSpeed.RUnlock() return calls } // GetPcieThroughput calls GetPcieThroughputFunc. func (mock *Device) GetPcieThroughput(pcieUtilCounter nvml.PcieUtilCounter) (uint32, nvml.Return) { if mock.GetPcieThroughputFunc == nil { panic("Device.GetPcieThroughputFunc: method is nil but Device.GetPcieThroughput was just called") } callInfo := struct { PcieUtilCounter nvml.PcieUtilCounter }{ PcieUtilCounter: pcieUtilCounter, } mock.lockGetPcieThroughput.Lock() mock.calls.GetPcieThroughput = append(mock.calls.GetPcieThroughput, callInfo) mock.lockGetPcieThroughput.Unlock() return mock.GetPcieThroughputFunc(pcieUtilCounter) } // GetPcieThroughputCalls gets all the calls that were made to GetPcieThroughput. // Check the length with: // // len(mockedDevice.GetPcieThroughputCalls()) func (mock *Device) GetPcieThroughputCalls() []struct { PcieUtilCounter nvml.PcieUtilCounter } { var calls []struct { PcieUtilCounter nvml.PcieUtilCounter } mock.lockGetPcieThroughput.RLock() calls = mock.calls.GetPcieThroughput mock.lockGetPcieThroughput.RUnlock() return calls } // GetPdi calls GetPdiFunc. func (mock *Device) GetPdi() (nvml.Pdi, nvml.Return) { if mock.GetPdiFunc == nil { panic("Device.GetPdiFunc: method is nil but Device.GetPdi was just called") } callInfo := struct { }{} mock.lockGetPdi.Lock() mock.calls.GetPdi = append(mock.calls.GetPdi, callInfo) mock.lockGetPdi.Unlock() return mock.GetPdiFunc() } // GetPdiCalls gets all the calls that were made to GetPdi. // Check the length with: // // len(mockedDevice.GetPdiCalls()) func (mock *Device) GetPdiCalls() []struct { } { var calls []struct { } mock.lockGetPdi.RLock() calls = mock.calls.GetPdi mock.lockGetPdi.RUnlock() return calls } // GetPerformanceModes calls GetPerformanceModesFunc. func (mock *Device) GetPerformanceModes() (nvml.DevicePerfModes, nvml.Return) { if mock.GetPerformanceModesFunc == nil { panic("Device.GetPerformanceModesFunc: method is nil but Device.GetPerformanceModes was just called") } callInfo := struct { }{} mock.lockGetPerformanceModes.Lock() mock.calls.GetPerformanceModes = append(mock.calls.GetPerformanceModes, callInfo) mock.lockGetPerformanceModes.Unlock() return mock.GetPerformanceModesFunc() } // GetPerformanceModesCalls gets all the calls that were made to GetPerformanceModes. // Check the length with: // // len(mockedDevice.GetPerformanceModesCalls()) func (mock *Device) GetPerformanceModesCalls() []struct { } { var calls []struct { } mock.lockGetPerformanceModes.RLock() calls = mock.calls.GetPerformanceModes mock.lockGetPerformanceModes.RUnlock() return calls } // GetPerformanceState calls GetPerformanceStateFunc. func (mock *Device) GetPerformanceState() (nvml.Pstates, nvml.Return) { if mock.GetPerformanceStateFunc == nil { panic("Device.GetPerformanceStateFunc: method is nil but Device.GetPerformanceState was just called") } callInfo := struct { }{} mock.lockGetPerformanceState.Lock() mock.calls.GetPerformanceState = append(mock.calls.GetPerformanceState, callInfo) mock.lockGetPerformanceState.Unlock() return mock.GetPerformanceStateFunc() } // GetPerformanceStateCalls gets all the calls that were made to GetPerformanceState. // Check the length with: // // len(mockedDevice.GetPerformanceStateCalls()) func (mock *Device) GetPerformanceStateCalls() []struct { } { var calls []struct { } mock.lockGetPerformanceState.RLock() calls = mock.calls.GetPerformanceState mock.lockGetPerformanceState.RUnlock() return calls } // GetPersistenceMode calls GetPersistenceModeFunc. func (mock *Device) GetPersistenceMode() (nvml.EnableState, nvml.Return) { if mock.GetPersistenceModeFunc == nil { panic("Device.GetPersistenceModeFunc: method is nil but Device.GetPersistenceMode was just called") } callInfo := struct { }{} mock.lockGetPersistenceMode.Lock() mock.calls.GetPersistenceMode = append(mock.calls.GetPersistenceMode, callInfo) mock.lockGetPersistenceMode.Unlock() return mock.GetPersistenceModeFunc() } // GetPersistenceModeCalls gets all the calls that were made to GetPersistenceMode. // Check the length with: // // len(mockedDevice.GetPersistenceModeCalls()) func (mock *Device) GetPersistenceModeCalls() []struct { } { var calls []struct { } mock.lockGetPersistenceMode.RLock() calls = mock.calls.GetPersistenceMode mock.lockGetPersistenceMode.RUnlock() return calls } // GetPgpuMetadataString calls GetPgpuMetadataStringFunc. func (mock *Device) GetPgpuMetadataString() (string, nvml.Return) { if mock.GetPgpuMetadataStringFunc == nil { panic("Device.GetPgpuMetadataStringFunc: method is nil but Device.GetPgpuMetadataString was just called") } callInfo := struct { }{} mock.lockGetPgpuMetadataString.Lock() mock.calls.GetPgpuMetadataString = append(mock.calls.GetPgpuMetadataString, callInfo) mock.lockGetPgpuMetadataString.Unlock() return mock.GetPgpuMetadataStringFunc() } // GetPgpuMetadataStringCalls gets all the calls that were made to GetPgpuMetadataString. // Check the length with: // // len(mockedDevice.GetPgpuMetadataStringCalls()) func (mock *Device) GetPgpuMetadataStringCalls() []struct { } { var calls []struct { } mock.lockGetPgpuMetadataString.RLock() calls = mock.calls.GetPgpuMetadataString mock.lockGetPgpuMetadataString.RUnlock() return calls } // GetPlatformInfo calls GetPlatformInfoFunc. func (mock *Device) GetPlatformInfo() (nvml.PlatformInfo, nvml.Return) { if mock.GetPlatformInfoFunc == nil { panic("Device.GetPlatformInfoFunc: method is nil but Device.GetPlatformInfo was just called") } callInfo := struct { }{} mock.lockGetPlatformInfo.Lock() mock.calls.GetPlatformInfo = append(mock.calls.GetPlatformInfo, callInfo) mock.lockGetPlatformInfo.Unlock() return mock.GetPlatformInfoFunc() } // GetPlatformInfoCalls gets all the calls that were made to GetPlatformInfo. // Check the length with: // // len(mockedDevice.GetPlatformInfoCalls()) func (mock *Device) GetPlatformInfoCalls() []struct { } { var calls []struct { } mock.lockGetPlatformInfo.RLock() calls = mock.calls.GetPlatformInfo mock.lockGetPlatformInfo.RUnlock() return calls } // GetPowerManagementDefaultLimit calls GetPowerManagementDefaultLimitFunc. func (mock *Device) GetPowerManagementDefaultLimit() (uint32, nvml.Return) { if mock.GetPowerManagementDefaultLimitFunc == nil { panic("Device.GetPowerManagementDefaultLimitFunc: method is nil but Device.GetPowerManagementDefaultLimit was just called") } callInfo := struct { }{} mock.lockGetPowerManagementDefaultLimit.Lock() mock.calls.GetPowerManagementDefaultLimit = append(mock.calls.GetPowerManagementDefaultLimit, callInfo) mock.lockGetPowerManagementDefaultLimit.Unlock() return mock.GetPowerManagementDefaultLimitFunc() } // GetPowerManagementDefaultLimitCalls gets all the calls that were made to GetPowerManagementDefaultLimit. // Check the length with: // // len(mockedDevice.GetPowerManagementDefaultLimitCalls()) func (mock *Device) GetPowerManagementDefaultLimitCalls() []struct { } { var calls []struct { } mock.lockGetPowerManagementDefaultLimit.RLock() calls = mock.calls.GetPowerManagementDefaultLimit mock.lockGetPowerManagementDefaultLimit.RUnlock() return calls } // GetPowerManagementLimit calls GetPowerManagementLimitFunc. func (mock *Device) GetPowerManagementLimit() (uint32, nvml.Return) { if mock.GetPowerManagementLimitFunc == nil { panic("Device.GetPowerManagementLimitFunc: method is nil but Device.GetPowerManagementLimit was just called") } callInfo := struct { }{} mock.lockGetPowerManagementLimit.Lock() mock.calls.GetPowerManagementLimit = append(mock.calls.GetPowerManagementLimit, callInfo) mock.lockGetPowerManagementLimit.Unlock() return mock.GetPowerManagementLimitFunc() } // GetPowerManagementLimitCalls gets all the calls that were made to GetPowerManagementLimit. // Check the length with: // // len(mockedDevice.GetPowerManagementLimitCalls()) func (mock *Device) GetPowerManagementLimitCalls() []struct { } { var calls []struct { } mock.lockGetPowerManagementLimit.RLock() calls = mock.calls.GetPowerManagementLimit mock.lockGetPowerManagementLimit.RUnlock() return calls } // GetPowerManagementLimitConstraints calls GetPowerManagementLimitConstraintsFunc. func (mock *Device) GetPowerManagementLimitConstraints() (uint32, uint32, nvml.Return) { if mock.GetPowerManagementLimitConstraintsFunc == nil { panic("Device.GetPowerManagementLimitConstraintsFunc: method is nil but Device.GetPowerManagementLimitConstraints was just called") } callInfo := struct { }{} mock.lockGetPowerManagementLimitConstraints.Lock() mock.calls.GetPowerManagementLimitConstraints = append(mock.calls.GetPowerManagementLimitConstraints, callInfo) mock.lockGetPowerManagementLimitConstraints.Unlock() return mock.GetPowerManagementLimitConstraintsFunc() } // GetPowerManagementLimitConstraintsCalls gets all the calls that were made to GetPowerManagementLimitConstraints. // Check the length with: // // len(mockedDevice.GetPowerManagementLimitConstraintsCalls()) func (mock *Device) GetPowerManagementLimitConstraintsCalls() []struct { } { var calls []struct { } mock.lockGetPowerManagementLimitConstraints.RLock() calls = mock.calls.GetPowerManagementLimitConstraints mock.lockGetPowerManagementLimitConstraints.RUnlock() return calls } // GetPowerManagementMode calls GetPowerManagementModeFunc. func (mock *Device) GetPowerManagementMode() (nvml.EnableState, nvml.Return) { if mock.GetPowerManagementModeFunc == nil { panic("Device.GetPowerManagementModeFunc: method is nil but Device.GetPowerManagementMode was just called") } callInfo := struct { }{} mock.lockGetPowerManagementMode.Lock() mock.calls.GetPowerManagementMode = append(mock.calls.GetPowerManagementMode, callInfo) mock.lockGetPowerManagementMode.Unlock() return mock.GetPowerManagementModeFunc() } // GetPowerManagementModeCalls gets all the calls that were made to GetPowerManagementMode. // Check the length with: // // len(mockedDevice.GetPowerManagementModeCalls()) func (mock *Device) GetPowerManagementModeCalls() []struct { } { var calls []struct { } mock.lockGetPowerManagementMode.RLock() calls = mock.calls.GetPowerManagementMode mock.lockGetPowerManagementMode.RUnlock() return calls } // GetPowerMizerMode_v1 calls GetPowerMizerMode_v1Func. func (mock *Device) GetPowerMizerMode_v1() (nvml.DevicePowerMizerModes_v1, nvml.Return) { if mock.GetPowerMizerMode_v1Func == nil { panic("Device.GetPowerMizerMode_v1Func: method is nil but Device.GetPowerMizerMode_v1 was just called") } callInfo := struct { }{} mock.lockGetPowerMizerMode_v1.Lock() mock.calls.GetPowerMizerMode_v1 = append(mock.calls.GetPowerMizerMode_v1, callInfo) mock.lockGetPowerMizerMode_v1.Unlock() return mock.GetPowerMizerMode_v1Func() } // GetPowerMizerMode_v1Calls gets all the calls that were made to GetPowerMizerMode_v1. // Check the length with: // // len(mockedDevice.GetPowerMizerMode_v1Calls()) func (mock *Device) GetPowerMizerMode_v1Calls() []struct { } { var calls []struct { } mock.lockGetPowerMizerMode_v1.RLock() calls = mock.calls.GetPowerMizerMode_v1 mock.lockGetPowerMizerMode_v1.RUnlock() return calls } // GetPowerSource calls GetPowerSourceFunc. func (mock *Device) GetPowerSource() (nvml.PowerSource, nvml.Return) { if mock.GetPowerSourceFunc == nil { panic("Device.GetPowerSourceFunc: method is nil but Device.GetPowerSource was just called") } callInfo := struct { }{} mock.lockGetPowerSource.Lock() mock.calls.GetPowerSource = append(mock.calls.GetPowerSource, callInfo) mock.lockGetPowerSource.Unlock() return mock.GetPowerSourceFunc() } // GetPowerSourceCalls gets all the calls that were made to GetPowerSource. // Check the length with: // // len(mockedDevice.GetPowerSourceCalls()) func (mock *Device) GetPowerSourceCalls() []struct { } { var calls []struct { } mock.lockGetPowerSource.RLock() calls = mock.calls.GetPowerSource mock.lockGetPowerSource.RUnlock() return calls } // GetPowerState calls GetPowerStateFunc. func (mock *Device) GetPowerState() (nvml.Pstates, nvml.Return) { if mock.GetPowerStateFunc == nil { panic("Device.GetPowerStateFunc: method is nil but Device.GetPowerState was just called") } callInfo := struct { }{} mock.lockGetPowerState.Lock() mock.calls.GetPowerState = append(mock.calls.GetPowerState, callInfo) mock.lockGetPowerState.Unlock() return mock.GetPowerStateFunc() } // GetPowerStateCalls gets all the calls that were made to GetPowerState. // Check the length with: // // len(mockedDevice.GetPowerStateCalls()) func (mock *Device) GetPowerStateCalls() []struct { } { var calls []struct { } mock.lockGetPowerState.RLock() calls = mock.calls.GetPowerState mock.lockGetPowerState.RUnlock() return calls } // GetPowerUsage calls GetPowerUsageFunc. func (mock *Device) GetPowerUsage() (uint32, nvml.Return) { if mock.GetPowerUsageFunc == nil { panic("Device.GetPowerUsageFunc: method is nil but Device.GetPowerUsage was just called") } callInfo := struct { }{} mock.lockGetPowerUsage.Lock() mock.calls.GetPowerUsage = append(mock.calls.GetPowerUsage, callInfo) mock.lockGetPowerUsage.Unlock() return mock.GetPowerUsageFunc() } // GetPowerUsageCalls gets all the calls that were made to GetPowerUsage. // Check the length with: // // len(mockedDevice.GetPowerUsageCalls()) func (mock *Device) GetPowerUsageCalls() []struct { } { var calls []struct { } mock.lockGetPowerUsage.RLock() calls = mock.calls.GetPowerUsage mock.lockGetPowerUsage.RUnlock() return calls } // GetProcessUtilization calls GetProcessUtilizationFunc. func (mock *Device) GetProcessUtilization(v uint64) ([]nvml.ProcessUtilizationSample, nvml.Return) { if mock.GetProcessUtilizationFunc == nil { panic("Device.GetProcessUtilizationFunc: method is nil but Device.GetProcessUtilization was just called") } callInfo := struct { V uint64 }{ V: v, } mock.lockGetProcessUtilization.Lock() mock.calls.GetProcessUtilization = append(mock.calls.GetProcessUtilization, callInfo) mock.lockGetProcessUtilization.Unlock() return mock.GetProcessUtilizationFunc(v) } // GetProcessUtilizationCalls gets all the calls that were made to GetProcessUtilization. // Check the length with: // // len(mockedDevice.GetProcessUtilizationCalls()) func (mock *Device) GetProcessUtilizationCalls() []struct { V uint64 } { var calls []struct { V uint64 } mock.lockGetProcessUtilization.RLock() calls = mock.calls.GetProcessUtilization mock.lockGetProcessUtilization.RUnlock() return calls } // GetProcessesUtilizationInfo calls GetProcessesUtilizationInfoFunc. func (mock *Device) GetProcessesUtilizationInfo() (nvml.ProcessesUtilizationInfo, nvml.Return) { if mock.GetProcessesUtilizationInfoFunc == nil { panic("Device.GetProcessesUtilizationInfoFunc: method is nil but Device.GetProcessesUtilizationInfo was just called") } callInfo := struct { }{} mock.lockGetProcessesUtilizationInfo.Lock() mock.calls.GetProcessesUtilizationInfo = append(mock.calls.GetProcessesUtilizationInfo, callInfo) mock.lockGetProcessesUtilizationInfo.Unlock() return mock.GetProcessesUtilizationInfoFunc() } // GetProcessesUtilizationInfoCalls gets all the calls that were made to GetProcessesUtilizationInfo. // Check the length with: // // len(mockedDevice.GetProcessesUtilizationInfoCalls()) func (mock *Device) GetProcessesUtilizationInfoCalls() []struct { } { var calls []struct { } mock.lockGetProcessesUtilizationInfo.RLock() calls = mock.calls.GetProcessesUtilizationInfo mock.lockGetProcessesUtilizationInfo.RUnlock() return calls } // GetRemappedRows calls GetRemappedRowsFunc. func (mock *Device) GetRemappedRows() (int, int, bool, bool, nvml.Return) { if mock.GetRemappedRowsFunc == nil { panic("Device.GetRemappedRowsFunc: method is nil but Device.GetRemappedRows was just called") } callInfo := struct { }{} mock.lockGetRemappedRows.Lock() mock.calls.GetRemappedRows = append(mock.calls.GetRemappedRows, callInfo) mock.lockGetRemappedRows.Unlock() return mock.GetRemappedRowsFunc() } // GetRemappedRowsCalls gets all the calls that were made to GetRemappedRows. // Check the length with: // // len(mockedDevice.GetRemappedRowsCalls()) func (mock *Device) GetRemappedRowsCalls() []struct { } { var calls []struct { } mock.lockGetRemappedRows.RLock() calls = mock.calls.GetRemappedRows mock.lockGetRemappedRows.RUnlock() return calls } // GetRepairStatus calls GetRepairStatusFunc. func (mock *Device) GetRepairStatus() (nvml.RepairStatus, nvml.Return) { if mock.GetRepairStatusFunc == nil { panic("Device.GetRepairStatusFunc: method is nil but Device.GetRepairStatus was just called") } callInfo := struct { }{} mock.lockGetRepairStatus.Lock() mock.calls.GetRepairStatus = append(mock.calls.GetRepairStatus, callInfo) mock.lockGetRepairStatus.Unlock() return mock.GetRepairStatusFunc() } // GetRepairStatusCalls gets all the calls that were made to GetRepairStatus. // Check the length with: // // len(mockedDevice.GetRepairStatusCalls()) func (mock *Device) GetRepairStatusCalls() []struct { } { var calls []struct { } mock.lockGetRepairStatus.RLock() calls = mock.calls.GetRepairStatus mock.lockGetRepairStatus.RUnlock() return calls } // GetRetiredPages calls GetRetiredPagesFunc. func (mock *Device) GetRetiredPages(pageRetirementCause nvml.PageRetirementCause) ([]uint64, nvml.Return) { if mock.GetRetiredPagesFunc == nil { panic("Device.GetRetiredPagesFunc: method is nil but Device.GetRetiredPages was just called") } callInfo := struct { PageRetirementCause nvml.PageRetirementCause }{ PageRetirementCause: pageRetirementCause, } mock.lockGetRetiredPages.Lock() mock.calls.GetRetiredPages = append(mock.calls.GetRetiredPages, callInfo) mock.lockGetRetiredPages.Unlock() return mock.GetRetiredPagesFunc(pageRetirementCause) } // GetRetiredPagesCalls gets all the calls that were made to GetRetiredPages. // Check the length with: // // len(mockedDevice.GetRetiredPagesCalls()) func (mock *Device) GetRetiredPagesCalls() []struct { PageRetirementCause nvml.PageRetirementCause } { var calls []struct { PageRetirementCause nvml.PageRetirementCause } mock.lockGetRetiredPages.RLock() calls = mock.calls.GetRetiredPages mock.lockGetRetiredPages.RUnlock() return calls } // GetRetiredPagesPendingStatus calls GetRetiredPagesPendingStatusFunc. func (mock *Device) GetRetiredPagesPendingStatus() (nvml.EnableState, nvml.Return) { if mock.GetRetiredPagesPendingStatusFunc == nil { panic("Device.GetRetiredPagesPendingStatusFunc: method is nil but Device.GetRetiredPagesPendingStatus was just called") } callInfo := struct { }{} mock.lockGetRetiredPagesPendingStatus.Lock() mock.calls.GetRetiredPagesPendingStatus = append(mock.calls.GetRetiredPagesPendingStatus, callInfo) mock.lockGetRetiredPagesPendingStatus.Unlock() return mock.GetRetiredPagesPendingStatusFunc() } // GetRetiredPagesPendingStatusCalls gets all the calls that were made to GetRetiredPagesPendingStatus. // Check the length with: // // len(mockedDevice.GetRetiredPagesPendingStatusCalls()) func (mock *Device) GetRetiredPagesPendingStatusCalls() []struct { } { var calls []struct { } mock.lockGetRetiredPagesPendingStatus.RLock() calls = mock.calls.GetRetiredPagesPendingStatus mock.lockGetRetiredPagesPendingStatus.RUnlock() return calls } // GetRetiredPages_v2 calls GetRetiredPages_v2Func. func (mock *Device) GetRetiredPages_v2(pageRetirementCause nvml.PageRetirementCause) ([]uint64, []uint64, nvml.Return) { if mock.GetRetiredPages_v2Func == nil { panic("Device.GetRetiredPages_v2Func: method is nil but Device.GetRetiredPages_v2 was just called") } callInfo := struct { PageRetirementCause nvml.PageRetirementCause }{ PageRetirementCause: pageRetirementCause, } mock.lockGetRetiredPages_v2.Lock() mock.calls.GetRetiredPages_v2 = append(mock.calls.GetRetiredPages_v2, callInfo) mock.lockGetRetiredPages_v2.Unlock() return mock.GetRetiredPages_v2Func(pageRetirementCause) } // GetRetiredPages_v2Calls gets all the calls that were made to GetRetiredPages_v2. // Check the length with: // // len(mockedDevice.GetRetiredPages_v2Calls()) func (mock *Device) GetRetiredPages_v2Calls() []struct { PageRetirementCause nvml.PageRetirementCause } { var calls []struct { PageRetirementCause nvml.PageRetirementCause } mock.lockGetRetiredPages_v2.RLock() calls = mock.calls.GetRetiredPages_v2 mock.lockGetRetiredPages_v2.RUnlock() return calls } // GetRowRemapperHistogram calls GetRowRemapperHistogramFunc. func (mock *Device) GetRowRemapperHistogram() (nvml.RowRemapperHistogramValues, nvml.Return) { if mock.GetRowRemapperHistogramFunc == nil { panic("Device.GetRowRemapperHistogramFunc: method is nil but Device.GetRowRemapperHistogram was just called") } callInfo := struct { }{} mock.lockGetRowRemapperHistogram.Lock() mock.calls.GetRowRemapperHistogram = append(mock.calls.GetRowRemapperHistogram, callInfo) mock.lockGetRowRemapperHistogram.Unlock() return mock.GetRowRemapperHistogramFunc() } // GetRowRemapperHistogramCalls gets all the calls that were made to GetRowRemapperHistogram. // Check the length with: // // len(mockedDevice.GetRowRemapperHistogramCalls()) func (mock *Device) GetRowRemapperHistogramCalls() []struct { } { var calls []struct { } mock.lockGetRowRemapperHistogram.RLock() calls = mock.calls.GetRowRemapperHistogram mock.lockGetRowRemapperHistogram.RUnlock() return calls } // GetRunningProcessDetailList calls GetRunningProcessDetailListFunc. func (mock *Device) GetRunningProcessDetailList() (nvml.ProcessDetailList, nvml.Return) { if mock.GetRunningProcessDetailListFunc == nil { panic("Device.GetRunningProcessDetailListFunc: method is nil but Device.GetRunningProcessDetailList was just called") } callInfo := struct { }{} mock.lockGetRunningProcessDetailList.Lock() mock.calls.GetRunningProcessDetailList = append(mock.calls.GetRunningProcessDetailList, callInfo) mock.lockGetRunningProcessDetailList.Unlock() return mock.GetRunningProcessDetailListFunc() } // GetRunningProcessDetailListCalls gets all the calls that were made to GetRunningProcessDetailList. // Check the length with: // // len(mockedDevice.GetRunningProcessDetailListCalls()) func (mock *Device) GetRunningProcessDetailListCalls() []struct { } { var calls []struct { } mock.lockGetRunningProcessDetailList.RLock() calls = mock.calls.GetRunningProcessDetailList mock.lockGetRunningProcessDetailList.RUnlock() return calls } // GetSamples calls GetSamplesFunc. func (mock *Device) GetSamples(samplingType nvml.SamplingType, v uint64) (nvml.ValueType, []nvml.Sample, nvml.Return) { if mock.GetSamplesFunc == nil { panic("Device.GetSamplesFunc: method is nil but Device.GetSamples was just called") } callInfo := struct { SamplingType nvml.SamplingType V uint64 }{ SamplingType: samplingType, V: v, } mock.lockGetSamples.Lock() mock.calls.GetSamples = append(mock.calls.GetSamples, callInfo) mock.lockGetSamples.Unlock() return mock.GetSamplesFunc(samplingType, v) } // GetSamplesCalls gets all the calls that were made to GetSamples. // Check the length with: // // len(mockedDevice.GetSamplesCalls()) func (mock *Device) GetSamplesCalls() []struct { SamplingType nvml.SamplingType V uint64 } { var calls []struct { SamplingType nvml.SamplingType V uint64 } mock.lockGetSamples.RLock() calls = mock.calls.GetSamples mock.lockGetSamples.RUnlock() return calls } // GetSerial calls GetSerialFunc. func (mock *Device) GetSerial() (string, nvml.Return) { if mock.GetSerialFunc == nil { panic("Device.GetSerialFunc: method is nil but Device.GetSerial was just called") } callInfo := struct { }{} mock.lockGetSerial.Lock() mock.calls.GetSerial = append(mock.calls.GetSerial, callInfo) mock.lockGetSerial.Unlock() return mock.GetSerialFunc() } // GetSerialCalls gets all the calls that were made to GetSerial. // Check the length with: // // len(mockedDevice.GetSerialCalls()) func (mock *Device) GetSerialCalls() []struct { } { var calls []struct { } mock.lockGetSerial.RLock() calls = mock.calls.GetSerial mock.lockGetSerial.RUnlock() return calls } // GetSramEccErrorStatus calls GetSramEccErrorStatusFunc. func (mock *Device) GetSramEccErrorStatus() (nvml.EccSramErrorStatus, nvml.Return) { if mock.GetSramEccErrorStatusFunc == nil { panic("Device.GetSramEccErrorStatusFunc: method is nil but Device.GetSramEccErrorStatus was just called") } callInfo := struct { }{} mock.lockGetSramEccErrorStatus.Lock() mock.calls.GetSramEccErrorStatus = append(mock.calls.GetSramEccErrorStatus, callInfo) mock.lockGetSramEccErrorStatus.Unlock() return mock.GetSramEccErrorStatusFunc() } // GetSramEccErrorStatusCalls gets all the calls that were made to GetSramEccErrorStatus. // Check the length with: // // len(mockedDevice.GetSramEccErrorStatusCalls()) func (mock *Device) GetSramEccErrorStatusCalls() []struct { } { var calls []struct { } mock.lockGetSramEccErrorStatus.RLock() calls = mock.calls.GetSramEccErrorStatus mock.lockGetSramEccErrorStatus.RUnlock() return calls } // GetSramUniqueUncorrectedEccErrorCounts calls GetSramUniqueUncorrectedEccErrorCountsFunc. func (mock *Device) GetSramUniqueUncorrectedEccErrorCounts(eccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts) nvml.Return { if mock.GetSramUniqueUncorrectedEccErrorCountsFunc == nil { panic("Device.GetSramUniqueUncorrectedEccErrorCountsFunc: method is nil but Device.GetSramUniqueUncorrectedEccErrorCounts was just called") } callInfo := struct { EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts }{ EccSramUniqueUncorrectedErrorCounts: eccSramUniqueUncorrectedErrorCounts, } mock.lockGetSramUniqueUncorrectedEccErrorCounts.Lock() mock.calls.GetSramUniqueUncorrectedEccErrorCounts = append(mock.calls.GetSramUniqueUncorrectedEccErrorCounts, callInfo) mock.lockGetSramUniqueUncorrectedEccErrorCounts.Unlock() return mock.GetSramUniqueUncorrectedEccErrorCountsFunc(eccSramUniqueUncorrectedErrorCounts) } // GetSramUniqueUncorrectedEccErrorCountsCalls gets all the calls that were made to GetSramUniqueUncorrectedEccErrorCounts. // Check the length with: // // len(mockedDevice.GetSramUniqueUncorrectedEccErrorCountsCalls()) func (mock *Device) GetSramUniqueUncorrectedEccErrorCountsCalls() []struct { EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts } { var calls []struct { EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts } mock.lockGetSramUniqueUncorrectedEccErrorCounts.RLock() calls = mock.calls.GetSramUniqueUncorrectedEccErrorCounts mock.lockGetSramUniqueUncorrectedEccErrorCounts.RUnlock() return calls } // GetSupportedClocksEventReasons calls GetSupportedClocksEventReasonsFunc. func (mock *Device) GetSupportedClocksEventReasons() (uint64, nvml.Return) { if mock.GetSupportedClocksEventReasonsFunc == nil { panic("Device.GetSupportedClocksEventReasonsFunc: method is nil but Device.GetSupportedClocksEventReasons was just called") } callInfo := struct { }{} mock.lockGetSupportedClocksEventReasons.Lock() mock.calls.GetSupportedClocksEventReasons = append(mock.calls.GetSupportedClocksEventReasons, callInfo) mock.lockGetSupportedClocksEventReasons.Unlock() return mock.GetSupportedClocksEventReasonsFunc() } // GetSupportedClocksEventReasonsCalls gets all the calls that were made to GetSupportedClocksEventReasons. // Check the length with: // // len(mockedDevice.GetSupportedClocksEventReasonsCalls()) func (mock *Device) GetSupportedClocksEventReasonsCalls() []struct { } { var calls []struct { } mock.lockGetSupportedClocksEventReasons.RLock() calls = mock.calls.GetSupportedClocksEventReasons mock.lockGetSupportedClocksEventReasons.RUnlock() return calls } // GetSupportedClocksThrottleReasons calls GetSupportedClocksThrottleReasonsFunc. func (mock *Device) GetSupportedClocksThrottleReasons() (uint64, nvml.Return) { if mock.GetSupportedClocksThrottleReasonsFunc == nil { panic("Device.GetSupportedClocksThrottleReasonsFunc: method is nil but Device.GetSupportedClocksThrottleReasons was just called") } callInfo := struct { }{} mock.lockGetSupportedClocksThrottleReasons.Lock() mock.calls.GetSupportedClocksThrottleReasons = append(mock.calls.GetSupportedClocksThrottleReasons, callInfo) mock.lockGetSupportedClocksThrottleReasons.Unlock() return mock.GetSupportedClocksThrottleReasonsFunc() } // GetSupportedClocksThrottleReasonsCalls gets all the calls that were made to GetSupportedClocksThrottleReasons. // Check the length with: // // len(mockedDevice.GetSupportedClocksThrottleReasonsCalls()) func (mock *Device) GetSupportedClocksThrottleReasonsCalls() []struct { } { var calls []struct { } mock.lockGetSupportedClocksThrottleReasons.RLock() calls = mock.calls.GetSupportedClocksThrottleReasons mock.lockGetSupportedClocksThrottleReasons.RUnlock() return calls } // GetSupportedEventTypes calls GetSupportedEventTypesFunc. func (mock *Device) GetSupportedEventTypes() (uint64, nvml.Return) { if mock.GetSupportedEventTypesFunc == nil { panic("Device.GetSupportedEventTypesFunc: method is nil but Device.GetSupportedEventTypes was just called") } callInfo := struct { }{} mock.lockGetSupportedEventTypes.Lock() mock.calls.GetSupportedEventTypes = append(mock.calls.GetSupportedEventTypes, callInfo) mock.lockGetSupportedEventTypes.Unlock() return mock.GetSupportedEventTypesFunc() } // GetSupportedEventTypesCalls gets all the calls that were made to GetSupportedEventTypes. // Check the length with: // // len(mockedDevice.GetSupportedEventTypesCalls()) func (mock *Device) GetSupportedEventTypesCalls() []struct { } { var calls []struct { } mock.lockGetSupportedEventTypes.RLock() calls = mock.calls.GetSupportedEventTypes mock.lockGetSupportedEventTypes.RUnlock() return calls } // GetSupportedGraphicsClocks calls GetSupportedGraphicsClocksFunc. func (mock *Device) GetSupportedGraphicsClocks(n int) (int, uint32, nvml.Return) { if mock.GetSupportedGraphicsClocksFunc == nil { panic("Device.GetSupportedGraphicsClocksFunc: method is nil but Device.GetSupportedGraphicsClocks was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetSupportedGraphicsClocks.Lock() mock.calls.GetSupportedGraphicsClocks = append(mock.calls.GetSupportedGraphicsClocks, callInfo) mock.lockGetSupportedGraphicsClocks.Unlock() return mock.GetSupportedGraphicsClocksFunc(n) } // GetSupportedGraphicsClocksCalls gets all the calls that were made to GetSupportedGraphicsClocks. // Check the length with: // // len(mockedDevice.GetSupportedGraphicsClocksCalls()) func (mock *Device) GetSupportedGraphicsClocksCalls() []struct { N int } { var calls []struct { N int } mock.lockGetSupportedGraphicsClocks.RLock() calls = mock.calls.GetSupportedGraphicsClocks mock.lockGetSupportedGraphicsClocks.RUnlock() return calls } // GetSupportedMemoryClocks calls GetSupportedMemoryClocksFunc. func (mock *Device) GetSupportedMemoryClocks() (int, uint32, nvml.Return) { if mock.GetSupportedMemoryClocksFunc == nil { panic("Device.GetSupportedMemoryClocksFunc: method is nil but Device.GetSupportedMemoryClocks was just called") } callInfo := struct { }{} mock.lockGetSupportedMemoryClocks.Lock() mock.calls.GetSupportedMemoryClocks = append(mock.calls.GetSupportedMemoryClocks, callInfo) mock.lockGetSupportedMemoryClocks.Unlock() return mock.GetSupportedMemoryClocksFunc() } // GetSupportedMemoryClocksCalls gets all the calls that were made to GetSupportedMemoryClocks. // Check the length with: // // len(mockedDevice.GetSupportedMemoryClocksCalls()) func (mock *Device) GetSupportedMemoryClocksCalls() []struct { } { var calls []struct { } mock.lockGetSupportedMemoryClocks.RLock() calls = mock.calls.GetSupportedMemoryClocks mock.lockGetSupportedMemoryClocks.RUnlock() return calls } // GetSupportedPerformanceStates calls GetSupportedPerformanceStatesFunc. func (mock *Device) GetSupportedPerformanceStates() ([]nvml.Pstates, nvml.Return) { if mock.GetSupportedPerformanceStatesFunc == nil { panic("Device.GetSupportedPerformanceStatesFunc: method is nil but Device.GetSupportedPerformanceStates was just called") } callInfo := struct { }{} mock.lockGetSupportedPerformanceStates.Lock() mock.calls.GetSupportedPerformanceStates = append(mock.calls.GetSupportedPerformanceStates, callInfo) mock.lockGetSupportedPerformanceStates.Unlock() return mock.GetSupportedPerformanceStatesFunc() } // GetSupportedPerformanceStatesCalls gets all the calls that were made to GetSupportedPerformanceStates. // Check the length with: // // len(mockedDevice.GetSupportedPerformanceStatesCalls()) func (mock *Device) GetSupportedPerformanceStatesCalls() []struct { } { var calls []struct { } mock.lockGetSupportedPerformanceStates.RLock() calls = mock.calls.GetSupportedPerformanceStates mock.lockGetSupportedPerformanceStates.RUnlock() return calls } // GetSupportedVgpus calls GetSupportedVgpusFunc. func (mock *Device) GetSupportedVgpus() ([]nvml.VgpuTypeId, nvml.Return) { if mock.GetSupportedVgpusFunc == nil { panic("Device.GetSupportedVgpusFunc: method is nil but Device.GetSupportedVgpus was just called") } callInfo := struct { }{} mock.lockGetSupportedVgpus.Lock() mock.calls.GetSupportedVgpus = append(mock.calls.GetSupportedVgpus, callInfo) mock.lockGetSupportedVgpus.Unlock() return mock.GetSupportedVgpusFunc() } // GetSupportedVgpusCalls gets all the calls that were made to GetSupportedVgpus. // Check the length with: // // len(mockedDevice.GetSupportedVgpusCalls()) func (mock *Device) GetSupportedVgpusCalls() []struct { } { var calls []struct { } mock.lockGetSupportedVgpus.RLock() calls = mock.calls.GetSupportedVgpus mock.lockGetSupportedVgpus.RUnlock() return calls } // GetTargetFanSpeed calls GetTargetFanSpeedFunc. func (mock *Device) GetTargetFanSpeed(n int) (int, nvml.Return) { if mock.GetTargetFanSpeedFunc == nil { panic("Device.GetTargetFanSpeedFunc: method is nil but Device.GetTargetFanSpeed was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetTargetFanSpeed.Lock() mock.calls.GetTargetFanSpeed = append(mock.calls.GetTargetFanSpeed, callInfo) mock.lockGetTargetFanSpeed.Unlock() return mock.GetTargetFanSpeedFunc(n) } // GetTargetFanSpeedCalls gets all the calls that were made to GetTargetFanSpeed. // Check the length with: // // len(mockedDevice.GetTargetFanSpeedCalls()) func (mock *Device) GetTargetFanSpeedCalls() []struct { N int } { var calls []struct { N int } mock.lockGetTargetFanSpeed.RLock() calls = mock.calls.GetTargetFanSpeed mock.lockGetTargetFanSpeed.RUnlock() return calls } // GetTemperature calls GetTemperatureFunc. func (mock *Device) GetTemperature(temperatureSensors nvml.TemperatureSensors) (uint32, nvml.Return) { if mock.GetTemperatureFunc == nil { panic("Device.GetTemperatureFunc: method is nil but Device.GetTemperature was just called") } callInfo := struct { TemperatureSensors nvml.TemperatureSensors }{ TemperatureSensors: temperatureSensors, } mock.lockGetTemperature.Lock() mock.calls.GetTemperature = append(mock.calls.GetTemperature, callInfo) mock.lockGetTemperature.Unlock() return mock.GetTemperatureFunc(temperatureSensors) } // GetTemperatureCalls gets all the calls that were made to GetTemperature. // Check the length with: // // len(mockedDevice.GetTemperatureCalls()) func (mock *Device) GetTemperatureCalls() []struct { TemperatureSensors nvml.TemperatureSensors } { var calls []struct { TemperatureSensors nvml.TemperatureSensors } mock.lockGetTemperature.RLock() calls = mock.calls.GetTemperature mock.lockGetTemperature.RUnlock() return calls } // GetTemperatureThreshold calls GetTemperatureThresholdFunc. func (mock *Device) GetTemperatureThreshold(temperatureThresholds nvml.TemperatureThresholds) (uint32, nvml.Return) { if mock.GetTemperatureThresholdFunc == nil { panic("Device.GetTemperatureThresholdFunc: method is nil but Device.GetTemperatureThreshold was just called") } callInfo := struct { TemperatureThresholds nvml.TemperatureThresholds }{ TemperatureThresholds: temperatureThresholds, } mock.lockGetTemperatureThreshold.Lock() mock.calls.GetTemperatureThreshold = append(mock.calls.GetTemperatureThreshold, callInfo) mock.lockGetTemperatureThreshold.Unlock() return mock.GetTemperatureThresholdFunc(temperatureThresholds) } // GetTemperatureThresholdCalls gets all the calls that were made to GetTemperatureThreshold. // Check the length with: // // len(mockedDevice.GetTemperatureThresholdCalls()) func (mock *Device) GetTemperatureThresholdCalls() []struct { TemperatureThresholds nvml.TemperatureThresholds } { var calls []struct { TemperatureThresholds nvml.TemperatureThresholds } mock.lockGetTemperatureThreshold.RLock() calls = mock.calls.GetTemperatureThreshold mock.lockGetTemperatureThreshold.RUnlock() return calls } // GetTemperatureV calls GetTemperatureVFunc. func (mock *Device) GetTemperatureV() nvml.TemperatureHandler { if mock.GetTemperatureVFunc == nil { panic("Device.GetTemperatureVFunc: method is nil but Device.GetTemperatureV was just called") } callInfo := struct { }{} mock.lockGetTemperatureV.Lock() mock.calls.GetTemperatureV = append(mock.calls.GetTemperatureV, callInfo) mock.lockGetTemperatureV.Unlock() return mock.GetTemperatureVFunc() } // GetTemperatureVCalls gets all the calls that were made to GetTemperatureV. // Check the length with: // // len(mockedDevice.GetTemperatureVCalls()) func (mock *Device) GetTemperatureVCalls() []struct { } { var calls []struct { } mock.lockGetTemperatureV.RLock() calls = mock.calls.GetTemperatureV mock.lockGetTemperatureV.RUnlock() return calls } // GetThermalSettings calls GetThermalSettingsFunc. func (mock *Device) GetThermalSettings(v uint32) (nvml.GpuThermalSettings, nvml.Return) { if mock.GetThermalSettingsFunc == nil { panic("Device.GetThermalSettingsFunc: method is nil but Device.GetThermalSettings was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockGetThermalSettings.Lock() mock.calls.GetThermalSettings = append(mock.calls.GetThermalSettings, callInfo) mock.lockGetThermalSettings.Unlock() return mock.GetThermalSettingsFunc(v) } // GetThermalSettingsCalls gets all the calls that were made to GetThermalSettings. // Check the length with: // // len(mockedDevice.GetThermalSettingsCalls()) func (mock *Device) GetThermalSettingsCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockGetThermalSettings.RLock() calls = mock.calls.GetThermalSettings mock.lockGetThermalSettings.RUnlock() return calls } // GetTopologyCommonAncestor calls GetTopologyCommonAncestorFunc. func (mock *Device) GetTopologyCommonAncestor(device nvml.Device) (nvml.GpuTopologyLevel, nvml.Return) { if mock.GetTopologyCommonAncestorFunc == nil { panic("Device.GetTopologyCommonAncestorFunc: method is nil but Device.GetTopologyCommonAncestor was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGetTopologyCommonAncestor.Lock() mock.calls.GetTopologyCommonAncestor = append(mock.calls.GetTopologyCommonAncestor, callInfo) mock.lockGetTopologyCommonAncestor.Unlock() return mock.GetTopologyCommonAncestorFunc(device) } // GetTopologyCommonAncestorCalls gets all the calls that were made to GetTopologyCommonAncestor. // Check the length with: // // len(mockedDevice.GetTopologyCommonAncestorCalls()) func (mock *Device) GetTopologyCommonAncestorCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGetTopologyCommonAncestor.RLock() calls = mock.calls.GetTopologyCommonAncestor mock.lockGetTopologyCommonAncestor.RUnlock() return calls } // GetTopologyNearestGpus calls GetTopologyNearestGpusFunc. func (mock *Device) GetTopologyNearestGpus(gpuTopologyLevel nvml.GpuTopologyLevel) ([]nvml.Device, nvml.Return) { if mock.GetTopologyNearestGpusFunc == nil { panic("Device.GetTopologyNearestGpusFunc: method is nil but Device.GetTopologyNearestGpus was just called") } callInfo := struct { GpuTopologyLevel nvml.GpuTopologyLevel }{ GpuTopologyLevel: gpuTopologyLevel, } mock.lockGetTopologyNearestGpus.Lock() mock.calls.GetTopologyNearestGpus = append(mock.calls.GetTopologyNearestGpus, callInfo) mock.lockGetTopologyNearestGpus.Unlock() return mock.GetTopologyNearestGpusFunc(gpuTopologyLevel) } // GetTopologyNearestGpusCalls gets all the calls that were made to GetTopologyNearestGpus. // Check the length with: // // len(mockedDevice.GetTopologyNearestGpusCalls()) func (mock *Device) GetTopologyNearestGpusCalls() []struct { GpuTopologyLevel nvml.GpuTopologyLevel } { var calls []struct { GpuTopologyLevel nvml.GpuTopologyLevel } mock.lockGetTopologyNearestGpus.RLock() calls = mock.calls.GetTopologyNearestGpus mock.lockGetTopologyNearestGpus.RUnlock() return calls } // GetTotalEccErrors calls GetTotalEccErrorsFunc. func (mock *Device) GetTotalEccErrors(memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (uint64, nvml.Return) { if mock.GetTotalEccErrorsFunc == nil { panic("Device.GetTotalEccErrorsFunc: method is nil but Device.GetTotalEccErrors was just called") } callInfo := struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType }{ MemoryErrorType: memoryErrorType, EccCounterType: eccCounterType, } mock.lockGetTotalEccErrors.Lock() mock.calls.GetTotalEccErrors = append(mock.calls.GetTotalEccErrors, callInfo) mock.lockGetTotalEccErrors.Unlock() return mock.GetTotalEccErrorsFunc(memoryErrorType, eccCounterType) } // GetTotalEccErrorsCalls gets all the calls that were made to GetTotalEccErrors. // Check the length with: // // len(mockedDevice.GetTotalEccErrorsCalls()) func (mock *Device) GetTotalEccErrorsCalls() []struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } { var calls []struct { MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } mock.lockGetTotalEccErrors.RLock() calls = mock.calls.GetTotalEccErrors mock.lockGetTotalEccErrors.RUnlock() return calls } // GetTotalEnergyConsumption calls GetTotalEnergyConsumptionFunc. func (mock *Device) GetTotalEnergyConsumption() (uint64, nvml.Return) { if mock.GetTotalEnergyConsumptionFunc == nil { panic("Device.GetTotalEnergyConsumptionFunc: method is nil but Device.GetTotalEnergyConsumption was just called") } callInfo := struct { }{} mock.lockGetTotalEnergyConsumption.Lock() mock.calls.GetTotalEnergyConsumption = append(mock.calls.GetTotalEnergyConsumption, callInfo) mock.lockGetTotalEnergyConsumption.Unlock() return mock.GetTotalEnergyConsumptionFunc() } // GetTotalEnergyConsumptionCalls gets all the calls that were made to GetTotalEnergyConsumption. // Check the length with: // // len(mockedDevice.GetTotalEnergyConsumptionCalls()) func (mock *Device) GetTotalEnergyConsumptionCalls() []struct { } { var calls []struct { } mock.lockGetTotalEnergyConsumption.RLock() calls = mock.calls.GetTotalEnergyConsumption mock.lockGetTotalEnergyConsumption.RUnlock() return calls } // GetUUID calls GetUUIDFunc. func (mock *Device) GetUUID() (string, nvml.Return) { if mock.GetUUIDFunc == nil { panic("Device.GetUUIDFunc: method is nil but Device.GetUUID was just called") } callInfo := struct { }{} mock.lockGetUUID.Lock() mock.calls.GetUUID = append(mock.calls.GetUUID, callInfo) mock.lockGetUUID.Unlock() return mock.GetUUIDFunc() } // GetUUIDCalls gets all the calls that were made to GetUUID. // Check the length with: // // len(mockedDevice.GetUUIDCalls()) func (mock *Device) GetUUIDCalls() []struct { } { var calls []struct { } mock.lockGetUUID.RLock() calls = mock.calls.GetUUID mock.lockGetUUID.RUnlock() return calls } // GetUtilizationRates calls GetUtilizationRatesFunc. func (mock *Device) GetUtilizationRates() (nvml.Utilization, nvml.Return) { if mock.GetUtilizationRatesFunc == nil { panic("Device.GetUtilizationRatesFunc: method is nil but Device.GetUtilizationRates was just called") } callInfo := struct { }{} mock.lockGetUtilizationRates.Lock() mock.calls.GetUtilizationRates = append(mock.calls.GetUtilizationRates, callInfo) mock.lockGetUtilizationRates.Unlock() return mock.GetUtilizationRatesFunc() } // GetUtilizationRatesCalls gets all the calls that were made to GetUtilizationRates. // Check the length with: // // len(mockedDevice.GetUtilizationRatesCalls()) func (mock *Device) GetUtilizationRatesCalls() []struct { } { var calls []struct { } mock.lockGetUtilizationRates.RLock() calls = mock.calls.GetUtilizationRates mock.lockGetUtilizationRates.RUnlock() return calls } // GetVbiosVersion calls GetVbiosVersionFunc. func (mock *Device) GetVbiosVersion() (string, nvml.Return) { if mock.GetVbiosVersionFunc == nil { panic("Device.GetVbiosVersionFunc: method is nil but Device.GetVbiosVersion was just called") } callInfo := struct { }{} mock.lockGetVbiosVersion.Lock() mock.calls.GetVbiosVersion = append(mock.calls.GetVbiosVersion, callInfo) mock.lockGetVbiosVersion.Unlock() return mock.GetVbiosVersionFunc() } // GetVbiosVersionCalls gets all the calls that were made to GetVbiosVersion. // Check the length with: // // len(mockedDevice.GetVbiosVersionCalls()) func (mock *Device) GetVbiosVersionCalls() []struct { } { var calls []struct { } mock.lockGetVbiosVersion.RLock() calls = mock.calls.GetVbiosVersion mock.lockGetVbiosVersion.RUnlock() return calls } // GetVgpuCapabilities calls GetVgpuCapabilitiesFunc. func (mock *Device) GetVgpuCapabilities(deviceVgpuCapability nvml.DeviceVgpuCapability) (bool, nvml.Return) { if mock.GetVgpuCapabilitiesFunc == nil { panic("Device.GetVgpuCapabilitiesFunc: method is nil but Device.GetVgpuCapabilities was just called") } callInfo := struct { DeviceVgpuCapability nvml.DeviceVgpuCapability }{ DeviceVgpuCapability: deviceVgpuCapability, } mock.lockGetVgpuCapabilities.Lock() mock.calls.GetVgpuCapabilities = append(mock.calls.GetVgpuCapabilities, callInfo) mock.lockGetVgpuCapabilities.Unlock() return mock.GetVgpuCapabilitiesFunc(deviceVgpuCapability) } // GetVgpuCapabilitiesCalls gets all the calls that were made to GetVgpuCapabilities. // Check the length with: // // len(mockedDevice.GetVgpuCapabilitiesCalls()) func (mock *Device) GetVgpuCapabilitiesCalls() []struct { DeviceVgpuCapability nvml.DeviceVgpuCapability } { var calls []struct { DeviceVgpuCapability nvml.DeviceVgpuCapability } mock.lockGetVgpuCapabilities.RLock() calls = mock.calls.GetVgpuCapabilities mock.lockGetVgpuCapabilities.RUnlock() return calls } // GetVgpuHeterogeneousMode calls GetVgpuHeterogeneousModeFunc. func (mock *Device) GetVgpuHeterogeneousMode() (nvml.VgpuHeterogeneousMode, nvml.Return) { if mock.GetVgpuHeterogeneousModeFunc == nil { panic("Device.GetVgpuHeterogeneousModeFunc: method is nil but Device.GetVgpuHeterogeneousMode was just called") } callInfo := struct { }{} mock.lockGetVgpuHeterogeneousMode.Lock() mock.calls.GetVgpuHeterogeneousMode = append(mock.calls.GetVgpuHeterogeneousMode, callInfo) mock.lockGetVgpuHeterogeneousMode.Unlock() return mock.GetVgpuHeterogeneousModeFunc() } // GetVgpuHeterogeneousModeCalls gets all the calls that were made to GetVgpuHeterogeneousMode. // Check the length with: // // len(mockedDevice.GetVgpuHeterogeneousModeCalls()) func (mock *Device) GetVgpuHeterogeneousModeCalls() []struct { } { var calls []struct { } mock.lockGetVgpuHeterogeneousMode.RLock() calls = mock.calls.GetVgpuHeterogeneousMode mock.lockGetVgpuHeterogeneousMode.RUnlock() return calls } // GetVgpuInstancesUtilizationInfo calls GetVgpuInstancesUtilizationInfoFunc. func (mock *Device) GetVgpuInstancesUtilizationInfo() (nvml.VgpuInstancesUtilizationInfo, nvml.Return) { if mock.GetVgpuInstancesUtilizationInfoFunc == nil { panic("Device.GetVgpuInstancesUtilizationInfoFunc: method is nil but Device.GetVgpuInstancesUtilizationInfo was just called") } callInfo := struct { }{} mock.lockGetVgpuInstancesUtilizationInfo.Lock() mock.calls.GetVgpuInstancesUtilizationInfo = append(mock.calls.GetVgpuInstancesUtilizationInfo, callInfo) mock.lockGetVgpuInstancesUtilizationInfo.Unlock() return mock.GetVgpuInstancesUtilizationInfoFunc() } // GetVgpuInstancesUtilizationInfoCalls gets all the calls that were made to GetVgpuInstancesUtilizationInfo. // Check the length with: // // len(mockedDevice.GetVgpuInstancesUtilizationInfoCalls()) func (mock *Device) GetVgpuInstancesUtilizationInfoCalls() []struct { } { var calls []struct { } mock.lockGetVgpuInstancesUtilizationInfo.RLock() calls = mock.calls.GetVgpuInstancesUtilizationInfo mock.lockGetVgpuInstancesUtilizationInfo.RUnlock() return calls } // GetVgpuMetadata calls GetVgpuMetadataFunc. func (mock *Device) GetVgpuMetadata() (nvml.VgpuPgpuMetadata, nvml.Return) { if mock.GetVgpuMetadataFunc == nil { panic("Device.GetVgpuMetadataFunc: method is nil but Device.GetVgpuMetadata was just called") } callInfo := struct { }{} mock.lockGetVgpuMetadata.Lock() mock.calls.GetVgpuMetadata = append(mock.calls.GetVgpuMetadata, callInfo) mock.lockGetVgpuMetadata.Unlock() return mock.GetVgpuMetadataFunc() } // GetVgpuMetadataCalls gets all the calls that were made to GetVgpuMetadata. // Check the length with: // // len(mockedDevice.GetVgpuMetadataCalls()) func (mock *Device) GetVgpuMetadataCalls() []struct { } { var calls []struct { } mock.lockGetVgpuMetadata.RLock() calls = mock.calls.GetVgpuMetadata mock.lockGetVgpuMetadata.RUnlock() return calls } // GetVgpuProcessUtilization calls GetVgpuProcessUtilizationFunc. func (mock *Device) GetVgpuProcessUtilization(v uint64) ([]nvml.VgpuProcessUtilizationSample, nvml.Return) { if mock.GetVgpuProcessUtilizationFunc == nil { panic("Device.GetVgpuProcessUtilizationFunc: method is nil but Device.GetVgpuProcessUtilization was just called") } callInfo := struct { V uint64 }{ V: v, } mock.lockGetVgpuProcessUtilization.Lock() mock.calls.GetVgpuProcessUtilization = append(mock.calls.GetVgpuProcessUtilization, callInfo) mock.lockGetVgpuProcessUtilization.Unlock() return mock.GetVgpuProcessUtilizationFunc(v) } // GetVgpuProcessUtilizationCalls gets all the calls that were made to GetVgpuProcessUtilization. // Check the length with: // // len(mockedDevice.GetVgpuProcessUtilizationCalls()) func (mock *Device) GetVgpuProcessUtilizationCalls() []struct { V uint64 } { var calls []struct { V uint64 } mock.lockGetVgpuProcessUtilization.RLock() calls = mock.calls.GetVgpuProcessUtilization mock.lockGetVgpuProcessUtilization.RUnlock() return calls } // GetVgpuProcessesUtilizationInfo calls GetVgpuProcessesUtilizationInfoFunc. func (mock *Device) GetVgpuProcessesUtilizationInfo() (nvml.VgpuProcessesUtilizationInfo, nvml.Return) { if mock.GetVgpuProcessesUtilizationInfoFunc == nil { panic("Device.GetVgpuProcessesUtilizationInfoFunc: method is nil but Device.GetVgpuProcessesUtilizationInfo was just called") } callInfo := struct { }{} mock.lockGetVgpuProcessesUtilizationInfo.Lock() mock.calls.GetVgpuProcessesUtilizationInfo = append(mock.calls.GetVgpuProcessesUtilizationInfo, callInfo) mock.lockGetVgpuProcessesUtilizationInfo.Unlock() return mock.GetVgpuProcessesUtilizationInfoFunc() } // GetVgpuProcessesUtilizationInfoCalls gets all the calls that were made to GetVgpuProcessesUtilizationInfo. // Check the length with: // // len(mockedDevice.GetVgpuProcessesUtilizationInfoCalls()) func (mock *Device) GetVgpuProcessesUtilizationInfoCalls() []struct { } { var calls []struct { } mock.lockGetVgpuProcessesUtilizationInfo.RLock() calls = mock.calls.GetVgpuProcessesUtilizationInfo mock.lockGetVgpuProcessesUtilizationInfo.RUnlock() return calls } // GetVgpuSchedulerCapabilities calls GetVgpuSchedulerCapabilitiesFunc. func (mock *Device) GetVgpuSchedulerCapabilities() (nvml.VgpuSchedulerCapabilities, nvml.Return) { if mock.GetVgpuSchedulerCapabilitiesFunc == nil { panic("Device.GetVgpuSchedulerCapabilitiesFunc: method is nil but Device.GetVgpuSchedulerCapabilities was just called") } callInfo := struct { }{} mock.lockGetVgpuSchedulerCapabilities.Lock() mock.calls.GetVgpuSchedulerCapabilities = append(mock.calls.GetVgpuSchedulerCapabilities, callInfo) mock.lockGetVgpuSchedulerCapabilities.Unlock() return mock.GetVgpuSchedulerCapabilitiesFunc() } // GetVgpuSchedulerCapabilitiesCalls gets all the calls that were made to GetVgpuSchedulerCapabilities. // Check the length with: // // len(mockedDevice.GetVgpuSchedulerCapabilitiesCalls()) func (mock *Device) GetVgpuSchedulerCapabilitiesCalls() []struct { } { var calls []struct { } mock.lockGetVgpuSchedulerCapabilities.RLock() calls = mock.calls.GetVgpuSchedulerCapabilities mock.lockGetVgpuSchedulerCapabilities.RUnlock() return calls } // GetVgpuSchedulerLog calls GetVgpuSchedulerLogFunc. func (mock *Device) GetVgpuSchedulerLog() (nvml.VgpuSchedulerLog, nvml.Return) { if mock.GetVgpuSchedulerLogFunc == nil { panic("Device.GetVgpuSchedulerLogFunc: method is nil but Device.GetVgpuSchedulerLog was just called") } callInfo := struct { }{} mock.lockGetVgpuSchedulerLog.Lock() mock.calls.GetVgpuSchedulerLog = append(mock.calls.GetVgpuSchedulerLog, callInfo) mock.lockGetVgpuSchedulerLog.Unlock() return mock.GetVgpuSchedulerLogFunc() } // GetVgpuSchedulerLogCalls gets all the calls that were made to GetVgpuSchedulerLog. // Check the length with: // // len(mockedDevice.GetVgpuSchedulerLogCalls()) func (mock *Device) GetVgpuSchedulerLogCalls() []struct { } { var calls []struct { } mock.lockGetVgpuSchedulerLog.RLock() calls = mock.calls.GetVgpuSchedulerLog mock.lockGetVgpuSchedulerLog.RUnlock() return calls } // GetVgpuSchedulerState calls GetVgpuSchedulerStateFunc. func (mock *Device) GetVgpuSchedulerState() (nvml.VgpuSchedulerGetState, nvml.Return) { if mock.GetVgpuSchedulerStateFunc == nil { panic("Device.GetVgpuSchedulerStateFunc: method is nil but Device.GetVgpuSchedulerState was just called") } callInfo := struct { }{} mock.lockGetVgpuSchedulerState.Lock() mock.calls.GetVgpuSchedulerState = append(mock.calls.GetVgpuSchedulerState, callInfo) mock.lockGetVgpuSchedulerState.Unlock() return mock.GetVgpuSchedulerStateFunc() } // GetVgpuSchedulerStateCalls gets all the calls that were made to GetVgpuSchedulerState. // Check the length with: // // len(mockedDevice.GetVgpuSchedulerStateCalls()) func (mock *Device) GetVgpuSchedulerStateCalls() []struct { } { var calls []struct { } mock.lockGetVgpuSchedulerState.RLock() calls = mock.calls.GetVgpuSchedulerState mock.lockGetVgpuSchedulerState.RUnlock() return calls } // GetVgpuTypeCreatablePlacements calls GetVgpuTypeCreatablePlacementsFunc. func (mock *Device) GetVgpuTypeCreatablePlacements(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { if mock.GetVgpuTypeCreatablePlacementsFunc == nil { panic("Device.GetVgpuTypeCreatablePlacementsFunc: method is nil but Device.GetVgpuTypeCreatablePlacements was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockGetVgpuTypeCreatablePlacements.Lock() mock.calls.GetVgpuTypeCreatablePlacements = append(mock.calls.GetVgpuTypeCreatablePlacements, callInfo) mock.lockGetVgpuTypeCreatablePlacements.Unlock() return mock.GetVgpuTypeCreatablePlacementsFunc(vgpuTypeId) } // GetVgpuTypeCreatablePlacementsCalls gets all the calls that were made to GetVgpuTypeCreatablePlacements. // Check the length with: // // len(mockedDevice.GetVgpuTypeCreatablePlacementsCalls()) func (mock *Device) GetVgpuTypeCreatablePlacementsCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockGetVgpuTypeCreatablePlacements.RLock() calls = mock.calls.GetVgpuTypeCreatablePlacements mock.lockGetVgpuTypeCreatablePlacements.RUnlock() return calls } // GetVgpuTypeSupportedPlacements calls GetVgpuTypeSupportedPlacementsFunc. func (mock *Device) GetVgpuTypeSupportedPlacements(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { if mock.GetVgpuTypeSupportedPlacementsFunc == nil { panic("Device.GetVgpuTypeSupportedPlacementsFunc: method is nil but Device.GetVgpuTypeSupportedPlacements was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockGetVgpuTypeSupportedPlacements.Lock() mock.calls.GetVgpuTypeSupportedPlacements = append(mock.calls.GetVgpuTypeSupportedPlacements, callInfo) mock.lockGetVgpuTypeSupportedPlacements.Unlock() return mock.GetVgpuTypeSupportedPlacementsFunc(vgpuTypeId) } // GetVgpuTypeSupportedPlacementsCalls gets all the calls that were made to GetVgpuTypeSupportedPlacements. // Check the length with: // // len(mockedDevice.GetVgpuTypeSupportedPlacementsCalls()) func (mock *Device) GetVgpuTypeSupportedPlacementsCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockGetVgpuTypeSupportedPlacements.RLock() calls = mock.calls.GetVgpuTypeSupportedPlacements mock.lockGetVgpuTypeSupportedPlacements.RUnlock() return calls } // GetVgpuUtilization calls GetVgpuUtilizationFunc. func (mock *Device) GetVgpuUtilization(v uint64) (nvml.ValueType, []nvml.VgpuInstanceUtilizationSample, nvml.Return) { if mock.GetVgpuUtilizationFunc == nil { panic("Device.GetVgpuUtilizationFunc: method is nil but Device.GetVgpuUtilization was just called") } callInfo := struct { V uint64 }{ V: v, } mock.lockGetVgpuUtilization.Lock() mock.calls.GetVgpuUtilization = append(mock.calls.GetVgpuUtilization, callInfo) mock.lockGetVgpuUtilization.Unlock() return mock.GetVgpuUtilizationFunc(v) } // GetVgpuUtilizationCalls gets all the calls that were made to GetVgpuUtilization. // Check the length with: // // len(mockedDevice.GetVgpuUtilizationCalls()) func (mock *Device) GetVgpuUtilizationCalls() []struct { V uint64 } { var calls []struct { V uint64 } mock.lockGetVgpuUtilization.RLock() calls = mock.calls.GetVgpuUtilization mock.lockGetVgpuUtilization.RUnlock() return calls } // GetViolationStatus calls GetViolationStatusFunc. func (mock *Device) GetViolationStatus(perfPolicyType nvml.PerfPolicyType) (nvml.ViolationTime, nvml.Return) { if mock.GetViolationStatusFunc == nil { panic("Device.GetViolationStatusFunc: method is nil but Device.GetViolationStatus was just called") } callInfo := struct { PerfPolicyType nvml.PerfPolicyType }{ PerfPolicyType: perfPolicyType, } mock.lockGetViolationStatus.Lock() mock.calls.GetViolationStatus = append(mock.calls.GetViolationStatus, callInfo) mock.lockGetViolationStatus.Unlock() return mock.GetViolationStatusFunc(perfPolicyType) } // GetViolationStatusCalls gets all the calls that were made to GetViolationStatus. // Check the length with: // // len(mockedDevice.GetViolationStatusCalls()) func (mock *Device) GetViolationStatusCalls() []struct { PerfPolicyType nvml.PerfPolicyType } { var calls []struct { PerfPolicyType nvml.PerfPolicyType } mock.lockGetViolationStatus.RLock() calls = mock.calls.GetViolationStatus mock.lockGetViolationStatus.RUnlock() return calls } // GetVirtualizationMode calls GetVirtualizationModeFunc. func (mock *Device) GetVirtualizationMode() (nvml.GpuVirtualizationMode, nvml.Return) { if mock.GetVirtualizationModeFunc == nil { panic("Device.GetVirtualizationModeFunc: method is nil but Device.GetVirtualizationMode was just called") } callInfo := struct { }{} mock.lockGetVirtualizationMode.Lock() mock.calls.GetVirtualizationMode = append(mock.calls.GetVirtualizationMode, callInfo) mock.lockGetVirtualizationMode.Unlock() return mock.GetVirtualizationModeFunc() } // GetVirtualizationModeCalls gets all the calls that were made to GetVirtualizationMode. // Check the length with: // // len(mockedDevice.GetVirtualizationModeCalls()) func (mock *Device) GetVirtualizationModeCalls() []struct { } { var calls []struct { } mock.lockGetVirtualizationMode.RLock() calls = mock.calls.GetVirtualizationMode mock.lockGetVirtualizationMode.RUnlock() return calls } // GpmMigSampleGet calls GpmMigSampleGetFunc. func (mock *Device) GpmMigSampleGet(n int, gpmSample nvml.GpmSample) nvml.Return { if mock.GpmMigSampleGetFunc == nil { panic("Device.GpmMigSampleGetFunc: method is nil but Device.GpmMigSampleGet was just called") } callInfo := struct { N int GpmSample nvml.GpmSample }{ N: n, GpmSample: gpmSample, } mock.lockGpmMigSampleGet.Lock() mock.calls.GpmMigSampleGet = append(mock.calls.GpmMigSampleGet, callInfo) mock.lockGpmMigSampleGet.Unlock() return mock.GpmMigSampleGetFunc(n, gpmSample) } // GpmMigSampleGetCalls gets all the calls that were made to GpmMigSampleGet. // Check the length with: // // len(mockedDevice.GpmMigSampleGetCalls()) func (mock *Device) GpmMigSampleGetCalls() []struct { N int GpmSample nvml.GpmSample } { var calls []struct { N int GpmSample nvml.GpmSample } mock.lockGpmMigSampleGet.RLock() calls = mock.calls.GpmMigSampleGet mock.lockGpmMigSampleGet.RUnlock() return calls } // GpmQueryDeviceSupport calls GpmQueryDeviceSupportFunc. func (mock *Device) GpmQueryDeviceSupport() (nvml.GpmSupport, nvml.Return) { if mock.GpmQueryDeviceSupportFunc == nil { panic("Device.GpmQueryDeviceSupportFunc: method is nil but Device.GpmQueryDeviceSupport was just called") } callInfo := struct { }{} mock.lockGpmQueryDeviceSupport.Lock() mock.calls.GpmQueryDeviceSupport = append(mock.calls.GpmQueryDeviceSupport, callInfo) mock.lockGpmQueryDeviceSupport.Unlock() return mock.GpmQueryDeviceSupportFunc() } // GpmQueryDeviceSupportCalls gets all the calls that were made to GpmQueryDeviceSupport. // Check the length with: // // len(mockedDevice.GpmQueryDeviceSupportCalls()) func (mock *Device) GpmQueryDeviceSupportCalls() []struct { } { var calls []struct { } mock.lockGpmQueryDeviceSupport.RLock() calls = mock.calls.GpmQueryDeviceSupport mock.lockGpmQueryDeviceSupport.RUnlock() return calls } // GpmQueryDeviceSupportV calls GpmQueryDeviceSupportVFunc. func (mock *Device) GpmQueryDeviceSupportV() nvml.GpmSupportV { if mock.GpmQueryDeviceSupportVFunc == nil { panic("Device.GpmQueryDeviceSupportVFunc: method is nil but Device.GpmQueryDeviceSupportV was just called") } callInfo := struct { }{} mock.lockGpmQueryDeviceSupportV.Lock() mock.calls.GpmQueryDeviceSupportV = append(mock.calls.GpmQueryDeviceSupportV, callInfo) mock.lockGpmQueryDeviceSupportV.Unlock() return mock.GpmQueryDeviceSupportVFunc() } // GpmQueryDeviceSupportVCalls gets all the calls that were made to GpmQueryDeviceSupportV. // Check the length with: // // len(mockedDevice.GpmQueryDeviceSupportVCalls()) func (mock *Device) GpmQueryDeviceSupportVCalls() []struct { } { var calls []struct { } mock.lockGpmQueryDeviceSupportV.RLock() calls = mock.calls.GpmQueryDeviceSupportV mock.lockGpmQueryDeviceSupportV.RUnlock() return calls } // GpmQueryIfStreamingEnabled calls GpmQueryIfStreamingEnabledFunc. func (mock *Device) GpmQueryIfStreamingEnabled() (uint32, nvml.Return) { if mock.GpmQueryIfStreamingEnabledFunc == nil { panic("Device.GpmQueryIfStreamingEnabledFunc: method is nil but Device.GpmQueryIfStreamingEnabled was just called") } callInfo := struct { }{} mock.lockGpmQueryIfStreamingEnabled.Lock() mock.calls.GpmQueryIfStreamingEnabled = append(mock.calls.GpmQueryIfStreamingEnabled, callInfo) mock.lockGpmQueryIfStreamingEnabled.Unlock() return mock.GpmQueryIfStreamingEnabledFunc() } // GpmQueryIfStreamingEnabledCalls gets all the calls that were made to GpmQueryIfStreamingEnabled. // Check the length with: // // len(mockedDevice.GpmQueryIfStreamingEnabledCalls()) func (mock *Device) GpmQueryIfStreamingEnabledCalls() []struct { } { var calls []struct { } mock.lockGpmQueryIfStreamingEnabled.RLock() calls = mock.calls.GpmQueryIfStreamingEnabled mock.lockGpmQueryIfStreamingEnabled.RUnlock() return calls } // GpmSampleGet calls GpmSampleGetFunc. func (mock *Device) GpmSampleGet(gpmSample nvml.GpmSample) nvml.Return { if mock.GpmSampleGetFunc == nil { panic("Device.GpmSampleGetFunc: method is nil but Device.GpmSampleGet was just called") } callInfo := struct { GpmSample nvml.GpmSample }{ GpmSample: gpmSample, } mock.lockGpmSampleGet.Lock() mock.calls.GpmSampleGet = append(mock.calls.GpmSampleGet, callInfo) mock.lockGpmSampleGet.Unlock() return mock.GpmSampleGetFunc(gpmSample) } // GpmSampleGetCalls gets all the calls that were made to GpmSampleGet. // Check the length with: // // len(mockedDevice.GpmSampleGetCalls()) func (mock *Device) GpmSampleGetCalls() []struct { GpmSample nvml.GpmSample } { var calls []struct { GpmSample nvml.GpmSample } mock.lockGpmSampleGet.RLock() calls = mock.calls.GpmSampleGet mock.lockGpmSampleGet.RUnlock() return calls } // GpmSetStreamingEnabled calls GpmSetStreamingEnabledFunc. func (mock *Device) GpmSetStreamingEnabled(v uint32) nvml.Return { if mock.GpmSetStreamingEnabledFunc == nil { panic("Device.GpmSetStreamingEnabledFunc: method is nil but Device.GpmSetStreamingEnabled was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockGpmSetStreamingEnabled.Lock() mock.calls.GpmSetStreamingEnabled = append(mock.calls.GpmSetStreamingEnabled, callInfo) mock.lockGpmSetStreamingEnabled.Unlock() return mock.GpmSetStreamingEnabledFunc(v) } // GpmSetStreamingEnabledCalls gets all the calls that were made to GpmSetStreamingEnabled. // Check the length with: // // len(mockedDevice.GpmSetStreamingEnabledCalls()) func (mock *Device) GpmSetStreamingEnabledCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockGpmSetStreamingEnabled.RLock() calls = mock.calls.GpmSetStreamingEnabled mock.lockGpmSetStreamingEnabled.RUnlock() return calls } // IsMigDeviceHandle calls IsMigDeviceHandleFunc. func (mock *Device) IsMigDeviceHandle() (bool, nvml.Return) { if mock.IsMigDeviceHandleFunc == nil { panic("Device.IsMigDeviceHandleFunc: method is nil but Device.IsMigDeviceHandle was just called") } callInfo := struct { }{} mock.lockIsMigDeviceHandle.Lock() mock.calls.IsMigDeviceHandle = append(mock.calls.IsMigDeviceHandle, callInfo) mock.lockIsMigDeviceHandle.Unlock() return mock.IsMigDeviceHandleFunc() } // IsMigDeviceHandleCalls gets all the calls that were made to IsMigDeviceHandle. // Check the length with: // // len(mockedDevice.IsMigDeviceHandleCalls()) func (mock *Device) IsMigDeviceHandleCalls() []struct { } { var calls []struct { } mock.lockIsMigDeviceHandle.RLock() calls = mock.calls.IsMigDeviceHandle mock.lockIsMigDeviceHandle.RUnlock() return calls } // OnSameBoard calls OnSameBoardFunc. func (mock *Device) OnSameBoard(device nvml.Device) (int, nvml.Return) { if mock.OnSameBoardFunc == nil { panic("Device.OnSameBoardFunc: method is nil but Device.OnSameBoard was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockOnSameBoard.Lock() mock.calls.OnSameBoard = append(mock.calls.OnSameBoard, callInfo) mock.lockOnSameBoard.Unlock() return mock.OnSameBoardFunc(device) } // OnSameBoardCalls gets all the calls that were made to OnSameBoard. // Check the length with: // // len(mockedDevice.OnSameBoardCalls()) func (mock *Device) OnSameBoardCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockOnSameBoard.RLock() calls = mock.calls.OnSameBoard mock.lockOnSameBoard.RUnlock() return calls } // PowerSmoothingActivatePresetProfile calls PowerSmoothingActivatePresetProfileFunc. func (mock *Device) PowerSmoothingActivatePresetProfile(powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { if mock.PowerSmoothingActivatePresetProfileFunc == nil { panic("Device.PowerSmoothingActivatePresetProfileFunc: method is nil but Device.PowerSmoothingActivatePresetProfile was just called") } callInfo := struct { PowerSmoothingProfile *nvml.PowerSmoothingProfile }{ PowerSmoothingProfile: powerSmoothingProfile, } mock.lockPowerSmoothingActivatePresetProfile.Lock() mock.calls.PowerSmoothingActivatePresetProfile = append(mock.calls.PowerSmoothingActivatePresetProfile, callInfo) mock.lockPowerSmoothingActivatePresetProfile.Unlock() return mock.PowerSmoothingActivatePresetProfileFunc(powerSmoothingProfile) } // PowerSmoothingActivatePresetProfileCalls gets all the calls that were made to PowerSmoothingActivatePresetProfile. // Check the length with: // // len(mockedDevice.PowerSmoothingActivatePresetProfileCalls()) func (mock *Device) PowerSmoothingActivatePresetProfileCalls() []struct { PowerSmoothingProfile *nvml.PowerSmoothingProfile } { var calls []struct { PowerSmoothingProfile *nvml.PowerSmoothingProfile } mock.lockPowerSmoothingActivatePresetProfile.RLock() calls = mock.calls.PowerSmoothingActivatePresetProfile mock.lockPowerSmoothingActivatePresetProfile.RUnlock() return calls } // PowerSmoothingSetState calls PowerSmoothingSetStateFunc. func (mock *Device) PowerSmoothingSetState(powerSmoothingState *nvml.PowerSmoothingState) nvml.Return { if mock.PowerSmoothingSetStateFunc == nil { panic("Device.PowerSmoothingSetStateFunc: method is nil but Device.PowerSmoothingSetState was just called") } callInfo := struct { PowerSmoothingState *nvml.PowerSmoothingState }{ PowerSmoothingState: powerSmoothingState, } mock.lockPowerSmoothingSetState.Lock() mock.calls.PowerSmoothingSetState = append(mock.calls.PowerSmoothingSetState, callInfo) mock.lockPowerSmoothingSetState.Unlock() return mock.PowerSmoothingSetStateFunc(powerSmoothingState) } // PowerSmoothingSetStateCalls gets all the calls that were made to PowerSmoothingSetState. // Check the length with: // // len(mockedDevice.PowerSmoothingSetStateCalls()) func (mock *Device) PowerSmoothingSetStateCalls() []struct { PowerSmoothingState *nvml.PowerSmoothingState } { var calls []struct { PowerSmoothingState *nvml.PowerSmoothingState } mock.lockPowerSmoothingSetState.RLock() calls = mock.calls.PowerSmoothingSetState mock.lockPowerSmoothingSetState.RUnlock() return calls } // PowerSmoothingUpdatePresetProfileParam calls PowerSmoothingUpdatePresetProfileParamFunc. func (mock *Device) PowerSmoothingUpdatePresetProfileParam(powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { if mock.PowerSmoothingUpdatePresetProfileParamFunc == nil { panic("Device.PowerSmoothingUpdatePresetProfileParamFunc: method is nil but Device.PowerSmoothingUpdatePresetProfileParam was just called") } callInfo := struct { PowerSmoothingProfile *nvml.PowerSmoothingProfile }{ PowerSmoothingProfile: powerSmoothingProfile, } mock.lockPowerSmoothingUpdatePresetProfileParam.Lock() mock.calls.PowerSmoothingUpdatePresetProfileParam = append(mock.calls.PowerSmoothingUpdatePresetProfileParam, callInfo) mock.lockPowerSmoothingUpdatePresetProfileParam.Unlock() return mock.PowerSmoothingUpdatePresetProfileParamFunc(powerSmoothingProfile) } // PowerSmoothingUpdatePresetProfileParamCalls gets all the calls that were made to PowerSmoothingUpdatePresetProfileParam. // Check the length with: // // len(mockedDevice.PowerSmoothingUpdatePresetProfileParamCalls()) func (mock *Device) PowerSmoothingUpdatePresetProfileParamCalls() []struct { PowerSmoothingProfile *nvml.PowerSmoothingProfile } { var calls []struct { PowerSmoothingProfile *nvml.PowerSmoothingProfile } mock.lockPowerSmoothingUpdatePresetProfileParam.RLock() calls = mock.calls.PowerSmoothingUpdatePresetProfileParam mock.lockPowerSmoothingUpdatePresetProfileParam.RUnlock() return calls } // ReadWritePRM_v1 calls ReadWritePRM_v1Func. func (mock *Device) ReadWritePRM_v1(pRMTLV_v1 *nvml.PRMTLV_v1) nvml.Return { if mock.ReadWritePRM_v1Func == nil { panic("Device.ReadWritePRM_v1Func: method is nil but Device.ReadWritePRM_v1 was just called") } callInfo := struct { PRMTLV_v1 *nvml.PRMTLV_v1 }{ PRMTLV_v1: pRMTLV_v1, } mock.lockReadWritePRM_v1.Lock() mock.calls.ReadWritePRM_v1 = append(mock.calls.ReadWritePRM_v1, callInfo) mock.lockReadWritePRM_v1.Unlock() return mock.ReadWritePRM_v1Func(pRMTLV_v1) } // ReadWritePRM_v1Calls gets all the calls that were made to ReadWritePRM_v1. // Check the length with: // // len(mockedDevice.ReadWritePRM_v1Calls()) func (mock *Device) ReadWritePRM_v1Calls() []struct { PRMTLV_v1 *nvml.PRMTLV_v1 } { var calls []struct { PRMTLV_v1 *nvml.PRMTLV_v1 } mock.lockReadWritePRM_v1.RLock() calls = mock.calls.ReadWritePRM_v1 mock.lockReadWritePRM_v1.RUnlock() return calls } // RegisterEvents calls RegisterEventsFunc. func (mock *Device) RegisterEvents(v uint64, eventSet nvml.EventSet) nvml.Return { if mock.RegisterEventsFunc == nil { panic("Device.RegisterEventsFunc: method is nil but Device.RegisterEvents was just called") } callInfo := struct { V uint64 EventSet nvml.EventSet }{ V: v, EventSet: eventSet, } mock.lockRegisterEvents.Lock() mock.calls.RegisterEvents = append(mock.calls.RegisterEvents, callInfo) mock.lockRegisterEvents.Unlock() return mock.RegisterEventsFunc(v, eventSet) } // RegisterEventsCalls gets all the calls that were made to RegisterEvents. // Check the length with: // // len(mockedDevice.RegisterEventsCalls()) func (mock *Device) RegisterEventsCalls() []struct { V uint64 EventSet nvml.EventSet } { var calls []struct { V uint64 EventSet nvml.EventSet } mock.lockRegisterEvents.RLock() calls = mock.calls.RegisterEvents mock.lockRegisterEvents.RUnlock() return calls } // ResetApplicationsClocks calls ResetApplicationsClocksFunc. func (mock *Device) ResetApplicationsClocks() nvml.Return { if mock.ResetApplicationsClocksFunc == nil { panic("Device.ResetApplicationsClocksFunc: method is nil but Device.ResetApplicationsClocks was just called") } callInfo := struct { }{} mock.lockResetApplicationsClocks.Lock() mock.calls.ResetApplicationsClocks = append(mock.calls.ResetApplicationsClocks, callInfo) mock.lockResetApplicationsClocks.Unlock() return mock.ResetApplicationsClocksFunc() } // ResetApplicationsClocksCalls gets all the calls that were made to ResetApplicationsClocks. // Check the length with: // // len(mockedDevice.ResetApplicationsClocksCalls()) func (mock *Device) ResetApplicationsClocksCalls() []struct { } { var calls []struct { } mock.lockResetApplicationsClocks.RLock() calls = mock.calls.ResetApplicationsClocks mock.lockResetApplicationsClocks.RUnlock() return calls } // ResetGpuLockedClocks calls ResetGpuLockedClocksFunc. func (mock *Device) ResetGpuLockedClocks() nvml.Return { if mock.ResetGpuLockedClocksFunc == nil { panic("Device.ResetGpuLockedClocksFunc: method is nil but Device.ResetGpuLockedClocks was just called") } callInfo := struct { }{} mock.lockResetGpuLockedClocks.Lock() mock.calls.ResetGpuLockedClocks = append(mock.calls.ResetGpuLockedClocks, callInfo) mock.lockResetGpuLockedClocks.Unlock() return mock.ResetGpuLockedClocksFunc() } // ResetGpuLockedClocksCalls gets all the calls that were made to ResetGpuLockedClocks. // Check the length with: // // len(mockedDevice.ResetGpuLockedClocksCalls()) func (mock *Device) ResetGpuLockedClocksCalls() []struct { } { var calls []struct { } mock.lockResetGpuLockedClocks.RLock() calls = mock.calls.ResetGpuLockedClocks mock.lockResetGpuLockedClocks.RUnlock() return calls } // ResetMemoryLockedClocks calls ResetMemoryLockedClocksFunc. func (mock *Device) ResetMemoryLockedClocks() nvml.Return { if mock.ResetMemoryLockedClocksFunc == nil { panic("Device.ResetMemoryLockedClocksFunc: method is nil but Device.ResetMemoryLockedClocks was just called") } callInfo := struct { }{} mock.lockResetMemoryLockedClocks.Lock() mock.calls.ResetMemoryLockedClocks = append(mock.calls.ResetMemoryLockedClocks, callInfo) mock.lockResetMemoryLockedClocks.Unlock() return mock.ResetMemoryLockedClocksFunc() } // ResetMemoryLockedClocksCalls gets all the calls that were made to ResetMemoryLockedClocks. // Check the length with: // // len(mockedDevice.ResetMemoryLockedClocksCalls()) func (mock *Device) ResetMemoryLockedClocksCalls() []struct { } { var calls []struct { } mock.lockResetMemoryLockedClocks.RLock() calls = mock.calls.ResetMemoryLockedClocks mock.lockResetMemoryLockedClocks.RUnlock() return calls } // ResetNvLinkErrorCounters calls ResetNvLinkErrorCountersFunc. func (mock *Device) ResetNvLinkErrorCounters(n int) nvml.Return { if mock.ResetNvLinkErrorCountersFunc == nil { panic("Device.ResetNvLinkErrorCountersFunc: method is nil but Device.ResetNvLinkErrorCounters was just called") } callInfo := struct { N int }{ N: n, } mock.lockResetNvLinkErrorCounters.Lock() mock.calls.ResetNvLinkErrorCounters = append(mock.calls.ResetNvLinkErrorCounters, callInfo) mock.lockResetNvLinkErrorCounters.Unlock() return mock.ResetNvLinkErrorCountersFunc(n) } // ResetNvLinkErrorCountersCalls gets all the calls that were made to ResetNvLinkErrorCounters. // Check the length with: // // len(mockedDevice.ResetNvLinkErrorCountersCalls()) func (mock *Device) ResetNvLinkErrorCountersCalls() []struct { N int } { var calls []struct { N int } mock.lockResetNvLinkErrorCounters.RLock() calls = mock.calls.ResetNvLinkErrorCounters mock.lockResetNvLinkErrorCounters.RUnlock() return calls } // ResetNvLinkUtilizationCounter calls ResetNvLinkUtilizationCounterFunc. func (mock *Device) ResetNvLinkUtilizationCounter(n1 int, n2 int) nvml.Return { if mock.ResetNvLinkUtilizationCounterFunc == nil { panic("Device.ResetNvLinkUtilizationCounterFunc: method is nil but Device.ResetNvLinkUtilizationCounter was just called") } callInfo := struct { N1 int N2 int }{ N1: n1, N2: n2, } mock.lockResetNvLinkUtilizationCounter.Lock() mock.calls.ResetNvLinkUtilizationCounter = append(mock.calls.ResetNvLinkUtilizationCounter, callInfo) mock.lockResetNvLinkUtilizationCounter.Unlock() return mock.ResetNvLinkUtilizationCounterFunc(n1, n2) } // ResetNvLinkUtilizationCounterCalls gets all the calls that were made to ResetNvLinkUtilizationCounter. // Check the length with: // // len(mockedDevice.ResetNvLinkUtilizationCounterCalls()) func (mock *Device) ResetNvLinkUtilizationCounterCalls() []struct { N1 int N2 int } { var calls []struct { N1 int N2 int } mock.lockResetNvLinkUtilizationCounter.RLock() calls = mock.calls.ResetNvLinkUtilizationCounter mock.lockResetNvLinkUtilizationCounter.RUnlock() return calls } // SetAPIRestriction calls SetAPIRestrictionFunc. func (mock *Device) SetAPIRestriction(restrictedAPI nvml.RestrictedAPI, enableState nvml.EnableState) nvml.Return { if mock.SetAPIRestrictionFunc == nil { panic("Device.SetAPIRestrictionFunc: method is nil but Device.SetAPIRestriction was just called") } callInfo := struct { RestrictedAPI nvml.RestrictedAPI EnableState nvml.EnableState }{ RestrictedAPI: restrictedAPI, EnableState: enableState, } mock.lockSetAPIRestriction.Lock() mock.calls.SetAPIRestriction = append(mock.calls.SetAPIRestriction, callInfo) mock.lockSetAPIRestriction.Unlock() return mock.SetAPIRestrictionFunc(restrictedAPI, enableState) } // SetAPIRestrictionCalls gets all the calls that were made to SetAPIRestriction. // Check the length with: // // len(mockedDevice.SetAPIRestrictionCalls()) func (mock *Device) SetAPIRestrictionCalls() []struct { RestrictedAPI nvml.RestrictedAPI EnableState nvml.EnableState } { var calls []struct { RestrictedAPI nvml.RestrictedAPI EnableState nvml.EnableState } mock.lockSetAPIRestriction.RLock() calls = mock.calls.SetAPIRestriction mock.lockSetAPIRestriction.RUnlock() return calls } // SetAccountingMode calls SetAccountingModeFunc. func (mock *Device) SetAccountingMode(enableState nvml.EnableState) nvml.Return { if mock.SetAccountingModeFunc == nil { panic("Device.SetAccountingModeFunc: method is nil but Device.SetAccountingMode was just called") } callInfo := struct { EnableState nvml.EnableState }{ EnableState: enableState, } mock.lockSetAccountingMode.Lock() mock.calls.SetAccountingMode = append(mock.calls.SetAccountingMode, callInfo) mock.lockSetAccountingMode.Unlock() return mock.SetAccountingModeFunc(enableState) } // SetAccountingModeCalls gets all the calls that were made to SetAccountingMode. // Check the length with: // // len(mockedDevice.SetAccountingModeCalls()) func (mock *Device) SetAccountingModeCalls() []struct { EnableState nvml.EnableState } { var calls []struct { EnableState nvml.EnableState } mock.lockSetAccountingMode.RLock() calls = mock.calls.SetAccountingMode mock.lockSetAccountingMode.RUnlock() return calls } // SetApplicationsClocks calls SetApplicationsClocksFunc. func (mock *Device) SetApplicationsClocks(v1 uint32, v2 uint32) nvml.Return { if mock.SetApplicationsClocksFunc == nil { panic("Device.SetApplicationsClocksFunc: method is nil but Device.SetApplicationsClocks was just called") } callInfo := struct { V1 uint32 V2 uint32 }{ V1: v1, V2: v2, } mock.lockSetApplicationsClocks.Lock() mock.calls.SetApplicationsClocks = append(mock.calls.SetApplicationsClocks, callInfo) mock.lockSetApplicationsClocks.Unlock() return mock.SetApplicationsClocksFunc(v1, v2) } // SetApplicationsClocksCalls gets all the calls that were made to SetApplicationsClocks. // Check the length with: // // len(mockedDevice.SetApplicationsClocksCalls()) func (mock *Device) SetApplicationsClocksCalls() []struct { V1 uint32 V2 uint32 } { var calls []struct { V1 uint32 V2 uint32 } mock.lockSetApplicationsClocks.RLock() calls = mock.calls.SetApplicationsClocks mock.lockSetApplicationsClocks.RUnlock() return calls } // SetAutoBoostedClocksEnabled calls SetAutoBoostedClocksEnabledFunc. func (mock *Device) SetAutoBoostedClocksEnabled(enableState nvml.EnableState) nvml.Return { if mock.SetAutoBoostedClocksEnabledFunc == nil { panic("Device.SetAutoBoostedClocksEnabledFunc: method is nil but Device.SetAutoBoostedClocksEnabled was just called") } callInfo := struct { EnableState nvml.EnableState }{ EnableState: enableState, } mock.lockSetAutoBoostedClocksEnabled.Lock() mock.calls.SetAutoBoostedClocksEnabled = append(mock.calls.SetAutoBoostedClocksEnabled, callInfo) mock.lockSetAutoBoostedClocksEnabled.Unlock() return mock.SetAutoBoostedClocksEnabledFunc(enableState) } // SetAutoBoostedClocksEnabledCalls gets all the calls that were made to SetAutoBoostedClocksEnabled. // Check the length with: // // len(mockedDevice.SetAutoBoostedClocksEnabledCalls()) func (mock *Device) SetAutoBoostedClocksEnabledCalls() []struct { EnableState nvml.EnableState } { var calls []struct { EnableState nvml.EnableState } mock.lockSetAutoBoostedClocksEnabled.RLock() calls = mock.calls.SetAutoBoostedClocksEnabled mock.lockSetAutoBoostedClocksEnabled.RUnlock() return calls } // SetClockOffsets calls SetClockOffsetsFunc. func (mock *Device) SetClockOffsets(clockOffset nvml.ClockOffset) nvml.Return { if mock.SetClockOffsetsFunc == nil { panic("Device.SetClockOffsetsFunc: method is nil but Device.SetClockOffsets was just called") } callInfo := struct { ClockOffset nvml.ClockOffset }{ ClockOffset: clockOffset, } mock.lockSetClockOffsets.Lock() mock.calls.SetClockOffsets = append(mock.calls.SetClockOffsets, callInfo) mock.lockSetClockOffsets.Unlock() return mock.SetClockOffsetsFunc(clockOffset) } // SetClockOffsetsCalls gets all the calls that were made to SetClockOffsets. // Check the length with: // // len(mockedDevice.SetClockOffsetsCalls()) func (mock *Device) SetClockOffsetsCalls() []struct { ClockOffset nvml.ClockOffset } { var calls []struct { ClockOffset nvml.ClockOffset } mock.lockSetClockOffsets.RLock() calls = mock.calls.SetClockOffsets mock.lockSetClockOffsets.RUnlock() return calls } // SetComputeMode calls SetComputeModeFunc. func (mock *Device) SetComputeMode(computeMode nvml.ComputeMode) nvml.Return { if mock.SetComputeModeFunc == nil { panic("Device.SetComputeModeFunc: method is nil but Device.SetComputeMode was just called") } callInfo := struct { ComputeMode nvml.ComputeMode }{ ComputeMode: computeMode, } mock.lockSetComputeMode.Lock() mock.calls.SetComputeMode = append(mock.calls.SetComputeMode, callInfo) mock.lockSetComputeMode.Unlock() return mock.SetComputeModeFunc(computeMode) } // SetComputeModeCalls gets all the calls that were made to SetComputeMode. // Check the length with: // // len(mockedDevice.SetComputeModeCalls()) func (mock *Device) SetComputeModeCalls() []struct { ComputeMode nvml.ComputeMode } { var calls []struct { ComputeMode nvml.ComputeMode } mock.lockSetComputeMode.RLock() calls = mock.calls.SetComputeMode mock.lockSetComputeMode.RUnlock() return calls } // SetConfComputeUnprotectedMemSize calls SetConfComputeUnprotectedMemSizeFunc. func (mock *Device) SetConfComputeUnprotectedMemSize(v uint64) nvml.Return { if mock.SetConfComputeUnprotectedMemSizeFunc == nil { panic("Device.SetConfComputeUnprotectedMemSizeFunc: method is nil but Device.SetConfComputeUnprotectedMemSize was just called") } callInfo := struct { V uint64 }{ V: v, } mock.lockSetConfComputeUnprotectedMemSize.Lock() mock.calls.SetConfComputeUnprotectedMemSize = append(mock.calls.SetConfComputeUnprotectedMemSize, callInfo) mock.lockSetConfComputeUnprotectedMemSize.Unlock() return mock.SetConfComputeUnprotectedMemSizeFunc(v) } // SetConfComputeUnprotectedMemSizeCalls gets all the calls that were made to SetConfComputeUnprotectedMemSize. // Check the length with: // // len(mockedDevice.SetConfComputeUnprotectedMemSizeCalls()) func (mock *Device) SetConfComputeUnprotectedMemSizeCalls() []struct { V uint64 } { var calls []struct { V uint64 } mock.lockSetConfComputeUnprotectedMemSize.RLock() calls = mock.calls.SetConfComputeUnprotectedMemSize mock.lockSetConfComputeUnprotectedMemSize.RUnlock() return calls } // SetCpuAffinity calls SetCpuAffinityFunc. func (mock *Device) SetCpuAffinity() nvml.Return { if mock.SetCpuAffinityFunc == nil { panic("Device.SetCpuAffinityFunc: method is nil but Device.SetCpuAffinity was just called") } callInfo := struct { }{} mock.lockSetCpuAffinity.Lock() mock.calls.SetCpuAffinity = append(mock.calls.SetCpuAffinity, callInfo) mock.lockSetCpuAffinity.Unlock() return mock.SetCpuAffinityFunc() } // SetCpuAffinityCalls gets all the calls that were made to SetCpuAffinity. // Check the length with: // // len(mockedDevice.SetCpuAffinityCalls()) func (mock *Device) SetCpuAffinityCalls() []struct { } { var calls []struct { } mock.lockSetCpuAffinity.RLock() calls = mock.calls.SetCpuAffinity mock.lockSetCpuAffinity.RUnlock() return calls } // SetDefaultAutoBoostedClocksEnabled calls SetDefaultAutoBoostedClocksEnabledFunc. func (mock *Device) SetDefaultAutoBoostedClocksEnabled(enableState nvml.EnableState, v uint32) nvml.Return { if mock.SetDefaultAutoBoostedClocksEnabledFunc == nil { panic("Device.SetDefaultAutoBoostedClocksEnabledFunc: method is nil but Device.SetDefaultAutoBoostedClocksEnabled was just called") } callInfo := struct { EnableState nvml.EnableState V uint32 }{ EnableState: enableState, V: v, } mock.lockSetDefaultAutoBoostedClocksEnabled.Lock() mock.calls.SetDefaultAutoBoostedClocksEnabled = append(mock.calls.SetDefaultAutoBoostedClocksEnabled, callInfo) mock.lockSetDefaultAutoBoostedClocksEnabled.Unlock() return mock.SetDefaultAutoBoostedClocksEnabledFunc(enableState, v) } // SetDefaultAutoBoostedClocksEnabledCalls gets all the calls that were made to SetDefaultAutoBoostedClocksEnabled. // Check the length with: // // len(mockedDevice.SetDefaultAutoBoostedClocksEnabledCalls()) func (mock *Device) SetDefaultAutoBoostedClocksEnabledCalls() []struct { EnableState nvml.EnableState V uint32 } { var calls []struct { EnableState nvml.EnableState V uint32 } mock.lockSetDefaultAutoBoostedClocksEnabled.RLock() calls = mock.calls.SetDefaultAutoBoostedClocksEnabled mock.lockSetDefaultAutoBoostedClocksEnabled.RUnlock() return calls } // SetDefaultFanSpeed_v2 calls SetDefaultFanSpeed_v2Func. func (mock *Device) SetDefaultFanSpeed_v2(n int) nvml.Return { if mock.SetDefaultFanSpeed_v2Func == nil { panic("Device.SetDefaultFanSpeed_v2Func: method is nil but Device.SetDefaultFanSpeed_v2 was just called") } callInfo := struct { N int }{ N: n, } mock.lockSetDefaultFanSpeed_v2.Lock() mock.calls.SetDefaultFanSpeed_v2 = append(mock.calls.SetDefaultFanSpeed_v2, callInfo) mock.lockSetDefaultFanSpeed_v2.Unlock() return mock.SetDefaultFanSpeed_v2Func(n) } // SetDefaultFanSpeed_v2Calls gets all the calls that were made to SetDefaultFanSpeed_v2. // Check the length with: // // len(mockedDevice.SetDefaultFanSpeed_v2Calls()) func (mock *Device) SetDefaultFanSpeed_v2Calls() []struct { N int } { var calls []struct { N int } mock.lockSetDefaultFanSpeed_v2.RLock() calls = mock.calls.SetDefaultFanSpeed_v2 mock.lockSetDefaultFanSpeed_v2.RUnlock() return calls } // SetDramEncryptionMode calls SetDramEncryptionModeFunc. func (mock *Device) SetDramEncryptionMode(dramEncryptionInfo *nvml.DramEncryptionInfo) nvml.Return { if mock.SetDramEncryptionModeFunc == nil { panic("Device.SetDramEncryptionModeFunc: method is nil but Device.SetDramEncryptionMode was just called") } callInfo := struct { DramEncryptionInfo *nvml.DramEncryptionInfo }{ DramEncryptionInfo: dramEncryptionInfo, } mock.lockSetDramEncryptionMode.Lock() mock.calls.SetDramEncryptionMode = append(mock.calls.SetDramEncryptionMode, callInfo) mock.lockSetDramEncryptionMode.Unlock() return mock.SetDramEncryptionModeFunc(dramEncryptionInfo) } // SetDramEncryptionModeCalls gets all the calls that were made to SetDramEncryptionMode. // Check the length with: // // len(mockedDevice.SetDramEncryptionModeCalls()) func (mock *Device) SetDramEncryptionModeCalls() []struct { DramEncryptionInfo *nvml.DramEncryptionInfo } { var calls []struct { DramEncryptionInfo *nvml.DramEncryptionInfo } mock.lockSetDramEncryptionMode.RLock() calls = mock.calls.SetDramEncryptionMode mock.lockSetDramEncryptionMode.RUnlock() return calls } // SetDriverModel calls SetDriverModelFunc. func (mock *Device) SetDriverModel(driverModel nvml.DriverModel, v uint32) nvml.Return { if mock.SetDriverModelFunc == nil { panic("Device.SetDriverModelFunc: method is nil but Device.SetDriverModel was just called") } callInfo := struct { DriverModel nvml.DriverModel V uint32 }{ DriverModel: driverModel, V: v, } mock.lockSetDriverModel.Lock() mock.calls.SetDriverModel = append(mock.calls.SetDriverModel, callInfo) mock.lockSetDriverModel.Unlock() return mock.SetDriverModelFunc(driverModel, v) } // SetDriverModelCalls gets all the calls that were made to SetDriverModel. // Check the length with: // // len(mockedDevice.SetDriverModelCalls()) func (mock *Device) SetDriverModelCalls() []struct { DriverModel nvml.DriverModel V uint32 } { var calls []struct { DriverModel nvml.DriverModel V uint32 } mock.lockSetDriverModel.RLock() calls = mock.calls.SetDriverModel mock.lockSetDriverModel.RUnlock() return calls } // SetEccMode calls SetEccModeFunc. func (mock *Device) SetEccMode(enableState nvml.EnableState) nvml.Return { if mock.SetEccModeFunc == nil { panic("Device.SetEccModeFunc: method is nil but Device.SetEccMode was just called") } callInfo := struct { EnableState nvml.EnableState }{ EnableState: enableState, } mock.lockSetEccMode.Lock() mock.calls.SetEccMode = append(mock.calls.SetEccMode, callInfo) mock.lockSetEccMode.Unlock() return mock.SetEccModeFunc(enableState) } // SetEccModeCalls gets all the calls that were made to SetEccMode. // Check the length with: // // len(mockedDevice.SetEccModeCalls()) func (mock *Device) SetEccModeCalls() []struct { EnableState nvml.EnableState } { var calls []struct { EnableState nvml.EnableState } mock.lockSetEccMode.RLock() calls = mock.calls.SetEccMode mock.lockSetEccMode.RUnlock() return calls } // SetFanControlPolicy calls SetFanControlPolicyFunc. func (mock *Device) SetFanControlPolicy(n int, fanControlPolicy nvml.FanControlPolicy) nvml.Return { if mock.SetFanControlPolicyFunc == nil { panic("Device.SetFanControlPolicyFunc: method is nil but Device.SetFanControlPolicy was just called") } callInfo := struct { N int FanControlPolicy nvml.FanControlPolicy }{ N: n, FanControlPolicy: fanControlPolicy, } mock.lockSetFanControlPolicy.Lock() mock.calls.SetFanControlPolicy = append(mock.calls.SetFanControlPolicy, callInfo) mock.lockSetFanControlPolicy.Unlock() return mock.SetFanControlPolicyFunc(n, fanControlPolicy) } // SetFanControlPolicyCalls gets all the calls that were made to SetFanControlPolicy. // Check the length with: // // len(mockedDevice.SetFanControlPolicyCalls()) func (mock *Device) SetFanControlPolicyCalls() []struct { N int FanControlPolicy nvml.FanControlPolicy } { var calls []struct { N int FanControlPolicy nvml.FanControlPolicy } mock.lockSetFanControlPolicy.RLock() calls = mock.calls.SetFanControlPolicy mock.lockSetFanControlPolicy.RUnlock() return calls } // SetFanSpeed_v2 calls SetFanSpeed_v2Func. func (mock *Device) SetFanSpeed_v2(n1 int, n2 int) nvml.Return { if mock.SetFanSpeed_v2Func == nil { panic("Device.SetFanSpeed_v2Func: method is nil but Device.SetFanSpeed_v2 was just called") } callInfo := struct { N1 int N2 int }{ N1: n1, N2: n2, } mock.lockSetFanSpeed_v2.Lock() mock.calls.SetFanSpeed_v2 = append(mock.calls.SetFanSpeed_v2, callInfo) mock.lockSetFanSpeed_v2.Unlock() return mock.SetFanSpeed_v2Func(n1, n2) } // SetFanSpeed_v2Calls gets all the calls that were made to SetFanSpeed_v2. // Check the length with: // // len(mockedDevice.SetFanSpeed_v2Calls()) func (mock *Device) SetFanSpeed_v2Calls() []struct { N1 int N2 int } { var calls []struct { N1 int N2 int } mock.lockSetFanSpeed_v2.RLock() calls = mock.calls.SetFanSpeed_v2 mock.lockSetFanSpeed_v2.RUnlock() return calls } // SetGpcClkVfOffset calls SetGpcClkVfOffsetFunc. func (mock *Device) SetGpcClkVfOffset(n int) nvml.Return { if mock.SetGpcClkVfOffsetFunc == nil { panic("Device.SetGpcClkVfOffsetFunc: method is nil but Device.SetGpcClkVfOffset was just called") } callInfo := struct { N int }{ N: n, } mock.lockSetGpcClkVfOffset.Lock() mock.calls.SetGpcClkVfOffset = append(mock.calls.SetGpcClkVfOffset, callInfo) mock.lockSetGpcClkVfOffset.Unlock() return mock.SetGpcClkVfOffsetFunc(n) } // SetGpcClkVfOffsetCalls gets all the calls that were made to SetGpcClkVfOffset. // Check the length with: // // len(mockedDevice.SetGpcClkVfOffsetCalls()) func (mock *Device) SetGpcClkVfOffsetCalls() []struct { N int } { var calls []struct { N int } mock.lockSetGpcClkVfOffset.RLock() calls = mock.calls.SetGpcClkVfOffset mock.lockSetGpcClkVfOffset.RUnlock() return calls } // SetGpuLockedClocks calls SetGpuLockedClocksFunc. func (mock *Device) SetGpuLockedClocks(v1 uint32, v2 uint32) nvml.Return { if mock.SetGpuLockedClocksFunc == nil { panic("Device.SetGpuLockedClocksFunc: method is nil but Device.SetGpuLockedClocks was just called") } callInfo := struct { V1 uint32 V2 uint32 }{ V1: v1, V2: v2, } mock.lockSetGpuLockedClocks.Lock() mock.calls.SetGpuLockedClocks = append(mock.calls.SetGpuLockedClocks, callInfo) mock.lockSetGpuLockedClocks.Unlock() return mock.SetGpuLockedClocksFunc(v1, v2) } // SetGpuLockedClocksCalls gets all the calls that were made to SetGpuLockedClocks. // Check the length with: // // len(mockedDevice.SetGpuLockedClocksCalls()) func (mock *Device) SetGpuLockedClocksCalls() []struct { V1 uint32 V2 uint32 } { var calls []struct { V1 uint32 V2 uint32 } mock.lockSetGpuLockedClocks.RLock() calls = mock.calls.SetGpuLockedClocks mock.lockSetGpuLockedClocks.RUnlock() return calls } // SetGpuOperationMode calls SetGpuOperationModeFunc. func (mock *Device) SetGpuOperationMode(gpuOperationMode nvml.GpuOperationMode) nvml.Return { if mock.SetGpuOperationModeFunc == nil { panic("Device.SetGpuOperationModeFunc: method is nil but Device.SetGpuOperationMode was just called") } callInfo := struct { GpuOperationMode nvml.GpuOperationMode }{ GpuOperationMode: gpuOperationMode, } mock.lockSetGpuOperationMode.Lock() mock.calls.SetGpuOperationMode = append(mock.calls.SetGpuOperationMode, callInfo) mock.lockSetGpuOperationMode.Unlock() return mock.SetGpuOperationModeFunc(gpuOperationMode) } // SetGpuOperationModeCalls gets all the calls that were made to SetGpuOperationMode. // Check the length with: // // len(mockedDevice.SetGpuOperationModeCalls()) func (mock *Device) SetGpuOperationModeCalls() []struct { GpuOperationMode nvml.GpuOperationMode } { var calls []struct { GpuOperationMode nvml.GpuOperationMode } mock.lockSetGpuOperationMode.RLock() calls = mock.calls.SetGpuOperationMode mock.lockSetGpuOperationMode.RUnlock() return calls } // SetMemClkVfOffset calls SetMemClkVfOffsetFunc. func (mock *Device) SetMemClkVfOffset(n int) nvml.Return { if mock.SetMemClkVfOffsetFunc == nil { panic("Device.SetMemClkVfOffsetFunc: method is nil but Device.SetMemClkVfOffset was just called") } callInfo := struct { N int }{ N: n, } mock.lockSetMemClkVfOffset.Lock() mock.calls.SetMemClkVfOffset = append(mock.calls.SetMemClkVfOffset, callInfo) mock.lockSetMemClkVfOffset.Unlock() return mock.SetMemClkVfOffsetFunc(n) } // SetMemClkVfOffsetCalls gets all the calls that were made to SetMemClkVfOffset. // Check the length with: // // len(mockedDevice.SetMemClkVfOffsetCalls()) func (mock *Device) SetMemClkVfOffsetCalls() []struct { N int } { var calls []struct { N int } mock.lockSetMemClkVfOffset.RLock() calls = mock.calls.SetMemClkVfOffset mock.lockSetMemClkVfOffset.RUnlock() return calls } // SetMemoryLockedClocks calls SetMemoryLockedClocksFunc. func (mock *Device) SetMemoryLockedClocks(v1 uint32, v2 uint32) nvml.Return { if mock.SetMemoryLockedClocksFunc == nil { panic("Device.SetMemoryLockedClocksFunc: method is nil but Device.SetMemoryLockedClocks was just called") } callInfo := struct { V1 uint32 V2 uint32 }{ V1: v1, V2: v2, } mock.lockSetMemoryLockedClocks.Lock() mock.calls.SetMemoryLockedClocks = append(mock.calls.SetMemoryLockedClocks, callInfo) mock.lockSetMemoryLockedClocks.Unlock() return mock.SetMemoryLockedClocksFunc(v1, v2) } // SetMemoryLockedClocksCalls gets all the calls that were made to SetMemoryLockedClocks. // Check the length with: // // len(mockedDevice.SetMemoryLockedClocksCalls()) func (mock *Device) SetMemoryLockedClocksCalls() []struct { V1 uint32 V2 uint32 } { var calls []struct { V1 uint32 V2 uint32 } mock.lockSetMemoryLockedClocks.RLock() calls = mock.calls.SetMemoryLockedClocks mock.lockSetMemoryLockedClocks.RUnlock() return calls } // SetMigMode calls SetMigModeFunc. func (mock *Device) SetMigMode(n int) (nvml.Return, nvml.Return) { if mock.SetMigModeFunc == nil { panic("Device.SetMigModeFunc: method is nil but Device.SetMigMode was just called") } callInfo := struct { N int }{ N: n, } mock.lockSetMigMode.Lock() mock.calls.SetMigMode = append(mock.calls.SetMigMode, callInfo) mock.lockSetMigMode.Unlock() return mock.SetMigModeFunc(n) } // SetMigModeCalls gets all the calls that were made to SetMigMode. // Check the length with: // // len(mockedDevice.SetMigModeCalls()) func (mock *Device) SetMigModeCalls() []struct { N int } { var calls []struct { N int } mock.lockSetMigMode.RLock() calls = mock.calls.SetMigMode mock.lockSetMigMode.RUnlock() return calls } // SetNvLinkDeviceLowPowerThreshold calls SetNvLinkDeviceLowPowerThresholdFunc. func (mock *Device) SetNvLinkDeviceLowPowerThreshold(nvLinkPowerThres *nvml.NvLinkPowerThres) nvml.Return { if mock.SetNvLinkDeviceLowPowerThresholdFunc == nil { panic("Device.SetNvLinkDeviceLowPowerThresholdFunc: method is nil but Device.SetNvLinkDeviceLowPowerThreshold was just called") } callInfo := struct { NvLinkPowerThres *nvml.NvLinkPowerThres }{ NvLinkPowerThres: nvLinkPowerThres, } mock.lockSetNvLinkDeviceLowPowerThreshold.Lock() mock.calls.SetNvLinkDeviceLowPowerThreshold = append(mock.calls.SetNvLinkDeviceLowPowerThreshold, callInfo) mock.lockSetNvLinkDeviceLowPowerThreshold.Unlock() return mock.SetNvLinkDeviceLowPowerThresholdFunc(nvLinkPowerThres) } // SetNvLinkDeviceLowPowerThresholdCalls gets all the calls that were made to SetNvLinkDeviceLowPowerThreshold. // Check the length with: // // len(mockedDevice.SetNvLinkDeviceLowPowerThresholdCalls()) func (mock *Device) SetNvLinkDeviceLowPowerThresholdCalls() []struct { NvLinkPowerThres *nvml.NvLinkPowerThres } { var calls []struct { NvLinkPowerThres *nvml.NvLinkPowerThres } mock.lockSetNvLinkDeviceLowPowerThreshold.RLock() calls = mock.calls.SetNvLinkDeviceLowPowerThreshold mock.lockSetNvLinkDeviceLowPowerThreshold.RUnlock() return calls } // SetNvLinkUtilizationControl calls SetNvLinkUtilizationControlFunc. func (mock *Device) SetNvLinkUtilizationControl(n1 int, n2 int, nvLinkUtilizationControl *nvml.NvLinkUtilizationControl, b bool) nvml.Return { if mock.SetNvLinkUtilizationControlFunc == nil { panic("Device.SetNvLinkUtilizationControlFunc: method is nil but Device.SetNvLinkUtilizationControl was just called") } callInfo := struct { N1 int N2 int NvLinkUtilizationControl *nvml.NvLinkUtilizationControl B bool }{ N1: n1, N2: n2, NvLinkUtilizationControl: nvLinkUtilizationControl, B: b, } mock.lockSetNvLinkUtilizationControl.Lock() mock.calls.SetNvLinkUtilizationControl = append(mock.calls.SetNvLinkUtilizationControl, callInfo) mock.lockSetNvLinkUtilizationControl.Unlock() return mock.SetNvLinkUtilizationControlFunc(n1, n2, nvLinkUtilizationControl, b) } // SetNvLinkUtilizationControlCalls gets all the calls that were made to SetNvLinkUtilizationControl. // Check the length with: // // len(mockedDevice.SetNvLinkUtilizationControlCalls()) func (mock *Device) SetNvLinkUtilizationControlCalls() []struct { N1 int N2 int NvLinkUtilizationControl *nvml.NvLinkUtilizationControl B bool } { var calls []struct { N1 int N2 int NvLinkUtilizationControl *nvml.NvLinkUtilizationControl B bool } mock.lockSetNvLinkUtilizationControl.RLock() calls = mock.calls.SetNvLinkUtilizationControl mock.lockSetNvLinkUtilizationControl.RUnlock() return calls } // SetNvlinkBwMode calls SetNvlinkBwModeFunc. func (mock *Device) SetNvlinkBwMode(nvlinkSetBwMode *nvml.NvlinkSetBwMode) nvml.Return { if mock.SetNvlinkBwModeFunc == nil { panic("Device.SetNvlinkBwModeFunc: method is nil but Device.SetNvlinkBwMode was just called") } callInfo := struct { NvlinkSetBwMode *nvml.NvlinkSetBwMode }{ NvlinkSetBwMode: nvlinkSetBwMode, } mock.lockSetNvlinkBwMode.Lock() mock.calls.SetNvlinkBwMode = append(mock.calls.SetNvlinkBwMode, callInfo) mock.lockSetNvlinkBwMode.Unlock() return mock.SetNvlinkBwModeFunc(nvlinkSetBwMode) } // SetNvlinkBwModeCalls gets all the calls that were made to SetNvlinkBwMode. // Check the length with: // // len(mockedDevice.SetNvlinkBwModeCalls()) func (mock *Device) SetNvlinkBwModeCalls() []struct { NvlinkSetBwMode *nvml.NvlinkSetBwMode } { var calls []struct { NvlinkSetBwMode *nvml.NvlinkSetBwMode } mock.lockSetNvlinkBwMode.RLock() calls = mock.calls.SetNvlinkBwMode mock.lockSetNvlinkBwMode.RUnlock() return calls } // SetPersistenceMode calls SetPersistenceModeFunc. func (mock *Device) SetPersistenceMode(enableState nvml.EnableState) nvml.Return { if mock.SetPersistenceModeFunc == nil { panic("Device.SetPersistenceModeFunc: method is nil but Device.SetPersistenceMode was just called") } callInfo := struct { EnableState nvml.EnableState }{ EnableState: enableState, } mock.lockSetPersistenceMode.Lock() mock.calls.SetPersistenceMode = append(mock.calls.SetPersistenceMode, callInfo) mock.lockSetPersistenceMode.Unlock() return mock.SetPersistenceModeFunc(enableState) } // SetPersistenceModeCalls gets all the calls that were made to SetPersistenceMode. // Check the length with: // // len(mockedDevice.SetPersistenceModeCalls()) func (mock *Device) SetPersistenceModeCalls() []struct { EnableState nvml.EnableState } { var calls []struct { EnableState nvml.EnableState } mock.lockSetPersistenceMode.RLock() calls = mock.calls.SetPersistenceMode mock.lockSetPersistenceMode.RUnlock() return calls } // SetPowerManagementLimit calls SetPowerManagementLimitFunc. func (mock *Device) SetPowerManagementLimit(v uint32) nvml.Return { if mock.SetPowerManagementLimitFunc == nil { panic("Device.SetPowerManagementLimitFunc: method is nil but Device.SetPowerManagementLimit was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockSetPowerManagementLimit.Lock() mock.calls.SetPowerManagementLimit = append(mock.calls.SetPowerManagementLimit, callInfo) mock.lockSetPowerManagementLimit.Unlock() return mock.SetPowerManagementLimitFunc(v) } // SetPowerManagementLimitCalls gets all the calls that were made to SetPowerManagementLimit. // Check the length with: // // len(mockedDevice.SetPowerManagementLimitCalls()) func (mock *Device) SetPowerManagementLimitCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockSetPowerManagementLimit.RLock() calls = mock.calls.SetPowerManagementLimit mock.lockSetPowerManagementLimit.RUnlock() return calls } // SetPowerManagementLimit_v2 calls SetPowerManagementLimit_v2Func. func (mock *Device) SetPowerManagementLimit_v2(powerValue_v2 *nvml.PowerValue_v2) nvml.Return { if mock.SetPowerManagementLimit_v2Func == nil { panic("Device.SetPowerManagementLimit_v2Func: method is nil but Device.SetPowerManagementLimit_v2 was just called") } callInfo := struct { PowerValue_v2 *nvml.PowerValue_v2 }{ PowerValue_v2: powerValue_v2, } mock.lockSetPowerManagementLimit_v2.Lock() mock.calls.SetPowerManagementLimit_v2 = append(mock.calls.SetPowerManagementLimit_v2, callInfo) mock.lockSetPowerManagementLimit_v2.Unlock() return mock.SetPowerManagementLimit_v2Func(powerValue_v2) } // SetPowerManagementLimit_v2Calls gets all the calls that were made to SetPowerManagementLimit_v2. // Check the length with: // // len(mockedDevice.SetPowerManagementLimit_v2Calls()) func (mock *Device) SetPowerManagementLimit_v2Calls() []struct { PowerValue_v2 *nvml.PowerValue_v2 } { var calls []struct { PowerValue_v2 *nvml.PowerValue_v2 } mock.lockSetPowerManagementLimit_v2.RLock() calls = mock.calls.SetPowerManagementLimit_v2 mock.lockSetPowerManagementLimit_v2.RUnlock() return calls } // SetTemperatureThreshold calls SetTemperatureThresholdFunc. func (mock *Device) SetTemperatureThreshold(temperatureThresholds nvml.TemperatureThresholds, n int) nvml.Return { if mock.SetTemperatureThresholdFunc == nil { panic("Device.SetTemperatureThresholdFunc: method is nil but Device.SetTemperatureThreshold was just called") } callInfo := struct { TemperatureThresholds nvml.TemperatureThresholds N int }{ TemperatureThresholds: temperatureThresholds, N: n, } mock.lockSetTemperatureThreshold.Lock() mock.calls.SetTemperatureThreshold = append(mock.calls.SetTemperatureThreshold, callInfo) mock.lockSetTemperatureThreshold.Unlock() return mock.SetTemperatureThresholdFunc(temperatureThresholds, n) } // SetTemperatureThresholdCalls gets all the calls that were made to SetTemperatureThreshold. // Check the length with: // // len(mockedDevice.SetTemperatureThresholdCalls()) func (mock *Device) SetTemperatureThresholdCalls() []struct { TemperatureThresholds nvml.TemperatureThresholds N int } { var calls []struct { TemperatureThresholds nvml.TemperatureThresholds N int } mock.lockSetTemperatureThreshold.RLock() calls = mock.calls.SetTemperatureThreshold mock.lockSetTemperatureThreshold.RUnlock() return calls } // SetVgpuCapabilities calls SetVgpuCapabilitiesFunc. func (mock *Device) SetVgpuCapabilities(deviceVgpuCapability nvml.DeviceVgpuCapability, enableState nvml.EnableState) nvml.Return { if mock.SetVgpuCapabilitiesFunc == nil { panic("Device.SetVgpuCapabilitiesFunc: method is nil but Device.SetVgpuCapabilities was just called") } callInfo := struct { DeviceVgpuCapability nvml.DeviceVgpuCapability EnableState nvml.EnableState }{ DeviceVgpuCapability: deviceVgpuCapability, EnableState: enableState, } mock.lockSetVgpuCapabilities.Lock() mock.calls.SetVgpuCapabilities = append(mock.calls.SetVgpuCapabilities, callInfo) mock.lockSetVgpuCapabilities.Unlock() return mock.SetVgpuCapabilitiesFunc(deviceVgpuCapability, enableState) } // SetVgpuCapabilitiesCalls gets all the calls that were made to SetVgpuCapabilities. // Check the length with: // // len(mockedDevice.SetVgpuCapabilitiesCalls()) func (mock *Device) SetVgpuCapabilitiesCalls() []struct { DeviceVgpuCapability nvml.DeviceVgpuCapability EnableState nvml.EnableState } { var calls []struct { DeviceVgpuCapability nvml.DeviceVgpuCapability EnableState nvml.EnableState } mock.lockSetVgpuCapabilities.RLock() calls = mock.calls.SetVgpuCapabilities mock.lockSetVgpuCapabilities.RUnlock() return calls } // SetVgpuHeterogeneousMode calls SetVgpuHeterogeneousModeFunc. func (mock *Device) SetVgpuHeterogeneousMode(vgpuHeterogeneousMode nvml.VgpuHeterogeneousMode) nvml.Return { if mock.SetVgpuHeterogeneousModeFunc == nil { panic("Device.SetVgpuHeterogeneousModeFunc: method is nil but Device.SetVgpuHeterogeneousMode was just called") } callInfo := struct { VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode }{ VgpuHeterogeneousMode: vgpuHeterogeneousMode, } mock.lockSetVgpuHeterogeneousMode.Lock() mock.calls.SetVgpuHeterogeneousMode = append(mock.calls.SetVgpuHeterogeneousMode, callInfo) mock.lockSetVgpuHeterogeneousMode.Unlock() return mock.SetVgpuHeterogeneousModeFunc(vgpuHeterogeneousMode) } // SetVgpuHeterogeneousModeCalls gets all the calls that were made to SetVgpuHeterogeneousMode. // Check the length with: // // len(mockedDevice.SetVgpuHeterogeneousModeCalls()) func (mock *Device) SetVgpuHeterogeneousModeCalls() []struct { VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode } { var calls []struct { VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode } mock.lockSetVgpuHeterogeneousMode.RLock() calls = mock.calls.SetVgpuHeterogeneousMode mock.lockSetVgpuHeterogeneousMode.RUnlock() return calls } // SetVgpuSchedulerState calls SetVgpuSchedulerStateFunc. func (mock *Device) SetVgpuSchedulerState(vgpuSchedulerSetState *nvml.VgpuSchedulerSetState) nvml.Return { if mock.SetVgpuSchedulerStateFunc == nil { panic("Device.SetVgpuSchedulerStateFunc: method is nil but Device.SetVgpuSchedulerState was just called") } callInfo := struct { VgpuSchedulerSetState *nvml.VgpuSchedulerSetState }{ VgpuSchedulerSetState: vgpuSchedulerSetState, } mock.lockSetVgpuSchedulerState.Lock() mock.calls.SetVgpuSchedulerState = append(mock.calls.SetVgpuSchedulerState, callInfo) mock.lockSetVgpuSchedulerState.Unlock() return mock.SetVgpuSchedulerStateFunc(vgpuSchedulerSetState) } // SetVgpuSchedulerStateCalls gets all the calls that were made to SetVgpuSchedulerState. // Check the length with: // // len(mockedDevice.SetVgpuSchedulerStateCalls()) func (mock *Device) SetVgpuSchedulerStateCalls() []struct { VgpuSchedulerSetState *nvml.VgpuSchedulerSetState } { var calls []struct { VgpuSchedulerSetState *nvml.VgpuSchedulerSetState } mock.lockSetVgpuSchedulerState.RLock() calls = mock.calls.SetVgpuSchedulerState mock.lockSetVgpuSchedulerState.RUnlock() return calls } // SetVirtualizationMode calls SetVirtualizationModeFunc. func (mock *Device) SetVirtualizationMode(gpuVirtualizationMode nvml.GpuVirtualizationMode) nvml.Return { if mock.SetVirtualizationModeFunc == nil { panic("Device.SetVirtualizationModeFunc: method is nil but Device.SetVirtualizationMode was just called") } callInfo := struct { GpuVirtualizationMode nvml.GpuVirtualizationMode }{ GpuVirtualizationMode: gpuVirtualizationMode, } mock.lockSetVirtualizationMode.Lock() mock.calls.SetVirtualizationMode = append(mock.calls.SetVirtualizationMode, callInfo) mock.lockSetVirtualizationMode.Unlock() return mock.SetVirtualizationModeFunc(gpuVirtualizationMode) } // SetVirtualizationModeCalls gets all the calls that were made to SetVirtualizationMode. // Check the length with: // // len(mockedDevice.SetVirtualizationModeCalls()) func (mock *Device) SetVirtualizationModeCalls() []struct { GpuVirtualizationMode nvml.GpuVirtualizationMode } { var calls []struct { GpuVirtualizationMode nvml.GpuVirtualizationMode } mock.lockSetVirtualizationMode.RLock() calls = mock.calls.SetVirtualizationMode mock.lockSetVirtualizationMode.RUnlock() return calls } // ValidateInforom calls ValidateInforomFunc. func (mock *Device) ValidateInforom() nvml.Return { if mock.ValidateInforomFunc == nil { panic("Device.ValidateInforomFunc: method is nil but Device.ValidateInforom was just called") } callInfo := struct { }{} mock.lockValidateInforom.Lock() mock.calls.ValidateInforom = append(mock.calls.ValidateInforom, callInfo) mock.lockValidateInforom.Unlock() return mock.ValidateInforomFunc() } // ValidateInforomCalls gets all the calls that were made to ValidateInforom. // Check the length with: // // len(mockedDevice.ValidateInforomCalls()) func (mock *Device) ValidateInforomCalls() []struct { } { var calls []struct { } mock.lockValidateInforom.RLock() calls = mock.calls.ValidateInforom mock.lockValidateInforom.RUnlock() return calls } // VgpuTypeGetMaxInstances calls VgpuTypeGetMaxInstancesFunc. func (mock *Device) VgpuTypeGetMaxInstances(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { if mock.VgpuTypeGetMaxInstancesFunc == nil { panic("Device.VgpuTypeGetMaxInstancesFunc: method is nil but Device.VgpuTypeGetMaxInstances was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetMaxInstances.Lock() mock.calls.VgpuTypeGetMaxInstances = append(mock.calls.VgpuTypeGetMaxInstances, callInfo) mock.lockVgpuTypeGetMaxInstances.Unlock() return mock.VgpuTypeGetMaxInstancesFunc(vgpuTypeId) } // VgpuTypeGetMaxInstancesCalls gets all the calls that were made to VgpuTypeGetMaxInstances. // Check the length with: // // len(mockedDevice.VgpuTypeGetMaxInstancesCalls()) func (mock *Device) VgpuTypeGetMaxInstancesCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetMaxInstances.RLock() calls = mock.calls.VgpuTypeGetMaxInstances mock.lockVgpuTypeGetMaxInstances.RUnlock() return calls } // WorkloadPowerProfileClearRequestedProfiles calls WorkloadPowerProfileClearRequestedProfilesFunc. func (mock *Device) WorkloadPowerProfileClearRequestedProfiles(workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { if mock.WorkloadPowerProfileClearRequestedProfilesFunc == nil { panic("Device.WorkloadPowerProfileClearRequestedProfilesFunc: method is nil but Device.WorkloadPowerProfileClearRequestedProfiles was just called") } callInfo := struct { WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles }{ WorkloadPowerProfileRequestedProfiles: workloadPowerProfileRequestedProfiles, } mock.lockWorkloadPowerProfileClearRequestedProfiles.Lock() mock.calls.WorkloadPowerProfileClearRequestedProfiles = append(mock.calls.WorkloadPowerProfileClearRequestedProfiles, callInfo) mock.lockWorkloadPowerProfileClearRequestedProfiles.Unlock() return mock.WorkloadPowerProfileClearRequestedProfilesFunc(workloadPowerProfileRequestedProfiles) } // WorkloadPowerProfileClearRequestedProfilesCalls gets all the calls that were made to WorkloadPowerProfileClearRequestedProfiles. // Check the length with: // // len(mockedDevice.WorkloadPowerProfileClearRequestedProfilesCalls()) func (mock *Device) WorkloadPowerProfileClearRequestedProfilesCalls() []struct { WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } { var calls []struct { WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } mock.lockWorkloadPowerProfileClearRequestedProfiles.RLock() calls = mock.calls.WorkloadPowerProfileClearRequestedProfiles mock.lockWorkloadPowerProfileClearRequestedProfiles.RUnlock() return calls } // WorkloadPowerProfileGetCurrentProfiles calls WorkloadPowerProfileGetCurrentProfilesFunc. func (mock *Device) WorkloadPowerProfileGetCurrentProfiles() (nvml.WorkloadPowerProfileCurrentProfiles, nvml.Return) { if mock.WorkloadPowerProfileGetCurrentProfilesFunc == nil { panic("Device.WorkloadPowerProfileGetCurrentProfilesFunc: method is nil but Device.WorkloadPowerProfileGetCurrentProfiles was just called") } callInfo := struct { }{} mock.lockWorkloadPowerProfileGetCurrentProfiles.Lock() mock.calls.WorkloadPowerProfileGetCurrentProfiles = append(mock.calls.WorkloadPowerProfileGetCurrentProfiles, callInfo) mock.lockWorkloadPowerProfileGetCurrentProfiles.Unlock() return mock.WorkloadPowerProfileGetCurrentProfilesFunc() } // WorkloadPowerProfileGetCurrentProfilesCalls gets all the calls that were made to WorkloadPowerProfileGetCurrentProfiles. // Check the length with: // // len(mockedDevice.WorkloadPowerProfileGetCurrentProfilesCalls()) func (mock *Device) WorkloadPowerProfileGetCurrentProfilesCalls() []struct { } { var calls []struct { } mock.lockWorkloadPowerProfileGetCurrentProfiles.RLock() calls = mock.calls.WorkloadPowerProfileGetCurrentProfiles mock.lockWorkloadPowerProfileGetCurrentProfiles.RUnlock() return calls } // WorkloadPowerProfileGetProfilesInfo calls WorkloadPowerProfileGetProfilesInfoFunc. func (mock *Device) WorkloadPowerProfileGetProfilesInfo() (nvml.WorkloadPowerProfileProfilesInfo, nvml.Return) { if mock.WorkloadPowerProfileGetProfilesInfoFunc == nil { panic("Device.WorkloadPowerProfileGetProfilesInfoFunc: method is nil but Device.WorkloadPowerProfileGetProfilesInfo was just called") } callInfo := struct { }{} mock.lockWorkloadPowerProfileGetProfilesInfo.Lock() mock.calls.WorkloadPowerProfileGetProfilesInfo = append(mock.calls.WorkloadPowerProfileGetProfilesInfo, callInfo) mock.lockWorkloadPowerProfileGetProfilesInfo.Unlock() return mock.WorkloadPowerProfileGetProfilesInfoFunc() } // WorkloadPowerProfileGetProfilesInfoCalls gets all the calls that were made to WorkloadPowerProfileGetProfilesInfo. // Check the length with: // // len(mockedDevice.WorkloadPowerProfileGetProfilesInfoCalls()) func (mock *Device) WorkloadPowerProfileGetProfilesInfoCalls() []struct { } { var calls []struct { } mock.lockWorkloadPowerProfileGetProfilesInfo.RLock() calls = mock.calls.WorkloadPowerProfileGetProfilesInfo mock.lockWorkloadPowerProfileGetProfilesInfo.RUnlock() return calls } // WorkloadPowerProfileSetRequestedProfiles calls WorkloadPowerProfileSetRequestedProfilesFunc. func (mock *Device) WorkloadPowerProfileSetRequestedProfiles(workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { if mock.WorkloadPowerProfileSetRequestedProfilesFunc == nil { panic("Device.WorkloadPowerProfileSetRequestedProfilesFunc: method is nil but Device.WorkloadPowerProfileSetRequestedProfiles was just called") } callInfo := struct { WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles }{ WorkloadPowerProfileRequestedProfiles: workloadPowerProfileRequestedProfiles, } mock.lockWorkloadPowerProfileSetRequestedProfiles.Lock() mock.calls.WorkloadPowerProfileSetRequestedProfiles = append(mock.calls.WorkloadPowerProfileSetRequestedProfiles, callInfo) mock.lockWorkloadPowerProfileSetRequestedProfiles.Unlock() return mock.WorkloadPowerProfileSetRequestedProfilesFunc(workloadPowerProfileRequestedProfiles) } // WorkloadPowerProfileSetRequestedProfilesCalls gets all the calls that were made to WorkloadPowerProfileSetRequestedProfiles. // Check the length with: // // len(mockedDevice.WorkloadPowerProfileSetRequestedProfilesCalls()) func (mock *Device) WorkloadPowerProfileSetRequestedProfilesCalls() []struct { WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } { var calls []struct { WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } mock.lockWorkloadPowerProfileSetRequestedProfiles.RLock() calls = mock.calls.WorkloadPowerProfileSetRequestedProfiles mock.lockWorkloadPowerProfileSetRequestedProfiles.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/dgxa100/000077500000000000000000000000001520540370700266025ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/dgxa100/dgxa100.go000066400000000000000000000236361520540370700303070ustar00rootroot00000000000000/* * Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package dgxa100 import ( "fmt" "sync" "github.com/google/uuid" "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/NVIDIA/go-nvml/pkg/nvml/mock" ) type Server struct { mock.Interface mock.ExtendedInterface Devices [8]nvml.Device DriverVersion string NvmlVersion string CudaDriverVersion int } type Device struct { mock.Device sync.RWMutex UUID string Name string Brand nvml.BrandType Architecture nvml.DeviceArchitecture PciBusID string Minor int Index int CudaComputeCapability CudaComputeCapability MigMode int GpuInstances map[*GpuInstance]struct{} GpuInstanceCounter uint32 MemoryInfo nvml.Memory } type GpuInstance struct { mock.GpuInstance sync.RWMutex Info nvml.GpuInstanceInfo ComputeInstances map[*ComputeInstance]struct{} ComputeInstanceCounter uint32 } type ComputeInstance struct { mock.ComputeInstance Info nvml.ComputeInstanceInfo } type CudaComputeCapability struct { Major int Minor int } var _ nvml.Interface = (*Server)(nil) var _ nvml.Device = (*Device)(nil) var _ nvml.GpuInstance = (*GpuInstance)(nil) var _ nvml.ComputeInstance = (*ComputeInstance)(nil) func New() *Server { server := &Server{ Devices: [8]nvml.Device{ NewDevice(0), NewDevice(1), NewDevice(2), NewDevice(3), NewDevice(4), NewDevice(5), NewDevice(6), NewDevice(7), }, DriverVersion: "550.54.15", NvmlVersion: "12.550.54.15", CudaDriverVersion: 12040, } server.setMockFuncs() return server } func NewDevice(index int) *Device { device := &Device{ UUID: "GPU-" + uuid.New().String(), Name: "Mock NVIDIA A100-SXM4-40GB", Brand: nvml.BRAND_NVIDIA, Architecture: nvml.DEVICE_ARCH_AMPERE, PciBusID: fmt.Sprintf("0000:%02x:00.0", index), Minor: index, Index: index, CudaComputeCapability: CudaComputeCapability{ Major: 8, Minor: 0, }, GpuInstances: make(map[*GpuInstance]struct{}), GpuInstanceCounter: 0, MemoryInfo: nvml.Memory{Total: 42949672960, Free: 0, Used: 0}, } device.setMockFuncs() return device } func NewGpuInstance(info nvml.GpuInstanceInfo) *GpuInstance { gi := &GpuInstance{ Info: info, ComputeInstances: make(map[*ComputeInstance]struct{}), ComputeInstanceCounter: 0, } gi.setMockFuncs() return gi } func NewComputeInstance(info nvml.ComputeInstanceInfo) *ComputeInstance { ci := &ComputeInstance{ Info: info, } ci.setMockFuncs() return ci } func (s *Server) setMockFuncs() { s.ExtensionsFunc = func() nvml.ExtendedInterface { return s } s.LookupSymbolFunc = func(symbol string) error { return nil } s.InitFunc = func() nvml.Return { return nvml.SUCCESS } s.ShutdownFunc = func() nvml.Return { return nvml.SUCCESS } s.SystemGetDriverVersionFunc = func() (string, nvml.Return) { return s.DriverVersion, nvml.SUCCESS } s.SystemGetNVMLVersionFunc = func() (string, nvml.Return) { return s.NvmlVersion, nvml.SUCCESS } s.SystemGetCudaDriverVersionFunc = func() (int, nvml.Return) { return s.CudaDriverVersion, nvml.SUCCESS } s.DeviceGetCountFunc = func() (int, nvml.Return) { return len(s.Devices), nvml.SUCCESS } s.DeviceGetHandleByIndexFunc = func(index int) (nvml.Device, nvml.Return) { if index < 0 || index >= len(s.Devices) { return nil, nvml.ERROR_INVALID_ARGUMENT } return s.Devices[index], nvml.SUCCESS } s.DeviceGetHandleByUUIDFunc = func(uuid string) (nvml.Device, nvml.Return) { for _, d := range s.Devices { if uuid == d.(*Device).UUID { return d, nvml.SUCCESS } } return nil, nvml.ERROR_INVALID_ARGUMENT } s.DeviceGetHandleByPciBusIdFunc = func(busID string) (nvml.Device, nvml.Return) { for _, d := range s.Devices { if busID == d.(*Device).PciBusID { return d, nvml.SUCCESS } } return nil, nvml.ERROR_INVALID_ARGUMENT } } func (d *Device) setMockFuncs() { d.GetMinorNumberFunc = func() (int, nvml.Return) { return d.Minor, nvml.SUCCESS } d.GetIndexFunc = func() (int, nvml.Return) { return d.Index, nvml.SUCCESS } d.GetCudaComputeCapabilityFunc = func() (int, int, nvml.Return) { return d.CudaComputeCapability.Major, d.CudaComputeCapability.Minor, nvml.SUCCESS } d.GetUUIDFunc = func() (string, nvml.Return) { return d.UUID, nvml.SUCCESS } d.GetNameFunc = func() (string, nvml.Return) { return d.Name, nvml.SUCCESS } d.GetBrandFunc = func() (nvml.BrandType, nvml.Return) { return d.Brand, nvml.SUCCESS } d.GetArchitectureFunc = func() (nvml.DeviceArchitecture, nvml.Return) { return d.Architecture, nvml.SUCCESS } d.GetMemoryInfoFunc = func() (nvml.Memory, nvml.Return) { return d.MemoryInfo, nvml.SUCCESS } d.GetPciInfoFunc = func() (nvml.PciInfo, nvml.Return) { p := nvml.PciInfo{ PciDeviceId: 0x20B010DE, } return p, nvml.SUCCESS } d.SetMigModeFunc = func(mode int) (nvml.Return, nvml.Return) { d.MigMode = mode return nvml.SUCCESS, nvml.SUCCESS } d.GetMigModeFunc = func() (int, int, nvml.Return) { return d.MigMode, d.MigMode, nvml.SUCCESS } d.GetGpuInstanceProfileInfoFunc = func(giProfileId int) (nvml.GpuInstanceProfileInfo, nvml.Return) { if giProfileId < 0 || giProfileId >= nvml.GPU_INSTANCE_PROFILE_COUNT { return nvml.GpuInstanceProfileInfo{}, nvml.ERROR_INVALID_ARGUMENT } if _, exists := MIGProfiles.GpuInstanceProfiles[giProfileId]; !exists { return nvml.GpuInstanceProfileInfo{}, nvml.ERROR_NOT_SUPPORTED } return MIGProfiles.GpuInstanceProfiles[giProfileId], nvml.SUCCESS } d.GetGpuInstancePossiblePlacementsFunc = func(info *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstancePlacement, nvml.Return) { return MIGPlacements.GpuInstancePossiblePlacements[int(info.Id)], nvml.SUCCESS } d.CreateGpuInstanceFunc = func(info *nvml.GpuInstanceProfileInfo) (nvml.GpuInstance, nvml.Return) { d.Lock() defer d.Unlock() giInfo := nvml.GpuInstanceInfo{ Device: d, Id: d.GpuInstanceCounter, ProfileId: info.Id, } d.GpuInstanceCounter++ gi := NewGpuInstance(giInfo) d.GpuInstances[gi] = struct{}{} return gi, nvml.SUCCESS } d.CreateGpuInstanceWithPlacementFunc = func(info *nvml.GpuInstanceProfileInfo, placement *nvml.GpuInstancePlacement) (nvml.GpuInstance, nvml.Return) { d.Lock() defer d.Unlock() giInfo := nvml.GpuInstanceInfo{ Device: d, Id: d.GpuInstanceCounter, ProfileId: info.Id, Placement: *placement, } d.GpuInstanceCounter++ gi := NewGpuInstance(giInfo) d.GpuInstances[gi] = struct{}{} return gi, nvml.SUCCESS } d.GetGpuInstancesFunc = func(info *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstance, nvml.Return) { d.RLock() defer d.RUnlock() var gis []nvml.GpuInstance for gi := range d.GpuInstances { if gi.Info.ProfileId == info.Id { gis = append(gis, gi) } } return gis, nvml.SUCCESS } } func (gi *GpuInstance) setMockFuncs() { gi.GetInfoFunc = func() (nvml.GpuInstanceInfo, nvml.Return) { return gi.Info, nvml.SUCCESS } gi.GetComputeInstanceProfileInfoFunc = func(ciProfileId int, ciEngProfileId int) (nvml.ComputeInstanceProfileInfo, nvml.Return) { if ciProfileId < 0 || ciProfileId >= nvml.COMPUTE_INSTANCE_PROFILE_COUNT { return nvml.ComputeInstanceProfileInfo{}, nvml.ERROR_INVALID_ARGUMENT } if ciEngProfileId != nvml.COMPUTE_INSTANCE_ENGINE_PROFILE_SHARED { return nvml.ComputeInstanceProfileInfo{}, nvml.ERROR_NOT_SUPPORTED } giProfileId := int(gi.Info.ProfileId) if _, exists := MIGProfiles.ComputeInstanceProfiles[giProfileId]; !exists { return nvml.ComputeInstanceProfileInfo{}, nvml.ERROR_NOT_SUPPORTED } if _, exists := MIGProfiles.ComputeInstanceProfiles[giProfileId][ciProfileId]; !exists { return nvml.ComputeInstanceProfileInfo{}, nvml.ERROR_NOT_SUPPORTED } return MIGProfiles.ComputeInstanceProfiles[giProfileId][ciProfileId], nvml.SUCCESS } gi.GetComputeInstancePossiblePlacementsFunc = func(info *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstancePlacement, nvml.Return) { return MIGPlacements.ComputeInstancePossiblePlacements[int(gi.Info.Id)][int(info.Id)], nvml.SUCCESS } gi.CreateComputeInstanceFunc = func(info *nvml.ComputeInstanceProfileInfo) (nvml.ComputeInstance, nvml.Return) { gi.Lock() defer gi.Unlock() ciInfo := nvml.ComputeInstanceInfo{ Device: gi.Info.Device, GpuInstance: gi, Id: gi.ComputeInstanceCounter, ProfileId: info.Id, } gi.ComputeInstanceCounter++ ci := NewComputeInstance(ciInfo) gi.ComputeInstances[ci] = struct{}{} return ci, nvml.SUCCESS } gi.GetComputeInstancesFunc = func(info *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstance, nvml.Return) { gi.RLock() defer gi.RUnlock() var cis []nvml.ComputeInstance for ci := range gi.ComputeInstances { if ci.Info.ProfileId == info.Id { cis = append(cis, ci) } } return cis, nvml.SUCCESS } gi.DestroyFunc = func() nvml.Return { d := gi.Info.Device.(*Device) d.Lock() defer d.Unlock() delete(d.GpuInstances, gi) return nvml.SUCCESS } } func (ci *ComputeInstance) setMockFuncs() { ci.GetInfoFunc = func() (nvml.ComputeInstanceInfo, nvml.Return) { return ci.Info, nvml.SUCCESS } ci.DestroyFunc = func() nvml.Return { gi := ci.Info.GpuInstance.(*GpuInstance) gi.Lock() defer gi.Unlock() delete(gi.ComputeInstances, ci) return nvml.SUCCESS } } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/dgxa100/mig-profile.go000066400000000000000000000307131520540370700313470ustar00rootroot00000000000000/* * Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package dgxa100 import ( "github.com/NVIDIA/go-nvml/pkg/nvml" ) // MIGProfiles holds the profile information for GIs and CIs in this mock server. // We should consider auto-generating this object in the future. var MIGProfiles = struct { GpuInstanceProfiles map[int]nvml.GpuInstanceProfileInfo ComputeInstanceProfiles map[int]map[int]nvml.ComputeInstanceProfileInfo }{ GpuInstanceProfiles: map[int]nvml.GpuInstanceProfileInfo{ nvml.GPU_INSTANCE_PROFILE_1_SLICE: { Id: nvml.GPU_INSTANCE_PROFILE_1_SLICE, IsP2pSupported: 0, SliceCount: 1, InstanceCount: 7, MultiprocessorCount: 14, CopyEngineCount: 1, DecoderCount: 0, EncoderCount: 0, JpegCount: 0, OfaCount: 0, MemorySizeMB: 4864, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1: { Id: nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1, IsP2pSupported: 0, SliceCount: 1, InstanceCount: 1, MultiprocessorCount: 14, CopyEngineCount: 1, DecoderCount: 1, EncoderCount: 0, JpegCount: 1, OfaCount: 1, MemorySizeMB: 4864, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV2: { Id: nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV2, IsP2pSupported: 0, SliceCount: 1, InstanceCount: 4, MultiprocessorCount: 14, CopyEngineCount: 1, DecoderCount: 1, EncoderCount: 0, JpegCount: 0, OfaCount: 0, MemorySizeMB: 9856, }, nvml.GPU_INSTANCE_PROFILE_2_SLICE: { Id: nvml.GPU_INSTANCE_PROFILE_2_SLICE, IsP2pSupported: 0, SliceCount: 2, InstanceCount: 3, MultiprocessorCount: 28, CopyEngineCount: 2, DecoderCount: 1, EncoderCount: 0, JpegCount: 0, OfaCount: 0, MemorySizeMB: 9856, }, nvml.GPU_INSTANCE_PROFILE_3_SLICE: { Id: nvml.GPU_INSTANCE_PROFILE_3_SLICE, IsP2pSupported: 0, SliceCount: 3, InstanceCount: 2, MultiprocessorCount: 42, CopyEngineCount: 3, DecoderCount: 2, EncoderCount: 0, JpegCount: 0, OfaCount: 0, MemorySizeMB: 19968, }, nvml.GPU_INSTANCE_PROFILE_4_SLICE: { Id: nvml.GPU_INSTANCE_PROFILE_4_SLICE, IsP2pSupported: 0, SliceCount: 4, InstanceCount: 1, MultiprocessorCount: 56, CopyEngineCount: 4, DecoderCount: 2, EncoderCount: 0, JpegCount: 0, OfaCount: 0, MemorySizeMB: 19968, }, nvml.GPU_INSTANCE_PROFILE_7_SLICE: { Id: nvml.GPU_INSTANCE_PROFILE_7_SLICE, IsP2pSupported: 0, SliceCount: 7, InstanceCount: 1, MultiprocessorCount: 98, CopyEngineCount: 7, DecoderCount: 5, EncoderCount: 0, JpegCount: 1, OfaCount: 1, MemorySizeMB: 40192, }, }, ComputeInstanceProfiles: map[int]map[int]nvml.ComputeInstanceProfileInfo{ nvml.GPU_INSTANCE_PROFILE_1_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, SliceCount: 1, InstanceCount: 1, MultiprocessorCount: 14, SharedCopyEngineCount: 1, SharedDecoderCount: 0, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, SliceCount: 1, InstanceCount: 1, MultiprocessorCount: 14, SharedCopyEngineCount: 1, SharedDecoderCount: 1, SharedEncoderCount: 0, SharedJpegCount: 1, SharedOfaCount: 1, }, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV2: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, SliceCount: 1, InstanceCount: 1, MultiprocessorCount: 14, SharedCopyEngineCount: 1, SharedDecoderCount: 1, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, }, nvml.GPU_INSTANCE_PROFILE_2_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, SliceCount: 1, InstanceCount: 2, MultiprocessorCount: 14, SharedCopyEngineCount: 2, SharedDecoderCount: 1, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE, SliceCount: 2, InstanceCount: 1, MultiprocessorCount: 28, SharedCopyEngineCount: 2, SharedDecoderCount: 1, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, }, nvml.GPU_INSTANCE_PROFILE_3_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, SliceCount: 1, InstanceCount: 3, MultiprocessorCount: 14, SharedCopyEngineCount: 3, SharedDecoderCount: 2, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE, SliceCount: 2, InstanceCount: 1, MultiprocessorCount: 28, SharedCopyEngineCount: 3, SharedDecoderCount: 2, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, nvml.COMPUTE_INSTANCE_PROFILE_3_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_3_SLICE, SliceCount: 3, InstanceCount: 1, MultiprocessorCount: 42, SharedCopyEngineCount: 3, SharedDecoderCount: 2, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, }, nvml.GPU_INSTANCE_PROFILE_4_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, SliceCount: 1, InstanceCount: 4, MultiprocessorCount: 14, SharedCopyEngineCount: 4, SharedDecoderCount: 2, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE, SliceCount: 2, InstanceCount: 2, MultiprocessorCount: 28, SharedCopyEngineCount: 4, SharedDecoderCount: 2, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, nvml.COMPUTE_INSTANCE_PROFILE_4_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_4_SLICE, SliceCount: 4, InstanceCount: 1, MultiprocessorCount: 56, SharedCopyEngineCount: 4, SharedDecoderCount: 2, SharedEncoderCount: 0, SharedJpegCount: 0, SharedOfaCount: 0, }, }, nvml.GPU_INSTANCE_PROFILE_7_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE, SliceCount: 1, InstanceCount: 7, MultiprocessorCount: 14, SharedCopyEngineCount: 7, SharedDecoderCount: 5, SharedEncoderCount: 0, SharedJpegCount: 1, SharedOfaCount: 1, }, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE, SliceCount: 2, InstanceCount: 3, MultiprocessorCount: 28, SharedCopyEngineCount: 7, SharedDecoderCount: 5, SharedEncoderCount: 0, SharedJpegCount: 1, SharedOfaCount: 1, }, nvml.COMPUTE_INSTANCE_PROFILE_3_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_3_SLICE, SliceCount: 3, InstanceCount: 2, MultiprocessorCount: 42, SharedCopyEngineCount: 7, SharedDecoderCount: 5, SharedEncoderCount: 0, SharedJpegCount: 1, SharedOfaCount: 1, }, nvml.COMPUTE_INSTANCE_PROFILE_4_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_4_SLICE, SliceCount: 4, InstanceCount: 1, MultiprocessorCount: 56, SharedCopyEngineCount: 7, SharedDecoderCount: 5, SharedEncoderCount: 0, SharedJpegCount: 1, SharedOfaCount: 1, }, nvml.COMPUTE_INSTANCE_PROFILE_7_SLICE: { Id: nvml.COMPUTE_INSTANCE_PROFILE_7_SLICE, SliceCount: 7, InstanceCount: 1, MultiprocessorCount: 98, SharedCopyEngineCount: 7, SharedDecoderCount: 5, SharedEncoderCount: 0, SharedJpegCount: 1, SharedOfaCount: 1, }, }, }, } // MIGPlacements holds the placement information for GIs and CIs in this mock server. // We should consider auto-generating this object in the future. var MIGPlacements = struct { GpuInstancePossiblePlacements map[int][]nvml.GpuInstancePlacement ComputeInstancePossiblePlacements map[int]map[int][]nvml.ComputeInstancePlacement }{ GpuInstancePossiblePlacements: map[int][]nvml.GpuInstancePlacement{ nvml.GPU_INSTANCE_PROFILE_1_SLICE: { { Start: 0, Size: 1, }, { Start: 1, Size: 1, }, { Start: 2, Size: 1, }, { Start: 3, Size: 1, }, { Start: 4, Size: 1, }, { Start: 5, Size: 1, }, { Start: 6, Size: 1, }, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1: { { Start: 0, Size: 1, }, { Start: 1, Size: 1, }, { Start: 2, Size: 1, }, { Start: 3, Size: 1, }, { Start: 4, Size: 1, }, { Start: 5, Size: 1, }, { Start: 6, Size: 1, }, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV2: { { Start: 0, Size: 2, }, { Start: 2, Size: 2, }, { Start: 4, Size: 2, }, { Start: 6, Size: 2, }, }, nvml.GPU_INSTANCE_PROFILE_2_SLICE: { { Start: 0, Size: 2, }, { Start: 2, Size: 2, }, { Start: 4, Size: 2, }, }, nvml.GPU_INSTANCE_PROFILE_3_SLICE: { { Start: 0, Size: 4, }, { Start: 4, Size: 4, }, }, nvml.GPU_INSTANCE_PROFILE_4_SLICE: { { Start: 0, Size: 4, }, }, nvml.GPU_INSTANCE_PROFILE_7_SLICE: { { Start: 0, Size: 8, }, }, }, // TODO: Fill out ComputeInstancePossiblePlacements ComputeInstancePossiblePlacements: map[int]map[int][]nvml.ComputeInstancePlacement{ nvml.GPU_INSTANCE_PROFILE_1_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: {}, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV1: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: {}, }, nvml.GPU_INSTANCE_PROFILE_1_SLICE_REV2: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: {}, }, nvml.GPU_INSTANCE_PROFILE_2_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: {}, }, nvml.GPU_INSTANCE_PROFILE_3_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_3_SLICE: {}, }, nvml.GPU_INSTANCE_PROFILE_4_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_4_SLICE: {}, }, nvml.GPU_INSTANCE_PROFILE_7_SLICE: { nvml.COMPUTE_INSTANCE_PROFILE_1_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_2_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_3_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_4_SLICE: {}, nvml.COMPUTE_INSTANCE_PROFILE_7_SLICE: {}, }, }, } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/eventset.go000066400000000000000000000050131520540370700276210ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that EventSet does implement nvml.EventSet. // If this is not the case, regenerate this file with moq. var _ nvml.EventSet = &EventSet{} // EventSet is a mock implementation of nvml.EventSet. // // func TestSomethingThatUsesEventSet(t *testing.T) { // // // make and configure a mocked nvml.EventSet // mockedEventSet := &EventSet{ // FreeFunc: func() nvml.Return { // panic("mock out the Free method") // }, // WaitFunc: func(v uint32) (nvml.EventData, nvml.Return) { // panic("mock out the Wait method") // }, // } // // // use mockedEventSet in code that requires nvml.EventSet // // and then make assertions. // // } type EventSet struct { // FreeFunc mocks the Free method. FreeFunc func() nvml.Return // WaitFunc mocks the Wait method. WaitFunc func(v uint32) (nvml.EventData, nvml.Return) // calls tracks calls to the methods. calls struct { // Free holds details about calls to the Free method. Free []struct { } // Wait holds details about calls to the Wait method. Wait []struct { // V is the v argument value. V uint32 } } lockFree sync.RWMutex lockWait sync.RWMutex } // Free calls FreeFunc. func (mock *EventSet) Free() nvml.Return { if mock.FreeFunc == nil { panic("EventSet.FreeFunc: method is nil but EventSet.Free was just called") } callInfo := struct { }{} mock.lockFree.Lock() mock.calls.Free = append(mock.calls.Free, callInfo) mock.lockFree.Unlock() return mock.FreeFunc() } // FreeCalls gets all the calls that were made to Free. // Check the length with: // // len(mockedEventSet.FreeCalls()) func (mock *EventSet) FreeCalls() []struct { } { var calls []struct { } mock.lockFree.RLock() calls = mock.calls.Free mock.lockFree.RUnlock() return calls } // Wait calls WaitFunc. func (mock *EventSet) Wait(v uint32) (nvml.EventData, nvml.Return) { if mock.WaitFunc == nil { panic("EventSet.WaitFunc: method is nil but EventSet.Wait was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockWait.Lock() mock.calls.Wait = append(mock.calls.Wait, callInfo) mock.lockWait.Unlock() return mock.WaitFunc(v) } // WaitCalls gets all the calls that were made to Wait. // Check the length with: // // len(mockedEventSet.WaitCalls()) func (mock *EventSet) WaitCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockWait.RLock() calls = mock.calls.Wait mock.lockWait.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/extendedinterface.go000066400000000000000000000037361520540370700314570ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that ExtendedInterface does implement nvml.ExtendedInterface. // If this is not the case, regenerate this file with moq. var _ nvml.ExtendedInterface = &ExtendedInterface{} // ExtendedInterface is a mock implementation of nvml.ExtendedInterface. // // func TestSomethingThatUsesExtendedInterface(t *testing.T) { // // // make and configure a mocked nvml.ExtendedInterface // mockedExtendedInterface := &ExtendedInterface{ // LookupSymbolFunc: func(s string) error { // panic("mock out the LookupSymbol method") // }, // } // // // use mockedExtendedInterface in code that requires nvml.ExtendedInterface // // and then make assertions. // // } type ExtendedInterface struct { // LookupSymbolFunc mocks the LookupSymbol method. LookupSymbolFunc func(s string) error // calls tracks calls to the methods. calls struct { // LookupSymbol holds details about calls to the LookupSymbol method. LookupSymbol []struct { // S is the s argument value. S string } } lockLookupSymbol sync.RWMutex } // LookupSymbol calls LookupSymbolFunc. func (mock *ExtendedInterface) LookupSymbol(s string) error { if mock.LookupSymbolFunc == nil { panic("ExtendedInterface.LookupSymbolFunc: method is nil but ExtendedInterface.LookupSymbol was just called") } callInfo := struct { S string }{ S: s, } mock.lockLookupSymbol.Lock() mock.calls.LookupSymbol = append(mock.calls.LookupSymbol, callInfo) mock.lockLookupSymbol.Unlock() return mock.LookupSymbolFunc(s) } // LookupSymbolCalls gets all the calls that were made to LookupSymbol. // Check the length with: // // len(mockedExtendedInterface.LookupSymbolCalls()) func (mock *ExtendedInterface) LookupSymbolCalls() []struct { S string } { var calls []struct { S string } mock.lockLookupSymbol.RLock() calls = mock.calls.LookupSymbol mock.lockLookupSymbol.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/gpmsample.go000066400000000000000000000074231520540370700277600ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that GpmSample does implement nvml.GpmSample. // If this is not the case, regenerate this file with moq. var _ nvml.GpmSample = &GpmSample{} // GpmSample is a mock implementation of nvml.GpmSample. // // func TestSomethingThatUsesGpmSample(t *testing.T) { // // // make and configure a mocked nvml.GpmSample // mockedGpmSample := &GpmSample{ // FreeFunc: func() nvml.Return { // panic("mock out the Free method") // }, // GetFunc: func(device nvml.Device) nvml.Return { // panic("mock out the Get method") // }, // MigGetFunc: func(device nvml.Device, n int) nvml.Return { // panic("mock out the MigGet method") // }, // } // // // use mockedGpmSample in code that requires nvml.GpmSample // // and then make assertions. // // } type GpmSample struct { // FreeFunc mocks the Free method. FreeFunc func() nvml.Return // GetFunc mocks the Get method. GetFunc func(device nvml.Device) nvml.Return // MigGetFunc mocks the MigGet method. MigGetFunc func(device nvml.Device, n int) nvml.Return // calls tracks calls to the methods. calls struct { // Free holds details about calls to the Free method. Free []struct { } // Get holds details about calls to the Get method. Get []struct { // Device is the device argument value. Device nvml.Device } // MigGet holds details about calls to the MigGet method. MigGet []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } } lockFree sync.RWMutex lockGet sync.RWMutex lockMigGet sync.RWMutex } // Free calls FreeFunc. func (mock *GpmSample) Free() nvml.Return { if mock.FreeFunc == nil { panic("GpmSample.FreeFunc: method is nil but GpmSample.Free was just called") } callInfo := struct { }{} mock.lockFree.Lock() mock.calls.Free = append(mock.calls.Free, callInfo) mock.lockFree.Unlock() return mock.FreeFunc() } // FreeCalls gets all the calls that were made to Free. // Check the length with: // // len(mockedGpmSample.FreeCalls()) func (mock *GpmSample) FreeCalls() []struct { } { var calls []struct { } mock.lockFree.RLock() calls = mock.calls.Free mock.lockFree.RUnlock() return calls } // Get calls GetFunc. func (mock *GpmSample) Get(device nvml.Device) nvml.Return { if mock.GetFunc == nil { panic("GpmSample.GetFunc: method is nil but GpmSample.Get was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGet.Lock() mock.calls.Get = append(mock.calls.Get, callInfo) mock.lockGet.Unlock() return mock.GetFunc(device) } // GetCalls gets all the calls that were made to Get. // Check the length with: // // len(mockedGpmSample.GetCalls()) func (mock *GpmSample) GetCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGet.RLock() calls = mock.calls.Get mock.lockGet.RUnlock() return calls } // MigGet calls MigGetFunc. func (mock *GpmSample) MigGet(device nvml.Device, n int) nvml.Return { if mock.MigGetFunc == nil { panic("GpmSample.MigGetFunc: method is nil but GpmSample.MigGet was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockMigGet.Lock() mock.calls.MigGet = append(mock.calls.MigGet, callInfo) mock.lockMigGet.Unlock() return mock.MigGetFunc(device, n) } // MigGetCalls gets all the calls that were made to MigGet. // Check the length with: // // len(mockedGpmSample.MigGetCalls()) func (mock *GpmSample) MigGetCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockMigGet.RLock() calls = mock.calls.MigGet mock.lockMigGet.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/gpuinstance.go000066400000000000000000000765411520540370700303220ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that GpuInstance does implement nvml.GpuInstance. // If this is not the case, regenerate this file with moq. var _ nvml.GpuInstance = &GpuInstance{} // GpuInstance is a mock implementation of nvml.GpuInstance. // // func TestSomethingThatUsesGpuInstance(t *testing.T) { // // // make and configure a mocked nvml.GpuInstance // mockedGpuInstance := &GpuInstance{ // CreateComputeInstanceFunc: func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (nvml.ComputeInstance, nvml.Return) { // panic("mock out the CreateComputeInstance method") // }, // CreateComputeInstanceWithPlacementFunc: func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo, computeInstancePlacement *nvml.ComputeInstancePlacement) (nvml.ComputeInstance, nvml.Return) { // panic("mock out the CreateComputeInstanceWithPlacement method") // }, // DestroyFunc: func() nvml.Return { // panic("mock out the Destroy method") // }, // GetActiveVgpusFunc: func() (nvml.ActiveVgpuInstanceInfo, nvml.Return) { // panic("mock out the GetActiveVgpus method") // }, // GetComputeInstanceByIdFunc: func(n int) (nvml.ComputeInstance, nvml.Return) { // panic("mock out the GetComputeInstanceById method") // }, // GetComputeInstancePossiblePlacementsFunc: func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstancePlacement, nvml.Return) { // panic("mock out the GetComputeInstancePossiblePlacements method") // }, // GetComputeInstanceProfileInfoFunc: func(n1 int, n2 int) (nvml.ComputeInstanceProfileInfo, nvml.Return) { // panic("mock out the GetComputeInstanceProfileInfo method") // }, // GetComputeInstanceProfileInfoVFunc: func(n1 int, n2 int) nvml.ComputeInstanceProfileInfoHandler { // panic("mock out the GetComputeInstanceProfileInfoV method") // }, // GetComputeInstanceRemainingCapacityFunc: func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (int, nvml.Return) { // panic("mock out the GetComputeInstanceRemainingCapacity method") // }, // GetComputeInstancesFunc: func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstance, nvml.Return) { // panic("mock out the GetComputeInstances method") // }, // GetCreatableVgpusFunc: func() (nvml.VgpuTypeIdInfo, nvml.Return) { // panic("mock out the GetCreatableVgpus method") // }, // GetInfoFunc: func() (nvml.GpuInstanceInfo, nvml.Return) { // panic("mock out the GetInfo method") // }, // GetVgpuHeterogeneousModeFunc: func() (nvml.VgpuHeterogeneousMode, nvml.Return) { // panic("mock out the GetVgpuHeterogeneousMode method") // }, // GetVgpuSchedulerLogFunc: func() (nvml.VgpuSchedulerLogInfo, nvml.Return) { // panic("mock out the GetVgpuSchedulerLog method") // }, // GetVgpuSchedulerStateFunc: func() (nvml.VgpuSchedulerStateInfo, nvml.Return) { // panic("mock out the GetVgpuSchedulerState method") // }, // GetVgpuTypeCreatablePlacementsFunc: func() (nvml.VgpuCreatablePlacementInfo, nvml.Return) { // panic("mock out the GetVgpuTypeCreatablePlacements method") // }, // SetVgpuHeterogeneousModeFunc: func(vgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode) nvml.Return { // panic("mock out the SetVgpuHeterogeneousMode method") // }, // SetVgpuSchedulerStateFunc: func(vgpuSchedulerState *nvml.VgpuSchedulerState) nvml.Return { // panic("mock out the SetVgpuSchedulerState method") // }, // } // // // use mockedGpuInstance in code that requires nvml.GpuInstance // // and then make assertions. // // } type GpuInstance struct { // CreateComputeInstanceFunc mocks the CreateComputeInstance method. CreateComputeInstanceFunc func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (nvml.ComputeInstance, nvml.Return) // CreateComputeInstanceWithPlacementFunc mocks the CreateComputeInstanceWithPlacement method. CreateComputeInstanceWithPlacementFunc func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo, computeInstancePlacement *nvml.ComputeInstancePlacement) (nvml.ComputeInstance, nvml.Return) // DestroyFunc mocks the Destroy method. DestroyFunc func() nvml.Return // GetActiveVgpusFunc mocks the GetActiveVgpus method. GetActiveVgpusFunc func() (nvml.ActiveVgpuInstanceInfo, nvml.Return) // GetComputeInstanceByIdFunc mocks the GetComputeInstanceById method. GetComputeInstanceByIdFunc func(n int) (nvml.ComputeInstance, nvml.Return) // GetComputeInstancePossiblePlacementsFunc mocks the GetComputeInstancePossiblePlacements method. GetComputeInstancePossiblePlacementsFunc func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstancePlacement, nvml.Return) // GetComputeInstanceProfileInfoFunc mocks the GetComputeInstanceProfileInfo method. GetComputeInstanceProfileInfoFunc func(n1 int, n2 int) (nvml.ComputeInstanceProfileInfo, nvml.Return) // GetComputeInstanceProfileInfoVFunc mocks the GetComputeInstanceProfileInfoV method. GetComputeInstanceProfileInfoVFunc func(n1 int, n2 int) nvml.ComputeInstanceProfileInfoHandler // GetComputeInstanceRemainingCapacityFunc mocks the GetComputeInstanceRemainingCapacity method. GetComputeInstanceRemainingCapacityFunc func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (int, nvml.Return) // GetComputeInstancesFunc mocks the GetComputeInstances method. GetComputeInstancesFunc func(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstance, nvml.Return) // GetCreatableVgpusFunc mocks the GetCreatableVgpus method. GetCreatableVgpusFunc func() (nvml.VgpuTypeIdInfo, nvml.Return) // GetInfoFunc mocks the GetInfo method. GetInfoFunc func() (nvml.GpuInstanceInfo, nvml.Return) // GetVgpuHeterogeneousModeFunc mocks the GetVgpuHeterogeneousMode method. GetVgpuHeterogeneousModeFunc func() (nvml.VgpuHeterogeneousMode, nvml.Return) // GetVgpuSchedulerLogFunc mocks the GetVgpuSchedulerLog method. GetVgpuSchedulerLogFunc func() (nvml.VgpuSchedulerLogInfo, nvml.Return) // GetVgpuSchedulerStateFunc mocks the GetVgpuSchedulerState method. GetVgpuSchedulerStateFunc func() (nvml.VgpuSchedulerStateInfo, nvml.Return) // GetVgpuTypeCreatablePlacementsFunc mocks the GetVgpuTypeCreatablePlacements method. GetVgpuTypeCreatablePlacementsFunc func() (nvml.VgpuCreatablePlacementInfo, nvml.Return) // SetVgpuHeterogeneousModeFunc mocks the SetVgpuHeterogeneousMode method. SetVgpuHeterogeneousModeFunc func(vgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode) nvml.Return // SetVgpuSchedulerStateFunc mocks the SetVgpuSchedulerState method. SetVgpuSchedulerStateFunc func(vgpuSchedulerState *nvml.VgpuSchedulerState) nvml.Return // calls tracks calls to the methods. calls struct { // CreateComputeInstance holds details about calls to the CreateComputeInstance method. CreateComputeInstance []struct { // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // CreateComputeInstanceWithPlacement holds details about calls to the CreateComputeInstanceWithPlacement method. CreateComputeInstanceWithPlacement []struct { // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo // ComputeInstancePlacement is the computeInstancePlacement argument value. ComputeInstancePlacement *nvml.ComputeInstancePlacement } // Destroy holds details about calls to the Destroy method. Destroy []struct { } // GetActiveVgpus holds details about calls to the GetActiveVgpus method. GetActiveVgpus []struct { } // GetComputeInstanceById holds details about calls to the GetComputeInstanceById method. GetComputeInstanceById []struct { // N is the n argument value. N int } // GetComputeInstancePossiblePlacements holds details about calls to the GetComputeInstancePossiblePlacements method. GetComputeInstancePossiblePlacements []struct { // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // GetComputeInstanceProfileInfo holds details about calls to the GetComputeInstanceProfileInfo method. GetComputeInstanceProfileInfo []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // GetComputeInstanceProfileInfoV holds details about calls to the GetComputeInstanceProfileInfoV method. GetComputeInstanceProfileInfoV []struct { // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // GetComputeInstanceRemainingCapacity holds details about calls to the GetComputeInstanceRemainingCapacity method. GetComputeInstanceRemainingCapacity []struct { // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // GetComputeInstances holds details about calls to the GetComputeInstances method. GetComputeInstances []struct { // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // GetCreatableVgpus holds details about calls to the GetCreatableVgpus method. GetCreatableVgpus []struct { } // GetInfo holds details about calls to the GetInfo method. GetInfo []struct { } // GetVgpuHeterogeneousMode holds details about calls to the GetVgpuHeterogeneousMode method. GetVgpuHeterogeneousMode []struct { } // GetVgpuSchedulerLog holds details about calls to the GetVgpuSchedulerLog method. GetVgpuSchedulerLog []struct { } // GetVgpuSchedulerState holds details about calls to the GetVgpuSchedulerState method. GetVgpuSchedulerState []struct { } // GetVgpuTypeCreatablePlacements holds details about calls to the GetVgpuTypeCreatablePlacements method. GetVgpuTypeCreatablePlacements []struct { } // SetVgpuHeterogeneousMode holds details about calls to the SetVgpuHeterogeneousMode method. SetVgpuHeterogeneousMode []struct { // VgpuHeterogeneousMode is the vgpuHeterogeneousMode argument value. VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode } // SetVgpuSchedulerState holds details about calls to the SetVgpuSchedulerState method. SetVgpuSchedulerState []struct { // VgpuSchedulerState is the vgpuSchedulerState argument value. VgpuSchedulerState *nvml.VgpuSchedulerState } } lockCreateComputeInstance sync.RWMutex lockCreateComputeInstanceWithPlacement sync.RWMutex lockDestroy sync.RWMutex lockGetActiveVgpus sync.RWMutex lockGetComputeInstanceById sync.RWMutex lockGetComputeInstancePossiblePlacements sync.RWMutex lockGetComputeInstanceProfileInfo sync.RWMutex lockGetComputeInstanceProfileInfoV sync.RWMutex lockGetComputeInstanceRemainingCapacity sync.RWMutex lockGetComputeInstances sync.RWMutex lockGetCreatableVgpus sync.RWMutex lockGetInfo sync.RWMutex lockGetVgpuHeterogeneousMode sync.RWMutex lockGetVgpuSchedulerLog sync.RWMutex lockGetVgpuSchedulerState sync.RWMutex lockGetVgpuTypeCreatablePlacements sync.RWMutex lockSetVgpuHeterogeneousMode sync.RWMutex lockSetVgpuSchedulerState sync.RWMutex } // CreateComputeInstance calls CreateComputeInstanceFunc. func (mock *GpuInstance) CreateComputeInstance(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (nvml.ComputeInstance, nvml.Return) { if mock.CreateComputeInstanceFunc == nil { panic("GpuInstance.CreateComputeInstanceFunc: method is nil but GpuInstance.CreateComputeInstance was just called") } callInfo := struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockCreateComputeInstance.Lock() mock.calls.CreateComputeInstance = append(mock.calls.CreateComputeInstance, callInfo) mock.lockCreateComputeInstance.Unlock() return mock.CreateComputeInstanceFunc(computeInstanceProfileInfo) } // CreateComputeInstanceCalls gets all the calls that were made to CreateComputeInstance. // Check the length with: // // len(mockedGpuInstance.CreateComputeInstanceCalls()) func (mock *GpuInstance) CreateComputeInstanceCalls() []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockCreateComputeInstance.RLock() calls = mock.calls.CreateComputeInstance mock.lockCreateComputeInstance.RUnlock() return calls } // CreateComputeInstanceWithPlacement calls CreateComputeInstanceWithPlacementFunc. func (mock *GpuInstance) CreateComputeInstanceWithPlacement(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo, computeInstancePlacement *nvml.ComputeInstancePlacement) (nvml.ComputeInstance, nvml.Return) { if mock.CreateComputeInstanceWithPlacementFunc == nil { panic("GpuInstance.CreateComputeInstanceWithPlacementFunc: method is nil but GpuInstance.CreateComputeInstanceWithPlacement was just called") } callInfo := struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo ComputeInstancePlacement *nvml.ComputeInstancePlacement }{ ComputeInstanceProfileInfo: computeInstanceProfileInfo, ComputeInstancePlacement: computeInstancePlacement, } mock.lockCreateComputeInstanceWithPlacement.Lock() mock.calls.CreateComputeInstanceWithPlacement = append(mock.calls.CreateComputeInstanceWithPlacement, callInfo) mock.lockCreateComputeInstanceWithPlacement.Unlock() return mock.CreateComputeInstanceWithPlacementFunc(computeInstanceProfileInfo, computeInstancePlacement) } // CreateComputeInstanceWithPlacementCalls gets all the calls that were made to CreateComputeInstanceWithPlacement. // Check the length with: // // len(mockedGpuInstance.CreateComputeInstanceWithPlacementCalls()) func (mock *GpuInstance) CreateComputeInstanceWithPlacementCalls() []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo ComputeInstancePlacement *nvml.ComputeInstancePlacement } { var calls []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo ComputeInstancePlacement *nvml.ComputeInstancePlacement } mock.lockCreateComputeInstanceWithPlacement.RLock() calls = mock.calls.CreateComputeInstanceWithPlacement mock.lockCreateComputeInstanceWithPlacement.RUnlock() return calls } // Destroy calls DestroyFunc. func (mock *GpuInstance) Destroy() nvml.Return { if mock.DestroyFunc == nil { panic("GpuInstance.DestroyFunc: method is nil but GpuInstance.Destroy was just called") } callInfo := struct { }{} mock.lockDestroy.Lock() mock.calls.Destroy = append(mock.calls.Destroy, callInfo) mock.lockDestroy.Unlock() return mock.DestroyFunc() } // DestroyCalls gets all the calls that were made to Destroy. // Check the length with: // // len(mockedGpuInstance.DestroyCalls()) func (mock *GpuInstance) DestroyCalls() []struct { } { var calls []struct { } mock.lockDestroy.RLock() calls = mock.calls.Destroy mock.lockDestroy.RUnlock() return calls } // GetActiveVgpus calls GetActiveVgpusFunc. func (mock *GpuInstance) GetActiveVgpus() (nvml.ActiveVgpuInstanceInfo, nvml.Return) { if mock.GetActiveVgpusFunc == nil { panic("GpuInstance.GetActiveVgpusFunc: method is nil but GpuInstance.GetActiveVgpus was just called") } callInfo := struct { }{} mock.lockGetActiveVgpus.Lock() mock.calls.GetActiveVgpus = append(mock.calls.GetActiveVgpus, callInfo) mock.lockGetActiveVgpus.Unlock() return mock.GetActiveVgpusFunc() } // GetActiveVgpusCalls gets all the calls that were made to GetActiveVgpus. // Check the length with: // // len(mockedGpuInstance.GetActiveVgpusCalls()) func (mock *GpuInstance) GetActiveVgpusCalls() []struct { } { var calls []struct { } mock.lockGetActiveVgpus.RLock() calls = mock.calls.GetActiveVgpus mock.lockGetActiveVgpus.RUnlock() return calls } // GetComputeInstanceById calls GetComputeInstanceByIdFunc. func (mock *GpuInstance) GetComputeInstanceById(n int) (nvml.ComputeInstance, nvml.Return) { if mock.GetComputeInstanceByIdFunc == nil { panic("GpuInstance.GetComputeInstanceByIdFunc: method is nil but GpuInstance.GetComputeInstanceById was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetComputeInstanceById.Lock() mock.calls.GetComputeInstanceById = append(mock.calls.GetComputeInstanceById, callInfo) mock.lockGetComputeInstanceById.Unlock() return mock.GetComputeInstanceByIdFunc(n) } // GetComputeInstanceByIdCalls gets all the calls that were made to GetComputeInstanceById. // Check the length with: // // len(mockedGpuInstance.GetComputeInstanceByIdCalls()) func (mock *GpuInstance) GetComputeInstanceByIdCalls() []struct { N int } { var calls []struct { N int } mock.lockGetComputeInstanceById.RLock() calls = mock.calls.GetComputeInstanceById mock.lockGetComputeInstanceById.RUnlock() return calls } // GetComputeInstancePossiblePlacements calls GetComputeInstancePossiblePlacementsFunc. func (mock *GpuInstance) GetComputeInstancePossiblePlacements(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstancePlacement, nvml.Return) { if mock.GetComputeInstancePossiblePlacementsFunc == nil { panic("GpuInstance.GetComputeInstancePossiblePlacementsFunc: method is nil but GpuInstance.GetComputeInstancePossiblePlacements was just called") } callInfo := struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockGetComputeInstancePossiblePlacements.Lock() mock.calls.GetComputeInstancePossiblePlacements = append(mock.calls.GetComputeInstancePossiblePlacements, callInfo) mock.lockGetComputeInstancePossiblePlacements.Unlock() return mock.GetComputeInstancePossiblePlacementsFunc(computeInstanceProfileInfo) } // GetComputeInstancePossiblePlacementsCalls gets all the calls that were made to GetComputeInstancePossiblePlacements. // Check the length with: // // len(mockedGpuInstance.GetComputeInstancePossiblePlacementsCalls()) func (mock *GpuInstance) GetComputeInstancePossiblePlacementsCalls() []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockGetComputeInstancePossiblePlacements.RLock() calls = mock.calls.GetComputeInstancePossiblePlacements mock.lockGetComputeInstancePossiblePlacements.RUnlock() return calls } // GetComputeInstanceProfileInfo calls GetComputeInstanceProfileInfoFunc. func (mock *GpuInstance) GetComputeInstanceProfileInfo(n1 int, n2 int) (nvml.ComputeInstanceProfileInfo, nvml.Return) { if mock.GetComputeInstanceProfileInfoFunc == nil { panic("GpuInstance.GetComputeInstanceProfileInfoFunc: method is nil but GpuInstance.GetComputeInstanceProfileInfo was just called") } callInfo := struct { N1 int N2 int }{ N1: n1, N2: n2, } mock.lockGetComputeInstanceProfileInfo.Lock() mock.calls.GetComputeInstanceProfileInfo = append(mock.calls.GetComputeInstanceProfileInfo, callInfo) mock.lockGetComputeInstanceProfileInfo.Unlock() return mock.GetComputeInstanceProfileInfoFunc(n1, n2) } // GetComputeInstanceProfileInfoCalls gets all the calls that were made to GetComputeInstanceProfileInfo. // Check the length with: // // len(mockedGpuInstance.GetComputeInstanceProfileInfoCalls()) func (mock *GpuInstance) GetComputeInstanceProfileInfoCalls() []struct { N1 int N2 int } { var calls []struct { N1 int N2 int } mock.lockGetComputeInstanceProfileInfo.RLock() calls = mock.calls.GetComputeInstanceProfileInfo mock.lockGetComputeInstanceProfileInfo.RUnlock() return calls } // GetComputeInstanceProfileInfoV calls GetComputeInstanceProfileInfoVFunc. func (mock *GpuInstance) GetComputeInstanceProfileInfoV(n1 int, n2 int) nvml.ComputeInstanceProfileInfoHandler { if mock.GetComputeInstanceProfileInfoVFunc == nil { panic("GpuInstance.GetComputeInstanceProfileInfoVFunc: method is nil but GpuInstance.GetComputeInstanceProfileInfoV was just called") } callInfo := struct { N1 int N2 int }{ N1: n1, N2: n2, } mock.lockGetComputeInstanceProfileInfoV.Lock() mock.calls.GetComputeInstanceProfileInfoV = append(mock.calls.GetComputeInstanceProfileInfoV, callInfo) mock.lockGetComputeInstanceProfileInfoV.Unlock() return mock.GetComputeInstanceProfileInfoVFunc(n1, n2) } // GetComputeInstanceProfileInfoVCalls gets all the calls that were made to GetComputeInstanceProfileInfoV. // Check the length with: // // len(mockedGpuInstance.GetComputeInstanceProfileInfoVCalls()) func (mock *GpuInstance) GetComputeInstanceProfileInfoVCalls() []struct { N1 int N2 int } { var calls []struct { N1 int N2 int } mock.lockGetComputeInstanceProfileInfoV.RLock() calls = mock.calls.GetComputeInstanceProfileInfoV mock.lockGetComputeInstanceProfileInfoV.RUnlock() return calls } // GetComputeInstanceRemainingCapacity calls GetComputeInstanceRemainingCapacityFunc. func (mock *GpuInstance) GetComputeInstanceRemainingCapacity(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (int, nvml.Return) { if mock.GetComputeInstanceRemainingCapacityFunc == nil { panic("GpuInstance.GetComputeInstanceRemainingCapacityFunc: method is nil but GpuInstance.GetComputeInstanceRemainingCapacity was just called") } callInfo := struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockGetComputeInstanceRemainingCapacity.Lock() mock.calls.GetComputeInstanceRemainingCapacity = append(mock.calls.GetComputeInstanceRemainingCapacity, callInfo) mock.lockGetComputeInstanceRemainingCapacity.Unlock() return mock.GetComputeInstanceRemainingCapacityFunc(computeInstanceProfileInfo) } // GetComputeInstanceRemainingCapacityCalls gets all the calls that were made to GetComputeInstanceRemainingCapacity. // Check the length with: // // len(mockedGpuInstance.GetComputeInstanceRemainingCapacityCalls()) func (mock *GpuInstance) GetComputeInstanceRemainingCapacityCalls() []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockGetComputeInstanceRemainingCapacity.RLock() calls = mock.calls.GetComputeInstanceRemainingCapacity mock.lockGetComputeInstanceRemainingCapacity.RUnlock() return calls } // GetComputeInstances calls GetComputeInstancesFunc. func (mock *GpuInstance) GetComputeInstances(computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstance, nvml.Return) { if mock.GetComputeInstancesFunc == nil { panic("GpuInstance.GetComputeInstancesFunc: method is nil but GpuInstance.GetComputeInstances was just called") } callInfo := struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockGetComputeInstances.Lock() mock.calls.GetComputeInstances = append(mock.calls.GetComputeInstances, callInfo) mock.lockGetComputeInstances.Unlock() return mock.GetComputeInstancesFunc(computeInstanceProfileInfo) } // GetComputeInstancesCalls gets all the calls that were made to GetComputeInstances. // Check the length with: // // len(mockedGpuInstance.GetComputeInstancesCalls()) func (mock *GpuInstance) GetComputeInstancesCalls() []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockGetComputeInstances.RLock() calls = mock.calls.GetComputeInstances mock.lockGetComputeInstances.RUnlock() return calls } // GetCreatableVgpus calls GetCreatableVgpusFunc. func (mock *GpuInstance) GetCreatableVgpus() (nvml.VgpuTypeIdInfo, nvml.Return) { if mock.GetCreatableVgpusFunc == nil { panic("GpuInstance.GetCreatableVgpusFunc: method is nil but GpuInstance.GetCreatableVgpus was just called") } callInfo := struct { }{} mock.lockGetCreatableVgpus.Lock() mock.calls.GetCreatableVgpus = append(mock.calls.GetCreatableVgpus, callInfo) mock.lockGetCreatableVgpus.Unlock() return mock.GetCreatableVgpusFunc() } // GetCreatableVgpusCalls gets all the calls that were made to GetCreatableVgpus. // Check the length with: // // len(mockedGpuInstance.GetCreatableVgpusCalls()) func (mock *GpuInstance) GetCreatableVgpusCalls() []struct { } { var calls []struct { } mock.lockGetCreatableVgpus.RLock() calls = mock.calls.GetCreatableVgpus mock.lockGetCreatableVgpus.RUnlock() return calls } // GetInfo calls GetInfoFunc. func (mock *GpuInstance) GetInfo() (nvml.GpuInstanceInfo, nvml.Return) { if mock.GetInfoFunc == nil { panic("GpuInstance.GetInfoFunc: method is nil but GpuInstance.GetInfo was just called") } callInfo := struct { }{} mock.lockGetInfo.Lock() mock.calls.GetInfo = append(mock.calls.GetInfo, callInfo) mock.lockGetInfo.Unlock() return mock.GetInfoFunc() } // GetInfoCalls gets all the calls that were made to GetInfo. // Check the length with: // // len(mockedGpuInstance.GetInfoCalls()) func (mock *GpuInstance) GetInfoCalls() []struct { } { var calls []struct { } mock.lockGetInfo.RLock() calls = mock.calls.GetInfo mock.lockGetInfo.RUnlock() return calls } // GetVgpuHeterogeneousMode calls GetVgpuHeterogeneousModeFunc. func (mock *GpuInstance) GetVgpuHeterogeneousMode() (nvml.VgpuHeterogeneousMode, nvml.Return) { if mock.GetVgpuHeterogeneousModeFunc == nil { panic("GpuInstance.GetVgpuHeterogeneousModeFunc: method is nil but GpuInstance.GetVgpuHeterogeneousMode was just called") } callInfo := struct { }{} mock.lockGetVgpuHeterogeneousMode.Lock() mock.calls.GetVgpuHeterogeneousMode = append(mock.calls.GetVgpuHeterogeneousMode, callInfo) mock.lockGetVgpuHeterogeneousMode.Unlock() return mock.GetVgpuHeterogeneousModeFunc() } // GetVgpuHeterogeneousModeCalls gets all the calls that were made to GetVgpuHeterogeneousMode. // Check the length with: // // len(mockedGpuInstance.GetVgpuHeterogeneousModeCalls()) func (mock *GpuInstance) GetVgpuHeterogeneousModeCalls() []struct { } { var calls []struct { } mock.lockGetVgpuHeterogeneousMode.RLock() calls = mock.calls.GetVgpuHeterogeneousMode mock.lockGetVgpuHeterogeneousMode.RUnlock() return calls } // GetVgpuSchedulerLog calls GetVgpuSchedulerLogFunc. func (mock *GpuInstance) GetVgpuSchedulerLog() (nvml.VgpuSchedulerLogInfo, nvml.Return) { if mock.GetVgpuSchedulerLogFunc == nil { panic("GpuInstance.GetVgpuSchedulerLogFunc: method is nil but GpuInstance.GetVgpuSchedulerLog was just called") } callInfo := struct { }{} mock.lockGetVgpuSchedulerLog.Lock() mock.calls.GetVgpuSchedulerLog = append(mock.calls.GetVgpuSchedulerLog, callInfo) mock.lockGetVgpuSchedulerLog.Unlock() return mock.GetVgpuSchedulerLogFunc() } // GetVgpuSchedulerLogCalls gets all the calls that were made to GetVgpuSchedulerLog. // Check the length with: // // len(mockedGpuInstance.GetVgpuSchedulerLogCalls()) func (mock *GpuInstance) GetVgpuSchedulerLogCalls() []struct { } { var calls []struct { } mock.lockGetVgpuSchedulerLog.RLock() calls = mock.calls.GetVgpuSchedulerLog mock.lockGetVgpuSchedulerLog.RUnlock() return calls } // GetVgpuSchedulerState calls GetVgpuSchedulerStateFunc. func (mock *GpuInstance) GetVgpuSchedulerState() (nvml.VgpuSchedulerStateInfo, nvml.Return) { if mock.GetVgpuSchedulerStateFunc == nil { panic("GpuInstance.GetVgpuSchedulerStateFunc: method is nil but GpuInstance.GetVgpuSchedulerState was just called") } callInfo := struct { }{} mock.lockGetVgpuSchedulerState.Lock() mock.calls.GetVgpuSchedulerState = append(mock.calls.GetVgpuSchedulerState, callInfo) mock.lockGetVgpuSchedulerState.Unlock() return mock.GetVgpuSchedulerStateFunc() } // GetVgpuSchedulerStateCalls gets all the calls that were made to GetVgpuSchedulerState. // Check the length with: // // len(mockedGpuInstance.GetVgpuSchedulerStateCalls()) func (mock *GpuInstance) GetVgpuSchedulerStateCalls() []struct { } { var calls []struct { } mock.lockGetVgpuSchedulerState.RLock() calls = mock.calls.GetVgpuSchedulerState mock.lockGetVgpuSchedulerState.RUnlock() return calls } // GetVgpuTypeCreatablePlacements calls GetVgpuTypeCreatablePlacementsFunc. func (mock *GpuInstance) GetVgpuTypeCreatablePlacements() (nvml.VgpuCreatablePlacementInfo, nvml.Return) { if mock.GetVgpuTypeCreatablePlacementsFunc == nil { panic("GpuInstance.GetVgpuTypeCreatablePlacementsFunc: method is nil but GpuInstance.GetVgpuTypeCreatablePlacements was just called") } callInfo := struct { }{} mock.lockGetVgpuTypeCreatablePlacements.Lock() mock.calls.GetVgpuTypeCreatablePlacements = append(mock.calls.GetVgpuTypeCreatablePlacements, callInfo) mock.lockGetVgpuTypeCreatablePlacements.Unlock() return mock.GetVgpuTypeCreatablePlacementsFunc() } // GetVgpuTypeCreatablePlacementsCalls gets all the calls that were made to GetVgpuTypeCreatablePlacements. // Check the length with: // // len(mockedGpuInstance.GetVgpuTypeCreatablePlacementsCalls()) func (mock *GpuInstance) GetVgpuTypeCreatablePlacementsCalls() []struct { } { var calls []struct { } mock.lockGetVgpuTypeCreatablePlacements.RLock() calls = mock.calls.GetVgpuTypeCreatablePlacements mock.lockGetVgpuTypeCreatablePlacements.RUnlock() return calls } // SetVgpuHeterogeneousMode calls SetVgpuHeterogeneousModeFunc. func (mock *GpuInstance) SetVgpuHeterogeneousMode(vgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode) nvml.Return { if mock.SetVgpuHeterogeneousModeFunc == nil { panic("GpuInstance.SetVgpuHeterogeneousModeFunc: method is nil but GpuInstance.SetVgpuHeterogeneousMode was just called") } callInfo := struct { VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode }{ VgpuHeterogeneousMode: vgpuHeterogeneousMode, } mock.lockSetVgpuHeterogeneousMode.Lock() mock.calls.SetVgpuHeterogeneousMode = append(mock.calls.SetVgpuHeterogeneousMode, callInfo) mock.lockSetVgpuHeterogeneousMode.Unlock() return mock.SetVgpuHeterogeneousModeFunc(vgpuHeterogeneousMode) } // SetVgpuHeterogeneousModeCalls gets all the calls that were made to SetVgpuHeterogeneousMode. // Check the length with: // // len(mockedGpuInstance.SetVgpuHeterogeneousModeCalls()) func (mock *GpuInstance) SetVgpuHeterogeneousModeCalls() []struct { VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode } { var calls []struct { VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode } mock.lockSetVgpuHeterogeneousMode.RLock() calls = mock.calls.SetVgpuHeterogeneousMode mock.lockSetVgpuHeterogeneousMode.RUnlock() return calls } // SetVgpuSchedulerState calls SetVgpuSchedulerStateFunc. func (mock *GpuInstance) SetVgpuSchedulerState(vgpuSchedulerState *nvml.VgpuSchedulerState) nvml.Return { if mock.SetVgpuSchedulerStateFunc == nil { panic("GpuInstance.SetVgpuSchedulerStateFunc: method is nil but GpuInstance.SetVgpuSchedulerState was just called") } callInfo := struct { VgpuSchedulerState *nvml.VgpuSchedulerState }{ VgpuSchedulerState: vgpuSchedulerState, } mock.lockSetVgpuSchedulerState.Lock() mock.calls.SetVgpuSchedulerState = append(mock.calls.SetVgpuSchedulerState, callInfo) mock.lockSetVgpuSchedulerState.Unlock() return mock.SetVgpuSchedulerStateFunc(vgpuSchedulerState) } // SetVgpuSchedulerStateCalls gets all the calls that were made to SetVgpuSchedulerState. // Check the length with: // // len(mockedGpuInstance.SetVgpuSchedulerStateCalls()) func (mock *GpuInstance) SetVgpuSchedulerStateCalls() []struct { VgpuSchedulerState *nvml.VgpuSchedulerState } { var calls []struct { VgpuSchedulerState *nvml.VgpuSchedulerState } mock.lockSetVgpuSchedulerState.RLock() calls = mock.calls.SetVgpuSchedulerState mock.lockSetVgpuSchedulerState.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/interface.go000066400000000000000000025165121520540370700277410ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that Interface does implement nvml.Interface. // If this is not the case, regenerate this file with moq. var _ nvml.Interface = &Interface{} // Interface is a mock implementation of nvml.Interface. // // func TestSomethingThatUsesInterface(t *testing.T) { // // // make and configure a mocked nvml.Interface // mockedInterface := &Interface{ // ComputeInstanceDestroyFunc: func(computeInstance nvml.ComputeInstance) nvml.Return { // panic("mock out the ComputeInstanceDestroy method") // }, // ComputeInstanceGetInfoFunc: func(computeInstance nvml.ComputeInstance) (nvml.ComputeInstanceInfo, nvml.Return) { // panic("mock out the ComputeInstanceGetInfo method") // }, // DeviceClearAccountingPidsFunc: func(device nvml.Device) nvml.Return { // panic("mock out the DeviceClearAccountingPids method") // }, // DeviceClearCpuAffinityFunc: func(device nvml.Device) nvml.Return { // panic("mock out the DeviceClearCpuAffinity method") // }, // DeviceClearEccErrorCountsFunc: func(device nvml.Device, eccCounterType nvml.EccCounterType) nvml.Return { // panic("mock out the DeviceClearEccErrorCounts method") // }, // DeviceClearFieldValuesFunc: func(device nvml.Device, fieldValues []nvml.FieldValue) nvml.Return { // panic("mock out the DeviceClearFieldValues method") // }, // DeviceCreateGpuInstanceFunc: func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (nvml.GpuInstance, nvml.Return) { // panic("mock out the DeviceCreateGpuInstance method") // }, // DeviceCreateGpuInstanceWithPlacementFunc: func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo, gpuInstancePlacement *nvml.GpuInstancePlacement) (nvml.GpuInstance, nvml.Return) { // panic("mock out the DeviceCreateGpuInstanceWithPlacement method") // }, // DeviceDiscoverGpusFunc: func() (nvml.PciInfo, nvml.Return) { // panic("mock out the DeviceDiscoverGpus method") // }, // DeviceFreezeNvLinkUtilizationCounterFunc: func(device nvml.Device, n1 int, n2 int, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceFreezeNvLinkUtilizationCounter method") // }, // DeviceGetAPIRestrictionFunc: func(device nvml.Device, restrictedAPI nvml.RestrictedAPI) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetAPIRestriction method") // }, // DeviceGetAccountingBufferSizeFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetAccountingBufferSize method") // }, // DeviceGetAccountingModeFunc: func(device nvml.Device) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetAccountingMode method") // }, // DeviceGetAccountingPidsFunc: func(device nvml.Device) ([]int, nvml.Return) { // panic("mock out the DeviceGetAccountingPids method") // }, // DeviceGetAccountingStatsFunc: func(device nvml.Device, v uint32) (nvml.AccountingStats, nvml.Return) { // panic("mock out the DeviceGetAccountingStats method") // }, // DeviceGetActiveVgpusFunc: func(device nvml.Device) ([]nvml.VgpuInstance, nvml.Return) { // panic("mock out the DeviceGetActiveVgpus method") // }, // DeviceGetAdaptiveClockInfoStatusFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetAdaptiveClockInfoStatus method") // }, // DeviceGetAddressingModeFunc: func(device nvml.Device) (nvml.DeviceAddressingMode, nvml.Return) { // panic("mock out the DeviceGetAddressingMode method") // }, // DeviceGetApplicationsClockFunc: func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the DeviceGetApplicationsClock method") // }, // DeviceGetArchitectureFunc: func(device nvml.Device) (nvml.DeviceArchitecture, nvml.Return) { // panic("mock out the DeviceGetArchitecture method") // }, // DeviceGetAttributesFunc: func(device nvml.Device) (nvml.DeviceAttributes, nvml.Return) { // panic("mock out the DeviceGetAttributes method") // }, // DeviceGetAutoBoostedClocksEnabledFunc: func(device nvml.Device) (nvml.EnableState, nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetAutoBoostedClocksEnabled method") // }, // DeviceGetBAR1MemoryInfoFunc: func(device nvml.Device) (nvml.BAR1Memory, nvml.Return) { // panic("mock out the DeviceGetBAR1MemoryInfo method") // }, // DeviceGetBoardIdFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetBoardId method") // }, // DeviceGetBoardPartNumberFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetBoardPartNumber method") // }, // DeviceGetBrandFunc: func(device nvml.Device) (nvml.BrandType, nvml.Return) { // panic("mock out the DeviceGetBrand method") // }, // DeviceGetBridgeChipInfoFunc: func(device nvml.Device) (nvml.BridgeChipHierarchy, nvml.Return) { // panic("mock out the DeviceGetBridgeChipInfo method") // }, // DeviceGetBusTypeFunc: func(device nvml.Device) (nvml.BusType, nvml.Return) { // panic("mock out the DeviceGetBusType method") // }, // DeviceGetC2cModeInfoVFunc: func(device nvml.Device) nvml.C2cModeInfoHandler { // panic("mock out the DeviceGetC2cModeInfoV method") // }, // DeviceGetCapabilitiesFunc: func(device nvml.Device) (nvml.DeviceCapabilities, nvml.Return) { // panic("mock out the DeviceGetCapabilities method") // }, // DeviceGetClkMonStatusFunc: func(device nvml.Device) (nvml.ClkMonStatus, nvml.Return) { // panic("mock out the DeviceGetClkMonStatus method") // }, // DeviceGetClockFunc: func(device nvml.Device, clockType nvml.ClockType, clockId nvml.ClockId) (uint32, nvml.Return) { // panic("mock out the DeviceGetClock method") // }, // DeviceGetClockInfoFunc: func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the DeviceGetClockInfo method") // }, // DeviceGetClockOffsetsFunc: func(device nvml.Device) (nvml.ClockOffset, nvml.Return) { // panic("mock out the DeviceGetClockOffsets method") // }, // DeviceGetComputeInstanceIdFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetComputeInstanceId method") // }, // DeviceGetComputeModeFunc: func(device nvml.Device) (nvml.ComputeMode, nvml.Return) { // panic("mock out the DeviceGetComputeMode method") // }, // DeviceGetComputeRunningProcessesFunc: func(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) { // panic("mock out the DeviceGetComputeRunningProcesses method") // }, // DeviceGetConfComputeGpuAttestationReportFunc: func(device nvml.Device, confComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport) nvml.Return { // panic("mock out the DeviceGetConfComputeGpuAttestationReport method") // }, // DeviceGetConfComputeGpuCertificateFunc: func(device nvml.Device) (nvml.ConfComputeGpuCertificate, nvml.Return) { // panic("mock out the DeviceGetConfComputeGpuCertificate method") // }, // DeviceGetConfComputeMemSizeInfoFunc: func(device nvml.Device) (nvml.ConfComputeMemSizeInfo, nvml.Return) { // panic("mock out the DeviceGetConfComputeMemSizeInfo method") // }, // DeviceGetConfComputeProtectedMemoryUsageFunc: func(device nvml.Device) (nvml.Memory, nvml.Return) { // panic("mock out the DeviceGetConfComputeProtectedMemoryUsage method") // }, // DeviceGetCoolerInfoFunc: func(device nvml.Device) (nvml.CoolerInfo, nvml.Return) { // panic("mock out the DeviceGetCoolerInfo method") // }, // DeviceGetCountFunc: func() (int, nvml.Return) { // panic("mock out the DeviceGetCount method") // }, // DeviceGetCpuAffinityFunc: func(device nvml.Device, n int) ([]uint, nvml.Return) { // panic("mock out the DeviceGetCpuAffinity method") // }, // DeviceGetCpuAffinityWithinScopeFunc: func(device nvml.Device, n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { // panic("mock out the DeviceGetCpuAffinityWithinScope method") // }, // DeviceGetCreatableVgpusFunc: func(device nvml.Device) ([]nvml.VgpuTypeId, nvml.Return) { // panic("mock out the DeviceGetCreatableVgpus method") // }, // DeviceGetCudaComputeCapabilityFunc: func(device nvml.Device) (int, int, nvml.Return) { // panic("mock out the DeviceGetCudaComputeCapability method") // }, // DeviceGetCurrPcieLinkGenerationFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetCurrPcieLinkGeneration method") // }, // DeviceGetCurrPcieLinkWidthFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetCurrPcieLinkWidth method") // }, // DeviceGetCurrentClockFreqsFunc: func(device nvml.Device) (nvml.DeviceCurrentClockFreqs, nvml.Return) { // panic("mock out the DeviceGetCurrentClockFreqs method") // }, // DeviceGetCurrentClocksEventReasonsFunc: func(device nvml.Device) (uint64, nvml.Return) { // panic("mock out the DeviceGetCurrentClocksEventReasons method") // }, // DeviceGetCurrentClocksThrottleReasonsFunc: func(device nvml.Device) (uint64, nvml.Return) { // panic("mock out the DeviceGetCurrentClocksThrottleReasons method") // }, // DeviceGetDecoderUtilizationFunc: func(device nvml.Device) (uint32, uint32, nvml.Return) { // panic("mock out the DeviceGetDecoderUtilization method") // }, // DeviceGetDefaultApplicationsClockFunc: func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the DeviceGetDefaultApplicationsClock method") // }, // DeviceGetDefaultEccModeFunc: func(device nvml.Device) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetDefaultEccMode method") // }, // DeviceGetDetailedEccErrorsFunc: func(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (nvml.EccErrorCounts, nvml.Return) { // panic("mock out the DeviceGetDetailedEccErrors method") // }, // DeviceGetDeviceHandleFromMigDeviceHandleFunc: func(device nvml.Device) (nvml.Device, nvml.Return) { // panic("mock out the DeviceGetDeviceHandleFromMigDeviceHandle method") // }, // DeviceGetDisplayActiveFunc: func(device nvml.Device) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetDisplayActive method") // }, // DeviceGetDisplayModeFunc: func(device nvml.Device) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetDisplayMode method") // }, // DeviceGetDramEncryptionModeFunc: func(device nvml.Device) (nvml.DramEncryptionInfo, nvml.DramEncryptionInfo, nvml.Return) { // panic("mock out the DeviceGetDramEncryptionMode method") // }, // DeviceGetDriverModelFunc: func(device nvml.Device) (nvml.DriverModel, nvml.DriverModel, nvml.Return) { // panic("mock out the DeviceGetDriverModel method") // }, // DeviceGetDriverModel_v2Func: func(device nvml.Device) (nvml.DriverModel, nvml.DriverModel, nvml.Return) { // panic("mock out the DeviceGetDriverModel_v2 method") // }, // DeviceGetDynamicPstatesInfoFunc: func(device nvml.Device) (nvml.GpuDynamicPstatesInfo, nvml.Return) { // panic("mock out the DeviceGetDynamicPstatesInfo method") // }, // DeviceGetEccModeFunc: func(device nvml.Device) (nvml.EnableState, nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetEccMode method") // }, // DeviceGetEncoderCapacityFunc: func(device nvml.Device, encoderType nvml.EncoderType) (int, nvml.Return) { // panic("mock out the DeviceGetEncoderCapacity method") // }, // DeviceGetEncoderSessionsFunc: func(device nvml.Device) ([]nvml.EncoderSessionInfo, nvml.Return) { // panic("mock out the DeviceGetEncoderSessions method") // }, // DeviceGetEncoderStatsFunc: func(device nvml.Device) (int, uint32, uint32, nvml.Return) { // panic("mock out the DeviceGetEncoderStats method") // }, // DeviceGetEncoderUtilizationFunc: func(device nvml.Device) (uint32, uint32, nvml.Return) { // panic("mock out the DeviceGetEncoderUtilization method") // }, // DeviceGetEnforcedPowerLimitFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetEnforcedPowerLimit method") // }, // DeviceGetFBCSessionsFunc: func(device nvml.Device) ([]nvml.FBCSessionInfo, nvml.Return) { // panic("mock out the DeviceGetFBCSessions method") // }, // DeviceGetFBCStatsFunc: func(device nvml.Device) (nvml.FBCStats, nvml.Return) { // panic("mock out the DeviceGetFBCStats method") // }, // DeviceGetFanControlPolicy_v2Func: func(device nvml.Device, n int) (nvml.FanControlPolicy, nvml.Return) { // panic("mock out the DeviceGetFanControlPolicy_v2 method") // }, // DeviceGetFanSpeedFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetFanSpeed method") // }, // DeviceGetFanSpeedRPMFunc: func(device nvml.Device) (nvml.FanSpeedInfo, nvml.Return) { // panic("mock out the DeviceGetFanSpeedRPM method") // }, // DeviceGetFanSpeed_v2Func: func(device nvml.Device, n int) (uint32, nvml.Return) { // panic("mock out the DeviceGetFanSpeed_v2 method") // }, // DeviceGetFieldValuesFunc: func(device nvml.Device, fieldValues []nvml.FieldValue) nvml.Return { // panic("mock out the DeviceGetFieldValues method") // }, // DeviceGetGpcClkMinMaxVfOffsetFunc: func(device nvml.Device) (int, int, nvml.Return) { // panic("mock out the DeviceGetGpcClkMinMaxVfOffset method") // }, // DeviceGetGpcClkVfOffsetFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetGpcClkVfOffset method") // }, // DeviceGetGpuFabricInfoFunc: func(device nvml.Device) (nvml.GpuFabricInfo, nvml.Return) { // panic("mock out the DeviceGetGpuFabricInfo method") // }, // DeviceGetGpuFabricInfoVFunc: func(device nvml.Device) nvml.GpuFabricInfoHandler { // panic("mock out the DeviceGetGpuFabricInfoV method") // }, // DeviceGetGpuInstanceByIdFunc: func(device nvml.Device, n int) (nvml.GpuInstance, nvml.Return) { // panic("mock out the DeviceGetGpuInstanceById method") // }, // DeviceGetGpuInstanceIdFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetGpuInstanceId method") // }, // DeviceGetGpuInstancePossiblePlacementsFunc: func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstancePlacement, nvml.Return) { // panic("mock out the DeviceGetGpuInstancePossiblePlacements method") // }, // DeviceGetGpuInstanceProfileInfoFunc: func(device nvml.Device, n int) (nvml.GpuInstanceProfileInfo, nvml.Return) { // panic("mock out the DeviceGetGpuInstanceProfileInfo method") // }, // DeviceGetGpuInstanceProfileInfoByIdVFunc: func(device nvml.Device, n int) nvml.GpuInstanceProfileInfoByIdHandler { // panic("mock out the DeviceGetGpuInstanceProfileInfoByIdV method") // }, // DeviceGetGpuInstanceProfileInfoVFunc: func(device nvml.Device, n int) nvml.GpuInstanceProfileInfoHandler { // panic("mock out the DeviceGetGpuInstanceProfileInfoV method") // }, // DeviceGetGpuInstanceRemainingCapacityFunc: func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (int, nvml.Return) { // panic("mock out the DeviceGetGpuInstanceRemainingCapacity method") // }, // DeviceGetGpuInstancesFunc: func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstance, nvml.Return) { // panic("mock out the DeviceGetGpuInstances method") // }, // DeviceGetGpuMaxPcieLinkGenerationFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetGpuMaxPcieLinkGeneration method") // }, // DeviceGetGpuOperationModeFunc: func(device nvml.Device) (nvml.GpuOperationMode, nvml.GpuOperationMode, nvml.Return) { // panic("mock out the DeviceGetGpuOperationMode method") // }, // DeviceGetGraphicsRunningProcessesFunc: func(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) { // panic("mock out the DeviceGetGraphicsRunningProcesses method") // }, // DeviceGetGridLicensableFeaturesFunc: func(device nvml.Device) (nvml.GridLicensableFeatures, nvml.Return) { // panic("mock out the DeviceGetGridLicensableFeatures method") // }, // DeviceGetGspFirmwareModeFunc: func(device nvml.Device) (bool, bool, nvml.Return) { // panic("mock out the DeviceGetGspFirmwareMode method") // }, // DeviceGetGspFirmwareVersionFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetGspFirmwareVersion method") // }, // DeviceGetHandleByIndexFunc: func(n int) (nvml.Device, nvml.Return) { // panic("mock out the DeviceGetHandleByIndex method") // }, // DeviceGetHandleByPciBusIdFunc: func(s string) (nvml.Device, nvml.Return) { // panic("mock out the DeviceGetHandleByPciBusId method") // }, // DeviceGetHandleBySerialFunc: func(s string) (nvml.Device, nvml.Return) { // panic("mock out the DeviceGetHandleBySerial method") // }, // DeviceGetHandleByUUIDFunc: func(s string) (nvml.Device, nvml.Return) { // panic("mock out the DeviceGetHandleByUUID method") // }, // DeviceGetHandleByUUIDVFunc: func(uUID *nvml.UUID) (nvml.Device, nvml.Return) { // panic("mock out the DeviceGetHandleByUUIDV method") // }, // DeviceGetHostVgpuModeFunc: func(device nvml.Device) (nvml.HostVgpuMode, nvml.Return) { // panic("mock out the DeviceGetHostVgpuMode method") // }, // DeviceGetIndexFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetIndex method") // }, // DeviceGetInforomConfigurationChecksumFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetInforomConfigurationChecksum method") // }, // DeviceGetInforomImageVersionFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetInforomImageVersion method") // }, // DeviceGetInforomVersionFunc: func(device nvml.Device, inforomObject nvml.InforomObject) (string, nvml.Return) { // panic("mock out the DeviceGetInforomVersion method") // }, // DeviceGetIrqNumFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetIrqNum method") // }, // DeviceGetJpgUtilizationFunc: func(device nvml.Device) (uint32, uint32, nvml.Return) { // panic("mock out the DeviceGetJpgUtilization method") // }, // DeviceGetLastBBXFlushTimeFunc: func(device nvml.Device) (uint64, uint, nvml.Return) { // panic("mock out the DeviceGetLastBBXFlushTime method") // }, // DeviceGetMPSComputeRunningProcessesFunc: func(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) { // panic("mock out the DeviceGetMPSComputeRunningProcesses method") // }, // DeviceGetMarginTemperatureFunc: func(device nvml.Device) (nvml.MarginTemperature, nvml.Return) { // panic("mock out the DeviceGetMarginTemperature method") // }, // DeviceGetMaxClockInfoFunc: func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the DeviceGetMaxClockInfo method") // }, // DeviceGetMaxCustomerBoostClockFunc: func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { // panic("mock out the DeviceGetMaxCustomerBoostClock method") // }, // DeviceGetMaxMigDeviceCountFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetMaxMigDeviceCount method") // }, // DeviceGetMaxPcieLinkGenerationFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetMaxPcieLinkGeneration method") // }, // DeviceGetMaxPcieLinkWidthFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetMaxPcieLinkWidth method") // }, // DeviceGetMemClkMinMaxVfOffsetFunc: func(device nvml.Device) (int, int, nvml.Return) { // panic("mock out the DeviceGetMemClkMinMaxVfOffset method") // }, // DeviceGetMemClkVfOffsetFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetMemClkVfOffset method") // }, // DeviceGetMemoryAffinityFunc: func(device nvml.Device, n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { // panic("mock out the DeviceGetMemoryAffinity method") // }, // DeviceGetMemoryBusWidthFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetMemoryBusWidth method") // }, // DeviceGetMemoryErrorCounterFunc: func(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType, memoryLocation nvml.MemoryLocation) (uint64, nvml.Return) { // panic("mock out the DeviceGetMemoryErrorCounter method") // }, // DeviceGetMemoryInfoFunc: func(device nvml.Device) (nvml.Memory, nvml.Return) { // panic("mock out the DeviceGetMemoryInfo method") // }, // DeviceGetMemoryInfo_v2Func: func(device nvml.Device) (nvml.Memory_v2, nvml.Return) { // panic("mock out the DeviceGetMemoryInfo_v2 method") // }, // DeviceGetMigDeviceHandleByIndexFunc: func(device nvml.Device, n int) (nvml.Device, nvml.Return) { // panic("mock out the DeviceGetMigDeviceHandleByIndex method") // }, // DeviceGetMigModeFunc: func(device nvml.Device) (int, int, nvml.Return) { // panic("mock out the DeviceGetMigMode method") // }, // DeviceGetMinMaxClockOfPStateFunc: func(device nvml.Device, clockType nvml.ClockType, pstates nvml.Pstates) (uint32, uint32, nvml.Return) { // panic("mock out the DeviceGetMinMaxClockOfPState method") // }, // DeviceGetMinMaxFanSpeedFunc: func(device nvml.Device) (int, int, nvml.Return) { // panic("mock out the DeviceGetMinMaxFanSpeed method") // }, // DeviceGetMinorNumberFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetMinorNumber method") // }, // DeviceGetModuleIdFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetModuleId method") // }, // DeviceGetMultiGpuBoardFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetMultiGpuBoard method") // }, // DeviceGetNameFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetName method") // }, // DeviceGetNumFansFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetNumFans method") // }, // DeviceGetNumGpuCoresFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetNumGpuCores method") // }, // DeviceGetNumaNodeIdFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetNumaNodeId method") // }, // DeviceGetNvLinkCapabilityFunc: func(device nvml.Device, n int, nvLinkCapability nvml.NvLinkCapability) (uint32, nvml.Return) { // panic("mock out the DeviceGetNvLinkCapability method") // }, // DeviceGetNvLinkErrorCounterFunc: func(device nvml.Device, n int, nvLinkErrorCounter nvml.NvLinkErrorCounter) (uint64, nvml.Return) { // panic("mock out the DeviceGetNvLinkErrorCounter method") // }, // DeviceGetNvLinkInfoFunc: func(device nvml.Device) nvml.NvLinkInfoHandler { // panic("mock out the DeviceGetNvLinkInfo method") // }, // DeviceGetNvLinkRemoteDeviceTypeFunc: func(device nvml.Device, n int) (nvml.IntNvLinkDeviceType, nvml.Return) { // panic("mock out the DeviceGetNvLinkRemoteDeviceType method") // }, // DeviceGetNvLinkRemotePciInfoFunc: func(device nvml.Device, n int) (nvml.PciInfo, nvml.Return) { // panic("mock out the DeviceGetNvLinkRemotePciInfo method") // }, // DeviceGetNvLinkStateFunc: func(device nvml.Device, n int) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetNvLinkState method") // }, // DeviceGetNvLinkUtilizationControlFunc: func(device nvml.Device, n1 int, n2 int) (nvml.NvLinkUtilizationControl, nvml.Return) { // panic("mock out the DeviceGetNvLinkUtilizationControl method") // }, // DeviceGetNvLinkUtilizationCounterFunc: func(device nvml.Device, n1 int, n2 int) (uint64, uint64, nvml.Return) { // panic("mock out the DeviceGetNvLinkUtilizationCounter method") // }, // DeviceGetNvLinkVersionFunc: func(device nvml.Device, n int) (uint32, nvml.Return) { // panic("mock out the DeviceGetNvLinkVersion method") // }, // DeviceGetNvlinkBwModeFunc: func(device nvml.Device) (nvml.NvlinkGetBwMode, nvml.Return) { // panic("mock out the DeviceGetNvlinkBwMode method") // }, // DeviceGetNvlinkSupportedBwModesFunc: func(device nvml.Device) (nvml.NvlinkSupportedBwModes, nvml.Return) { // panic("mock out the DeviceGetNvlinkSupportedBwModes method") // }, // DeviceGetOfaUtilizationFunc: func(device nvml.Device) (uint32, uint32, nvml.Return) { // panic("mock out the DeviceGetOfaUtilization method") // }, // DeviceGetP2PStatusFunc: func(device1 nvml.Device, device2 nvml.Device, gpuP2PCapsIndex nvml.GpuP2PCapsIndex) (nvml.GpuP2PStatus, nvml.Return) { // panic("mock out the DeviceGetP2PStatus method") // }, // DeviceGetPciInfoFunc: func(device nvml.Device) (nvml.PciInfo, nvml.Return) { // panic("mock out the DeviceGetPciInfo method") // }, // DeviceGetPciInfoExtFunc: func(device nvml.Device) (nvml.PciInfoExt, nvml.Return) { // panic("mock out the DeviceGetPciInfoExt method") // }, // DeviceGetPcieLinkMaxSpeedFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetPcieLinkMaxSpeed method") // }, // DeviceGetPcieReplayCounterFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetPcieReplayCounter method") // }, // DeviceGetPcieSpeedFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceGetPcieSpeed method") // }, // DeviceGetPcieThroughputFunc: func(device nvml.Device, pcieUtilCounter nvml.PcieUtilCounter) (uint32, nvml.Return) { // panic("mock out the DeviceGetPcieThroughput method") // }, // DeviceGetPdiFunc: func(device nvml.Device) (nvml.Pdi, nvml.Return) { // panic("mock out the DeviceGetPdi method") // }, // DeviceGetPerformanceModesFunc: func(device nvml.Device) (nvml.DevicePerfModes, nvml.Return) { // panic("mock out the DeviceGetPerformanceModes method") // }, // DeviceGetPerformanceStateFunc: func(device nvml.Device) (nvml.Pstates, nvml.Return) { // panic("mock out the DeviceGetPerformanceState method") // }, // DeviceGetPersistenceModeFunc: func(device nvml.Device) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetPersistenceMode method") // }, // DeviceGetPgpuMetadataStringFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetPgpuMetadataString method") // }, // DeviceGetPlatformInfoFunc: func(device nvml.Device) (nvml.PlatformInfo, nvml.Return) { // panic("mock out the DeviceGetPlatformInfo method") // }, // DeviceGetPowerManagementDefaultLimitFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetPowerManagementDefaultLimit method") // }, // DeviceGetPowerManagementLimitFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetPowerManagementLimit method") // }, // DeviceGetPowerManagementLimitConstraintsFunc: func(device nvml.Device) (uint32, uint32, nvml.Return) { // panic("mock out the DeviceGetPowerManagementLimitConstraints method") // }, // DeviceGetPowerManagementModeFunc: func(device nvml.Device) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetPowerManagementMode method") // }, // DeviceGetPowerMizerMode_v1Func: func(device nvml.Device) (nvml.DevicePowerMizerModes_v1, nvml.Return) { // panic("mock out the DeviceGetPowerMizerMode_v1 method") // }, // DeviceGetPowerSourceFunc: func(device nvml.Device) (nvml.PowerSource, nvml.Return) { // panic("mock out the DeviceGetPowerSource method") // }, // DeviceGetPowerStateFunc: func(device nvml.Device) (nvml.Pstates, nvml.Return) { // panic("mock out the DeviceGetPowerState method") // }, // DeviceGetPowerUsageFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the DeviceGetPowerUsage method") // }, // DeviceGetProcessUtilizationFunc: func(device nvml.Device, v uint64) ([]nvml.ProcessUtilizationSample, nvml.Return) { // panic("mock out the DeviceGetProcessUtilization method") // }, // DeviceGetProcessesUtilizationInfoFunc: func(device nvml.Device) (nvml.ProcessesUtilizationInfo, nvml.Return) { // panic("mock out the DeviceGetProcessesUtilizationInfo method") // }, // DeviceGetRemappedRowsFunc: func(device nvml.Device) (int, int, bool, bool, nvml.Return) { // panic("mock out the DeviceGetRemappedRows method") // }, // DeviceGetRepairStatusFunc: func(device nvml.Device) (nvml.RepairStatus, nvml.Return) { // panic("mock out the DeviceGetRepairStatus method") // }, // DeviceGetRetiredPagesFunc: func(device nvml.Device, pageRetirementCause nvml.PageRetirementCause) ([]uint64, nvml.Return) { // panic("mock out the DeviceGetRetiredPages method") // }, // DeviceGetRetiredPagesPendingStatusFunc: func(device nvml.Device) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceGetRetiredPagesPendingStatus method") // }, // DeviceGetRetiredPages_v2Func: func(device nvml.Device, pageRetirementCause nvml.PageRetirementCause) ([]uint64, []uint64, nvml.Return) { // panic("mock out the DeviceGetRetiredPages_v2 method") // }, // DeviceGetRowRemapperHistogramFunc: func(device nvml.Device) (nvml.RowRemapperHistogramValues, nvml.Return) { // panic("mock out the DeviceGetRowRemapperHistogram method") // }, // DeviceGetRunningProcessDetailListFunc: func(device nvml.Device) (nvml.ProcessDetailList, nvml.Return) { // panic("mock out the DeviceGetRunningProcessDetailList method") // }, // DeviceGetSamplesFunc: func(device nvml.Device, samplingType nvml.SamplingType, v uint64) (nvml.ValueType, []nvml.Sample, nvml.Return) { // panic("mock out the DeviceGetSamples method") // }, // DeviceGetSerialFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetSerial method") // }, // DeviceGetSramEccErrorStatusFunc: func(device nvml.Device) (nvml.EccSramErrorStatus, nvml.Return) { // panic("mock out the DeviceGetSramEccErrorStatus method") // }, // DeviceGetSramUniqueUncorrectedEccErrorCountsFunc: func(device nvml.Device, eccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts) nvml.Return { // panic("mock out the DeviceGetSramUniqueUncorrectedEccErrorCounts method") // }, // DeviceGetSupportedClocksEventReasonsFunc: func(device nvml.Device) (uint64, nvml.Return) { // panic("mock out the DeviceGetSupportedClocksEventReasons method") // }, // DeviceGetSupportedClocksThrottleReasonsFunc: func(device nvml.Device) (uint64, nvml.Return) { // panic("mock out the DeviceGetSupportedClocksThrottleReasons method") // }, // DeviceGetSupportedEventTypesFunc: func(device nvml.Device) (uint64, nvml.Return) { // panic("mock out the DeviceGetSupportedEventTypes method") // }, // DeviceGetSupportedGraphicsClocksFunc: func(device nvml.Device, n int) (int, uint32, nvml.Return) { // panic("mock out the DeviceGetSupportedGraphicsClocks method") // }, // DeviceGetSupportedMemoryClocksFunc: func(device nvml.Device) (int, uint32, nvml.Return) { // panic("mock out the DeviceGetSupportedMemoryClocks method") // }, // DeviceGetSupportedPerformanceStatesFunc: func(device nvml.Device) ([]nvml.Pstates, nvml.Return) { // panic("mock out the DeviceGetSupportedPerformanceStates method") // }, // DeviceGetSupportedVgpusFunc: func(device nvml.Device) ([]nvml.VgpuTypeId, nvml.Return) { // panic("mock out the DeviceGetSupportedVgpus method") // }, // DeviceGetTargetFanSpeedFunc: func(device nvml.Device, n int) (int, nvml.Return) { // panic("mock out the DeviceGetTargetFanSpeed method") // }, // DeviceGetTemperatureFunc: func(device nvml.Device, temperatureSensors nvml.TemperatureSensors) (uint32, nvml.Return) { // panic("mock out the DeviceGetTemperature method") // }, // DeviceGetTemperatureThresholdFunc: func(device nvml.Device, temperatureThresholds nvml.TemperatureThresholds) (uint32, nvml.Return) { // panic("mock out the DeviceGetTemperatureThreshold method") // }, // DeviceGetTemperatureVFunc: func(device nvml.Device) nvml.TemperatureHandler { // panic("mock out the DeviceGetTemperatureV method") // }, // DeviceGetThermalSettingsFunc: func(device nvml.Device, v uint32) (nvml.GpuThermalSettings, nvml.Return) { // panic("mock out the DeviceGetThermalSettings method") // }, // DeviceGetTopologyCommonAncestorFunc: func(device1 nvml.Device, device2 nvml.Device) (nvml.GpuTopologyLevel, nvml.Return) { // panic("mock out the DeviceGetTopologyCommonAncestor method") // }, // DeviceGetTopologyNearestGpusFunc: func(device nvml.Device, gpuTopologyLevel nvml.GpuTopologyLevel) ([]nvml.Device, nvml.Return) { // panic("mock out the DeviceGetTopologyNearestGpus method") // }, // DeviceGetTotalEccErrorsFunc: func(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (uint64, nvml.Return) { // panic("mock out the DeviceGetTotalEccErrors method") // }, // DeviceGetTotalEnergyConsumptionFunc: func(device nvml.Device) (uint64, nvml.Return) { // panic("mock out the DeviceGetTotalEnergyConsumption method") // }, // DeviceGetUUIDFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetUUID method") // }, // DeviceGetUtilizationRatesFunc: func(device nvml.Device) (nvml.Utilization, nvml.Return) { // panic("mock out the DeviceGetUtilizationRates method") // }, // DeviceGetVbiosVersionFunc: func(device nvml.Device) (string, nvml.Return) { // panic("mock out the DeviceGetVbiosVersion method") // }, // DeviceGetVgpuCapabilitiesFunc: func(device nvml.Device, deviceVgpuCapability nvml.DeviceVgpuCapability) (bool, nvml.Return) { // panic("mock out the DeviceGetVgpuCapabilities method") // }, // DeviceGetVgpuHeterogeneousModeFunc: func(device nvml.Device) (nvml.VgpuHeterogeneousMode, nvml.Return) { // panic("mock out the DeviceGetVgpuHeterogeneousMode method") // }, // DeviceGetVgpuInstancesUtilizationInfoFunc: func(device nvml.Device) (nvml.VgpuInstancesUtilizationInfo, nvml.Return) { // panic("mock out the DeviceGetVgpuInstancesUtilizationInfo method") // }, // DeviceGetVgpuMetadataFunc: func(device nvml.Device) (nvml.VgpuPgpuMetadata, nvml.Return) { // panic("mock out the DeviceGetVgpuMetadata method") // }, // DeviceGetVgpuProcessUtilizationFunc: func(device nvml.Device, v uint64) ([]nvml.VgpuProcessUtilizationSample, nvml.Return) { // panic("mock out the DeviceGetVgpuProcessUtilization method") // }, // DeviceGetVgpuProcessesUtilizationInfoFunc: func(device nvml.Device) (nvml.VgpuProcessesUtilizationInfo, nvml.Return) { // panic("mock out the DeviceGetVgpuProcessesUtilizationInfo method") // }, // DeviceGetVgpuSchedulerCapabilitiesFunc: func(device nvml.Device) (nvml.VgpuSchedulerCapabilities, nvml.Return) { // panic("mock out the DeviceGetVgpuSchedulerCapabilities method") // }, // DeviceGetVgpuSchedulerLogFunc: func(device nvml.Device) (nvml.VgpuSchedulerLog, nvml.Return) { // panic("mock out the DeviceGetVgpuSchedulerLog method") // }, // DeviceGetVgpuSchedulerStateFunc: func(device nvml.Device) (nvml.VgpuSchedulerGetState, nvml.Return) { // panic("mock out the DeviceGetVgpuSchedulerState method") // }, // DeviceGetVgpuTypeCreatablePlacementsFunc: func(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { // panic("mock out the DeviceGetVgpuTypeCreatablePlacements method") // }, // DeviceGetVgpuTypeSupportedPlacementsFunc: func(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { // panic("mock out the DeviceGetVgpuTypeSupportedPlacements method") // }, // DeviceGetVgpuUtilizationFunc: func(device nvml.Device, v uint64) (nvml.ValueType, []nvml.VgpuInstanceUtilizationSample, nvml.Return) { // panic("mock out the DeviceGetVgpuUtilization method") // }, // DeviceGetViolationStatusFunc: func(device nvml.Device, perfPolicyType nvml.PerfPolicyType) (nvml.ViolationTime, nvml.Return) { // panic("mock out the DeviceGetViolationStatus method") // }, // DeviceGetVirtualizationModeFunc: func(device nvml.Device) (nvml.GpuVirtualizationMode, nvml.Return) { // panic("mock out the DeviceGetVirtualizationMode method") // }, // DeviceIsMigDeviceHandleFunc: func(device nvml.Device) (bool, nvml.Return) { // panic("mock out the DeviceIsMigDeviceHandle method") // }, // DeviceModifyDrainStateFunc: func(pciInfo *nvml.PciInfo, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceModifyDrainState method") // }, // DeviceOnSameBoardFunc: func(device1 nvml.Device, device2 nvml.Device) (int, nvml.Return) { // panic("mock out the DeviceOnSameBoard method") // }, // DevicePowerSmoothingActivatePresetProfileFunc: func(device nvml.Device, powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { // panic("mock out the DevicePowerSmoothingActivatePresetProfile method") // }, // DevicePowerSmoothingSetStateFunc: func(device nvml.Device, powerSmoothingState *nvml.PowerSmoothingState) nvml.Return { // panic("mock out the DevicePowerSmoothingSetState method") // }, // DevicePowerSmoothingUpdatePresetProfileParamFunc: func(device nvml.Device, powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { // panic("mock out the DevicePowerSmoothingUpdatePresetProfileParam method") // }, // DeviceQueryDrainStateFunc: func(pciInfo *nvml.PciInfo) (nvml.EnableState, nvml.Return) { // panic("mock out the DeviceQueryDrainState method") // }, // DeviceReadWritePRM_v1Func: func(device nvml.Device, pRMTLV_v1 *nvml.PRMTLV_v1) nvml.Return { // panic("mock out the DeviceReadWritePRM_v1 method") // }, // DeviceRegisterEventsFunc: func(device nvml.Device, v uint64, eventSet nvml.EventSet) nvml.Return { // panic("mock out the DeviceRegisterEvents method") // }, // DeviceRemoveGpuFunc: func(pciInfo *nvml.PciInfo) nvml.Return { // panic("mock out the DeviceRemoveGpu method") // }, // DeviceRemoveGpu_v2Func: func(pciInfo *nvml.PciInfo, detachGpuState nvml.DetachGpuState, pcieLinkState nvml.PcieLinkState) nvml.Return { // panic("mock out the DeviceRemoveGpu_v2 method") // }, // DeviceResetApplicationsClocksFunc: func(device nvml.Device) nvml.Return { // panic("mock out the DeviceResetApplicationsClocks method") // }, // DeviceResetGpuLockedClocksFunc: func(device nvml.Device) nvml.Return { // panic("mock out the DeviceResetGpuLockedClocks method") // }, // DeviceResetMemoryLockedClocksFunc: func(device nvml.Device) nvml.Return { // panic("mock out the DeviceResetMemoryLockedClocks method") // }, // DeviceResetNvLinkErrorCountersFunc: func(device nvml.Device, n int) nvml.Return { // panic("mock out the DeviceResetNvLinkErrorCounters method") // }, // DeviceResetNvLinkUtilizationCounterFunc: func(device nvml.Device, n1 int, n2 int) nvml.Return { // panic("mock out the DeviceResetNvLinkUtilizationCounter method") // }, // DeviceSetAPIRestrictionFunc: func(device nvml.Device, restrictedAPI nvml.RestrictedAPI, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceSetAPIRestriction method") // }, // DeviceSetAccountingModeFunc: func(device nvml.Device, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceSetAccountingMode method") // }, // DeviceSetApplicationsClocksFunc: func(device nvml.Device, v1 uint32, v2 uint32) nvml.Return { // panic("mock out the DeviceSetApplicationsClocks method") // }, // DeviceSetAutoBoostedClocksEnabledFunc: func(device nvml.Device, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceSetAutoBoostedClocksEnabled method") // }, // DeviceSetClockOffsetsFunc: func(device nvml.Device, clockOffset nvml.ClockOffset) nvml.Return { // panic("mock out the DeviceSetClockOffsets method") // }, // DeviceSetComputeModeFunc: func(device nvml.Device, computeMode nvml.ComputeMode) nvml.Return { // panic("mock out the DeviceSetComputeMode method") // }, // DeviceSetConfComputeUnprotectedMemSizeFunc: func(device nvml.Device, v uint64) nvml.Return { // panic("mock out the DeviceSetConfComputeUnprotectedMemSize method") // }, // DeviceSetCpuAffinityFunc: func(device nvml.Device) nvml.Return { // panic("mock out the DeviceSetCpuAffinity method") // }, // DeviceSetDefaultAutoBoostedClocksEnabledFunc: func(device nvml.Device, enableState nvml.EnableState, v uint32) nvml.Return { // panic("mock out the DeviceSetDefaultAutoBoostedClocksEnabled method") // }, // DeviceSetDefaultFanSpeed_v2Func: func(device nvml.Device, n int) nvml.Return { // panic("mock out the DeviceSetDefaultFanSpeed_v2 method") // }, // DeviceSetDramEncryptionModeFunc: func(device nvml.Device, dramEncryptionInfo *nvml.DramEncryptionInfo) nvml.Return { // panic("mock out the DeviceSetDramEncryptionMode method") // }, // DeviceSetDriverModelFunc: func(device nvml.Device, driverModel nvml.DriverModel, v uint32) nvml.Return { // panic("mock out the DeviceSetDriverModel method") // }, // DeviceSetEccModeFunc: func(device nvml.Device, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceSetEccMode method") // }, // DeviceSetFanControlPolicyFunc: func(device nvml.Device, n int, fanControlPolicy nvml.FanControlPolicy) nvml.Return { // panic("mock out the DeviceSetFanControlPolicy method") // }, // DeviceSetFanSpeed_v2Func: func(device nvml.Device, n1 int, n2 int) nvml.Return { // panic("mock out the DeviceSetFanSpeed_v2 method") // }, // DeviceSetGpcClkVfOffsetFunc: func(device nvml.Device, n int) nvml.Return { // panic("mock out the DeviceSetGpcClkVfOffset method") // }, // DeviceSetGpuLockedClocksFunc: func(device nvml.Device, v1 uint32, v2 uint32) nvml.Return { // panic("mock out the DeviceSetGpuLockedClocks method") // }, // DeviceSetGpuOperationModeFunc: func(device nvml.Device, gpuOperationMode nvml.GpuOperationMode) nvml.Return { // panic("mock out the DeviceSetGpuOperationMode method") // }, // DeviceSetMemClkVfOffsetFunc: func(device nvml.Device, n int) nvml.Return { // panic("mock out the DeviceSetMemClkVfOffset method") // }, // DeviceSetMemoryLockedClocksFunc: func(device nvml.Device, v1 uint32, v2 uint32) nvml.Return { // panic("mock out the DeviceSetMemoryLockedClocks method") // }, // DeviceSetMigModeFunc: func(device nvml.Device, n int) (nvml.Return, nvml.Return) { // panic("mock out the DeviceSetMigMode method") // }, // DeviceSetNvLinkDeviceLowPowerThresholdFunc: func(device nvml.Device, nvLinkPowerThres *nvml.NvLinkPowerThres) nvml.Return { // panic("mock out the DeviceSetNvLinkDeviceLowPowerThreshold method") // }, // DeviceSetNvLinkUtilizationControlFunc: func(device nvml.Device, n1 int, n2 int, nvLinkUtilizationControl *nvml.NvLinkUtilizationControl, b bool) nvml.Return { // panic("mock out the DeviceSetNvLinkUtilizationControl method") // }, // DeviceSetNvlinkBwModeFunc: func(device nvml.Device, nvlinkSetBwMode *nvml.NvlinkSetBwMode) nvml.Return { // panic("mock out the DeviceSetNvlinkBwMode method") // }, // DeviceSetPersistenceModeFunc: func(device nvml.Device, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceSetPersistenceMode method") // }, // DeviceSetPowerManagementLimitFunc: func(device nvml.Device, v uint32) nvml.Return { // panic("mock out the DeviceSetPowerManagementLimit method") // }, // DeviceSetPowerManagementLimit_v2Func: func(device nvml.Device, powerValue_v2 *nvml.PowerValue_v2) nvml.Return { // panic("mock out the DeviceSetPowerManagementLimit_v2 method") // }, // DeviceSetTemperatureThresholdFunc: func(device nvml.Device, temperatureThresholds nvml.TemperatureThresholds, n int) nvml.Return { // panic("mock out the DeviceSetTemperatureThreshold method") // }, // DeviceSetVgpuCapabilitiesFunc: func(device nvml.Device, deviceVgpuCapability nvml.DeviceVgpuCapability, enableState nvml.EnableState) nvml.Return { // panic("mock out the DeviceSetVgpuCapabilities method") // }, // DeviceSetVgpuHeterogeneousModeFunc: func(device nvml.Device, vgpuHeterogeneousMode nvml.VgpuHeterogeneousMode) nvml.Return { // panic("mock out the DeviceSetVgpuHeterogeneousMode method") // }, // DeviceSetVgpuSchedulerStateFunc: func(device nvml.Device, vgpuSchedulerSetState *nvml.VgpuSchedulerSetState) nvml.Return { // panic("mock out the DeviceSetVgpuSchedulerState method") // }, // DeviceSetVirtualizationModeFunc: func(device nvml.Device, gpuVirtualizationMode nvml.GpuVirtualizationMode) nvml.Return { // panic("mock out the DeviceSetVirtualizationMode method") // }, // DeviceValidateInforomFunc: func(device nvml.Device) nvml.Return { // panic("mock out the DeviceValidateInforom method") // }, // DeviceWorkloadPowerProfileClearRequestedProfilesFunc: func(device nvml.Device, workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { // panic("mock out the DeviceWorkloadPowerProfileClearRequestedProfiles method") // }, // DeviceWorkloadPowerProfileGetCurrentProfilesFunc: func(device nvml.Device) (nvml.WorkloadPowerProfileCurrentProfiles, nvml.Return) { // panic("mock out the DeviceWorkloadPowerProfileGetCurrentProfiles method") // }, // DeviceWorkloadPowerProfileGetProfilesInfoFunc: func(device nvml.Device) (nvml.WorkloadPowerProfileProfilesInfo, nvml.Return) { // panic("mock out the DeviceWorkloadPowerProfileGetProfilesInfo method") // }, // DeviceWorkloadPowerProfileSetRequestedProfilesFunc: func(device nvml.Device, workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { // panic("mock out the DeviceWorkloadPowerProfileSetRequestedProfiles method") // }, // ErrorStringFunc: func(returnMoqParam nvml.Return) string { // panic("mock out the ErrorString method") // }, // EventSetCreateFunc: func() (nvml.EventSet, nvml.Return) { // panic("mock out the EventSetCreate method") // }, // EventSetFreeFunc: func(eventSet nvml.EventSet) nvml.Return { // panic("mock out the EventSetFree method") // }, // EventSetWaitFunc: func(eventSet nvml.EventSet, v uint32) (nvml.EventData, nvml.Return) { // panic("mock out the EventSetWait method") // }, // ExtensionsFunc: func() nvml.ExtendedInterface { // panic("mock out the Extensions method") // }, // GetExcludedDeviceCountFunc: func() (int, nvml.Return) { // panic("mock out the GetExcludedDeviceCount method") // }, // GetExcludedDeviceInfoByIndexFunc: func(n int) (nvml.ExcludedDeviceInfo, nvml.Return) { // panic("mock out the GetExcludedDeviceInfoByIndex method") // }, // GetVgpuCompatibilityFunc: func(vgpuMetadata *nvml.VgpuMetadata, vgpuPgpuMetadata *nvml.VgpuPgpuMetadata) (nvml.VgpuPgpuCompatibility, nvml.Return) { // panic("mock out the GetVgpuCompatibility method") // }, // GetVgpuDriverCapabilitiesFunc: func(vgpuDriverCapability nvml.VgpuDriverCapability) (bool, nvml.Return) { // panic("mock out the GetVgpuDriverCapabilities method") // }, // GetVgpuVersionFunc: func() (nvml.VgpuVersion, nvml.VgpuVersion, nvml.Return) { // panic("mock out the GetVgpuVersion method") // }, // GpmMetricsGetFunc: func(gpmMetricsGetType *nvml.GpmMetricsGetType) nvml.Return { // panic("mock out the GpmMetricsGet method") // }, // GpmMetricsGetVFunc: func(gpmMetricsGetType *nvml.GpmMetricsGetType) nvml.GpmMetricsGetVType { // panic("mock out the GpmMetricsGetV method") // }, // GpmMigSampleGetFunc: func(device nvml.Device, n int, gpmSample nvml.GpmSample) nvml.Return { // panic("mock out the GpmMigSampleGet method") // }, // GpmQueryDeviceSupportFunc: func(device nvml.Device) (nvml.GpmSupport, nvml.Return) { // panic("mock out the GpmQueryDeviceSupport method") // }, // GpmQueryDeviceSupportVFunc: func(device nvml.Device) nvml.GpmSupportV { // panic("mock out the GpmQueryDeviceSupportV method") // }, // GpmQueryIfStreamingEnabledFunc: func(device nvml.Device) (uint32, nvml.Return) { // panic("mock out the GpmQueryIfStreamingEnabled method") // }, // GpmSampleAllocFunc: func() (nvml.GpmSample, nvml.Return) { // panic("mock out the GpmSampleAlloc method") // }, // GpmSampleFreeFunc: func(gpmSample nvml.GpmSample) nvml.Return { // panic("mock out the GpmSampleFree method") // }, // GpmSampleGetFunc: func(device nvml.Device, gpmSample nvml.GpmSample) nvml.Return { // panic("mock out the GpmSampleGet method") // }, // GpmSetStreamingEnabledFunc: func(device nvml.Device, v uint32) nvml.Return { // panic("mock out the GpmSetStreamingEnabled method") // }, // GpuInstanceCreateComputeInstanceFunc: func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (nvml.ComputeInstance, nvml.Return) { // panic("mock out the GpuInstanceCreateComputeInstance method") // }, // GpuInstanceCreateComputeInstanceWithPlacementFunc: func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo, computeInstancePlacement *nvml.ComputeInstancePlacement) (nvml.ComputeInstance, nvml.Return) { // panic("mock out the GpuInstanceCreateComputeInstanceWithPlacement method") // }, // GpuInstanceDestroyFunc: func(gpuInstance nvml.GpuInstance) nvml.Return { // panic("mock out the GpuInstanceDestroy method") // }, // GpuInstanceGetActiveVgpusFunc: func(gpuInstance nvml.GpuInstance) (nvml.ActiveVgpuInstanceInfo, nvml.Return) { // panic("mock out the GpuInstanceGetActiveVgpus method") // }, // GpuInstanceGetComputeInstanceByIdFunc: func(gpuInstance nvml.GpuInstance, n int) (nvml.ComputeInstance, nvml.Return) { // panic("mock out the GpuInstanceGetComputeInstanceById method") // }, // GpuInstanceGetComputeInstancePossiblePlacementsFunc: func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstancePlacement, nvml.Return) { // panic("mock out the GpuInstanceGetComputeInstancePossiblePlacements method") // }, // GpuInstanceGetComputeInstanceProfileInfoFunc: func(gpuInstance nvml.GpuInstance, n1 int, n2 int) (nvml.ComputeInstanceProfileInfo, nvml.Return) { // panic("mock out the GpuInstanceGetComputeInstanceProfileInfo method") // }, // GpuInstanceGetComputeInstanceProfileInfoVFunc: func(gpuInstance nvml.GpuInstance, n1 int, n2 int) nvml.ComputeInstanceProfileInfoHandler { // panic("mock out the GpuInstanceGetComputeInstanceProfileInfoV method") // }, // GpuInstanceGetComputeInstanceRemainingCapacityFunc: func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (int, nvml.Return) { // panic("mock out the GpuInstanceGetComputeInstanceRemainingCapacity method") // }, // GpuInstanceGetComputeInstancesFunc: func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstance, nvml.Return) { // panic("mock out the GpuInstanceGetComputeInstances method") // }, // GpuInstanceGetCreatableVgpusFunc: func(gpuInstance nvml.GpuInstance) (nvml.VgpuTypeIdInfo, nvml.Return) { // panic("mock out the GpuInstanceGetCreatableVgpus method") // }, // GpuInstanceGetInfoFunc: func(gpuInstance nvml.GpuInstance) (nvml.GpuInstanceInfo, nvml.Return) { // panic("mock out the GpuInstanceGetInfo method") // }, // GpuInstanceGetVgpuHeterogeneousModeFunc: func(gpuInstance nvml.GpuInstance) (nvml.VgpuHeterogeneousMode, nvml.Return) { // panic("mock out the GpuInstanceGetVgpuHeterogeneousMode method") // }, // GpuInstanceGetVgpuSchedulerLogFunc: func(gpuInstance nvml.GpuInstance) (nvml.VgpuSchedulerLogInfo, nvml.Return) { // panic("mock out the GpuInstanceGetVgpuSchedulerLog method") // }, // GpuInstanceGetVgpuSchedulerStateFunc: func(gpuInstance nvml.GpuInstance) (nvml.VgpuSchedulerStateInfo, nvml.Return) { // panic("mock out the GpuInstanceGetVgpuSchedulerState method") // }, // GpuInstanceGetVgpuTypeCreatablePlacementsFunc: func(gpuInstance nvml.GpuInstance) (nvml.VgpuCreatablePlacementInfo, nvml.Return) { // panic("mock out the GpuInstanceGetVgpuTypeCreatablePlacements method") // }, // GpuInstanceSetVgpuHeterogeneousModeFunc: func(gpuInstance nvml.GpuInstance, vgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode) nvml.Return { // panic("mock out the GpuInstanceSetVgpuHeterogeneousMode method") // }, // GpuInstanceSetVgpuSchedulerStateFunc: func(gpuInstance nvml.GpuInstance, vgpuSchedulerState *nvml.VgpuSchedulerState) nvml.Return { // panic("mock out the GpuInstanceSetVgpuSchedulerState method") // }, // InitFunc: func() nvml.Return { // panic("mock out the Init method") // }, // InitWithFlagsFunc: func(v uint32) nvml.Return { // panic("mock out the InitWithFlags method") // }, // SetVgpuVersionFunc: func(vgpuVersion *nvml.VgpuVersion) nvml.Return { // panic("mock out the SetVgpuVersion method") // }, // ShutdownFunc: func() nvml.Return { // panic("mock out the Shutdown method") // }, // SystemEventSetCreateFunc: func(systemEventSetCreateRequest *nvml.SystemEventSetCreateRequest) nvml.Return { // panic("mock out the SystemEventSetCreate method") // }, // SystemEventSetFreeFunc: func(systemEventSetFreeRequest *nvml.SystemEventSetFreeRequest) nvml.Return { // panic("mock out the SystemEventSetFree method") // }, // SystemEventSetWaitFunc: func(systemEventSetWaitRequest *nvml.SystemEventSetWaitRequest) nvml.Return { // panic("mock out the SystemEventSetWait method") // }, // SystemGetConfComputeCapabilitiesFunc: func() (nvml.ConfComputeSystemCaps, nvml.Return) { // panic("mock out the SystemGetConfComputeCapabilities method") // }, // SystemGetConfComputeGpusReadyStateFunc: func() (uint32, nvml.Return) { // panic("mock out the SystemGetConfComputeGpusReadyState method") // }, // SystemGetConfComputeKeyRotationThresholdInfoFunc: func() (nvml.ConfComputeGetKeyRotationThresholdInfo, nvml.Return) { // panic("mock out the SystemGetConfComputeKeyRotationThresholdInfo method") // }, // SystemGetConfComputeSettingsFunc: func() (nvml.SystemConfComputeSettings, nvml.Return) { // panic("mock out the SystemGetConfComputeSettings method") // }, // SystemGetConfComputeStateFunc: func() (nvml.ConfComputeSystemState, nvml.Return) { // panic("mock out the SystemGetConfComputeState method") // }, // SystemGetCudaDriverVersionFunc: func() (int, nvml.Return) { // panic("mock out the SystemGetCudaDriverVersion method") // }, // SystemGetCudaDriverVersion_v2Func: func() (int, nvml.Return) { // panic("mock out the SystemGetCudaDriverVersion_v2 method") // }, // SystemGetDriverBranchFunc: func() (nvml.SystemDriverBranchInfo, nvml.Return) { // panic("mock out the SystemGetDriverBranch method") // }, // SystemGetDriverVersionFunc: func() (string, nvml.Return) { // panic("mock out the SystemGetDriverVersion method") // }, // SystemGetHicVersionFunc: func() ([]nvml.HwbcEntry, nvml.Return) { // panic("mock out the SystemGetHicVersion method") // }, // SystemGetNVMLVersionFunc: func() (string, nvml.Return) { // panic("mock out the SystemGetNVMLVersion method") // }, // SystemGetNvlinkBwModeFunc: func() (uint32, nvml.Return) { // panic("mock out the SystemGetNvlinkBwMode method") // }, // SystemGetProcessNameFunc: func(n int) (string, nvml.Return) { // panic("mock out the SystemGetProcessName method") // }, // SystemGetTopologyGpuSetFunc: func(n int) ([]nvml.Device, nvml.Return) { // panic("mock out the SystemGetTopologyGpuSet method") // }, // SystemRegisterEventsFunc: func(systemRegisterEventRequest *nvml.SystemRegisterEventRequest) nvml.Return { // panic("mock out the SystemRegisterEvents method") // }, // SystemSetConfComputeGpusReadyStateFunc: func(v uint32) nvml.Return { // panic("mock out the SystemSetConfComputeGpusReadyState method") // }, // SystemSetConfComputeKeyRotationThresholdInfoFunc: func(confComputeSetKeyRotationThresholdInfo nvml.ConfComputeSetKeyRotationThresholdInfo) nvml.Return { // panic("mock out the SystemSetConfComputeKeyRotationThresholdInfo method") // }, // SystemSetNvlinkBwModeFunc: func(v uint32) nvml.Return { // panic("mock out the SystemSetNvlinkBwMode method") // }, // UnitGetCountFunc: func() (int, nvml.Return) { // panic("mock out the UnitGetCount method") // }, // UnitGetDevicesFunc: func(unit nvml.Unit) ([]nvml.Device, nvml.Return) { // panic("mock out the UnitGetDevices method") // }, // UnitGetFanSpeedInfoFunc: func(unit nvml.Unit) (nvml.UnitFanSpeeds, nvml.Return) { // panic("mock out the UnitGetFanSpeedInfo method") // }, // UnitGetHandleByIndexFunc: func(n int) (nvml.Unit, nvml.Return) { // panic("mock out the UnitGetHandleByIndex method") // }, // UnitGetLedStateFunc: func(unit nvml.Unit) (nvml.LedState, nvml.Return) { // panic("mock out the UnitGetLedState method") // }, // UnitGetPsuInfoFunc: func(unit nvml.Unit) (nvml.PSUInfo, nvml.Return) { // panic("mock out the UnitGetPsuInfo method") // }, // UnitGetTemperatureFunc: func(unit nvml.Unit, n int) (uint32, nvml.Return) { // panic("mock out the UnitGetTemperature method") // }, // UnitGetUnitInfoFunc: func(unit nvml.Unit) (nvml.UnitInfo, nvml.Return) { // panic("mock out the UnitGetUnitInfo method") // }, // UnitSetLedStateFunc: func(unit nvml.Unit, ledColor nvml.LedColor) nvml.Return { // panic("mock out the UnitSetLedState method") // }, // VgpuInstanceClearAccountingPidsFunc: func(vgpuInstance nvml.VgpuInstance) nvml.Return { // panic("mock out the VgpuInstanceClearAccountingPids method") // }, // VgpuInstanceGetAccountingModeFunc: func(vgpuInstance nvml.VgpuInstance) (nvml.EnableState, nvml.Return) { // panic("mock out the VgpuInstanceGetAccountingMode method") // }, // VgpuInstanceGetAccountingPidsFunc: func(vgpuInstance nvml.VgpuInstance) ([]int, nvml.Return) { // panic("mock out the VgpuInstanceGetAccountingPids method") // }, // VgpuInstanceGetAccountingStatsFunc: func(vgpuInstance nvml.VgpuInstance, n int) (nvml.AccountingStats, nvml.Return) { // panic("mock out the VgpuInstanceGetAccountingStats method") // }, // VgpuInstanceGetEccModeFunc: func(vgpuInstance nvml.VgpuInstance) (nvml.EnableState, nvml.Return) { // panic("mock out the VgpuInstanceGetEccMode method") // }, // VgpuInstanceGetEncoderCapacityFunc: func(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) { // panic("mock out the VgpuInstanceGetEncoderCapacity method") // }, // VgpuInstanceGetEncoderSessionsFunc: func(vgpuInstance nvml.VgpuInstance) (int, nvml.EncoderSessionInfo, nvml.Return) { // panic("mock out the VgpuInstanceGetEncoderSessions method") // }, // VgpuInstanceGetEncoderStatsFunc: func(vgpuInstance nvml.VgpuInstance) (int, uint32, uint32, nvml.Return) { // panic("mock out the VgpuInstanceGetEncoderStats method") // }, // VgpuInstanceGetFBCSessionsFunc: func(vgpuInstance nvml.VgpuInstance) (int, nvml.FBCSessionInfo, nvml.Return) { // panic("mock out the VgpuInstanceGetFBCSessions method") // }, // VgpuInstanceGetFBCStatsFunc: func(vgpuInstance nvml.VgpuInstance) (nvml.FBCStats, nvml.Return) { // panic("mock out the VgpuInstanceGetFBCStats method") // }, // VgpuInstanceGetFbUsageFunc: func(vgpuInstance nvml.VgpuInstance) (uint64, nvml.Return) { // panic("mock out the VgpuInstanceGetFbUsage method") // }, // VgpuInstanceGetFrameRateLimitFunc: func(vgpuInstance nvml.VgpuInstance) (uint32, nvml.Return) { // panic("mock out the VgpuInstanceGetFrameRateLimit method") // }, // VgpuInstanceGetGpuInstanceIdFunc: func(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) { // panic("mock out the VgpuInstanceGetGpuInstanceId method") // }, // VgpuInstanceGetGpuPciIdFunc: func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { // panic("mock out the VgpuInstanceGetGpuPciId method") // }, // VgpuInstanceGetLicenseInfoFunc: func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuLicenseInfo, nvml.Return) { // panic("mock out the VgpuInstanceGetLicenseInfo method") // }, // VgpuInstanceGetLicenseStatusFunc: func(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) { // panic("mock out the VgpuInstanceGetLicenseStatus method") // }, // VgpuInstanceGetMdevUUIDFunc: func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { // panic("mock out the VgpuInstanceGetMdevUUID method") // }, // VgpuInstanceGetMetadataFunc: func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuMetadata, nvml.Return) { // panic("mock out the VgpuInstanceGetMetadata method") // }, // VgpuInstanceGetRuntimeStateSizeFunc: func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuRuntimeState, nvml.Return) { // panic("mock out the VgpuInstanceGetRuntimeStateSize method") // }, // VgpuInstanceGetTypeFunc: func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuTypeId, nvml.Return) { // panic("mock out the VgpuInstanceGetType method") // }, // VgpuInstanceGetUUIDFunc: func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { // panic("mock out the VgpuInstanceGetUUID method") // }, // VgpuInstanceGetVmDriverVersionFunc: func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { // panic("mock out the VgpuInstanceGetVmDriverVersion method") // }, // VgpuInstanceGetVmIDFunc: func(vgpuInstance nvml.VgpuInstance) (string, nvml.VgpuVmIdType, nvml.Return) { // panic("mock out the VgpuInstanceGetVmID method") // }, // VgpuInstanceSetEncoderCapacityFunc: func(vgpuInstance nvml.VgpuInstance, n int) nvml.Return { // panic("mock out the VgpuInstanceSetEncoderCapacity method") // }, // VgpuTypeGetBAR1InfoFunc: func(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuTypeBar1Info, nvml.Return) { // panic("mock out the VgpuTypeGetBAR1Info method") // }, // VgpuTypeGetCapabilitiesFunc: func(vgpuTypeId nvml.VgpuTypeId, vgpuCapability nvml.VgpuCapability) (bool, nvml.Return) { // panic("mock out the VgpuTypeGetCapabilities method") // }, // VgpuTypeGetClassFunc: func(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) { // panic("mock out the VgpuTypeGetClass method") // }, // VgpuTypeGetDeviceIDFunc: func(vgpuTypeId nvml.VgpuTypeId) (uint64, uint64, nvml.Return) { // panic("mock out the VgpuTypeGetDeviceID method") // }, // VgpuTypeGetFrameRateLimitFunc: func(vgpuTypeId nvml.VgpuTypeId) (uint32, nvml.Return) { // panic("mock out the VgpuTypeGetFrameRateLimit method") // }, // VgpuTypeGetFramebufferSizeFunc: func(vgpuTypeId nvml.VgpuTypeId) (uint64, nvml.Return) { // panic("mock out the VgpuTypeGetFramebufferSize method") // }, // VgpuTypeGetGpuInstanceProfileIdFunc: func(vgpuTypeId nvml.VgpuTypeId) (uint32, nvml.Return) { // panic("mock out the VgpuTypeGetGpuInstanceProfileId method") // }, // VgpuTypeGetLicenseFunc: func(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) { // panic("mock out the VgpuTypeGetLicense method") // }, // VgpuTypeGetMaxInstancesFunc: func(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { // panic("mock out the VgpuTypeGetMaxInstances method") // }, // VgpuTypeGetMaxInstancesPerGpuInstanceFunc: func(vgpuTypeMaxInstance *nvml.VgpuTypeMaxInstance) nvml.Return { // panic("mock out the VgpuTypeGetMaxInstancesPerGpuInstance method") // }, // VgpuTypeGetMaxInstancesPerVmFunc: func(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { // panic("mock out the VgpuTypeGetMaxInstancesPerVm method") // }, // VgpuTypeGetNameFunc: func(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) { // panic("mock out the VgpuTypeGetName method") // }, // VgpuTypeGetNumDisplayHeadsFunc: func(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { // panic("mock out the VgpuTypeGetNumDisplayHeads method") // }, // VgpuTypeGetResolutionFunc: func(vgpuTypeId nvml.VgpuTypeId, n int) (uint32, uint32, nvml.Return) { // panic("mock out the VgpuTypeGetResolution method") // }, // } // // // use mockedInterface in code that requires nvml.Interface // // and then make assertions. // // } type Interface struct { // ComputeInstanceDestroyFunc mocks the ComputeInstanceDestroy method. ComputeInstanceDestroyFunc func(computeInstance nvml.ComputeInstance) nvml.Return // ComputeInstanceGetInfoFunc mocks the ComputeInstanceGetInfo method. ComputeInstanceGetInfoFunc func(computeInstance nvml.ComputeInstance) (nvml.ComputeInstanceInfo, nvml.Return) // DeviceClearAccountingPidsFunc mocks the DeviceClearAccountingPids method. DeviceClearAccountingPidsFunc func(device nvml.Device) nvml.Return // DeviceClearCpuAffinityFunc mocks the DeviceClearCpuAffinity method. DeviceClearCpuAffinityFunc func(device nvml.Device) nvml.Return // DeviceClearEccErrorCountsFunc mocks the DeviceClearEccErrorCounts method. DeviceClearEccErrorCountsFunc func(device nvml.Device, eccCounterType nvml.EccCounterType) nvml.Return // DeviceClearFieldValuesFunc mocks the DeviceClearFieldValues method. DeviceClearFieldValuesFunc func(device nvml.Device, fieldValues []nvml.FieldValue) nvml.Return // DeviceCreateGpuInstanceFunc mocks the DeviceCreateGpuInstance method. DeviceCreateGpuInstanceFunc func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (nvml.GpuInstance, nvml.Return) // DeviceCreateGpuInstanceWithPlacementFunc mocks the DeviceCreateGpuInstanceWithPlacement method. DeviceCreateGpuInstanceWithPlacementFunc func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo, gpuInstancePlacement *nvml.GpuInstancePlacement) (nvml.GpuInstance, nvml.Return) // DeviceDiscoverGpusFunc mocks the DeviceDiscoverGpus method. DeviceDiscoverGpusFunc func() (nvml.PciInfo, nvml.Return) // DeviceFreezeNvLinkUtilizationCounterFunc mocks the DeviceFreezeNvLinkUtilizationCounter method. DeviceFreezeNvLinkUtilizationCounterFunc func(device nvml.Device, n1 int, n2 int, enableState nvml.EnableState) nvml.Return // DeviceGetAPIRestrictionFunc mocks the DeviceGetAPIRestriction method. DeviceGetAPIRestrictionFunc func(device nvml.Device, restrictedAPI nvml.RestrictedAPI) (nvml.EnableState, nvml.Return) // DeviceGetAccountingBufferSizeFunc mocks the DeviceGetAccountingBufferSize method. DeviceGetAccountingBufferSizeFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetAccountingModeFunc mocks the DeviceGetAccountingMode method. DeviceGetAccountingModeFunc func(device nvml.Device) (nvml.EnableState, nvml.Return) // DeviceGetAccountingPidsFunc mocks the DeviceGetAccountingPids method. DeviceGetAccountingPidsFunc func(device nvml.Device) ([]int, nvml.Return) // DeviceGetAccountingStatsFunc mocks the DeviceGetAccountingStats method. DeviceGetAccountingStatsFunc func(device nvml.Device, v uint32) (nvml.AccountingStats, nvml.Return) // DeviceGetActiveVgpusFunc mocks the DeviceGetActiveVgpus method. DeviceGetActiveVgpusFunc func(device nvml.Device) ([]nvml.VgpuInstance, nvml.Return) // DeviceGetAdaptiveClockInfoStatusFunc mocks the DeviceGetAdaptiveClockInfoStatus method. DeviceGetAdaptiveClockInfoStatusFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetAddressingModeFunc mocks the DeviceGetAddressingMode method. DeviceGetAddressingModeFunc func(device nvml.Device) (nvml.DeviceAddressingMode, nvml.Return) // DeviceGetApplicationsClockFunc mocks the DeviceGetApplicationsClock method. DeviceGetApplicationsClockFunc func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) // DeviceGetArchitectureFunc mocks the DeviceGetArchitecture method. DeviceGetArchitectureFunc func(device nvml.Device) (nvml.DeviceArchitecture, nvml.Return) // DeviceGetAttributesFunc mocks the DeviceGetAttributes method. DeviceGetAttributesFunc func(device nvml.Device) (nvml.DeviceAttributes, nvml.Return) // DeviceGetAutoBoostedClocksEnabledFunc mocks the DeviceGetAutoBoostedClocksEnabled method. DeviceGetAutoBoostedClocksEnabledFunc func(device nvml.Device) (nvml.EnableState, nvml.EnableState, nvml.Return) // DeviceGetBAR1MemoryInfoFunc mocks the DeviceGetBAR1MemoryInfo method. DeviceGetBAR1MemoryInfoFunc func(device nvml.Device) (nvml.BAR1Memory, nvml.Return) // DeviceGetBoardIdFunc mocks the DeviceGetBoardId method. DeviceGetBoardIdFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetBoardPartNumberFunc mocks the DeviceGetBoardPartNumber method. DeviceGetBoardPartNumberFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetBrandFunc mocks the DeviceGetBrand method. DeviceGetBrandFunc func(device nvml.Device) (nvml.BrandType, nvml.Return) // DeviceGetBridgeChipInfoFunc mocks the DeviceGetBridgeChipInfo method. DeviceGetBridgeChipInfoFunc func(device nvml.Device) (nvml.BridgeChipHierarchy, nvml.Return) // DeviceGetBusTypeFunc mocks the DeviceGetBusType method. DeviceGetBusTypeFunc func(device nvml.Device) (nvml.BusType, nvml.Return) // DeviceGetC2cModeInfoVFunc mocks the DeviceGetC2cModeInfoV method. DeviceGetC2cModeInfoVFunc func(device nvml.Device) nvml.C2cModeInfoHandler // DeviceGetCapabilitiesFunc mocks the DeviceGetCapabilities method. DeviceGetCapabilitiesFunc func(device nvml.Device) (nvml.DeviceCapabilities, nvml.Return) // DeviceGetClkMonStatusFunc mocks the DeviceGetClkMonStatus method. DeviceGetClkMonStatusFunc func(device nvml.Device) (nvml.ClkMonStatus, nvml.Return) // DeviceGetClockFunc mocks the DeviceGetClock method. DeviceGetClockFunc func(device nvml.Device, clockType nvml.ClockType, clockId nvml.ClockId) (uint32, nvml.Return) // DeviceGetClockInfoFunc mocks the DeviceGetClockInfo method. DeviceGetClockInfoFunc func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) // DeviceGetClockOffsetsFunc mocks the DeviceGetClockOffsets method. DeviceGetClockOffsetsFunc func(device nvml.Device) (nvml.ClockOffset, nvml.Return) // DeviceGetComputeInstanceIdFunc mocks the DeviceGetComputeInstanceId method. DeviceGetComputeInstanceIdFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetComputeModeFunc mocks the DeviceGetComputeMode method. DeviceGetComputeModeFunc func(device nvml.Device) (nvml.ComputeMode, nvml.Return) // DeviceGetComputeRunningProcessesFunc mocks the DeviceGetComputeRunningProcesses method. DeviceGetComputeRunningProcessesFunc func(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) // DeviceGetConfComputeGpuAttestationReportFunc mocks the DeviceGetConfComputeGpuAttestationReport method. DeviceGetConfComputeGpuAttestationReportFunc func(device nvml.Device, confComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport) nvml.Return // DeviceGetConfComputeGpuCertificateFunc mocks the DeviceGetConfComputeGpuCertificate method. DeviceGetConfComputeGpuCertificateFunc func(device nvml.Device) (nvml.ConfComputeGpuCertificate, nvml.Return) // DeviceGetConfComputeMemSizeInfoFunc mocks the DeviceGetConfComputeMemSizeInfo method. DeviceGetConfComputeMemSizeInfoFunc func(device nvml.Device) (nvml.ConfComputeMemSizeInfo, nvml.Return) // DeviceGetConfComputeProtectedMemoryUsageFunc mocks the DeviceGetConfComputeProtectedMemoryUsage method. DeviceGetConfComputeProtectedMemoryUsageFunc func(device nvml.Device) (nvml.Memory, nvml.Return) // DeviceGetCoolerInfoFunc mocks the DeviceGetCoolerInfo method. DeviceGetCoolerInfoFunc func(device nvml.Device) (nvml.CoolerInfo, nvml.Return) // DeviceGetCountFunc mocks the DeviceGetCount method. DeviceGetCountFunc func() (int, nvml.Return) // DeviceGetCpuAffinityFunc mocks the DeviceGetCpuAffinity method. DeviceGetCpuAffinityFunc func(device nvml.Device, n int) ([]uint, nvml.Return) // DeviceGetCpuAffinityWithinScopeFunc mocks the DeviceGetCpuAffinityWithinScope method. DeviceGetCpuAffinityWithinScopeFunc func(device nvml.Device, n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) // DeviceGetCreatableVgpusFunc mocks the DeviceGetCreatableVgpus method. DeviceGetCreatableVgpusFunc func(device nvml.Device) ([]nvml.VgpuTypeId, nvml.Return) // DeviceGetCudaComputeCapabilityFunc mocks the DeviceGetCudaComputeCapability method. DeviceGetCudaComputeCapabilityFunc func(device nvml.Device) (int, int, nvml.Return) // DeviceGetCurrPcieLinkGenerationFunc mocks the DeviceGetCurrPcieLinkGeneration method. DeviceGetCurrPcieLinkGenerationFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetCurrPcieLinkWidthFunc mocks the DeviceGetCurrPcieLinkWidth method. DeviceGetCurrPcieLinkWidthFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetCurrentClockFreqsFunc mocks the DeviceGetCurrentClockFreqs method. DeviceGetCurrentClockFreqsFunc func(device nvml.Device) (nvml.DeviceCurrentClockFreqs, nvml.Return) // DeviceGetCurrentClocksEventReasonsFunc mocks the DeviceGetCurrentClocksEventReasons method. DeviceGetCurrentClocksEventReasonsFunc func(device nvml.Device) (uint64, nvml.Return) // DeviceGetCurrentClocksThrottleReasonsFunc mocks the DeviceGetCurrentClocksThrottleReasons method. DeviceGetCurrentClocksThrottleReasonsFunc func(device nvml.Device) (uint64, nvml.Return) // DeviceGetDecoderUtilizationFunc mocks the DeviceGetDecoderUtilization method. DeviceGetDecoderUtilizationFunc func(device nvml.Device) (uint32, uint32, nvml.Return) // DeviceGetDefaultApplicationsClockFunc mocks the DeviceGetDefaultApplicationsClock method. DeviceGetDefaultApplicationsClockFunc func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) // DeviceGetDefaultEccModeFunc mocks the DeviceGetDefaultEccMode method. DeviceGetDefaultEccModeFunc func(device nvml.Device) (nvml.EnableState, nvml.Return) // DeviceGetDetailedEccErrorsFunc mocks the DeviceGetDetailedEccErrors method. DeviceGetDetailedEccErrorsFunc func(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (nvml.EccErrorCounts, nvml.Return) // DeviceGetDeviceHandleFromMigDeviceHandleFunc mocks the DeviceGetDeviceHandleFromMigDeviceHandle method. DeviceGetDeviceHandleFromMigDeviceHandleFunc func(device nvml.Device) (nvml.Device, nvml.Return) // DeviceGetDisplayActiveFunc mocks the DeviceGetDisplayActive method. DeviceGetDisplayActiveFunc func(device nvml.Device) (nvml.EnableState, nvml.Return) // DeviceGetDisplayModeFunc mocks the DeviceGetDisplayMode method. DeviceGetDisplayModeFunc func(device nvml.Device) (nvml.EnableState, nvml.Return) // DeviceGetDramEncryptionModeFunc mocks the DeviceGetDramEncryptionMode method. DeviceGetDramEncryptionModeFunc func(device nvml.Device) (nvml.DramEncryptionInfo, nvml.DramEncryptionInfo, nvml.Return) // DeviceGetDriverModelFunc mocks the DeviceGetDriverModel method. DeviceGetDriverModelFunc func(device nvml.Device) (nvml.DriverModel, nvml.DriverModel, nvml.Return) // DeviceGetDriverModel_v2Func mocks the DeviceGetDriverModel_v2 method. DeviceGetDriverModel_v2Func func(device nvml.Device) (nvml.DriverModel, nvml.DriverModel, nvml.Return) // DeviceGetDynamicPstatesInfoFunc mocks the DeviceGetDynamicPstatesInfo method. DeviceGetDynamicPstatesInfoFunc func(device nvml.Device) (nvml.GpuDynamicPstatesInfo, nvml.Return) // DeviceGetEccModeFunc mocks the DeviceGetEccMode method. DeviceGetEccModeFunc func(device nvml.Device) (nvml.EnableState, nvml.EnableState, nvml.Return) // DeviceGetEncoderCapacityFunc mocks the DeviceGetEncoderCapacity method. DeviceGetEncoderCapacityFunc func(device nvml.Device, encoderType nvml.EncoderType) (int, nvml.Return) // DeviceGetEncoderSessionsFunc mocks the DeviceGetEncoderSessions method. DeviceGetEncoderSessionsFunc func(device nvml.Device) ([]nvml.EncoderSessionInfo, nvml.Return) // DeviceGetEncoderStatsFunc mocks the DeviceGetEncoderStats method. DeviceGetEncoderStatsFunc func(device nvml.Device) (int, uint32, uint32, nvml.Return) // DeviceGetEncoderUtilizationFunc mocks the DeviceGetEncoderUtilization method. DeviceGetEncoderUtilizationFunc func(device nvml.Device) (uint32, uint32, nvml.Return) // DeviceGetEnforcedPowerLimitFunc mocks the DeviceGetEnforcedPowerLimit method. DeviceGetEnforcedPowerLimitFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetFBCSessionsFunc mocks the DeviceGetFBCSessions method. DeviceGetFBCSessionsFunc func(device nvml.Device) ([]nvml.FBCSessionInfo, nvml.Return) // DeviceGetFBCStatsFunc mocks the DeviceGetFBCStats method. DeviceGetFBCStatsFunc func(device nvml.Device) (nvml.FBCStats, nvml.Return) // DeviceGetFanControlPolicy_v2Func mocks the DeviceGetFanControlPolicy_v2 method. DeviceGetFanControlPolicy_v2Func func(device nvml.Device, n int) (nvml.FanControlPolicy, nvml.Return) // DeviceGetFanSpeedFunc mocks the DeviceGetFanSpeed method. DeviceGetFanSpeedFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetFanSpeedRPMFunc mocks the DeviceGetFanSpeedRPM method. DeviceGetFanSpeedRPMFunc func(device nvml.Device) (nvml.FanSpeedInfo, nvml.Return) // DeviceGetFanSpeed_v2Func mocks the DeviceGetFanSpeed_v2 method. DeviceGetFanSpeed_v2Func func(device nvml.Device, n int) (uint32, nvml.Return) // DeviceGetFieldValuesFunc mocks the DeviceGetFieldValues method. DeviceGetFieldValuesFunc func(device nvml.Device, fieldValues []nvml.FieldValue) nvml.Return // DeviceGetGpcClkMinMaxVfOffsetFunc mocks the DeviceGetGpcClkMinMaxVfOffset method. DeviceGetGpcClkMinMaxVfOffsetFunc func(device nvml.Device) (int, int, nvml.Return) // DeviceGetGpcClkVfOffsetFunc mocks the DeviceGetGpcClkVfOffset method. DeviceGetGpcClkVfOffsetFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetGpuFabricInfoFunc mocks the DeviceGetGpuFabricInfo method. DeviceGetGpuFabricInfoFunc func(device nvml.Device) (nvml.GpuFabricInfo, nvml.Return) // DeviceGetGpuFabricInfoVFunc mocks the DeviceGetGpuFabricInfoV method. DeviceGetGpuFabricInfoVFunc func(device nvml.Device) nvml.GpuFabricInfoHandler // DeviceGetGpuInstanceByIdFunc mocks the DeviceGetGpuInstanceById method. DeviceGetGpuInstanceByIdFunc func(device nvml.Device, n int) (nvml.GpuInstance, nvml.Return) // DeviceGetGpuInstanceIdFunc mocks the DeviceGetGpuInstanceId method. DeviceGetGpuInstanceIdFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetGpuInstancePossiblePlacementsFunc mocks the DeviceGetGpuInstancePossiblePlacements method. DeviceGetGpuInstancePossiblePlacementsFunc func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstancePlacement, nvml.Return) // DeviceGetGpuInstanceProfileInfoFunc mocks the DeviceGetGpuInstanceProfileInfo method. DeviceGetGpuInstanceProfileInfoFunc func(device nvml.Device, n int) (nvml.GpuInstanceProfileInfo, nvml.Return) // DeviceGetGpuInstanceProfileInfoByIdVFunc mocks the DeviceGetGpuInstanceProfileInfoByIdV method. DeviceGetGpuInstanceProfileInfoByIdVFunc func(device nvml.Device, n int) nvml.GpuInstanceProfileInfoByIdHandler // DeviceGetGpuInstanceProfileInfoVFunc mocks the DeviceGetGpuInstanceProfileInfoV method. DeviceGetGpuInstanceProfileInfoVFunc func(device nvml.Device, n int) nvml.GpuInstanceProfileInfoHandler // DeviceGetGpuInstanceRemainingCapacityFunc mocks the DeviceGetGpuInstanceRemainingCapacity method. DeviceGetGpuInstanceRemainingCapacityFunc func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (int, nvml.Return) // DeviceGetGpuInstancesFunc mocks the DeviceGetGpuInstances method. DeviceGetGpuInstancesFunc func(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstance, nvml.Return) // DeviceGetGpuMaxPcieLinkGenerationFunc mocks the DeviceGetGpuMaxPcieLinkGeneration method. DeviceGetGpuMaxPcieLinkGenerationFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetGpuOperationModeFunc mocks the DeviceGetGpuOperationMode method. DeviceGetGpuOperationModeFunc func(device nvml.Device) (nvml.GpuOperationMode, nvml.GpuOperationMode, nvml.Return) // DeviceGetGraphicsRunningProcessesFunc mocks the DeviceGetGraphicsRunningProcesses method. DeviceGetGraphicsRunningProcessesFunc func(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) // DeviceGetGridLicensableFeaturesFunc mocks the DeviceGetGridLicensableFeatures method. DeviceGetGridLicensableFeaturesFunc func(device nvml.Device) (nvml.GridLicensableFeatures, nvml.Return) // DeviceGetGspFirmwareModeFunc mocks the DeviceGetGspFirmwareMode method. DeviceGetGspFirmwareModeFunc func(device nvml.Device) (bool, bool, nvml.Return) // DeviceGetGspFirmwareVersionFunc mocks the DeviceGetGspFirmwareVersion method. DeviceGetGspFirmwareVersionFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetHandleByIndexFunc mocks the DeviceGetHandleByIndex method. DeviceGetHandleByIndexFunc func(n int) (nvml.Device, nvml.Return) // DeviceGetHandleByPciBusIdFunc mocks the DeviceGetHandleByPciBusId method. DeviceGetHandleByPciBusIdFunc func(s string) (nvml.Device, nvml.Return) // DeviceGetHandleBySerialFunc mocks the DeviceGetHandleBySerial method. DeviceGetHandleBySerialFunc func(s string) (nvml.Device, nvml.Return) // DeviceGetHandleByUUIDFunc mocks the DeviceGetHandleByUUID method. DeviceGetHandleByUUIDFunc func(s string) (nvml.Device, nvml.Return) // DeviceGetHandleByUUIDVFunc mocks the DeviceGetHandleByUUIDV method. DeviceGetHandleByUUIDVFunc func(uUID *nvml.UUID) (nvml.Device, nvml.Return) // DeviceGetHostVgpuModeFunc mocks the DeviceGetHostVgpuMode method. DeviceGetHostVgpuModeFunc func(device nvml.Device) (nvml.HostVgpuMode, nvml.Return) // DeviceGetIndexFunc mocks the DeviceGetIndex method. DeviceGetIndexFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetInforomConfigurationChecksumFunc mocks the DeviceGetInforomConfigurationChecksum method. DeviceGetInforomConfigurationChecksumFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetInforomImageVersionFunc mocks the DeviceGetInforomImageVersion method. DeviceGetInforomImageVersionFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetInforomVersionFunc mocks the DeviceGetInforomVersion method. DeviceGetInforomVersionFunc func(device nvml.Device, inforomObject nvml.InforomObject) (string, nvml.Return) // DeviceGetIrqNumFunc mocks the DeviceGetIrqNum method. DeviceGetIrqNumFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetJpgUtilizationFunc mocks the DeviceGetJpgUtilization method. DeviceGetJpgUtilizationFunc func(device nvml.Device) (uint32, uint32, nvml.Return) // DeviceGetLastBBXFlushTimeFunc mocks the DeviceGetLastBBXFlushTime method. DeviceGetLastBBXFlushTimeFunc func(device nvml.Device) (uint64, uint, nvml.Return) // DeviceGetMPSComputeRunningProcessesFunc mocks the DeviceGetMPSComputeRunningProcesses method. DeviceGetMPSComputeRunningProcessesFunc func(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) // DeviceGetMarginTemperatureFunc mocks the DeviceGetMarginTemperature method. DeviceGetMarginTemperatureFunc func(device nvml.Device) (nvml.MarginTemperature, nvml.Return) // DeviceGetMaxClockInfoFunc mocks the DeviceGetMaxClockInfo method. DeviceGetMaxClockInfoFunc func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) // DeviceGetMaxCustomerBoostClockFunc mocks the DeviceGetMaxCustomerBoostClock method. DeviceGetMaxCustomerBoostClockFunc func(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) // DeviceGetMaxMigDeviceCountFunc mocks the DeviceGetMaxMigDeviceCount method. DeviceGetMaxMigDeviceCountFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetMaxPcieLinkGenerationFunc mocks the DeviceGetMaxPcieLinkGeneration method. DeviceGetMaxPcieLinkGenerationFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetMaxPcieLinkWidthFunc mocks the DeviceGetMaxPcieLinkWidth method. DeviceGetMaxPcieLinkWidthFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetMemClkMinMaxVfOffsetFunc mocks the DeviceGetMemClkMinMaxVfOffset method. DeviceGetMemClkMinMaxVfOffsetFunc func(device nvml.Device) (int, int, nvml.Return) // DeviceGetMemClkVfOffsetFunc mocks the DeviceGetMemClkVfOffset method. DeviceGetMemClkVfOffsetFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetMemoryAffinityFunc mocks the DeviceGetMemoryAffinity method. DeviceGetMemoryAffinityFunc func(device nvml.Device, n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) // DeviceGetMemoryBusWidthFunc mocks the DeviceGetMemoryBusWidth method. DeviceGetMemoryBusWidthFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetMemoryErrorCounterFunc mocks the DeviceGetMemoryErrorCounter method. DeviceGetMemoryErrorCounterFunc func(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType, memoryLocation nvml.MemoryLocation) (uint64, nvml.Return) // DeviceGetMemoryInfoFunc mocks the DeviceGetMemoryInfo method. DeviceGetMemoryInfoFunc func(device nvml.Device) (nvml.Memory, nvml.Return) // DeviceGetMemoryInfo_v2Func mocks the DeviceGetMemoryInfo_v2 method. DeviceGetMemoryInfo_v2Func func(device nvml.Device) (nvml.Memory_v2, nvml.Return) // DeviceGetMigDeviceHandleByIndexFunc mocks the DeviceGetMigDeviceHandleByIndex method. DeviceGetMigDeviceHandleByIndexFunc func(device nvml.Device, n int) (nvml.Device, nvml.Return) // DeviceGetMigModeFunc mocks the DeviceGetMigMode method. DeviceGetMigModeFunc func(device nvml.Device) (int, int, nvml.Return) // DeviceGetMinMaxClockOfPStateFunc mocks the DeviceGetMinMaxClockOfPState method. DeviceGetMinMaxClockOfPStateFunc func(device nvml.Device, clockType nvml.ClockType, pstates nvml.Pstates) (uint32, uint32, nvml.Return) // DeviceGetMinMaxFanSpeedFunc mocks the DeviceGetMinMaxFanSpeed method. DeviceGetMinMaxFanSpeedFunc func(device nvml.Device) (int, int, nvml.Return) // DeviceGetMinorNumberFunc mocks the DeviceGetMinorNumber method. DeviceGetMinorNumberFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetModuleIdFunc mocks the DeviceGetModuleId method. DeviceGetModuleIdFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetMultiGpuBoardFunc mocks the DeviceGetMultiGpuBoard method. DeviceGetMultiGpuBoardFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetNameFunc mocks the DeviceGetName method. DeviceGetNameFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetNumFansFunc mocks the DeviceGetNumFans method. DeviceGetNumFansFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetNumGpuCoresFunc mocks the DeviceGetNumGpuCores method. DeviceGetNumGpuCoresFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetNumaNodeIdFunc mocks the DeviceGetNumaNodeId method. DeviceGetNumaNodeIdFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetNvLinkCapabilityFunc mocks the DeviceGetNvLinkCapability method. DeviceGetNvLinkCapabilityFunc func(device nvml.Device, n int, nvLinkCapability nvml.NvLinkCapability) (uint32, nvml.Return) // DeviceGetNvLinkErrorCounterFunc mocks the DeviceGetNvLinkErrorCounter method. DeviceGetNvLinkErrorCounterFunc func(device nvml.Device, n int, nvLinkErrorCounter nvml.NvLinkErrorCounter) (uint64, nvml.Return) // DeviceGetNvLinkInfoFunc mocks the DeviceGetNvLinkInfo method. DeviceGetNvLinkInfoFunc func(device nvml.Device) nvml.NvLinkInfoHandler // DeviceGetNvLinkRemoteDeviceTypeFunc mocks the DeviceGetNvLinkRemoteDeviceType method. DeviceGetNvLinkRemoteDeviceTypeFunc func(device nvml.Device, n int) (nvml.IntNvLinkDeviceType, nvml.Return) // DeviceGetNvLinkRemotePciInfoFunc mocks the DeviceGetNvLinkRemotePciInfo method. DeviceGetNvLinkRemotePciInfoFunc func(device nvml.Device, n int) (nvml.PciInfo, nvml.Return) // DeviceGetNvLinkStateFunc mocks the DeviceGetNvLinkState method. DeviceGetNvLinkStateFunc func(device nvml.Device, n int) (nvml.EnableState, nvml.Return) // DeviceGetNvLinkUtilizationControlFunc mocks the DeviceGetNvLinkUtilizationControl method. DeviceGetNvLinkUtilizationControlFunc func(device nvml.Device, n1 int, n2 int) (nvml.NvLinkUtilizationControl, nvml.Return) // DeviceGetNvLinkUtilizationCounterFunc mocks the DeviceGetNvLinkUtilizationCounter method. DeviceGetNvLinkUtilizationCounterFunc func(device nvml.Device, n1 int, n2 int) (uint64, uint64, nvml.Return) // DeviceGetNvLinkVersionFunc mocks the DeviceGetNvLinkVersion method. DeviceGetNvLinkVersionFunc func(device nvml.Device, n int) (uint32, nvml.Return) // DeviceGetNvlinkBwModeFunc mocks the DeviceGetNvlinkBwMode method. DeviceGetNvlinkBwModeFunc func(device nvml.Device) (nvml.NvlinkGetBwMode, nvml.Return) // DeviceGetNvlinkSupportedBwModesFunc mocks the DeviceGetNvlinkSupportedBwModes method. DeviceGetNvlinkSupportedBwModesFunc func(device nvml.Device) (nvml.NvlinkSupportedBwModes, nvml.Return) // DeviceGetOfaUtilizationFunc mocks the DeviceGetOfaUtilization method. DeviceGetOfaUtilizationFunc func(device nvml.Device) (uint32, uint32, nvml.Return) // DeviceGetP2PStatusFunc mocks the DeviceGetP2PStatus method. DeviceGetP2PStatusFunc func(device1 nvml.Device, device2 nvml.Device, gpuP2PCapsIndex nvml.GpuP2PCapsIndex) (nvml.GpuP2PStatus, nvml.Return) // DeviceGetPciInfoFunc mocks the DeviceGetPciInfo method. DeviceGetPciInfoFunc func(device nvml.Device) (nvml.PciInfo, nvml.Return) // DeviceGetPciInfoExtFunc mocks the DeviceGetPciInfoExt method. DeviceGetPciInfoExtFunc func(device nvml.Device) (nvml.PciInfoExt, nvml.Return) // DeviceGetPcieLinkMaxSpeedFunc mocks the DeviceGetPcieLinkMaxSpeed method. DeviceGetPcieLinkMaxSpeedFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetPcieReplayCounterFunc mocks the DeviceGetPcieReplayCounter method. DeviceGetPcieReplayCounterFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetPcieSpeedFunc mocks the DeviceGetPcieSpeed method. DeviceGetPcieSpeedFunc func(device nvml.Device) (int, nvml.Return) // DeviceGetPcieThroughputFunc mocks the DeviceGetPcieThroughput method. DeviceGetPcieThroughputFunc func(device nvml.Device, pcieUtilCounter nvml.PcieUtilCounter) (uint32, nvml.Return) // DeviceGetPdiFunc mocks the DeviceGetPdi method. DeviceGetPdiFunc func(device nvml.Device) (nvml.Pdi, nvml.Return) // DeviceGetPerformanceModesFunc mocks the DeviceGetPerformanceModes method. DeviceGetPerformanceModesFunc func(device nvml.Device) (nvml.DevicePerfModes, nvml.Return) // DeviceGetPerformanceStateFunc mocks the DeviceGetPerformanceState method. DeviceGetPerformanceStateFunc func(device nvml.Device) (nvml.Pstates, nvml.Return) // DeviceGetPersistenceModeFunc mocks the DeviceGetPersistenceMode method. DeviceGetPersistenceModeFunc func(device nvml.Device) (nvml.EnableState, nvml.Return) // DeviceGetPgpuMetadataStringFunc mocks the DeviceGetPgpuMetadataString method. DeviceGetPgpuMetadataStringFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetPlatformInfoFunc mocks the DeviceGetPlatformInfo method. DeviceGetPlatformInfoFunc func(device nvml.Device) (nvml.PlatformInfo, nvml.Return) // DeviceGetPowerManagementDefaultLimitFunc mocks the DeviceGetPowerManagementDefaultLimit method. DeviceGetPowerManagementDefaultLimitFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetPowerManagementLimitFunc mocks the DeviceGetPowerManagementLimit method. DeviceGetPowerManagementLimitFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetPowerManagementLimitConstraintsFunc mocks the DeviceGetPowerManagementLimitConstraints method. DeviceGetPowerManagementLimitConstraintsFunc func(device nvml.Device) (uint32, uint32, nvml.Return) // DeviceGetPowerManagementModeFunc mocks the DeviceGetPowerManagementMode method. DeviceGetPowerManagementModeFunc func(device nvml.Device) (nvml.EnableState, nvml.Return) // DeviceGetPowerMizerMode_v1Func mocks the DeviceGetPowerMizerMode_v1 method. DeviceGetPowerMizerMode_v1Func func(device nvml.Device) (nvml.DevicePowerMizerModes_v1, nvml.Return) // DeviceGetPowerSourceFunc mocks the DeviceGetPowerSource method. DeviceGetPowerSourceFunc func(device nvml.Device) (nvml.PowerSource, nvml.Return) // DeviceGetPowerStateFunc mocks the DeviceGetPowerState method. DeviceGetPowerStateFunc func(device nvml.Device) (nvml.Pstates, nvml.Return) // DeviceGetPowerUsageFunc mocks the DeviceGetPowerUsage method. DeviceGetPowerUsageFunc func(device nvml.Device) (uint32, nvml.Return) // DeviceGetProcessUtilizationFunc mocks the DeviceGetProcessUtilization method. DeviceGetProcessUtilizationFunc func(device nvml.Device, v uint64) ([]nvml.ProcessUtilizationSample, nvml.Return) // DeviceGetProcessesUtilizationInfoFunc mocks the DeviceGetProcessesUtilizationInfo method. DeviceGetProcessesUtilizationInfoFunc func(device nvml.Device) (nvml.ProcessesUtilizationInfo, nvml.Return) // DeviceGetRemappedRowsFunc mocks the DeviceGetRemappedRows method. DeviceGetRemappedRowsFunc func(device nvml.Device) (int, int, bool, bool, nvml.Return) // DeviceGetRepairStatusFunc mocks the DeviceGetRepairStatus method. DeviceGetRepairStatusFunc func(device nvml.Device) (nvml.RepairStatus, nvml.Return) // DeviceGetRetiredPagesFunc mocks the DeviceGetRetiredPages method. DeviceGetRetiredPagesFunc func(device nvml.Device, pageRetirementCause nvml.PageRetirementCause) ([]uint64, nvml.Return) // DeviceGetRetiredPagesPendingStatusFunc mocks the DeviceGetRetiredPagesPendingStatus method. DeviceGetRetiredPagesPendingStatusFunc func(device nvml.Device) (nvml.EnableState, nvml.Return) // DeviceGetRetiredPages_v2Func mocks the DeviceGetRetiredPages_v2 method. DeviceGetRetiredPages_v2Func func(device nvml.Device, pageRetirementCause nvml.PageRetirementCause) ([]uint64, []uint64, nvml.Return) // DeviceGetRowRemapperHistogramFunc mocks the DeviceGetRowRemapperHistogram method. DeviceGetRowRemapperHistogramFunc func(device nvml.Device) (nvml.RowRemapperHistogramValues, nvml.Return) // DeviceGetRunningProcessDetailListFunc mocks the DeviceGetRunningProcessDetailList method. DeviceGetRunningProcessDetailListFunc func(device nvml.Device) (nvml.ProcessDetailList, nvml.Return) // DeviceGetSamplesFunc mocks the DeviceGetSamples method. DeviceGetSamplesFunc func(device nvml.Device, samplingType nvml.SamplingType, v uint64) (nvml.ValueType, []nvml.Sample, nvml.Return) // DeviceGetSerialFunc mocks the DeviceGetSerial method. DeviceGetSerialFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetSramEccErrorStatusFunc mocks the DeviceGetSramEccErrorStatus method. DeviceGetSramEccErrorStatusFunc func(device nvml.Device) (nvml.EccSramErrorStatus, nvml.Return) // DeviceGetSramUniqueUncorrectedEccErrorCountsFunc mocks the DeviceGetSramUniqueUncorrectedEccErrorCounts method. DeviceGetSramUniqueUncorrectedEccErrorCountsFunc func(device nvml.Device, eccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts) nvml.Return // DeviceGetSupportedClocksEventReasonsFunc mocks the DeviceGetSupportedClocksEventReasons method. DeviceGetSupportedClocksEventReasonsFunc func(device nvml.Device) (uint64, nvml.Return) // DeviceGetSupportedClocksThrottleReasonsFunc mocks the DeviceGetSupportedClocksThrottleReasons method. DeviceGetSupportedClocksThrottleReasonsFunc func(device nvml.Device) (uint64, nvml.Return) // DeviceGetSupportedEventTypesFunc mocks the DeviceGetSupportedEventTypes method. DeviceGetSupportedEventTypesFunc func(device nvml.Device) (uint64, nvml.Return) // DeviceGetSupportedGraphicsClocksFunc mocks the DeviceGetSupportedGraphicsClocks method. DeviceGetSupportedGraphicsClocksFunc func(device nvml.Device, n int) (int, uint32, nvml.Return) // DeviceGetSupportedMemoryClocksFunc mocks the DeviceGetSupportedMemoryClocks method. DeviceGetSupportedMemoryClocksFunc func(device nvml.Device) (int, uint32, nvml.Return) // DeviceGetSupportedPerformanceStatesFunc mocks the DeviceGetSupportedPerformanceStates method. DeviceGetSupportedPerformanceStatesFunc func(device nvml.Device) ([]nvml.Pstates, nvml.Return) // DeviceGetSupportedVgpusFunc mocks the DeviceGetSupportedVgpus method. DeviceGetSupportedVgpusFunc func(device nvml.Device) ([]nvml.VgpuTypeId, nvml.Return) // DeviceGetTargetFanSpeedFunc mocks the DeviceGetTargetFanSpeed method. DeviceGetTargetFanSpeedFunc func(device nvml.Device, n int) (int, nvml.Return) // DeviceGetTemperatureFunc mocks the DeviceGetTemperature method. DeviceGetTemperatureFunc func(device nvml.Device, temperatureSensors nvml.TemperatureSensors) (uint32, nvml.Return) // DeviceGetTemperatureThresholdFunc mocks the DeviceGetTemperatureThreshold method. DeviceGetTemperatureThresholdFunc func(device nvml.Device, temperatureThresholds nvml.TemperatureThresholds) (uint32, nvml.Return) // DeviceGetTemperatureVFunc mocks the DeviceGetTemperatureV method. DeviceGetTemperatureVFunc func(device nvml.Device) nvml.TemperatureHandler // DeviceGetThermalSettingsFunc mocks the DeviceGetThermalSettings method. DeviceGetThermalSettingsFunc func(device nvml.Device, v uint32) (nvml.GpuThermalSettings, nvml.Return) // DeviceGetTopologyCommonAncestorFunc mocks the DeviceGetTopologyCommonAncestor method. DeviceGetTopologyCommonAncestorFunc func(device1 nvml.Device, device2 nvml.Device) (nvml.GpuTopologyLevel, nvml.Return) // DeviceGetTopologyNearestGpusFunc mocks the DeviceGetTopologyNearestGpus method. DeviceGetTopologyNearestGpusFunc func(device nvml.Device, gpuTopologyLevel nvml.GpuTopologyLevel) ([]nvml.Device, nvml.Return) // DeviceGetTotalEccErrorsFunc mocks the DeviceGetTotalEccErrors method. DeviceGetTotalEccErrorsFunc func(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (uint64, nvml.Return) // DeviceGetTotalEnergyConsumptionFunc mocks the DeviceGetTotalEnergyConsumption method. DeviceGetTotalEnergyConsumptionFunc func(device nvml.Device) (uint64, nvml.Return) // DeviceGetUUIDFunc mocks the DeviceGetUUID method. DeviceGetUUIDFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetUtilizationRatesFunc mocks the DeviceGetUtilizationRates method. DeviceGetUtilizationRatesFunc func(device nvml.Device) (nvml.Utilization, nvml.Return) // DeviceGetVbiosVersionFunc mocks the DeviceGetVbiosVersion method. DeviceGetVbiosVersionFunc func(device nvml.Device) (string, nvml.Return) // DeviceGetVgpuCapabilitiesFunc mocks the DeviceGetVgpuCapabilities method. DeviceGetVgpuCapabilitiesFunc func(device nvml.Device, deviceVgpuCapability nvml.DeviceVgpuCapability) (bool, nvml.Return) // DeviceGetVgpuHeterogeneousModeFunc mocks the DeviceGetVgpuHeterogeneousMode method. DeviceGetVgpuHeterogeneousModeFunc func(device nvml.Device) (nvml.VgpuHeterogeneousMode, nvml.Return) // DeviceGetVgpuInstancesUtilizationInfoFunc mocks the DeviceGetVgpuInstancesUtilizationInfo method. DeviceGetVgpuInstancesUtilizationInfoFunc func(device nvml.Device) (nvml.VgpuInstancesUtilizationInfo, nvml.Return) // DeviceGetVgpuMetadataFunc mocks the DeviceGetVgpuMetadata method. DeviceGetVgpuMetadataFunc func(device nvml.Device) (nvml.VgpuPgpuMetadata, nvml.Return) // DeviceGetVgpuProcessUtilizationFunc mocks the DeviceGetVgpuProcessUtilization method. DeviceGetVgpuProcessUtilizationFunc func(device nvml.Device, v uint64) ([]nvml.VgpuProcessUtilizationSample, nvml.Return) // DeviceGetVgpuProcessesUtilizationInfoFunc mocks the DeviceGetVgpuProcessesUtilizationInfo method. DeviceGetVgpuProcessesUtilizationInfoFunc func(device nvml.Device) (nvml.VgpuProcessesUtilizationInfo, nvml.Return) // DeviceGetVgpuSchedulerCapabilitiesFunc mocks the DeviceGetVgpuSchedulerCapabilities method. DeviceGetVgpuSchedulerCapabilitiesFunc func(device nvml.Device) (nvml.VgpuSchedulerCapabilities, nvml.Return) // DeviceGetVgpuSchedulerLogFunc mocks the DeviceGetVgpuSchedulerLog method. DeviceGetVgpuSchedulerLogFunc func(device nvml.Device) (nvml.VgpuSchedulerLog, nvml.Return) // DeviceGetVgpuSchedulerStateFunc mocks the DeviceGetVgpuSchedulerState method. DeviceGetVgpuSchedulerStateFunc func(device nvml.Device) (nvml.VgpuSchedulerGetState, nvml.Return) // DeviceGetVgpuTypeCreatablePlacementsFunc mocks the DeviceGetVgpuTypeCreatablePlacements method. DeviceGetVgpuTypeCreatablePlacementsFunc func(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) // DeviceGetVgpuTypeSupportedPlacementsFunc mocks the DeviceGetVgpuTypeSupportedPlacements method. DeviceGetVgpuTypeSupportedPlacementsFunc func(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) // DeviceGetVgpuUtilizationFunc mocks the DeviceGetVgpuUtilization method. DeviceGetVgpuUtilizationFunc func(device nvml.Device, v uint64) (nvml.ValueType, []nvml.VgpuInstanceUtilizationSample, nvml.Return) // DeviceGetViolationStatusFunc mocks the DeviceGetViolationStatus method. DeviceGetViolationStatusFunc func(device nvml.Device, perfPolicyType nvml.PerfPolicyType) (nvml.ViolationTime, nvml.Return) // DeviceGetVirtualizationModeFunc mocks the DeviceGetVirtualizationMode method. DeviceGetVirtualizationModeFunc func(device nvml.Device) (nvml.GpuVirtualizationMode, nvml.Return) // DeviceIsMigDeviceHandleFunc mocks the DeviceIsMigDeviceHandle method. DeviceIsMigDeviceHandleFunc func(device nvml.Device) (bool, nvml.Return) // DeviceModifyDrainStateFunc mocks the DeviceModifyDrainState method. DeviceModifyDrainStateFunc func(pciInfo *nvml.PciInfo, enableState nvml.EnableState) nvml.Return // DeviceOnSameBoardFunc mocks the DeviceOnSameBoard method. DeviceOnSameBoardFunc func(device1 nvml.Device, device2 nvml.Device) (int, nvml.Return) // DevicePowerSmoothingActivatePresetProfileFunc mocks the DevicePowerSmoothingActivatePresetProfile method. DevicePowerSmoothingActivatePresetProfileFunc func(device nvml.Device, powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return // DevicePowerSmoothingSetStateFunc mocks the DevicePowerSmoothingSetState method. DevicePowerSmoothingSetStateFunc func(device nvml.Device, powerSmoothingState *nvml.PowerSmoothingState) nvml.Return // DevicePowerSmoothingUpdatePresetProfileParamFunc mocks the DevicePowerSmoothingUpdatePresetProfileParam method. DevicePowerSmoothingUpdatePresetProfileParamFunc func(device nvml.Device, powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return // DeviceQueryDrainStateFunc mocks the DeviceQueryDrainState method. DeviceQueryDrainStateFunc func(pciInfo *nvml.PciInfo) (nvml.EnableState, nvml.Return) // DeviceReadWritePRM_v1Func mocks the DeviceReadWritePRM_v1 method. DeviceReadWritePRM_v1Func func(device nvml.Device, pRMTLV_v1 *nvml.PRMTLV_v1) nvml.Return // DeviceRegisterEventsFunc mocks the DeviceRegisterEvents method. DeviceRegisterEventsFunc func(device nvml.Device, v uint64, eventSet nvml.EventSet) nvml.Return // DeviceRemoveGpuFunc mocks the DeviceRemoveGpu method. DeviceRemoveGpuFunc func(pciInfo *nvml.PciInfo) nvml.Return // DeviceRemoveGpu_v2Func mocks the DeviceRemoveGpu_v2 method. DeviceRemoveGpu_v2Func func(pciInfo *nvml.PciInfo, detachGpuState nvml.DetachGpuState, pcieLinkState nvml.PcieLinkState) nvml.Return // DeviceResetApplicationsClocksFunc mocks the DeviceResetApplicationsClocks method. DeviceResetApplicationsClocksFunc func(device nvml.Device) nvml.Return // DeviceResetGpuLockedClocksFunc mocks the DeviceResetGpuLockedClocks method. DeviceResetGpuLockedClocksFunc func(device nvml.Device) nvml.Return // DeviceResetMemoryLockedClocksFunc mocks the DeviceResetMemoryLockedClocks method. DeviceResetMemoryLockedClocksFunc func(device nvml.Device) nvml.Return // DeviceResetNvLinkErrorCountersFunc mocks the DeviceResetNvLinkErrorCounters method. DeviceResetNvLinkErrorCountersFunc func(device nvml.Device, n int) nvml.Return // DeviceResetNvLinkUtilizationCounterFunc mocks the DeviceResetNvLinkUtilizationCounter method. DeviceResetNvLinkUtilizationCounterFunc func(device nvml.Device, n1 int, n2 int) nvml.Return // DeviceSetAPIRestrictionFunc mocks the DeviceSetAPIRestriction method. DeviceSetAPIRestrictionFunc func(device nvml.Device, restrictedAPI nvml.RestrictedAPI, enableState nvml.EnableState) nvml.Return // DeviceSetAccountingModeFunc mocks the DeviceSetAccountingMode method. DeviceSetAccountingModeFunc func(device nvml.Device, enableState nvml.EnableState) nvml.Return // DeviceSetApplicationsClocksFunc mocks the DeviceSetApplicationsClocks method. DeviceSetApplicationsClocksFunc func(device nvml.Device, v1 uint32, v2 uint32) nvml.Return // DeviceSetAutoBoostedClocksEnabledFunc mocks the DeviceSetAutoBoostedClocksEnabled method. DeviceSetAutoBoostedClocksEnabledFunc func(device nvml.Device, enableState nvml.EnableState) nvml.Return // DeviceSetClockOffsetsFunc mocks the DeviceSetClockOffsets method. DeviceSetClockOffsetsFunc func(device nvml.Device, clockOffset nvml.ClockOffset) nvml.Return // DeviceSetComputeModeFunc mocks the DeviceSetComputeMode method. DeviceSetComputeModeFunc func(device nvml.Device, computeMode nvml.ComputeMode) nvml.Return // DeviceSetConfComputeUnprotectedMemSizeFunc mocks the DeviceSetConfComputeUnprotectedMemSize method. DeviceSetConfComputeUnprotectedMemSizeFunc func(device nvml.Device, v uint64) nvml.Return // DeviceSetCpuAffinityFunc mocks the DeviceSetCpuAffinity method. DeviceSetCpuAffinityFunc func(device nvml.Device) nvml.Return // DeviceSetDefaultAutoBoostedClocksEnabledFunc mocks the DeviceSetDefaultAutoBoostedClocksEnabled method. DeviceSetDefaultAutoBoostedClocksEnabledFunc func(device nvml.Device, enableState nvml.EnableState, v uint32) nvml.Return // DeviceSetDefaultFanSpeed_v2Func mocks the DeviceSetDefaultFanSpeed_v2 method. DeviceSetDefaultFanSpeed_v2Func func(device nvml.Device, n int) nvml.Return // DeviceSetDramEncryptionModeFunc mocks the DeviceSetDramEncryptionMode method. DeviceSetDramEncryptionModeFunc func(device nvml.Device, dramEncryptionInfo *nvml.DramEncryptionInfo) nvml.Return // DeviceSetDriverModelFunc mocks the DeviceSetDriverModel method. DeviceSetDriverModelFunc func(device nvml.Device, driverModel nvml.DriverModel, v uint32) nvml.Return // DeviceSetEccModeFunc mocks the DeviceSetEccMode method. DeviceSetEccModeFunc func(device nvml.Device, enableState nvml.EnableState) nvml.Return // DeviceSetFanControlPolicyFunc mocks the DeviceSetFanControlPolicy method. DeviceSetFanControlPolicyFunc func(device nvml.Device, n int, fanControlPolicy nvml.FanControlPolicy) nvml.Return // DeviceSetFanSpeed_v2Func mocks the DeviceSetFanSpeed_v2 method. DeviceSetFanSpeed_v2Func func(device nvml.Device, n1 int, n2 int) nvml.Return // DeviceSetGpcClkVfOffsetFunc mocks the DeviceSetGpcClkVfOffset method. DeviceSetGpcClkVfOffsetFunc func(device nvml.Device, n int) nvml.Return // DeviceSetGpuLockedClocksFunc mocks the DeviceSetGpuLockedClocks method. DeviceSetGpuLockedClocksFunc func(device nvml.Device, v1 uint32, v2 uint32) nvml.Return // DeviceSetGpuOperationModeFunc mocks the DeviceSetGpuOperationMode method. DeviceSetGpuOperationModeFunc func(device nvml.Device, gpuOperationMode nvml.GpuOperationMode) nvml.Return // DeviceSetMemClkVfOffsetFunc mocks the DeviceSetMemClkVfOffset method. DeviceSetMemClkVfOffsetFunc func(device nvml.Device, n int) nvml.Return // DeviceSetMemoryLockedClocksFunc mocks the DeviceSetMemoryLockedClocks method. DeviceSetMemoryLockedClocksFunc func(device nvml.Device, v1 uint32, v2 uint32) nvml.Return // DeviceSetMigModeFunc mocks the DeviceSetMigMode method. DeviceSetMigModeFunc func(device nvml.Device, n int) (nvml.Return, nvml.Return) // DeviceSetNvLinkDeviceLowPowerThresholdFunc mocks the DeviceSetNvLinkDeviceLowPowerThreshold method. DeviceSetNvLinkDeviceLowPowerThresholdFunc func(device nvml.Device, nvLinkPowerThres *nvml.NvLinkPowerThres) nvml.Return // DeviceSetNvLinkUtilizationControlFunc mocks the DeviceSetNvLinkUtilizationControl method. DeviceSetNvLinkUtilizationControlFunc func(device nvml.Device, n1 int, n2 int, nvLinkUtilizationControl *nvml.NvLinkUtilizationControl, b bool) nvml.Return // DeviceSetNvlinkBwModeFunc mocks the DeviceSetNvlinkBwMode method. DeviceSetNvlinkBwModeFunc func(device nvml.Device, nvlinkSetBwMode *nvml.NvlinkSetBwMode) nvml.Return // DeviceSetPersistenceModeFunc mocks the DeviceSetPersistenceMode method. DeviceSetPersistenceModeFunc func(device nvml.Device, enableState nvml.EnableState) nvml.Return // DeviceSetPowerManagementLimitFunc mocks the DeviceSetPowerManagementLimit method. DeviceSetPowerManagementLimitFunc func(device nvml.Device, v uint32) nvml.Return // DeviceSetPowerManagementLimit_v2Func mocks the DeviceSetPowerManagementLimit_v2 method. DeviceSetPowerManagementLimit_v2Func func(device nvml.Device, powerValue_v2 *nvml.PowerValue_v2) nvml.Return // DeviceSetTemperatureThresholdFunc mocks the DeviceSetTemperatureThreshold method. DeviceSetTemperatureThresholdFunc func(device nvml.Device, temperatureThresholds nvml.TemperatureThresholds, n int) nvml.Return // DeviceSetVgpuCapabilitiesFunc mocks the DeviceSetVgpuCapabilities method. DeviceSetVgpuCapabilitiesFunc func(device nvml.Device, deviceVgpuCapability nvml.DeviceVgpuCapability, enableState nvml.EnableState) nvml.Return // DeviceSetVgpuHeterogeneousModeFunc mocks the DeviceSetVgpuHeterogeneousMode method. DeviceSetVgpuHeterogeneousModeFunc func(device nvml.Device, vgpuHeterogeneousMode nvml.VgpuHeterogeneousMode) nvml.Return // DeviceSetVgpuSchedulerStateFunc mocks the DeviceSetVgpuSchedulerState method. DeviceSetVgpuSchedulerStateFunc func(device nvml.Device, vgpuSchedulerSetState *nvml.VgpuSchedulerSetState) nvml.Return // DeviceSetVirtualizationModeFunc mocks the DeviceSetVirtualizationMode method. DeviceSetVirtualizationModeFunc func(device nvml.Device, gpuVirtualizationMode nvml.GpuVirtualizationMode) nvml.Return // DeviceValidateInforomFunc mocks the DeviceValidateInforom method. DeviceValidateInforomFunc func(device nvml.Device) nvml.Return // DeviceWorkloadPowerProfileClearRequestedProfilesFunc mocks the DeviceWorkloadPowerProfileClearRequestedProfiles method. DeviceWorkloadPowerProfileClearRequestedProfilesFunc func(device nvml.Device, workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return // DeviceWorkloadPowerProfileGetCurrentProfilesFunc mocks the DeviceWorkloadPowerProfileGetCurrentProfiles method. DeviceWorkloadPowerProfileGetCurrentProfilesFunc func(device nvml.Device) (nvml.WorkloadPowerProfileCurrentProfiles, nvml.Return) // DeviceWorkloadPowerProfileGetProfilesInfoFunc mocks the DeviceWorkloadPowerProfileGetProfilesInfo method. DeviceWorkloadPowerProfileGetProfilesInfoFunc func(device nvml.Device) (nvml.WorkloadPowerProfileProfilesInfo, nvml.Return) // DeviceWorkloadPowerProfileSetRequestedProfilesFunc mocks the DeviceWorkloadPowerProfileSetRequestedProfiles method. DeviceWorkloadPowerProfileSetRequestedProfilesFunc func(device nvml.Device, workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return // ErrorStringFunc mocks the ErrorString method. ErrorStringFunc func(returnMoqParam nvml.Return) string // EventSetCreateFunc mocks the EventSetCreate method. EventSetCreateFunc func() (nvml.EventSet, nvml.Return) // EventSetFreeFunc mocks the EventSetFree method. EventSetFreeFunc func(eventSet nvml.EventSet) nvml.Return // EventSetWaitFunc mocks the EventSetWait method. EventSetWaitFunc func(eventSet nvml.EventSet, v uint32) (nvml.EventData, nvml.Return) // ExtensionsFunc mocks the Extensions method. ExtensionsFunc func() nvml.ExtendedInterface // GetExcludedDeviceCountFunc mocks the GetExcludedDeviceCount method. GetExcludedDeviceCountFunc func() (int, nvml.Return) // GetExcludedDeviceInfoByIndexFunc mocks the GetExcludedDeviceInfoByIndex method. GetExcludedDeviceInfoByIndexFunc func(n int) (nvml.ExcludedDeviceInfo, nvml.Return) // GetVgpuCompatibilityFunc mocks the GetVgpuCompatibility method. GetVgpuCompatibilityFunc func(vgpuMetadata *nvml.VgpuMetadata, vgpuPgpuMetadata *nvml.VgpuPgpuMetadata) (nvml.VgpuPgpuCompatibility, nvml.Return) // GetVgpuDriverCapabilitiesFunc mocks the GetVgpuDriverCapabilities method. GetVgpuDriverCapabilitiesFunc func(vgpuDriverCapability nvml.VgpuDriverCapability) (bool, nvml.Return) // GetVgpuVersionFunc mocks the GetVgpuVersion method. GetVgpuVersionFunc func() (nvml.VgpuVersion, nvml.VgpuVersion, nvml.Return) // GpmMetricsGetFunc mocks the GpmMetricsGet method. GpmMetricsGetFunc func(gpmMetricsGetType *nvml.GpmMetricsGetType) nvml.Return // GpmMetricsGetVFunc mocks the GpmMetricsGetV method. GpmMetricsGetVFunc func(gpmMetricsGetType *nvml.GpmMetricsGetType) nvml.GpmMetricsGetVType // GpmMigSampleGetFunc mocks the GpmMigSampleGet method. GpmMigSampleGetFunc func(device nvml.Device, n int, gpmSample nvml.GpmSample) nvml.Return // GpmQueryDeviceSupportFunc mocks the GpmQueryDeviceSupport method. GpmQueryDeviceSupportFunc func(device nvml.Device) (nvml.GpmSupport, nvml.Return) // GpmQueryDeviceSupportVFunc mocks the GpmQueryDeviceSupportV method. GpmQueryDeviceSupportVFunc func(device nvml.Device) nvml.GpmSupportV // GpmQueryIfStreamingEnabledFunc mocks the GpmQueryIfStreamingEnabled method. GpmQueryIfStreamingEnabledFunc func(device nvml.Device) (uint32, nvml.Return) // GpmSampleAllocFunc mocks the GpmSampleAlloc method. GpmSampleAllocFunc func() (nvml.GpmSample, nvml.Return) // GpmSampleFreeFunc mocks the GpmSampleFree method. GpmSampleFreeFunc func(gpmSample nvml.GpmSample) nvml.Return // GpmSampleGetFunc mocks the GpmSampleGet method. GpmSampleGetFunc func(device nvml.Device, gpmSample nvml.GpmSample) nvml.Return // GpmSetStreamingEnabledFunc mocks the GpmSetStreamingEnabled method. GpmSetStreamingEnabledFunc func(device nvml.Device, v uint32) nvml.Return // GpuInstanceCreateComputeInstanceFunc mocks the GpuInstanceCreateComputeInstance method. GpuInstanceCreateComputeInstanceFunc func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (nvml.ComputeInstance, nvml.Return) // GpuInstanceCreateComputeInstanceWithPlacementFunc mocks the GpuInstanceCreateComputeInstanceWithPlacement method. GpuInstanceCreateComputeInstanceWithPlacementFunc func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo, computeInstancePlacement *nvml.ComputeInstancePlacement) (nvml.ComputeInstance, nvml.Return) // GpuInstanceDestroyFunc mocks the GpuInstanceDestroy method. GpuInstanceDestroyFunc func(gpuInstance nvml.GpuInstance) nvml.Return // GpuInstanceGetActiveVgpusFunc mocks the GpuInstanceGetActiveVgpus method. GpuInstanceGetActiveVgpusFunc func(gpuInstance nvml.GpuInstance) (nvml.ActiveVgpuInstanceInfo, nvml.Return) // GpuInstanceGetComputeInstanceByIdFunc mocks the GpuInstanceGetComputeInstanceById method. GpuInstanceGetComputeInstanceByIdFunc func(gpuInstance nvml.GpuInstance, n int) (nvml.ComputeInstance, nvml.Return) // GpuInstanceGetComputeInstancePossiblePlacementsFunc mocks the GpuInstanceGetComputeInstancePossiblePlacements method. GpuInstanceGetComputeInstancePossiblePlacementsFunc func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstancePlacement, nvml.Return) // GpuInstanceGetComputeInstanceProfileInfoFunc mocks the GpuInstanceGetComputeInstanceProfileInfo method. GpuInstanceGetComputeInstanceProfileInfoFunc func(gpuInstance nvml.GpuInstance, n1 int, n2 int) (nvml.ComputeInstanceProfileInfo, nvml.Return) // GpuInstanceGetComputeInstanceProfileInfoVFunc mocks the GpuInstanceGetComputeInstanceProfileInfoV method. GpuInstanceGetComputeInstanceProfileInfoVFunc func(gpuInstance nvml.GpuInstance, n1 int, n2 int) nvml.ComputeInstanceProfileInfoHandler // GpuInstanceGetComputeInstanceRemainingCapacityFunc mocks the GpuInstanceGetComputeInstanceRemainingCapacity method. GpuInstanceGetComputeInstanceRemainingCapacityFunc func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (int, nvml.Return) // GpuInstanceGetComputeInstancesFunc mocks the GpuInstanceGetComputeInstances method. GpuInstanceGetComputeInstancesFunc func(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstance, nvml.Return) // GpuInstanceGetCreatableVgpusFunc mocks the GpuInstanceGetCreatableVgpus method. GpuInstanceGetCreatableVgpusFunc func(gpuInstance nvml.GpuInstance) (nvml.VgpuTypeIdInfo, nvml.Return) // GpuInstanceGetInfoFunc mocks the GpuInstanceGetInfo method. GpuInstanceGetInfoFunc func(gpuInstance nvml.GpuInstance) (nvml.GpuInstanceInfo, nvml.Return) // GpuInstanceGetVgpuHeterogeneousModeFunc mocks the GpuInstanceGetVgpuHeterogeneousMode method. GpuInstanceGetVgpuHeterogeneousModeFunc func(gpuInstance nvml.GpuInstance) (nvml.VgpuHeterogeneousMode, nvml.Return) // GpuInstanceGetVgpuSchedulerLogFunc mocks the GpuInstanceGetVgpuSchedulerLog method. GpuInstanceGetVgpuSchedulerLogFunc func(gpuInstance nvml.GpuInstance) (nvml.VgpuSchedulerLogInfo, nvml.Return) // GpuInstanceGetVgpuSchedulerStateFunc mocks the GpuInstanceGetVgpuSchedulerState method. GpuInstanceGetVgpuSchedulerStateFunc func(gpuInstance nvml.GpuInstance) (nvml.VgpuSchedulerStateInfo, nvml.Return) // GpuInstanceGetVgpuTypeCreatablePlacementsFunc mocks the GpuInstanceGetVgpuTypeCreatablePlacements method. GpuInstanceGetVgpuTypeCreatablePlacementsFunc func(gpuInstance nvml.GpuInstance) (nvml.VgpuCreatablePlacementInfo, nvml.Return) // GpuInstanceSetVgpuHeterogeneousModeFunc mocks the GpuInstanceSetVgpuHeterogeneousMode method. GpuInstanceSetVgpuHeterogeneousModeFunc func(gpuInstance nvml.GpuInstance, vgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode) nvml.Return // GpuInstanceSetVgpuSchedulerStateFunc mocks the GpuInstanceSetVgpuSchedulerState method. GpuInstanceSetVgpuSchedulerStateFunc func(gpuInstance nvml.GpuInstance, vgpuSchedulerState *nvml.VgpuSchedulerState) nvml.Return // InitFunc mocks the Init method. InitFunc func() nvml.Return // InitWithFlagsFunc mocks the InitWithFlags method. InitWithFlagsFunc func(v uint32) nvml.Return // SetVgpuVersionFunc mocks the SetVgpuVersion method. SetVgpuVersionFunc func(vgpuVersion *nvml.VgpuVersion) nvml.Return // ShutdownFunc mocks the Shutdown method. ShutdownFunc func() nvml.Return // SystemEventSetCreateFunc mocks the SystemEventSetCreate method. SystemEventSetCreateFunc func(systemEventSetCreateRequest *nvml.SystemEventSetCreateRequest) nvml.Return // SystemEventSetFreeFunc mocks the SystemEventSetFree method. SystemEventSetFreeFunc func(systemEventSetFreeRequest *nvml.SystemEventSetFreeRequest) nvml.Return // SystemEventSetWaitFunc mocks the SystemEventSetWait method. SystemEventSetWaitFunc func(systemEventSetWaitRequest *nvml.SystemEventSetWaitRequest) nvml.Return // SystemGetConfComputeCapabilitiesFunc mocks the SystemGetConfComputeCapabilities method. SystemGetConfComputeCapabilitiesFunc func() (nvml.ConfComputeSystemCaps, nvml.Return) // SystemGetConfComputeGpusReadyStateFunc mocks the SystemGetConfComputeGpusReadyState method. SystemGetConfComputeGpusReadyStateFunc func() (uint32, nvml.Return) // SystemGetConfComputeKeyRotationThresholdInfoFunc mocks the SystemGetConfComputeKeyRotationThresholdInfo method. SystemGetConfComputeKeyRotationThresholdInfoFunc func() (nvml.ConfComputeGetKeyRotationThresholdInfo, nvml.Return) // SystemGetConfComputeSettingsFunc mocks the SystemGetConfComputeSettings method. SystemGetConfComputeSettingsFunc func() (nvml.SystemConfComputeSettings, nvml.Return) // SystemGetConfComputeStateFunc mocks the SystemGetConfComputeState method. SystemGetConfComputeStateFunc func() (nvml.ConfComputeSystemState, nvml.Return) // SystemGetCudaDriverVersionFunc mocks the SystemGetCudaDriverVersion method. SystemGetCudaDriverVersionFunc func() (int, nvml.Return) // SystemGetCudaDriverVersion_v2Func mocks the SystemGetCudaDriverVersion_v2 method. SystemGetCudaDriverVersion_v2Func func() (int, nvml.Return) // SystemGetDriverBranchFunc mocks the SystemGetDriverBranch method. SystemGetDriverBranchFunc func() (nvml.SystemDriverBranchInfo, nvml.Return) // SystemGetDriverVersionFunc mocks the SystemGetDriverVersion method. SystemGetDriverVersionFunc func() (string, nvml.Return) // SystemGetHicVersionFunc mocks the SystemGetHicVersion method. SystemGetHicVersionFunc func() ([]nvml.HwbcEntry, nvml.Return) // SystemGetNVMLVersionFunc mocks the SystemGetNVMLVersion method. SystemGetNVMLVersionFunc func() (string, nvml.Return) // SystemGetNvlinkBwModeFunc mocks the SystemGetNvlinkBwMode method. SystemGetNvlinkBwModeFunc func() (uint32, nvml.Return) // SystemGetProcessNameFunc mocks the SystemGetProcessName method. SystemGetProcessNameFunc func(n int) (string, nvml.Return) // SystemGetTopologyGpuSetFunc mocks the SystemGetTopologyGpuSet method. SystemGetTopologyGpuSetFunc func(n int) ([]nvml.Device, nvml.Return) // SystemRegisterEventsFunc mocks the SystemRegisterEvents method. SystemRegisterEventsFunc func(systemRegisterEventRequest *nvml.SystemRegisterEventRequest) nvml.Return // SystemSetConfComputeGpusReadyStateFunc mocks the SystemSetConfComputeGpusReadyState method. SystemSetConfComputeGpusReadyStateFunc func(v uint32) nvml.Return // SystemSetConfComputeKeyRotationThresholdInfoFunc mocks the SystemSetConfComputeKeyRotationThresholdInfo method. SystemSetConfComputeKeyRotationThresholdInfoFunc func(confComputeSetKeyRotationThresholdInfo nvml.ConfComputeSetKeyRotationThresholdInfo) nvml.Return // SystemSetNvlinkBwModeFunc mocks the SystemSetNvlinkBwMode method. SystemSetNvlinkBwModeFunc func(v uint32) nvml.Return // UnitGetCountFunc mocks the UnitGetCount method. UnitGetCountFunc func() (int, nvml.Return) // UnitGetDevicesFunc mocks the UnitGetDevices method. UnitGetDevicesFunc func(unit nvml.Unit) ([]nvml.Device, nvml.Return) // UnitGetFanSpeedInfoFunc mocks the UnitGetFanSpeedInfo method. UnitGetFanSpeedInfoFunc func(unit nvml.Unit) (nvml.UnitFanSpeeds, nvml.Return) // UnitGetHandleByIndexFunc mocks the UnitGetHandleByIndex method. UnitGetHandleByIndexFunc func(n int) (nvml.Unit, nvml.Return) // UnitGetLedStateFunc mocks the UnitGetLedState method. UnitGetLedStateFunc func(unit nvml.Unit) (nvml.LedState, nvml.Return) // UnitGetPsuInfoFunc mocks the UnitGetPsuInfo method. UnitGetPsuInfoFunc func(unit nvml.Unit) (nvml.PSUInfo, nvml.Return) // UnitGetTemperatureFunc mocks the UnitGetTemperature method. UnitGetTemperatureFunc func(unit nvml.Unit, n int) (uint32, nvml.Return) // UnitGetUnitInfoFunc mocks the UnitGetUnitInfo method. UnitGetUnitInfoFunc func(unit nvml.Unit) (nvml.UnitInfo, nvml.Return) // UnitSetLedStateFunc mocks the UnitSetLedState method. UnitSetLedStateFunc func(unit nvml.Unit, ledColor nvml.LedColor) nvml.Return // VgpuInstanceClearAccountingPidsFunc mocks the VgpuInstanceClearAccountingPids method. VgpuInstanceClearAccountingPidsFunc func(vgpuInstance nvml.VgpuInstance) nvml.Return // VgpuInstanceGetAccountingModeFunc mocks the VgpuInstanceGetAccountingMode method. VgpuInstanceGetAccountingModeFunc func(vgpuInstance nvml.VgpuInstance) (nvml.EnableState, nvml.Return) // VgpuInstanceGetAccountingPidsFunc mocks the VgpuInstanceGetAccountingPids method. VgpuInstanceGetAccountingPidsFunc func(vgpuInstance nvml.VgpuInstance) ([]int, nvml.Return) // VgpuInstanceGetAccountingStatsFunc mocks the VgpuInstanceGetAccountingStats method. VgpuInstanceGetAccountingStatsFunc func(vgpuInstance nvml.VgpuInstance, n int) (nvml.AccountingStats, nvml.Return) // VgpuInstanceGetEccModeFunc mocks the VgpuInstanceGetEccMode method. VgpuInstanceGetEccModeFunc func(vgpuInstance nvml.VgpuInstance) (nvml.EnableState, nvml.Return) // VgpuInstanceGetEncoderCapacityFunc mocks the VgpuInstanceGetEncoderCapacity method. VgpuInstanceGetEncoderCapacityFunc func(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) // VgpuInstanceGetEncoderSessionsFunc mocks the VgpuInstanceGetEncoderSessions method. VgpuInstanceGetEncoderSessionsFunc func(vgpuInstance nvml.VgpuInstance) (int, nvml.EncoderSessionInfo, nvml.Return) // VgpuInstanceGetEncoderStatsFunc mocks the VgpuInstanceGetEncoderStats method. VgpuInstanceGetEncoderStatsFunc func(vgpuInstance nvml.VgpuInstance) (int, uint32, uint32, nvml.Return) // VgpuInstanceGetFBCSessionsFunc mocks the VgpuInstanceGetFBCSessions method. VgpuInstanceGetFBCSessionsFunc func(vgpuInstance nvml.VgpuInstance) (int, nvml.FBCSessionInfo, nvml.Return) // VgpuInstanceGetFBCStatsFunc mocks the VgpuInstanceGetFBCStats method. VgpuInstanceGetFBCStatsFunc func(vgpuInstance nvml.VgpuInstance) (nvml.FBCStats, nvml.Return) // VgpuInstanceGetFbUsageFunc mocks the VgpuInstanceGetFbUsage method. VgpuInstanceGetFbUsageFunc func(vgpuInstance nvml.VgpuInstance) (uint64, nvml.Return) // VgpuInstanceGetFrameRateLimitFunc mocks the VgpuInstanceGetFrameRateLimit method. VgpuInstanceGetFrameRateLimitFunc func(vgpuInstance nvml.VgpuInstance) (uint32, nvml.Return) // VgpuInstanceGetGpuInstanceIdFunc mocks the VgpuInstanceGetGpuInstanceId method. VgpuInstanceGetGpuInstanceIdFunc func(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) // VgpuInstanceGetGpuPciIdFunc mocks the VgpuInstanceGetGpuPciId method. VgpuInstanceGetGpuPciIdFunc func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) // VgpuInstanceGetLicenseInfoFunc mocks the VgpuInstanceGetLicenseInfo method. VgpuInstanceGetLicenseInfoFunc func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuLicenseInfo, nvml.Return) // VgpuInstanceGetLicenseStatusFunc mocks the VgpuInstanceGetLicenseStatus method. VgpuInstanceGetLicenseStatusFunc func(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) // VgpuInstanceGetMdevUUIDFunc mocks the VgpuInstanceGetMdevUUID method. VgpuInstanceGetMdevUUIDFunc func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) // VgpuInstanceGetMetadataFunc mocks the VgpuInstanceGetMetadata method. VgpuInstanceGetMetadataFunc func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuMetadata, nvml.Return) // VgpuInstanceGetRuntimeStateSizeFunc mocks the VgpuInstanceGetRuntimeStateSize method. VgpuInstanceGetRuntimeStateSizeFunc func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuRuntimeState, nvml.Return) // VgpuInstanceGetTypeFunc mocks the VgpuInstanceGetType method. VgpuInstanceGetTypeFunc func(vgpuInstance nvml.VgpuInstance) (nvml.VgpuTypeId, nvml.Return) // VgpuInstanceGetUUIDFunc mocks the VgpuInstanceGetUUID method. VgpuInstanceGetUUIDFunc func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) // VgpuInstanceGetVmDriverVersionFunc mocks the VgpuInstanceGetVmDriverVersion method. VgpuInstanceGetVmDriverVersionFunc func(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) // VgpuInstanceGetVmIDFunc mocks the VgpuInstanceGetVmID method. VgpuInstanceGetVmIDFunc func(vgpuInstance nvml.VgpuInstance) (string, nvml.VgpuVmIdType, nvml.Return) // VgpuInstanceSetEncoderCapacityFunc mocks the VgpuInstanceSetEncoderCapacity method. VgpuInstanceSetEncoderCapacityFunc func(vgpuInstance nvml.VgpuInstance, n int) nvml.Return // VgpuTypeGetBAR1InfoFunc mocks the VgpuTypeGetBAR1Info method. VgpuTypeGetBAR1InfoFunc func(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuTypeBar1Info, nvml.Return) // VgpuTypeGetCapabilitiesFunc mocks the VgpuTypeGetCapabilities method. VgpuTypeGetCapabilitiesFunc func(vgpuTypeId nvml.VgpuTypeId, vgpuCapability nvml.VgpuCapability) (bool, nvml.Return) // VgpuTypeGetClassFunc mocks the VgpuTypeGetClass method. VgpuTypeGetClassFunc func(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) // VgpuTypeGetDeviceIDFunc mocks the VgpuTypeGetDeviceID method. VgpuTypeGetDeviceIDFunc func(vgpuTypeId nvml.VgpuTypeId) (uint64, uint64, nvml.Return) // VgpuTypeGetFrameRateLimitFunc mocks the VgpuTypeGetFrameRateLimit method. VgpuTypeGetFrameRateLimitFunc func(vgpuTypeId nvml.VgpuTypeId) (uint32, nvml.Return) // VgpuTypeGetFramebufferSizeFunc mocks the VgpuTypeGetFramebufferSize method. VgpuTypeGetFramebufferSizeFunc func(vgpuTypeId nvml.VgpuTypeId) (uint64, nvml.Return) // VgpuTypeGetGpuInstanceProfileIdFunc mocks the VgpuTypeGetGpuInstanceProfileId method. VgpuTypeGetGpuInstanceProfileIdFunc func(vgpuTypeId nvml.VgpuTypeId) (uint32, nvml.Return) // VgpuTypeGetLicenseFunc mocks the VgpuTypeGetLicense method. VgpuTypeGetLicenseFunc func(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) // VgpuTypeGetMaxInstancesFunc mocks the VgpuTypeGetMaxInstances method. VgpuTypeGetMaxInstancesFunc func(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) // VgpuTypeGetMaxInstancesPerGpuInstanceFunc mocks the VgpuTypeGetMaxInstancesPerGpuInstance method. VgpuTypeGetMaxInstancesPerGpuInstanceFunc func(vgpuTypeMaxInstance *nvml.VgpuTypeMaxInstance) nvml.Return // VgpuTypeGetMaxInstancesPerVmFunc mocks the VgpuTypeGetMaxInstancesPerVm method. VgpuTypeGetMaxInstancesPerVmFunc func(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) // VgpuTypeGetNameFunc mocks the VgpuTypeGetName method. VgpuTypeGetNameFunc func(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) // VgpuTypeGetNumDisplayHeadsFunc mocks the VgpuTypeGetNumDisplayHeads method. VgpuTypeGetNumDisplayHeadsFunc func(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) // VgpuTypeGetResolutionFunc mocks the VgpuTypeGetResolution method. VgpuTypeGetResolutionFunc func(vgpuTypeId nvml.VgpuTypeId, n int) (uint32, uint32, nvml.Return) // calls tracks calls to the methods. calls struct { // ComputeInstanceDestroy holds details about calls to the ComputeInstanceDestroy method. ComputeInstanceDestroy []struct { // ComputeInstance is the computeInstance argument value. ComputeInstance nvml.ComputeInstance } // ComputeInstanceGetInfo holds details about calls to the ComputeInstanceGetInfo method. ComputeInstanceGetInfo []struct { // ComputeInstance is the computeInstance argument value. ComputeInstance nvml.ComputeInstance } // DeviceClearAccountingPids holds details about calls to the DeviceClearAccountingPids method. DeviceClearAccountingPids []struct { // Device is the device argument value. Device nvml.Device } // DeviceClearCpuAffinity holds details about calls to the DeviceClearCpuAffinity method. DeviceClearCpuAffinity []struct { // Device is the device argument value. Device nvml.Device } // DeviceClearEccErrorCounts holds details about calls to the DeviceClearEccErrorCounts method. DeviceClearEccErrorCounts []struct { // Device is the device argument value. Device nvml.Device // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType } // DeviceClearFieldValues holds details about calls to the DeviceClearFieldValues method. DeviceClearFieldValues []struct { // Device is the device argument value. Device nvml.Device // FieldValues is the fieldValues argument value. FieldValues []nvml.FieldValue } // DeviceCreateGpuInstance holds details about calls to the DeviceCreateGpuInstance method. DeviceCreateGpuInstance []struct { // Device is the device argument value. Device nvml.Device // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // DeviceCreateGpuInstanceWithPlacement holds details about calls to the DeviceCreateGpuInstanceWithPlacement method. DeviceCreateGpuInstanceWithPlacement []struct { // Device is the device argument value. Device nvml.Device // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo // GpuInstancePlacement is the gpuInstancePlacement argument value. GpuInstancePlacement *nvml.GpuInstancePlacement } // DeviceDiscoverGpus holds details about calls to the DeviceDiscoverGpus method. DeviceDiscoverGpus []struct { } // DeviceFreezeNvLinkUtilizationCounter holds details about calls to the DeviceFreezeNvLinkUtilizationCounter method. DeviceFreezeNvLinkUtilizationCounter []struct { // Device is the device argument value. Device nvml.Device // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceGetAPIRestriction holds details about calls to the DeviceGetAPIRestriction method. DeviceGetAPIRestriction []struct { // Device is the device argument value. Device nvml.Device // RestrictedAPI is the restrictedAPI argument value. RestrictedAPI nvml.RestrictedAPI } // DeviceGetAccountingBufferSize holds details about calls to the DeviceGetAccountingBufferSize method. DeviceGetAccountingBufferSize []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetAccountingMode holds details about calls to the DeviceGetAccountingMode method. DeviceGetAccountingMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetAccountingPids holds details about calls to the DeviceGetAccountingPids method. DeviceGetAccountingPids []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetAccountingStats holds details about calls to the DeviceGetAccountingStats method. DeviceGetAccountingStats []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint32 } // DeviceGetActiveVgpus holds details about calls to the DeviceGetActiveVgpus method. DeviceGetActiveVgpus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetAdaptiveClockInfoStatus holds details about calls to the DeviceGetAdaptiveClockInfoStatus method. DeviceGetAdaptiveClockInfoStatus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetAddressingMode holds details about calls to the DeviceGetAddressingMode method. DeviceGetAddressingMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetApplicationsClock holds details about calls to the DeviceGetApplicationsClock method. DeviceGetApplicationsClock []struct { // Device is the device argument value. Device nvml.Device // ClockType is the clockType argument value. ClockType nvml.ClockType } // DeviceGetArchitecture holds details about calls to the DeviceGetArchitecture method. DeviceGetArchitecture []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetAttributes holds details about calls to the DeviceGetAttributes method. DeviceGetAttributes []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetAutoBoostedClocksEnabled holds details about calls to the DeviceGetAutoBoostedClocksEnabled method. DeviceGetAutoBoostedClocksEnabled []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetBAR1MemoryInfo holds details about calls to the DeviceGetBAR1MemoryInfo method. DeviceGetBAR1MemoryInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetBoardId holds details about calls to the DeviceGetBoardId method. DeviceGetBoardId []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetBoardPartNumber holds details about calls to the DeviceGetBoardPartNumber method. DeviceGetBoardPartNumber []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetBrand holds details about calls to the DeviceGetBrand method. DeviceGetBrand []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetBridgeChipInfo holds details about calls to the DeviceGetBridgeChipInfo method. DeviceGetBridgeChipInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetBusType holds details about calls to the DeviceGetBusType method. DeviceGetBusType []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetC2cModeInfoV holds details about calls to the DeviceGetC2cModeInfoV method. DeviceGetC2cModeInfoV []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCapabilities holds details about calls to the DeviceGetCapabilities method. DeviceGetCapabilities []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetClkMonStatus holds details about calls to the DeviceGetClkMonStatus method. DeviceGetClkMonStatus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetClock holds details about calls to the DeviceGetClock method. DeviceGetClock []struct { // Device is the device argument value. Device nvml.Device // ClockType is the clockType argument value. ClockType nvml.ClockType // ClockId is the clockId argument value. ClockId nvml.ClockId } // DeviceGetClockInfo holds details about calls to the DeviceGetClockInfo method. DeviceGetClockInfo []struct { // Device is the device argument value. Device nvml.Device // ClockType is the clockType argument value. ClockType nvml.ClockType } // DeviceGetClockOffsets holds details about calls to the DeviceGetClockOffsets method. DeviceGetClockOffsets []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetComputeInstanceId holds details about calls to the DeviceGetComputeInstanceId method. DeviceGetComputeInstanceId []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetComputeMode holds details about calls to the DeviceGetComputeMode method. DeviceGetComputeMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetComputeRunningProcesses holds details about calls to the DeviceGetComputeRunningProcesses method. DeviceGetComputeRunningProcesses []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetConfComputeGpuAttestationReport holds details about calls to the DeviceGetConfComputeGpuAttestationReport method. DeviceGetConfComputeGpuAttestationReport []struct { // Device is the device argument value. Device nvml.Device // ConfComputeGpuAttestationReport is the confComputeGpuAttestationReport argument value. ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport } // DeviceGetConfComputeGpuCertificate holds details about calls to the DeviceGetConfComputeGpuCertificate method. DeviceGetConfComputeGpuCertificate []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetConfComputeMemSizeInfo holds details about calls to the DeviceGetConfComputeMemSizeInfo method. DeviceGetConfComputeMemSizeInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetConfComputeProtectedMemoryUsage holds details about calls to the DeviceGetConfComputeProtectedMemoryUsage method. DeviceGetConfComputeProtectedMemoryUsage []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCoolerInfo holds details about calls to the DeviceGetCoolerInfo method. DeviceGetCoolerInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCount holds details about calls to the DeviceGetCount method. DeviceGetCount []struct { } // DeviceGetCpuAffinity holds details about calls to the DeviceGetCpuAffinity method. DeviceGetCpuAffinity []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetCpuAffinityWithinScope holds details about calls to the DeviceGetCpuAffinityWithinScope method. DeviceGetCpuAffinityWithinScope []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int // AffinityScope is the affinityScope argument value. AffinityScope nvml.AffinityScope } // DeviceGetCreatableVgpus holds details about calls to the DeviceGetCreatableVgpus method. DeviceGetCreatableVgpus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCudaComputeCapability holds details about calls to the DeviceGetCudaComputeCapability method. DeviceGetCudaComputeCapability []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCurrPcieLinkGeneration holds details about calls to the DeviceGetCurrPcieLinkGeneration method. DeviceGetCurrPcieLinkGeneration []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCurrPcieLinkWidth holds details about calls to the DeviceGetCurrPcieLinkWidth method. DeviceGetCurrPcieLinkWidth []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCurrentClockFreqs holds details about calls to the DeviceGetCurrentClockFreqs method. DeviceGetCurrentClockFreqs []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCurrentClocksEventReasons holds details about calls to the DeviceGetCurrentClocksEventReasons method. DeviceGetCurrentClocksEventReasons []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetCurrentClocksThrottleReasons holds details about calls to the DeviceGetCurrentClocksThrottleReasons method. DeviceGetCurrentClocksThrottleReasons []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDecoderUtilization holds details about calls to the DeviceGetDecoderUtilization method. DeviceGetDecoderUtilization []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDefaultApplicationsClock holds details about calls to the DeviceGetDefaultApplicationsClock method. DeviceGetDefaultApplicationsClock []struct { // Device is the device argument value. Device nvml.Device // ClockType is the clockType argument value. ClockType nvml.ClockType } // DeviceGetDefaultEccMode holds details about calls to the DeviceGetDefaultEccMode method. DeviceGetDefaultEccMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDetailedEccErrors holds details about calls to the DeviceGetDetailedEccErrors method. DeviceGetDetailedEccErrors []struct { // Device is the device argument value. Device nvml.Device // MemoryErrorType is the memoryErrorType argument value. MemoryErrorType nvml.MemoryErrorType // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType } // DeviceGetDeviceHandleFromMigDeviceHandle holds details about calls to the DeviceGetDeviceHandleFromMigDeviceHandle method. DeviceGetDeviceHandleFromMigDeviceHandle []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDisplayActive holds details about calls to the DeviceGetDisplayActive method. DeviceGetDisplayActive []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDisplayMode holds details about calls to the DeviceGetDisplayMode method. DeviceGetDisplayMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDramEncryptionMode holds details about calls to the DeviceGetDramEncryptionMode method. DeviceGetDramEncryptionMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDriverModel holds details about calls to the DeviceGetDriverModel method. DeviceGetDriverModel []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDriverModel_v2 holds details about calls to the DeviceGetDriverModel_v2 method. DeviceGetDriverModel_v2 []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetDynamicPstatesInfo holds details about calls to the DeviceGetDynamicPstatesInfo method. DeviceGetDynamicPstatesInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetEccMode holds details about calls to the DeviceGetEccMode method. DeviceGetEccMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetEncoderCapacity holds details about calls to the DeviceGetEncoderCapacity method. DeviceGetEncoderCapacity []struct { // Device is the device argument value. Device nvml.Device // EncoderType is the encoderType argument value. EncoderType nvml.EncoderType } // DeviceGetEncoderSessions holds details about calls to the DeviceGetEncoderSessions method. DeviceGetEncoderSessions []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetEncoderStats holds details about calls to the DeviceGetEncoderStats method. DeviceGetEncoderStats []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetEncoderUtilization holds details about calls to the DeviceGetEncoderUtilization method. DeviceGetEncoderUtilization []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetEnforcedPowerLimit holds details about calls to the DeviceGetEnforcedPowerLimit method. DeviceGetEnforcedPowerLimit []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetFBCSessions holds details about calls to the DeviceGetFBCSessions method. DeviceGetFBCSessions []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetFBCStats holds details about calls to the DeviceGetFBCStats method. DeviceGetFBCStats []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetFanControlPolicy_v2 holds details about calls to the DeviceGetFanControlPolicy_v2 method. DeviceGetFanControlPolicy_v2 []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetFanSpeed holds details about calls to the DeviceGetFanSpeed method. DeviceGetFanSpeed []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetFanSpeedRPM holds details about calls to the DeviceGetFanSpeedRPM method. DeviceGetFanSpeedRPM []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetFanSpeed_v2 holds details about calls to the DeviceGetFanSpeed_v2 method. DeviceGetFanSpeed_v2 []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetFieldValues holds details about calls to the DeviceGetFieldValues method. DeviceGetFieldValues []struct { // Device is the device argument value. Device nvml.Device // FieldValues is the fieldValues argument value. FieldValues []nvml.FieldValue } // DeviceGetGpcClkMinMaxVfOffset holds details about calls to the DeviceGetGpcClkMinMaxVfOffset method. DeviceGetGpcClkMinMaxVfOffset []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGpcClkVfOffset holds details about calls to the DeviceGetGpcClkVfOffset method. DeviceGetGpcClkVfOffset []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGpuFabricInfo holds details about calls to the DeviceGetGpuFabricInfo method. DeviceGetGpuFabricInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGpuFabricInfoV holds details about calls to the DeviceGetGpuFabricInfoV method. DeviceGetGpuFabricInfoV []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGpuInstanceById holds details about calls to the DeviceGetGpuInstanceById method. DeviceGetGpuInstanceById []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetGpuInstanceId holds details about calls to the DeviceGetGpuInstanceId method. DeviceGetGpuInstanceId []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGpuInstancePossiblePlacements holds details about calls to the DeviceGetGpuInstancePossiblePlacements method. DeviceGetGpuInstancePossiblePlacements []struct { // Device is the device argument value. Device nvml.Device // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // DeviceGetGpuInstanceProfileInfo holds details about calls to the DeviceGetGpuInstanceProfileInfo method. DeviceGetGpuInstanceProfileInfo []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetGpuInstanceProfileInfoByIdV holds details about calls to the DeviceGetGpuInstanceProfileInfoByIdV method. DeviceGetGpuInstanceProfileInfoByIdV []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetGpuInstanceProfileInfoV holds details about calls to the DeviceGetGpuInstanceProfileInfoV method. DeviceGetGpuInstanceProfileInfoV []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetGpuInstanceRemainingCapacity holds details about calls to the DeviceGetGpuInstanceRemainingCapacity method. DeviceGetGpuInstanceRemainingCapacity []struct { // Device is the device argument value. Device nvml.Device // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // DeviceGetGpuInstances holds details about calls to the DeviceGetGpuInstances method. DeviceGetGpuInstances []struct { // Device is the device argument value. Device nvml.Device // GpuInstanceProfileInfo is the gpuInstanceProfileInfo argument value. GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } // DeviceGetGpuMaxPcieLinkGeneration holds details about calls to the DeviceGetGpuMaxPcieLinkGeneration method. DeviceGetGpuMaxPcieLinkGeneration []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGpuOperationMode holds details about calls to the DeviceGetGpuOperationMode method. DeviceGetGpuOperationMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGraphicsRunningProcesses holds details about calls to the DeviceGetGraphicsRunningProcesses method. DeviceGetGraphicsRunningProcesses []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGridLicensableFeatures holds details about calls to the DeviceGetGridLicensableFeatures method. DeviceGetGridLicensableFeatures []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGspFirmwareMode holds details about calls to the DeviceGetGspFirmwareMode method. DeviceGetGspFirmwareMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetGspFirmwareVersion holds details about calls to the DeviceGetGspFirmwareVersion method. DeviceGetGspFirmwareVersion []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetHandleByIndex holds details about calls to the DeviceGetHandleByIndex method. DeviceGetHandleByIndex []struct { // N is the n argument value. N int } // DeviceGetHandleByPciBusId holds details about calls to the DeviceGetHandleByPciBusId method. DeviceGetHandleByPciBusId []struct { // S is the s argument value. S string } // DeviceGetHandleBySerial holds details about calls to the DeviceGetHandleBySerial method. DeviceGetHandleBySerial []struct { // S is the s argument value. S string } // DeviceGetHandleByUUID holds details about calls to the DeviceGetHandleByUUID method. DeviceGetHandleByUUID []struct { // S is the s argument value. S string } // DeviceGetHandleByUUIDV holds details about calls to the DeviceGetHandleByUUIDV method. DeviceGetHandleByUUIDV []struct { // UUID is the uUID argument value. UUID *nvml.UUID } // DeviceGetHostVgpuMode holds details about calls to the DeviceGetHostVgpuMode method. DeviceGetHostVgpuMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetIndex holds details about calls to the DeviceGetIndex method. DeviceGetIndex []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetInforomConfigurationChecksum holds details about calls to the DeviceGetInforomConfigurationChecksum method. DeviceGetInforomConfigurationChecksum []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetInforomImageVersion holds details about calls to the DeviceGetInforomImageVersion method. DeviceGetInforomImageVersion []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetInforomVersion holds details about calls to the DeviceGetInforomVersion method. DeviceGetInforomVersion []struct { // Device is the device argument value. Device nvml.Device // InforomObject is the inforomObject argument value. InforomObject nvml.InforomObject } // DeviceGetIrqNum holds details about calls to the DeviceGetIrqNum method. DeviceGetIrqNum []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetJpgUtilization holds details about calls to the DeviceGetJpgUtilization method. DeviceGetJpgUtilization []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetLastBBXFlushTime holds details about calls to the DeviceGetLastBBXFlushTime method. DeviceGetLastBBXFlushTime []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMPSComputeRunningProcesses holds details about calls to the DeviceGetMPSComputeRunningProcesses method. DeviceGetMPSComputeRunningProcesses []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMarginTemperature holds details about calls to the DeviceGetMarginTemperature method. DeviceGetMarginTemperature []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMaxClockInfo holds details about calls to the DeviceGetMaxClockInfo method. DeviceGetMaxClockInfo []struct { // Device is the device argument value. Device nvml.Device // ClockType is the clockType argument value. ClockType nvml.ClockType } // DeviceGetMaxCustomerBoostClock holds details about calls to the DeviceGetMaxCustomerBoostClock method. DeviceGetMaxCustomerBoostClock []struct { // Device is the device argument value. Device nvml.Device // ClockType is the clockType argument value. ClockType nvml.ClockType } // DeviceGetMaxMigDeviceCount holds details about calls to the DeviceGetMaxMigDeviceCount method. DeviceGetMaxMigDeviceCount []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMaxPcieLinkGeneration holds details about calls to the DeviceGetMaxPcieLinkGeneration method. DeviceGetMaxPcieLinkGeneration []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMaxPcieLinkWidth holds details about calls to the DeviceGetMaxPcieLinkWidth method. DeviceGetMaxPcieLinkWidth []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMemClkMinMaxVfOffset holds details about calls to the DeviceGetMemClkMinMaxVfOffset method. DeviceGetMemClkMinMaxVfOffset []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMemClkVfOffset holds details about calls to the DeviceGetMemClkVfOffset method. DeviceGetMemClkVfOffset []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMemoryAffinity holds details about calls to the DeviceGetMemoryAffinity method. DeviceGetMemoryAffinity []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int // AffinityScope is the affinityScope argument value. AffinityScope nvml.AffinityScope } // DeviceGetMemoryBusWidth holds details about calls to the DeviceGetMemoryBusWidth method. DeviceGetMemoryBusWidth []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMemoryErrorCounter holds details about calls to the DeviceGetMemoryErrorCounter method. DeviceGetMemoryErrorCounter []struct { // Device is the device argument value. Device nvml.Device // MemoryErrorType is the memoryErrorType argument value. MemoryErrorType nvml.MemoryErrorType // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType // MemoryLocation is the memoryLocation argument value. MemoryLocation nvml.MemoryLocation } // DeviceGetMemoryInfo holds details about calls to the DeviceGetMemoryInfo method. DeviceGetMemoryInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMemoryInfo_v2 holds details about calls to the DeviceGetMemoryInfo_v2 method. DeviceGetMemoryInfo_v2 []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMigDeviceHandleByIndex holds details about calls to the DeviceGetMigDeviceHandleByIndex method. DeviceGetMigDeviceHandleByIndex []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetMigMode holds details about calls to the DeviceGetMigMode method. DeviceGetMigMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMinMaxClockOfPState holds details about calls to the DeviceGetMinMaxClockOfPState method. DeviceGetMinMaxClockOfPState []struct { // Device is the device argument value. Device nvml.Device // ClockType is the clockType argument value. ClockType nvml.ClockType // Pstates is the pstates argument value. Pstates nvml.Pstates } // DeviceGetMinMaxFanSpeed holds details about calls to the DeviceGetMinMaxFanSpeed method. DeviceGetMinMaxFanSpeed []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMinorNumber holds details about calls to the DeviceGetMinorNumber method. DeviceGetMinorNumber []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetModuleId holds details about calls to the DeviceGetModuleId method. DeviceGetModuleId []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetMultiGpuBoard holds details about calls to the DeviceGetMultiGpuBoard method. DeviceGetMultiGpuBoard []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetName holds details about calls to the DeviceGetName method. DeviceGetName []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetNumFans holds details about calls to the DeviceGetNumFans method. DeviceGetNumFans []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetNumGpuCores holds details about calls to the DeviceGetNumGpuCores method. DeviceGetNumGpuCores []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetNumaNodeId holds details about calls to the DeviceGetNumaNodeId method. DeviceGetNumaNodeId []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetNvLinkCapability holds details about calls to the DeviceGetNvLinkCapability method. DeviceGetNvLinkCapability []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int // NvLinkCapability is the nvLinkCapability argument value. NvLinkCapability nvml.NvLinkCapability } // DeviceGetNvLinkErrorCounter holds details about calls to the DeviceGetNvLinkErrorCounter method. DeviceGetNvLinkErrorCounter []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int // NvLinkErrorCounter is the nvLinkErrorCounter argument value. NvLinkErrorCounter nvml.NvLinkErrorCounter } // DeviceGetNvLinkInfo holds details about calls to the DeviceGetNvLinkInfo method. DeviceGetNvLinkInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetNvLinkRemoteDeviceType holds details about calls to the DeviceGetNvLinkRemoteDeviceType method. DeviceGetNvLinkRemoteDeviceType []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetNvLinkRemotePciInfo holds details about calls to the DeviceGetNvLinkRemotePciInfo method. DeviceGetNvLinkRemotePciInfo []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetNvLinkState holds details about calls to the DeviceGetNvLinkState method. DeviceGetNvLinkState []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetNvLinkUtilizationControl holds details about calls to the DeviceGetNvLinkUtilizationControl method. DeviceGetNvLinkUtilizationControl []struct { // Device is the device argument value. Device nvml.Device // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // DeviceGetNvLinkUtilizationCounter holds details about calls to the DeviceGetNvLinkUtilizationCounter method. DeviceGetNvLinkUtilizationCounter []struct { // Device is the device argument value. Device nvml.Device // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // DeviceGetNvLinkVersion holds details about calls to the DeviceGetNvLinkVersion method. DeviceGetNvLinkVersion []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetNvlinkBwMode holds details about calls to the DeviceGetNvlinkBwMode method. DeviceGetNvlinkBwMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetNvlinkSupportedBwModes holds details about calls to the DeviceGetNvlinkSupportedBwModes method. DeviceGetNvlinkSupportedBwModes []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetOfaUtilization holds details about calls to the DeviceGetOfaUtilization method. DeviceGetOfaUtilization []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetP2PStatus holds details about calls to the DeviceGetP2PStatus method. DeviceGetP2PStatus []struct { // Device1 is the device1 argument value. Device1 nvml.Device // Device2 is the device2 argument value. Device2 nvml.Device // GpuP2PCapsIndex is the gpuP2PCapsIndex argument value. GpuP2PCapsIndex nvml.GpuP2PCapsIndex } // DeviceGetPciInfo holds details about calls to the DeviceGetPciInfo method. DeviceGetPciInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPciInfoExt holds details about calls to the DeviceGetPciInfoExt method. DeviceGetPciInfoExt []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPcieLinkMaxSpeed holds details about calls to the DeviceGetPcieLinkMaxSpeed method. DeviceGetPcieLinkMaxSpeed []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPcieReplayCounter holds details about calls to the DeviceGetPcieReplayCounter method. DeviceGetPcieReplayCounter []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPcieSpeed holds details about calls to the DeviceGetPcieSpeed method. DeviceGetPcieSpeed []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPcieThroughput holds details about calls to the DeviceGetPcieThroughput method. DeviceGetPcieThroughput []struct { // Device is the device argument value. Device nvml.Device // PcieUtilCounter is the pcieUtilCounter argument value. PcieUtilCounter nvml.PcieUtilCounter } // DeviceGetPdi holds details about calls to the DeviceGetPdi method. DeviceGetPdi []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPerformanceModes holds details about calls to the DeviceGetPerformanceModes method. DeviceGetPerformanceModes []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPerformanceState holds details about calls to the DeviceGetPerformanceState method. DeviceGetPerformanceState []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPersistenceMode holds details about calls to the DeviceGetPersistenceMode method. DeviceGetPersistenceMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPgpuMetadataString holds details about calls to the DeviceGetPgpuMetadataString method. DeviceGetPgpuMetadataString []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPlatformInfo holds details about calls to the DeviceGetPlatformInfo method. DeviceGetPlatformInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerManagementDefaultLimit holds details about calls to the DeviceGetPowerManagementDefaultLimit method. DeviceGetPowerManagementDefaultLimit []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerManagementLimit holds details about calls to the DeviceGetPowerManagementLimit method. DeviceGetPowerManagementLimit []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerManagementLimitConstraints holds details about calls to the DeviceGetPowerManagementLimitConstraints method. DeviceGetPowerManagementLimitConstraints []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerManagementMode holds details about calls to the DeviceGetPowerManagementMode method. DeviceGetPowerManagementMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerMizerMode_v1 holds details about calls to the DeviceGetPowerMizerMode_v1 method. DeviceGetPowerMizerMode_v1 []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerSource holds details about calls to the DeviceGetPowerSource method. DeviceGetPowerSource []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerState holds details about calls to the DeviceGetPowerState method. DeviceGetPowerState []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetPowerUsage holds details about calls to the DeviceGetPowerUsage method. DeviceGetPowerUsage []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetProcessUtilization holds details about calls to the DeviceGetProcessUtilization method. DeviceGetProcessUtilization []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint64 } // DeviceGetProcessesUtilizationInfo holds details about calls to the DeviceGetProcessesUtilizationInfo method. DeviceGetProcessesUtilizationInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetRemappedRows holds details about calls to the DeviceGetRemappedRows method. DeviceGetRemappedRows []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetRepairStatus holds details about calls to the DeviceGetRepairStatus method. DeviceGetRepairStatus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetRetiredPages holds details about calls to the DeviceGetRetiredPages method. DeviceGetRetiredPages []struct { // Device is the device argument value. Device nvml.Device // PageRetirementCause is the pageRetirementCause argument value. PageRetirementCause nvml.PageRetirementCause } // DeviceGetRetiredPagesPendingStatus holds details about calls to the DeviceGetRetiredPagesPendingStatus method. DeviceGetRetiredPagesPendingStatus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetRetiredPages_v2 holds details about calls to the DeviceGetRetiredPages_v2 method. DeviceGetRetiredPages_v2 []struct { // Device is the device argument value. Device nvml.Device // PageRetirementCause is the pageRetirementCause argument value. PageRetirementCause nvml.PageRetirementCause } // DeviceGetRowRemapperHistogram holds details about calls to the DeviceGetRowRemapperHistogram method. DeviceGetRowRemapperHistogram []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetRunningProcessDetailList holds details about calls to the DeviceGetRunningProcessDetailList method. DeviceGetRunningProcessDetailList []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSamples holds details about calls to the DeviceGetSamples method. DeviceGetSamples []struct { // Device is the device argument value. Device nvml.Device // SamplingType is the samplingType argument value. SamplingType nvml.SamplingType // V is the v argument value. V uint64 } // DeviceGetSerial holds details about calls to the DeviceGetSerial method. DeviceGetSerial []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSramEccErrorStatus holds details about calls to the DeviceGetSramEccErrorStatus method. DeviceGetSramEccErrorStatus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSramUniqueUncorrectedEccErrorCounts holds details about calls to the DeviceGetSramUniqueUncorrectedEccErrorCounts method. DeviceGetSramUniqueUncorrectedEccErrorCounts []struct { // Device is the device argument value. Device nvml.Device // EccSramUniqueUncorrectedErrorCounts is the eccSramUniqueUncorrectedErrorCounts argument value. EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts } // DeviceGetSupportedClocksEventReasons holds details about calls to the DeviceGetSupportedClocksEventReasons method. DeviceGetSupportedClocksEventReasons []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSupportedClocksThrottleReasons holds details about calls to the DeviceGetSupportedClocksThrottleReasons method. DeviceGetSupportedClocksThrottleReasons []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSupportedEventTypes holds details about calls to the DeviceGetSupportedEventTypes method. DeviceGetSupportedEventTypes []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSupportedGraphicsClocks holds details about calls to the DeviceGetSupportedGraphicsClocks method. DeviceGetSupportedGraphicsClocks []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetSupportedMemoryClocks holds details about calls to the DeviceGetSupportedMemoryClocks method. DeviceGetSupportedMemoryClocks []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSupportedPerformanceStates holds details about calls to the DeviceGetSupportedPerformanceStates method. DeviceGetSupportedPerformanceStates []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetSupportedVgpus holds details about calls to the DeviceGetSupportedVgpus method. DeviceGetSupportedVgpus []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetTargetFanSpeed holds details about calls to the DeviceGetTargetFanSpeed method. DeviceGetTargetFanSpeed []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceGetTemperature holds details about calls to the DeviceGetTemperature method. DeviceGetTemperature []struct { // Device is the device argument value. Device nvml.Device // TemperatureSensors is the temperatureSensors argument value. TemperatureSensors nvml.TemperatureSensors } // DeviceGetTemperatureThreshold holds details about calls to the DeviceGetTemperatureThreshold method. DeviceGetTemperatureThreshold []struct { // Device is the device argument value. Device nvml.Device // TemperatureThresholds is the temperatureThresholds argument value. TemperatureThresholds nvml.TemperatureThresholds } // DeviceGetTemperatureV holds details about calls to the DeviceGetTemperatureV method. DeviceGetTemperatureV []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetThermalSettings holds details about calls to the DeviceGetThermalSettings method. DeviceGetThermalSettings []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint32 } // DeviceGetTopologyCommonAncestor holds details about calls to the DeviceGetTopologyCommonAncestor method. DeviceGetTopologyCommonAncestor []struct { // Device1 is the device1 argument value. Device1 nvml.Device // Device2 is the device2 argument value. Device2 nvml.Device } // DeviceGetTopologyNearestGpus holds details about calls to the DeviceGetTopologyNearestGpus method. DeviceGetTopologyNearestGpus []struct { // Device is the device argument value. Device nvml.Device // GpuTopologyLevel is the gpuTopologyLevel argument value. GpuTopologyLevel nvml.GpuTopologyLevel } // DeviceGetTotalEccErrors holds details about calls to the DeviceGetTotalEccErrors method. DeviceGetTotalEccErrors []struct { // Device is the device argument value. Device nvml.Device // MemoryErrorType is the memoryErrorType argument value. MemoryErrorType nvml.MemoryErrorType // EccCounterType is the eccCounterType argument value. EccCounterType nvml.EccCounterType } // DeviceGetTotalEnergyConsumption holds details about calls to the DeviceGetTotalEnergyConsumption method. DeviceGetTotalEnergyConsumption []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetUUID holds details about calls to the DeviceGetUUID method. DeviceGetUUID []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetUtilizationRates holds details about calls to the DeviceGetUtilizationRates method. DeviceGetUtilizationRates []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVbiosVersion holds details about calls to the DeviceGetVbiosVersion method. DeviceGetVbiosVersion []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuCapabilities holds details about calls to the DeviceGetVgpuCapabilities method. DeviceGetVgpuCapabilities []struct { // Device is the device argument value. Device nvml.Device // DeviceVgpuCapability is the deviceVgpuCapability argument value. DeviceVgpuCapability nvml.DeviceVgpuCapability } // DeviceGetVgpuHeterogeneousMode holds details about calls to the DeviceGetVgpuHeterogeneousMode method. DeviceGetVgpuHeterogeneousMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuInstancesUtilizationInfo holds details about calls to the DeviceGetVgpuInstancesUtilizationInfo method. DeviceGetVgpuInstancesUtilizationInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuMetadata holds details about calls to the DeviceGetVgpuMetadata method. DeviceGetVgpuMetadata []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuProcessUtilization holds details about calls to the DeviceGetVgpuProcessUtilization method. DeviceGetVgpuProcessUtilization []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint64 } // DeviceGetVgpuProcessesUtilizationInfo holds details about calls to the DeviceGetVgpuProcessesUtilizationInfo method. DeviceGetVgpuProcessesUtilizationInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuSchedulerCapabilities holds details about calls to the DeviceGetVgpuSchedulerCapabilities method. DeviceGetVgpuSchedulerCapabilities []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuSchedulerLog holds details about calls to the DeviceGetVgpuSchedulerLog method. DeviceGetVgpuSchedulerLog []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuSchedulerState holds details about calls to the DeviceGetVgpuSchedulerState method. DeviceGetVgpuSchedulerState []struct { // Device is the device argument value. Device nvml.Device } // DeviceGetVgpuTypeCreatablePlacements holds details about calls to the DeviceGetVgpuTypeCreatablePlacements method. DeviceGetVgpuTypeCreatablePlacements []struct { // Device is the device argument value. Device nvml.Device // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // DeviceGetVgpuTypeSupportedPlacements holds details about calls to the DeviceGetVgpuTypeSupportedPlacements method. DeviceGetVgpuTypeSupportedPlacements []struct { // Device is the device argument value. Device nvml.Device // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // DeviceGetVgpuUtilization holds details about calls to the DeviceGetVgpuUtilization method. DeviceGetVgpuUtilization []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint64 } // DeviceGetViolationStatus holds details about calls to the DeviceGetViolationStatus method. DeviceGetViolationStatus []struct { // Device is the device argument value. Device nvml.Device // PerfPolicyType is the perfPolicyType argument value. PerfPolicyType nvml.PerfPolicyType } // DeviceGetVirtualizationMode holds details about calls to the DeviceGetVirtualizationMode method. DeviceGetVirtualizationMode []struct { // Device is the device argument value. Device nvml.Device } // DeviceIsMigDeviceHandle holds details about calls to the DeviceIsMigDeviceHandle method. DeviceIsMigDeviceHandle []struct { // Device is the device argument value. Device nvml.Device } // DeviceModifyDrainState holds details about calls to the DeviceModifyDrainState method. DeviceModifyDrainState []struct { // PciInfo is the pciInfo argument value. PciInfo *nvml.PciInfo // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceOnSameBoard holds details about calls to the DeviceOnSameBoard method. DeviceOnSameBoard []struct { // Device1 is the device1 argument value. Device1 nvml.Device // Device2 is the device2 argument value. Device2 nvml.Device } // DevicePowerSmoothingActivatePresetProfile holds details about calls to the DevicePowerSmoothingActivatePresetProfile method. DevicePowerSmoothingActivatePresetProfile []struct { // Device is the device argument value. Device nvml.Device // PowerSmoothingProfile is the powerSmoothingProfile argument value. PowerSmoothingProfile *nvml.PowerSmoothingProfile } // DevicePowerSmoothingSetState holds details about calls to the DevicePowerSmoothingSetState method. DevicePowerSmoothingSetState []struct { // Device is the device argument value. Device nvml.Device // PowerSmoothingState is the powerSmoothingState argument value. PowerSmoothingState *nvml.PowerSmoothingState } // DevicePowerSmoothingUpdatePresetProfileParam holds details about calls to the DevicePowerSmoothingUpdatePresetProfileParam method. DevicePowerSmoothingUpdatePresetProfileParam []struct { // Device is the device argument value. Device nvml.Device // PowerSmoothingProfile is the powerSmoothingProfile argument value. PowerSmoothingProfile *nvml.PowerSmoothingProfile } // DeviceQueryDrainState holds details about calls to the DeviceQueryDrainState method. DeviceQueryDrainState []struct { // PciInfo is the pciInfo argument value. PciInfo *nvml.PciInfo } // DeviceReadWritePRM_v1 holds details about calls to the DeviceReadWritePRM_v1 method. DeviceReadWritePRM_v1 []struct { // Device is the device argument value. Device nvml.Device // PRMTLV_v1 is the pRMTLV_v1 argument value. PRMTLV_v1 *nvml.PRMTLV_v1 } // DeviceRegisterEvents holds details about calls to the DeviceRegisterEvents method. DeviceRegisterEvents []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint64 // EventSet is the eventSet argument value. EventSet nvml.EventSet } // DeviceRemoveGpu holds details about calls to the DeviceRemoveGpu method. DeviceRemoveGpu []struct { // PciInfo is the pciInfo argument value. PciInfo *nvml.PciInfo } // DeviceRemoveGpu_v2 holds details about calls to the DeviceRemoveGpu_v2 method. DeviceRemoveGpu_v2 []struct { // PciInfo is the pciInfo argument value. PciInfo *nvml.PciInfo // DetachGpuState is the detachGpuState argument value. DetachGpuState nvml.DetachGpuState // PcieLinkState is the pcieLinkState argument value. PcieLinkState nvml.PcieLinkState } // DeviceResetApplicationsClocks holds details about calls to the DeviceResetApplicationsClocks method. DeviceResetApplicationsClocks []struct { // Device is the device argument value. Device nvml.Device } // DeviceResetGpuLockedClocks holds details about calls to the DeviceResetGpuLockedClocks method. DeviceResetGpuLockedClocks []struct { // Device is the device argument value. Device nvml.Device } // DeviceResetMemoryLockedClocks holds details about calls to the DeviceResetMemoryLockedClocks method. DeviceResetMemoryLockedClocks []struct { // Device is the device argument value. Device nvml.Device } // DeviceResetNvLinkErrorCounters holds details about calls to the DeviceResetNvLinkErrorCounters method. DeviceResetNvLinkErrorCounters []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceResetNvLinkUtilizationCounter holds details about calls to the DeviceResetNvLinkUtilizationCounter method. DeviceResetNvLinkUtilizationCounter []struct { // Device is the device argument value. Device nvml.Device // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // DeviceSetAPIRestriction holds details about calls to the DeviceSetAPIRestriction method. DeviceSetAPIRestriction []struct { // Device is the device argument value. Device nvml.Device // RestrictedAPI is the restrictedAPI argument value. RestrictedAPI nvml.RestrictedAPI // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceSetAccountingMode holds details about calls to the DeviceSetAccountingMode method. DeviceSetAccountingMode []struct { // Device is the device argument value. Device nvml.Device // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceSetApplicationsClocks holds details about calls to the DeviceSetApplicationsClocks method. DeviceSetApplicationsClocks []struct { // Device is the device argument value. Device nvml.Device // V1 is the v1 argument value. V1 uint32 // V2 is the v2 argument value. V2 uint32 } // DeviceSetAutoBoostedClocksEnabled holds details about calls to the DeviceSetAutoBoostedClocksEnabled method. DeviceSetAutoBoostedClocksEnabled []struct { // Device is the device argument value. Device nvml.Device // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceSetClockOffsets holds details about calls to the DeviceSetClockOffsets method. DeviceSetClockOffsets []struct { // Device is the device argument value. Device nvml.Device // ClockOffset is the clockOffset argument value. ClockOffset nvml.ClockOffset } // DeviceSetComputeMode holds details about calls to the DeviceSetComputeMode method. DeviceSetComputeMode []struct { // Device is the device argument value. Device nvml.Device // ComputeMode is the computeMode argument value. ComputeMode nvml.ComputeMode } // DeviceSetConfComputeUnprotectedMemSize holds details about calls to the DeviceSetConfComputeUnprotectedMemSize method. DeviceSetConfComputeUnprotectedMemSize []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint64 } // DeviceSetCpuAffinity holds details about calls to the DeviceSetCpuAffinity method. DeviceSetCpuAffinity []struct { // Device is the device argument value. Device nvml.Device } // DeviceSetDefaultAutoBoostedClocksEnabled holds details about calls to the DeviceSetDefaultAutoBoostedClocksEnabled method. DeviceSetDefaultAutoBoostedClocksEnabled []struct { // Device is the device argument value. Device nvml.Device // EnableState is the enableState argument value. EnableState nvml.EnableState // V is the v argument value. V uint32 } // DeviceSetDefaultFanSpeed_v2 holds details about calls to the DeviceSetDefaultFanSpeed_v2 method. DeviceSetDefaultFanSpeed_v2 []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceSetDramEncryptionMode holds details about calls to the DeviceSetDramEncryptionMode method. DeviceSetDramEncryptionMode []struct { // Device is the device argument value. Device nvml.Device // DramEncryptionInfo is the dramEncryptionInfo argument value. DramEncryptionInfo *nvml.DramEncryptionInfo } // DeviceSetDriverModel holds details about calls to the DeviceSetDriverModel method. DeviceSetDriverModel []struct { // Device is the device argument value. Device nvml.Device // DriverModel is the driverModel argument value. DriverModel nvml.DriverModel // V is the v argument value. V uint32 } // DeviceSetEccMode holds details about calls to the DeviceSetEccMode method. DeviceSetEccMode []struct { // Device is the device argument value. Device nvml.Device // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceSetFanControlPolicy holds details about calls to the DeviceSetFanControlPolicy method. DeviceSetFanControlPolicy []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int // FanControlPolicy is the fanControlPolicy argument value. FanControlPolicy nvml.FanControlPolicy } // DeviceSetFanSpeed_v2 holds details about calls to the DeviceSetFanSpeed_v2 method. DeviceSetFanSpeed_v2 []struct { // Device is the device argument value. Device nvml.Device // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // DeviceSetGpcClkVfOffset holds details about calls to the DeviceSetGpcClkVfOffset method. DeviceSetGpcClkVfOffset []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceSetGpuLockedClocks holds details about calls to the DeviceSetGpuLockedClocks method. DeviceSetGpuLockedClocks []struct { // Device is the device argument value. Device nvml.Device // V1 is the v1 argument value. V1 uint32 // V2 is the v2 argument value. V2 uint32 } // DeviceSetGpuOperationMode holds details about calls to the DeviceSetGpuOperationMode method. DeviceSetGpuOperationMode []struct { // Device is the device argument value. Device nvml.Device // GpuOperationMode is the gpuOperationMode argument value. GpuOperationMode nvml.GpuOperationMode } // DeviceSetMemClkVfOffset holds details about calls to the DeviceSetMemClkVfOffset method. DeviceSetMemClkVfOffset []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceSetMemoryLockedClocks holds details about calls to the DeviceSetMemoryLockedClocks method. DeviceSetMemoryLockedClocks []struct { // Device is the device argument value. Device nvml.Device // V1 is the v1 argument value. V1 uint32 // V2 is the v2 argument value. V2 uint32 } // DeviceSetMigMode holds details about calls to the DeviceSetMigMode method. DeviceSetMigMode []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int } // DeviceSetNvLinkDeviceLowPowerThreshold holds details about calls to the DeviceSetNvLinkDeviceLowPowerThreshold method. DeviceSetNvLinkDeviceLowPowerThreshold []struct { // Device is the device argument value. Device nvml.Device // NvLinkPowerThres is the nvLinkPowerThres argument value. NvLinkPowerThres *nvml.NvLinkPowerThres } // DeviceSetNvLinkUtilizationControl holds details about calls to the DeviceSetNvLinkUtilizationControl method. DeviceSetNvLinkUtilizationControl []struct { // Device is the device argument value. Device nvml.Device // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int // NvLinkUtilizationControl is the nvLinkUtilizationControl argument value. NvLinkUtilizationControl *nvml.NvLinkUtilizationControl // B is the b argument value. B bool } // DeviceSetNvlinkBwMode holds details about calls to the DeviceSetNvlinkBwMode method. DeviceSetNvlinkBwMode []struct { // Device is the device argument value. Device nvml.Device // NvlinkSetBwMode is the nvlinkSetBwMode argument value. NvlinkSetBwMode *nvml.NvlinkSetBwMode } // DeviceSetPersistenceMode holds details about calls to the DeviceSetPersistenceMode method. DeviceSetPersistenceMode []struct { // Device is the device argument value. Device nvml.Device // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceSetPowerManagementLimit holds details about calls to the DeviceSetPowerManagementLimit method. DeviceSetPowerManagementLimit []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint32 } // DeviceSetPowerManagementLimit_v2 holds details about calls to the DeviceSetPowerManagementLimit_v2 method. DeviceSetPowerManagementLimit_v2 []struct { // Device is the device argument value. Device nvml.Device // PowerValue_v2 is the powerValue_v2 argument value. PowerValue_v2 *nvml.PowerValue_v2 } // DeviceSetTemperatureThreshold holds details about calls to the DeviceSetTemperatureThreshold method. DeviceSetTemperatureThreshold []struct { // Device is the device argument value. Device nvml.Device // TemperatureThresholds is the temperatureThresholds argument value. TemperatureThresholds nvml.TemperatureThresholds // N is the n argument value. N int } // DeviceSetVgpuCapabilities holds details about calls to the DeviceSetVgpuCapabilities method. DeviceSetVgpuCapabilities []struct { // Device is the device argument value. Device nvml.Device // DeviceVgpuCapability is the deviceVgpuCapability argument value. DeviceVgpuCapability nvml.DeviceVgpuCapability // EnableState is the enableState argument value. EnableState nvml.EnableState } // DeviceSetVgpuHeterogeneousMode holds details about calls to the DeviceSetVgpuHeterogeneousMode method. DeviceSetVgpuHeterogeneousMode []struct { // Device is the device argument value. Device nvml.Device // VgpuHeterogeneousMode is the vgpuHeterogeneousMode argument value. VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode } // DeviceSetVgpuSchedulerState holds details about calls to the DeviceSetVgpuSchedulerState method. DeviceSetVgpuSchedulerState []struct { // Device is the device argument value. Device nvml.Device // VgpuSchedulerSetState is the vgpuSchedulerSetState argument value. VgpuSchedulerSetState *nvml.VgpuSchedulerSetState } // DeviceSetVirtualizationMode holds details about calls to the DeviceSetVirtualizationMode method. DeviceSetVirtualizationMode []struct { // Device is the device argument value. Device nvml.Device // GpuVirtualizationMode is the gpuVirtualizationMode argument value. GpuVirtualizationMode nvml.GpuVirtualizationMode } // DeviceValidateInforom holds details about calls to the DeviceValidateInforom method. DeviceValidateInforom []struct { // Device is the device argument value. Device nvml.Device } // DeviceWorkloadPowerProfileClearRequestedProfiles holds details about calls to the DeviceWorkloadPowerProfileClearRequestedProfiles method. DeviceWorkloadPowerProfileClearRequestedProfiles []struct { // Device is the device argument value. Device nvml.Device // WorkloadPowerProfileRequestedProfiles is the workloadPowerProfileRequestedProfiles argument value. WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } // DeviceWorkloadPowerProfileGetCurrentProfiles holds details about calls to the DeviceWorkloadPowerProfileGetCurrentProfiles method. DeviceWorkloadPowerProfileGetCurrentProfiles []struct { // Device is the device argument value. Device nvml.Device } // DeviceWorkloadPowerProfileGetProfilesInfo holds details about calls to the DeviceWorkloadPowerProfileGetProfilesInfo method. DeviceWorkloadPowerProfileGetProfilesInfo []struct { // Device is the device argument value. Device nvml.Device } // DeviceWorkloadPowerProfileSetRequestedProfiles holds details about calls to the DeviceWorkloadPowerProfileSetRequestedProfiles method. DeviceWorkloadPowerProfileSetRequestedProfiles []struct { // Device is the device argument value. Device nvml.Device // WorkloadPowerProfileRequestedProfiles is the workloadPowerProfileRequestedProfiles argument value. WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } // ErrorString holds details about calls to the ErrorString method. ErrorString []struct { // ReturnMoqParam is the returnMoqParam argument value. ReturnMoqParam nvml.Return } // EventSetCreate holds details about calls to the EventSetCreate method. EventSetCreate []struct { } // EventSetFree holds details about calls to the EventSetFree method. EventSetFree []struct { // EventSet is the eventSet argument value. EventSet nvml.EventSet } // EventSetWait holds details about calls to the EventSetWait method. EventSetWait []struct { // EventSet is the eventSet argument value. EventSet nvml.EventSet // V is the v argument value. V uint32 } // Extensions holds details about calls to the Extensions method. Extensions []struct { } // GetExcludedDeviceCount holds details about calls to the GetExcludedDeviceCount method. GetExcludedDeviceCount []struct { } // GetExcludedDeviceInfoByIndex holds details about calls to the GetExcludedDeviceInfoByIndex method. GetExcludedDeviceInfoByIndex []struct { // N is the n argument value. N int } // GetVgpuCompatibility holds details about calls to the GetVgpuCompatibility method. GetVgpuCompatibility []struct { // VgpuMetadata is the vgpuMetadata argument value. VgpuMetadata *nvml.VgpuMetadata // VgpuPgpuMetadata is the vgpuPgpuMetadata argument value. VgpuPgpuMetadata *nvml.VgpuPgpuMetadata } // GetVgpuDriverCapabilities holds details about calls to the GetVgpuDriverCapabilities method. GetVgpuDriverCapabilities []struct { // VgpuDriverCapability is the vgpuDriverCapability argument value. VgpuDriverCapability nvml.VgpuDriverCapability } // GetVgpuVersion holds details about calls to the GetVgpuVersion method. GetVgpuVersion []struct { } // GpmMetricsGet holds details about calls to the GpmMetricsGet method. GpmMetricsGet []struct { // GpmMetricsGetType is the gpmMetricsGetType argument value. GpmMetricsGetType *nvml.GpmMetricsGetType } // GpmMetricsGetV holds details about calls to the GpmMetricsGetV method. GpmMetricsGetV []struct { // GpmMetricsGetType is the gpmMetricsGetType argument value. GpmMetricsGetType *nvml.GpmMetricsGetType } // GpmMigSampleGet holds details about calls to the GpmMigSampleGet method. GpmMigSampleGet []struct { // Device is the device argument value. Device nvml.Device // N is the n argument value. N int // GpmSample is the gpmSample argument value. GpmSample nvml.GpmSample } // GpmQueryDeviceSupport holds details about calls to the GpmQueryDeviceSupport method. GpmQueryDeviceSupport []struct { // Device is the device argument value. Device nvml.Device } // GpmQueryDeviceSupportV holds details about calls to the GpmQueryDeviceSupportV method. GpmQueryDeviceSupportV []struct { // Device is the device argument value. Device nvml.Device } // GpmQueryIfStreamingEnabled holds details about calls to the GpmQueryIfStreamingEnabled method. GpmQueryIfStreamingEnabled []struct { // Device is the device argument value. Device nvml.Device } // GpmSampleAlloc holds details about calls to the GpmSampleAlloc method. GpmSampleAlloc []struct { } // GpmSampleFree holds details about calls to the GpmSampleFree method. GpmSampleFree []struct { // GpmSample is the gpmSample argument value. GpmSample nvml.GpmSample } // GpmSampleGet holds details about calls to the GpmSampleGet method. GpmSampleGet []struct { // Device is the device argument value. Device nvml.Device // GpmSample is the gpmSample argument value. GpmSample nvml.GpmSample } // GpmSetStreamingEnabled holds details about calls to the GpmSetStreamingEnabled method. GpmSetStreamingEnabled []struct { // Device is the device argument value. Device nvml.Device // V is the v argument value. V uint32 } // GpuInstanceCreateComputeInstance holds details about calls to the GpuInstanceCreateComputeInstance method. GpuInstanceCreateComputeInstance []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // GpuInstanceCreateComputeInstanceWithPlacement holds details about calls to the GpuInstanceCreateComputeInstanceWithPlacement method. GpuInstanceCreateComputeInstanceWithPlacement []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo // ComputeInstancePlacement is the computeInstancePlacement argument value. ComputeInstancePlacement *nvml.ComputeInstancePlacement } // GpuInstanceDestroy holds details about calls to the GpuInstanceDestroy method. GpuInstanceDestroy []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceGetActiveVgpus holds details about calls to the GpuInstanceGetActiveVgpus method. GpuInstanceGetActiveVgpus []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceGetComputeInstanceById holds details about calls to the GpuInstanceGetComputeInstanceById method. GpuInstanceGetComputeInstanceById []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // N is the n argument value. N int } // GpuInstanceGetComputeInstancePossiblePlacements holds details about calls to the GpuInstanceGetComputeInstancePossiblePlacements method. GpuInstanceGetComputeInstancePossiblePlacements []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // GpuInstanceGetComputeInstanceProfileInfo holds details about calls to the GpuInstanceGetComputeInstanceProfileInfo method. GpuInstanceGetComputeInstanceProfileInfo []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // GpuInstanceGetComputeInstanceProfileInfoV holds details about calls to the GpuInstanceGetComputeInstanceProfileInfoV method. GpuInstanceGetComputeInstanceProfileInfoV []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // N1 is the n1 argument value. N1 int // N2 is the n2 argument value. N2 int } // GpuInstanceGetComputeInstanceRemainingCapacity holds details about calls to the GpuInstanceGetComputeInstanceRemainingCapacity method. GpuInstanceGetComputeInstanceRemainingCapacity []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // GpuInstanceGetComputeInstances holds details about calls to the GpuInstanceGetComputeInstances method. GpuInstanceGetComputeInstances []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // ComputeInstanceProfileInfo is the computeInstanceProfileInfo argument value. ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } // GpuInstanceGetCreatableVgpus holds details about calls to the GpuInstanceGetCreatableVgpus method. GpuInstanceGetCreatableVgpus []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceGetInfo holds details about calls to the GpuInstanceGetInfo method. GpuInstanceGetInfo []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceGetVgpuHeterogeneousMode holds details about calls to the GpuInstanceGetVgpuHeterogeneousMode method. GpuInstanceGetVgpuHeterogeneousMode []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceGetVgpuSchedulerLog holds details about calls to the GpuInstanceGetVgpuSchedulerLog method. GpuInstanceGetVgpuSchedulerLog []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceGetVgpuSchedulerState holds details about calls to the GpuInstanceGetVgpuSchedulerState method. GpuInstanceGetVgpuSchedulerState []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceGetVgpuTypeCreatablePlacements holds details about calls to the GpuInstanceGetVgpuTypeCreatablePlacements method. GpuInstanceGetVgpuTypeCreatablePlacements []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance } // GpuInstanceSetVgpuHeterogeneousMode holds details about calls to the GpuInstanceSetVgpuHeterogeneousMode method. GpuInstanceSetVgpuHeterogeneousMode []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // VgpuHeterogeneousMode is the vgpuHeterogeneousMode argument value. VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode } // GpuInstanceSetVgpuSchedulerState holds details about calls to the GpuInstanceSetVgpuSchedulerState method. GpuInstanceSetVgpuSchedulerState []struct { // GpuInstance is the gpuInstance argument value. GpuInstance nvml.GpuInstance // VgpuSchedulerState is the vgpuSchedulerState argument value. VgpuSchedulerState *nvml.VgpuSchedulerState } // Init holds details about calls to the Init method. Init []struct { } // InitWithFlags holds details about calls to the InitWithFlags method. InitWithFlags []struct { // V is the v argument value. V uint32 } // SetVgpuVersion holds details about calls to the SetVgpuVersion method. SetVgpuVersion []struct { // VgpuVersion is the vgpuVersion argument value. VgpuVersion *nvml.VgpuVersion } // Shutdown holds details about calls to the Shutdown method. Shutdown []struct { } // SystemEventSetCreate holds details about calls to the SystemEventSetCreate method. SystemEventSetCreate []struct { // SystemEventSetCreateRequest is the systemEventSetCreateRequest argument value. SystemEventSetCreateRequest *nvml.SystemEventSetCreateRequest } // SystemEventSetFree holds details about calls to the SystemEventSetFree method. SystemEventSetFree []struct { // SystemEventSetFreeRequest is the systemEventSetFreeRequest argument value. SystemEventSetFreeRequest *nvml.SystemEventSetFreeRequest } // SystemEventSetWait holds details about calls to the SystemEventSetWait method. SystemEventSetWait []struct { // SystemEventSetWaitRequest is the systemEventSetWaitRequest argument value. SystemEventSetWaitRequest *nvml.SystemEventSetWaitRequest } // SystemGetConfComputeCapabilities holds details about calls to the SystemGetConfComputeCapabilities method. SystemGetConfComputeCapabilities []struct { } // SystemGetConfComputeGpusReadyState holds details about calls to the SystemGetConfComputeGpusReadyState method. SystemGetConfComputeGpusReadyState []struct { } // SystemGetConfComputeKeyRotationThresholdInfo holds details about calls to the SystemGetConfComputeKeyRotationThresholdInfo method. SystemGetConfComputeKeyRotationThresholdInfo []struct { } // SystemGetConfComputeSettings holds details about calls to the SystemGetConfComputeSettings method. SystemGetConfComputeSettings []struct { } // SystemGetConfComputeState holds details about calls to the SystemGetConfComputeState method. SystemGetConfComputeState []struct { } // SystemGetCudaDriverVersion holds details about calls to the SystemGetCudaDriverVersion method. SystemGetCudaDriverVersion []struct { } // SystemGetCudaDriverVersion_v2 holds details about calls to the SystemGetCudaDriverVersion_v2 method. SystemGetCudaDriverVersion_v2 []struct { } // SystemGetDriverBranch holds details about calls to the SystemGetDriverBranch method. SystemGetDriverBranch []struct { } // SystemGetDriverVersion holds details about calls to the SystemGetDriverVersion method. SystemGetDriverVersion []struct { } // SystemGetHicVersion holds details about calls to the SystemGetHicVersion method. SystemGetHicVersion []struct { } // SystemGetNVMLVersion holds details about calls to the SystemGetNVMLVersion method. SystemGetNVMLVersion []struct { } // SystemGetNvlinkBwMode holds details about calls to the SystemGetNvlinkBwMode method. SystemGetNvlinkBwMode []struct { } // SystemGetProcessName holds details about calls to the SystemGetProcessName method. SystemGetProcessName []struct { // N is the n argument value. N int } // SystemGetTopologyGpuSet holds details about calls to the SystemGetTopologyGpuSet method. SystemGetTopologyGpuSet []struct { // N is the n argument value. N int } // SystemRegisterEvents holds details about calls to the SystemRegisterEvents method. SystemRegisterEvents []struct { // SystemRegisterEventRequest is the systemRegisterEventRequest argument value. SystemRegisterEventRequest *nvml.SystemRegisterEventRequest } // SystemSetConfComputeGpusReadyState holds details about calls to the SystemSetConfComputeGpusReadyState method. SystemSetConfComputeGpusReadyState []struct { // V is the v argument value. V uint32 } // SystemSetConfComputeKeyRotationThresholdInfo holds details about calls to the SystemSetConfComputeKeyRotationThresholdInfo method. SystemSetConfComputeKeyRotationThresholdInfo []struct { // ConfComputeSetKeyRotationThresholdInfo is the confComputeSetKeyRotationThresholdInfo argument value. ConfComputeSetKeyRotationThresholdInfo nvml.ConfComputeSetKeyRotationThresholdInfo } // SystemSetNvlinkBwMode holds details about calls to the SystemSetNvlinkBwMode method. SystemSetNvlinkBwMode []struct { // V is the v argument value. V uint32 } // UnitGetCount holds details about calls to the UnitGetCount method. UnitGetCount []struct { } // UnitGetDevices holds details about calls to the UnitGetDevices method. UnitGetDevices []struct { // Unit is the unit argument value. Unit nvml.Unit } // UnitGetFanSpeedInfo holds details about calls to the UnitGetFanSpeedInfo method. UnitGetFanSpeedInfo []struct { // Unit is the unit argument value. Unit nvml.Unit } // UnitGetHandleByIndex holds details about calls to the UnitGetHandleByIndex method. UnitGetHandleByIndex []struct { // N is the n argument value. N int } // UnitGetLedState holds details about calls to the UnitGetLedState method. UnitGetLedState []struct { // Unit is the unit argument value. Unit nvml.Unit } // UnitGetPsuInfo holds details about calls to the UnitGetPsuInfo method. UnitGetPsuInfo []struct { // Unit is the unit argument value. Unit nvml.Unit } // UnitGetTemperature holds details about calls to the UnitGetTemperature method. UnitGetTemperature []struct { // Unit is the unit argument value. Unit nvml.Unit // N is the n argument value. N int } // UnitGetUnitInfo holds details about calls to the UnitGetUnitInfo method. UnitGetUnitInfo []struct { // Unit is the unit argument value. Unit nvml.Unit } // UnitSetLedState holds details about calls to the UnitSetLedState method. UnitSetLedState []struct { // Unit is the unit argument value. Unit nvml.Unit // LedColor is the ledColor argument value. LedColor nvml.LedColor } // VgpuInstanceClearAccountingPids holds details about calls to the VgpuInstanceClearAccountingPids method. VgpuInstanceClearAccountingPids []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetAccountingMode holds details about calls to the VgpuInstanceGetAccountingMode method. VgpuInstanceGetAccountingMode []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetAccountingPids holds details about calls to the VgpuInstanceGetAccountingPids method. VgpuInstanceGetAccountingPids []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetAccountingStats holds details about calls to the VgpuInstanceGetAccountingStats method. VgpuInstanceGetAccountingStats []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance // N is the n argument value. N int } // VgpuInstanceGetEccMode holds details about calls to the VgpuInstanceGetEccMode method. VgpuInstanceGetEccMode []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetEncoderCapacity holds details about calls to the VgpuInstanceGetEncoderCapacity method. VgpuInstanceGetEncoderCapacity []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetEncoderSessions holds details about calls to the VgpuInstanceGetEncoderSessions method. VgpuInstanceGetEncoderSessions []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetEncoderStats holds details about calls to the VgpuInstanceGetEncoderStats method. VgpuInstanceGetEncoderStats []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetFBCSessions holds details about calls to the VgpuInstanceGetFBCSessions method. VgpuInstanceGetFBCSessions []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetFBCStats holds details about calls to the VgpuInstanceGetFBCStats method. VgpuInstanceGetFBCStats []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetFbUsage holds details about calls to the VgpuInstanceGetFbUsage method. VgpuInstanceGetFbUsage []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetFrameRateLimit holds details about calls to the VgpuInstanceGetFrameRateLimit method. VgpuInstanceGetFrameRateLimit []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetGpuInstanceId holds details about calls to the VgpuInstanceGetGpuInstanceId method. VgpuInstanceGetGpuInstanceId []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetGpuPciId holds details about calls to the VgpuInstanceGetGpuPciId method. VgpuInstanceGetGpuPciId []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetLicenseInfo holds details about calls to the VgpuInstanceGetLicenseInfo method. VgpuInstanceGetLicenseInfo []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetLicenseStatus holds details about calls to the VgpuInstanceGetLicenseStatus method. VgpuInstanceGetLicenseStatus []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetMdevUUID holds details about calls to the VgpuInstanceGetMdevUUID method. VgpuInstanceGetMdevUUID []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetMetadata holds details about calls to the VgpuInstanceGetMetadata method. VgpuInstanceGetMetadata []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetRuntimeStateSize holds details about calls to the VgpuInstanceGetRuntimeStateSize method. VgpuInstanceGetRuntimeStateSize []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetType holds details about calls to the VgpuInstanceGetType method. VgpuInstanceGetType []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetUUID holds details about calls to the VgpuInstanceGetUUID method. VgpuInstanceGetUUID []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetVmDriverVersion holds details about calls to the VgpuInstanceGetVmDriverVersion method. VgpuInstanceGetVmDriverVersion []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceGetVmID holds details about calls to the VgpuInstanceGetVmID method. VgpuInstanceGetVmID []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance } // VgpuInstanceSetEncoderCapacity holds details about calls to the VgpuInstanceSetEncoderCapacity method. VgpuInstanceSetEncoderCapacity []struct { // VgpuInstance is the vgpuInstance argument value. VgpuInstance nvml.VgpuInstance // N is the n argument value. N int } // VgpuTypeGetBAR1Info holds details about calls to the VgpuTypeGetBAR1Info method. VgpuTypeGetBAR1Info []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetCapabilities holds details about calls to the VgpuTypeGetCapabilities method. VgpuTypeGetCapabilities []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId // VgpuCapability is the vgpuCapability argument value. VgpuCapability nvml.VgpuCapability } // VgpuTypeGetClass holds details about calls to the VgpuTypeGetClass method. VgpuTypeGetClass []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetDeviceID holds details about calls to the VgpuTypeGetDeviceID method. VgpuTypeGetDeviceID []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetFrameRateLimit holds details about calls to the VgpuTypeGetFrameRateLimit method. VgpuTypeGetFrameRateLimit []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetFramebufferSize holds details about calls to the VgpuTypeGetFramebufferSize method. VgpuTypeGetFramebufferSize []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetGpuInstanceProfileId holds details about calls to the VgpuTypeGetGpuInstanceProfileId method. VgpuTypeGetGpuInstanceProfileId []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetLicense holds details about calls to the VgpuTypeGetLicense method. VgpuTypeGetLicense []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetMaxInstances holds details about calls to the VgpuTypeGetMaxInstances method. VgpuTypeGetMaxInstances []struct { // Device is the device argument value. Device nvml.Device // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetMaxInstancesPerGpuInstance holds details about calls to the VgpuTypeGetMaxInstancesPerGpuInstance method. VgpuTypeGetMaxInstancesPerGpuInstance []struct { // VgpuTypeMaxInstance is the vgpuTypeMaxInstance argument value. VgpuTypeMaxInstance *nvml.VgpuTypeMaxInstance } // VgpuTypeGetMaxInstancesPerVm holds details about calls to the VgpuTypeGetMaxInstancesPerVm method. VgpuTypeGetMaxInstancesPerVm []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetName holds details about calls to the VgpuTypeGetName method. VgpuTypeGetName []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetNumDisplayHeads holds details about calls to the VgpuTypeGetNumDisplayHeads method. VgpuTypeGetNumDisplayHeads []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId } // VgpuTypeGetResolution holds details about calls to the VgpuTypeGetResolution method. VgpuTypeGetResolution []struct { // VgpuTypeId is the vgpuTypeId argument value. VgpuTypeId nvml.VgpuTypeId // N is the n argument value. N int } } lockComputeInstanceDestroy sync.RWMutex lockComputeInstanceGetInfo sync.RWMutex lockDeviceClearAccountingPids sync.RWMutex lockDeviceClearCpuAffinity sync.RWMutex lockDeviceClearEccErrorCounts sync.RWMutex lockDeviceClearFieldValues sync.RWMutex lockDeviceCreateGpuInstance sync.RWMutex lockDeviceCreateGpuInstanceWithPlacement sync.RWMutex lockDeviceDiscoverGpus sync.RWMutex lockDeviceFreezeNvLinkUtilizationCounter sync.RWMutex lockDeviceGetAPIRestriction sync.RWMutex lockDeviceGetAccountingBufferSize sync.RWMutex lockDeviceGetAccountingMode sync.RWMutex lockDeviceGetAccountingPids sync.RWMutex lockDeviceGetAccountingStats sync.RWMutex lockDeviceGetActiveVgpus sync.RWMutex lockDeviceGetAdaptiveClockInfoStatus sync.RWMutex lockDeviceGetAddressingMode sync.RWMutex lockDeviceGetApplicationsClock sync.RWMutex lockDeviceGetArchitecture sync.RWMutex lockDeviceGetAttributes sync.RWMutex lockDeviceGetAutoBoostedClocksEnabled sync.RWMutex lockDeviceGetBAR1MemoryInfo sync.RWMutex lockDeviceGetBoardId sync.RWMutex lockDeviceGetBoardPartNumber sync.RWMutex lockDeviceGetBrand sync.RWMutex lockDeviceGetBridgeChipInfo sync.RWMutex lockDeviceGetBusType sync.RWMutex lockDeviceGetC2cModeInfoV sync.RWMutex lockDeviceGetCapabilities sync.RWMutex lockDeviceGetClkMonStatus sync.RWMutex lockDeviceGetClock sync.RWMutex lockDeviceGetClockInfo sync.RWMutex lockDeviceGetClockOffsets sync.RWMutex lockDeviceGetComputeInstanceId sync.RWMutex lockDeviceGetComputeMode sync.RWMutex lockDeviceGetComputeRunningProcesses sync.RWMutex lockDeviceGetConfComputeGpuAttestationReport sync.RWMutex lockDeviceGetConfComputeGpuCertificate sync.RWMutex lockDeviceGetConfComputeMemSizeInfo sync.RWMutex lockDeviceGetConfComputeProtectedMemoryUsage sync.RWMutex lockDeviceGetCoolerInfo sync.RWMutex lockDeviceGetCount sync.RWMutex lockDeviceGetCpuAffinity sync.RWMutex lockDeviceGetCpuAffinityWithinScope sync.RWMutex lockDeviceGetCreatableVgpus sync.RWMutex lockDeviceGetCudaComputeCapability sync.RWMutex lockDeviceGetCurrPcieLinkGeneration sync.RWMutex lockDeviceGetCurrPcieLinkWidth sync.RWMutex lockDeviceGetCurrentClockFreqs sync.RWMutex lockDeviceGetCurrentClocksEventReasons sync.RWMutex lockDeviceGetCurrentClocksThrottleReasons sync.RWMutex lockDeviceGetDecoderUtilization sync.RWMutex lockDeviceGetDefaultApplicationsClock sync.RWMutex lockDeviceGetDefaultEccMode sync.RWMutex lockDeviceGetDetailedEccErrors sync.RWMutex lockDeviceGetDeviceHandleFromMigDeviceHandle sync.RWMutex lockDeviceGetDisplayActive sync.RWMutex lockDeviceGetDisplayMode sync.RWMutex lockDeviceGetDramEncryptionMode sync.RWMutex lockDeviceGetDriverModel sync.RWMutex lockDeviceGetDriverModel_v2 sync.RWMutex lockDeviceGetDynamicPstatesInfo sync.RWMutex lockDeviceGetEccMode sync.RWMutex lockDeviceGetEncoderCapacity sync.RWMutex lockDeviceGetEncoderSessions sync.RWMutex lockDeviceGetEncoderStats sync.RWMutex lockDeviceGetEncoderUtilization sync.RWMutex lockDeviceGetEnforcedPowerLimit sync.RWMutex lockDeviceGetFBCSessions sync.RWMutex lockDeviceGetFBCStats sync.RWMutex lockDeviceGetFanControlPolicy_v2 sync.RWMutex lockDeviceGetFanSpeed sync.RWMutex lockDeviceGetFanSpeedRPM sync.RWMutex lockDeviceGetFanSpeed_v2 sync.RWMutex lockDeviceGetFieldValues sync.RWMutex lockDeviceGetGpcClkMinMaxVfOffset sync.RWMutex lockDeviceGetGpcClkVfOffset sync.RWMutex lockDeviceGetGpuFabricInfo sync.RWMutex lockDeviceGetGpuFabricInfoV sync.RWMutex lockDeviceGetGpuInstanceById sync.RWMutex lockDeviceGetGpuInstanceId sync.RWMutex lockDeviceGetGpuInstancePossiblePlacements sync.RWMutex lockDeviceGetGpuInstanceProfileInfo sync.RWMutex lockDeviceGetGpuInstanceProfileInfoByIdV sync.RWMutex lockDeviceGetGpuInstanceProfileInfoV sync.RWMutex lockDeviceGetGpuInstanceRemainingCapacity sync.RWMutex lockDeviceGetGpuInstances sync.RWMutex lockDeviceGetGpuMaxPcieLinkGeneration sync.RWMutex lockDeviceGetGpuOperationMode sync.RWMutex lockDeviceGetGraphicsRunningProcesses sync.RWMutex lockDeviceGetGridLicensableFeatures sync.RWMutex lockDeviceGetGspFirmwareMode sync.RWMutex lockDeviceGetGspFirmwareVersion sync.RWMutex lockDeviceGetHandleByIndex sync.RWMutex lockDeviceGetHandleByPciBusId sync.RWMutex lockDeviceGetHandleBySerial sync.RWMutex lockDeviceGetHandleByUUID sync.RWMutex lockDeviceGetHandleByUUIDV sync.RWMutex lockDeviceGetHostVgpuMode sync.RWMutex lockDeviceGetIndex sync.RWMutex lockDeviceGetInforomConfigurationChecksum sync.RWMutex lockDeviceGetInforomImageVersion sync.RWMutex lockDeviceGetInforomVersion sync.RWMutex lockDeviceGetIrqNum sync.RWMutex lockDeviceGetJpgUtilization sync.RWMutex lockDeviceGetLastBBXFlushTime sync.RWMutex lockDeviceGetMPSComputeRunningProcesses sync.RWMutex lockDeviceGetMarginTemperature sync.RWMutex lockDeviceGetMaxClockInfo sync.RWMutex lockDeviceGetMaxCustomerBoostClock sync.RWMutex lockDeviceGetMaxMigDeviceCount sync.RWMutex lockDeviceGetMaxPcieLinkGeneration sync.RWMutex lockDeviceGetMaxPcieLinkWidth sync.RWMutex lockDeviceGetMemClkMinMaxVfOffset sync.RWMutex lockDeviceGetMemClkVfOffset sync.RWMutex lockDeviceGetMemoryAffinity sync.RWMutex lockDeviceGetMemoryBusWidth sync.RWMutex lockDeviceGetMemoryErrorCounter sync.RWMutex lockDeviceGetMemoryInfo sync.RWMutex lockDeviceGetMemoryInfo_v2 sync.RWMutex lockDeviceGetMigDeviceHandleByIndex sync.RWMutex lockDeviceGetMigMode sync.RWMutex lockDeviceGetMinMaxClockOfPState sync.RWMutex lockDeviceGetMinMaxFanSpeed sync.RWMutex lockDeviceGetMinorNumber sync.RWMutex lockDeviceGetModuleId sync.RWMutex lockDeviceGetMultiGpuBoard sync.RWMutex lockDeviceGetName sync.RWMutex lockDeviceGetNumFans sync.RWMutex lockDeviceGetNumGpuCores sync.RWMutex lockDeviceGetNumaNodeId sync.RWMutex lockDeviceGetNvLinkCapability sync.RWMutex lockDeviceGetNvLinkErrorCounter sync.RWMutex lockDeviceGetNvLinkInfo sync.RWMutex lockDeviceGetNvLinkRemoteDeviceType sync.RWMutex lockDeviceGetNvLinkRemotePciInfo sync.RWMutex lockDeviceGetNvLinkState sync.RWMutex lockDeviceGetNvLinkUtilizationControl sync.RWMutex lockDeviceGetNvLinkUtilizationCounter sync.RWMutex lockDeviceGetNvLinkVersion sync.RWMutex lockDeviceGetNvlinkBwMode sync.RWMutex lockDeviceGetNvlinkSupportedBwModes sync.RWMutex lockDeviceGetOfaUtilization sync.RWMutex lockDeviceGetP2PStatus sync.RWMutex lockDeviceGetPciInfo sync.RWMutex lockDeviceGetPciInfoExt sync.RWMutex lockDeviceGetPcieLinkMaxSpeed sync.RWMutex lockDeviceGetPcieReplayCounter sync.RWMutex lockDeviceGetPcieSpeed sync.RWMutex lockDeviceGetPcieThroughput sync.RWMutex lockDeviceGetPdi sync.RWMutex lockDeviceGetPerformanceModes sync.RWMutex lockDeviceGetPerformanceState sync.RWMutex lockDeviceGetPersistenceMode sync.RWMutex lockDeviceGetPgpuMetadataString sync.RWMutex lockDeviceGetPlatformInfo sync.RWMutex lockDeviceGetPowerManagementDefaultLimit sync.RWMutex lockDeviceGetPowerManagementLimit sync.RWMutex lockDeviceGetPowerManagementLimitConstraints sync.RWMutex lockDeviceGetPowerManagementMode sync.RWMutex lockDeviceGetPowerMizerMode_v1 sync.RWMutex lockDeviceGetPowerSource sync.RWMutex lockDeviceGetPowerState sync.RWMutex lockDeviceGetPowerUsage sync.RWMutex lockDeviceGetProcessUtilization sync.RWMutex lockDeviceGetProcessesUtilizationInfo sync.RWMutex lockDeviceGetRemappedRows sync.RWMutex lockDeviceGetRepairStatus sync.RWMutex lockDeviceGetRetiredPages sync.RWMutex lockDeviceGetRetiredPagesPendingStatus sync.RWMutex lockDeviceGetRetiredPages_v2 sync.RWMutex lockDeviceGetRowRemapperHistogram sync.RWMutex lockDeviceGetRunningProcessDetailList sync.RWMutex lockDeviceGetSamples sync.RWMutex lockDeviceGetSerial sync.RWMutex lockDeviceGetSramEccErrorStatus sync.RWMutex lockDeviceGetSramUniqueUncorrectedEccErrorCounts sync.RWMutex lockDeviceGetSupportedClocksEventReasons sync.RWMutex lockDeviceGetSupportedClocksThrottleReasons sync.RWMutex lockDeviceGetSupportedEventTypes sync.RWMutex lockDeviceGetSupportedGraphicsClocks sync.RWMutex lockDeviceGetSupportedMemoryClocks sync.RWMutex lockDeviceGetSupportedPerformanceStates sync.RWMutex lockDeviceGetSupportedVgpus sync.RWMutex lockDeviceGetTargetFanSpeed sync.RWMutex lockDeviceGetTemperature sync.RWMutex lockDeviceGetTemperatureThreshold sync.RWMutex lockDeviceGetTemperatureV sync.RWMutex lockDeviceGetThermalSettings sync.RWMutex lockDeviceGetTopologyCommonAncestor sync.RWMutex lockDeviceGetTopologyNearestGpus sync.RWMutex lockDeviceGetTotalEccErrors sync.RWMutex lockDeviceGetTotalEnergyConsumption sync.RWMutex lockDeviceGetUUID sync.RWMutex lockDeviceGetUtilizationRates sync.RWMutex lockDeviceGetVbiosVersion sync.RWMutex lockDeviceGetVgpuCapabilities sync.RWMutex lockDeviceGetVgpuHeterogeneousMode sync.RWMutex lockDeviceGetVgpuInstancesUtilizationInfo sync.RWMutex lockDeviceGetVgpuMetadata sync.RWMutex lockDeviceGetVgpuProcessUtilization sync.RWMutex lockDeviceGetVgpuProcessesUtilizationInfo sync.RWMutex lockDeviceGetVgpuSchedulerCapabilities sync.RWMutex lockDeviceGetVgpuSchedulerLog sync.RWMutex lockDeviceGetVgpuSchedulerState sync.RWMutex lockDeviceGetVgpuTypeCreatablePlacements sync.RWMutex lockDeviceGetVgpuTypeSupportedPlacements sync.RWMutex lockDeviceGetVgpuUtilization sync.RWMutex lockDeviceGetViolationStatus sync.RWMutex lockDeviceGetVirtualizationMode sync.RWMutex lockDeviceIsMigDeviceHandle sync.RWMutex lockDeviceModifyDrainState sync.RWMutex lockDeviceOnSameBoard sync.RWMutex lockDevicePowerSmoothingActivatePresetProfile sync.RWMutex lockDevicePowerSmoothingSetState sync.RWMutex lockDevicePowerSmoothingUpdatePresetProfileParam sync.RWMutex lockDeviceQueryDrainState sync.RWMutex lockDeviceReadWritePRM_v1 sync.RWMutex lockDeviceRegisterEvents sync.RWMutex lockDeviceRemoveGpu sync.RWMutex lockDeviceRemoveGpu_v2 sync.RWMutex lockDeviceResetApplicationsClocks sync.RWMutex lockDeviceResetGpuLockedClocks sync.RWMutex lockDeviceResetMemoryLockedClocks sync.RWMutex lockDeviceResetNvLinkErrorCounters sync.RWMutex lockDeviceResetNvLinkUtilizationCounter sync.RWMutex lockDeviceSetAPIRestriction sync.RWMutex lockDeviceSetAccountingMode sync.RWMutex lockDeviceSetApplicationsClocks sync.RWMutex lockDeviceSetAutoBoostedClocksEnabled sync.RWMutex lockDeviceSetClockOffsets sync.RWMutex lockDeviceSetComputeMode sync.RWMutex lockDeviceSetConfComputeUnprotectedMemSize sync.RWMutex lockDeviceSetCpuAffinity sync.RWMutex lockDeviceSetDefaultAutoBoostedClocksEnabled sync.RWMutex lockDeviceSetDefaultFanSpeed_v2 sync.RWMutex lockDeviceSetDramEncryptionMode sync.RWMutex lockDeviceSetDriverModel sync.RWMutex lockDeviceSetEccMode sync.RWMutex lockDeviceSetFanControlPolicy sync.RWMutex lockDeviceSetFanSpeed_v2 sync.RWMutex lockDeviceSetGpcClkVfOffset sync.RWMutex lockDeviceSetGpuLockedClocks sync.RWMutex lockDeviceSetGpuOperationMode sync.RWMutex lockDeviceSetMemClkVfOffset sync.RWMutex lockDeviceSetMemoryLockedClocks sync.RWMutex lockDeviceSetMigMode sync.RWMutex lockDeviceSetNvLinkDeviceLowPowerThreshold sync.RWMutex lockDeviceSetNvLinkUtilizationControl sync.RWMutex lockDeviceSetNvlinkBwMode sync.RWMutex lockDeviceSetPersistenceMode sync.RWMutex lockDeviceSetPowerManagementLimit sync.RWMutex lockDeviceSetPowerManagementLimit_v2 sync.RWMutex lockDeviceSetTemperatureThreshold sync.RWMutex lockDeviceSetVgpuCapabilities sync.RWMutex lockDeviceSetVgpuHeterogeneousMode sync.RWMutex lockDeviceSetVgpuSchedulerState sync.RWMutex lockDeviceSetVirtualizationMode sync.RWMutex lockDeviceValidateInforom sync.RWMutex lockDeviceWorkloadPowerProfileClearRequestedProfiles sync.RWMutex lockDeviceWorkloadPowerProfileGetCurrentProfiles sync.RWMutex lockDeviceWorkloadPowerProfileGetProfilesInfo sync.RWMutex lockDeviceWorkloadPowerProfileSetRequestedProfiles sync.RWMutex lockErrorString sync.RWMutex lockEventSetCreate sync.RWMutex lockEventSetFree sync.RWMutex lockEventSetWait sync.RWMutex lockExtensions sync.RWMutex lockGetExcludedDeviceCount sync.RWMutex lockGetExcludedDeviceInfoByIndex sync.RWMutex lockGetVgpuCompatibility sync.RWMutex lockGetVgpuDriverCapabilities sync.RWMutex lockGetVgpuVersion sync.RWMutex lockGpmMetricsGet sync.RWMutex lockGpmMetricsGetV sync.RWMutex lockGpmMigSampleGet sync.RWMutex lockGpmQueryDeviceSupport sync.RWMutex lockGpmQueryDeviceSupportV sync.RWMutex lockGpmQueryIfStreamingEnabled sync.RWMutex lockGpmSampleAlloc sync.RWMutex lockGpmSampleFree sync.RWMutex lockGpmSampleGet sync.RWMutex lockGpmSetStreamingEnabled sync.RWMutex lockGpuInstanceCreateComputeInstance sync.RWMutex lockGpuInstanceCreateComputeInstanceWithPlacement sync.RWMutex lockGpuInstanceDestroy sync.RWMutex lockGpuInstanceGetActiveVgpus sync.RWMutex lockGpuInstanceGetComputeInstanceById sync.RWMutex lockGpuInstanceGetComputeInstancePossiblePlacements sync.RWMutex lockGpuInstanceGetComputeInstanceProfileInfo sync.RWMutex lockGpuInstanceGetComputeInstanceProfileInfoV sync.RWMutex lockGpuInstanceGetComputeInstanceRemainingCapacity sync.RWMutex lockGpuInstanceGetComputeInstances sync.RWMutex lockGpuInstanceGetCreatableVgpus sync.RWMutex lockGpuInstanceGetInfo sync.RWMutex lockGpuInstanceGetVgpuHeterogeneousMode sync.RWMutex lockGpuInstanceGetVgpuSchedulerLog sync.RWMutex lockGpuInstanceGetVgpuSchedulerState sync.RWMutex lockGpuInstanceGetVgpuTypeCreatablePlacements sync.RWMutex lockGpuInstanceSetVgpuHeterogeneousMode sync.RWMutex lockGpuInstanceSetVgpuSchedulerState sync.RWMutex lockInit sync.RWMutex lockInitWithFlags sync.RWMutex lockSetVgpuVersion sync.RWMutex lockShutdown sync.RWMutex lockSystemEventSetCreate sync.RWMutex lockSystemEventSetFree sync.RWMutex lockSystemEventSetWait sync.RWMutex lockSystemGetConfComputeCapabilities sync.RWMutex lockSystemGetConfComputeGpusReadyState sync.RWMutex lockSystemGetConfComputeKeyRotationThresholdInfo sync.RWMutex lockSystemGetConfComputeSettings sync.RWMutex lockSystemGetConfComputeState sync.RWMutex lockSystemGetCudaDriverVersion sync.RWMutex lockSystemGetCudaDriverVersion_v2 sync.RWMutex lockSystemGetDriverBranch sync.RWMutex lockSystemGetDriverVersion sync.RWMutex lockSystemGetHicVersion sync.RWMutex lockSystemGetNVMLVersion sync.RWMutex lockSystemGetNvlinkBwMode sync.RWMutex lockSystemGetProcessName sync.RWMutex lockSystemGetTopologyGpuSet sync.RWMutex lockSystemRegisterEvents sync.RWMutex lockSystemSetConfComputeGpusReadyState sync.RWMutex lockSystemSetConfComputeKeyRotationThresholdInfo sync.RWMutex lockSystemSetNvlinkBwMode sync.RWMutex lockUnitGetCount sync.RWMutex lockUnitGetDevices sync.RWMutex lockUnitGetFanSpeedInfo sync.RWMutex lockUnitGetHandleByIndex sync.RWMutex lockUnitGetLedState sync.RWMutex lockUnitGetPsuInfo sync.RWMutex lockUnitGetTemperature sync.RWMutex lockUnitGetUnitInfo sync.RWMutex lockUnitSetLedState sync.RWMutex lockVgpuInstanceClearAccountingPids sync.RWMutex lockVgpuInstanceGetAccountingMode sync.RWMutex lockVgpuInstanceGetAccountingPids sync.RWMutex lockVgpuInstanceGetAccountingStats sync.RWMutex lockVgpuInstanceGetEccMode sync.RWMutex lockVgpuInstanceGetEncoderCapacity sync.RWMutex lockVgpuInstanceGetEncoderSessions sync.RWMutex lockVgpuInstanceGetEncoderStats sync.RWMutex lockVgpuInstanceGetFBCSessions sync.RWMutex lockVgpuInstanceGetFBCStats sync.RWMutex lockVgpuInstanceGetFbUsage sync.RWMutex lockVgpuInstanceGetFrameRateLimit sync.RWMutex lockVgpuInstanceGetGpuInstanceId sync.RWMutex lockVgpuInstanceGetGpuPciId sync.RWMutex lockVgpuInstanceGetLicenseInfo sync.RWMutex lockVgpuInstanceGetLicenseStatus sync.RWMutex lockVgpuInstanceGetMdevUUID sync.RWMutex lockVgpuInstanceGetMetadata sync.RWMutex lockVgpuInstanceGetRuntimeStateSize sync.RWMutex lockVgpuInstanceGetType sync.RWMutex lockVgpuInstanceGetUUID sync.RWMutex lockVgpuInstanceGetVmDriverVersion sync.RWMutex lockVgpuInstanceGetVmID sync.RWMutex lockVgpuInstanceSetEncoderCapacity sync.RWMutex lockVgpuTypeGetBAR1Info sync.RWMutex lockVgpuTypeGetCapabilities sync.RWMutex lockVgpuTypeGetClass sync.RWMutex lockVgpuTypeGetDeviceID sync.RWMutex lockVgpuTypeGetFrameRateLimit sync.RWMutex lockVgpuTypeGetFramebufferSize sync.RWMutex lockVgpuTypeGetGpuInstanceProfileId sync.RWMutex lockVgpuTypeGetLicense sync.RWMutex lockVgpuTypeGetMaxInstances sync.RWMutex lockVgpuTypeGetMaxInstancesPerGpuInstance sync.RWMutex lockVgpuTypeGetMaxInstancesPerVm sync.RWMutex lockVgpuTypeGetName sync.RWMutex lockVgpuTypeGetNumDisplayHeads sync.RWMutex lockVgpuTypeGetResolution sync.RWMutex } // ComputeInstanceDestroy calls ComputeInstanceDestroyFunc. func (mock *Interface) ComputeInstanceDestroy(computeInstance nvml.ComputeInstance) nvml.Return { if mock.ComputeInstanceDestroyFunc == nil { panic("Interface.ComputeInstanceDestroyFunc: method is nil but Interface.ComputeInstanceDestroy was just called") } callInfo := struct { ComputeInstance nvml.ComputeInstance }{ ComputeInstance: computeInstance, } mock.lockComputeInstanceDestroy.Lock() mock.calls.ComputeInstanceDestroy = append(mock.calls.ComputeInstanceDestroy, callInfo) mock.lockComputeInstanceDestroy.Unlock() return mock.ComputeInstanceDestroyFunc(computeInstance) } // ComputeInstanceDestroyCalls gets all the calls that were made to ComputeInstanceDestroy. // Check the length with: // // len(mockedInterface.ComputeInstanceDestroyCalls()) func (mock *Interface) ComputeInstanceDestroyCalls() []struct { ComputeInstance nvml.ComputeInstance } { var calls []struct { ComputeInstance nvml.ComputeInstance } mock.lockComputeInstanceDestroy.RLock() calls = mock.calls.ComputeInstanceDestroy mock.lockComputeInstanceDestroy.RUnlock() return calls } // ComputeInstanceGetInfo calls ComputeInstanceGetInfoFunc. func (mock *Interface) ComputeInstanceGetInfo(computeInstance nvml.ComputeInstance) (nvml.ComputeInstanceInfo, nvml.Return) { if mock.ComputeInstanceGetInfoFunc == nil { panic("Interface.ComputeInstanceGetInfoFunc: method is nil but Interface.ComputeInstanceGetInfo was just called") } callInfo := struct { ComputeInstance nvml.ComputeInstance }{ ComputeInstance: computeInstance, } mock.lockComputeInstanceGetInfo.Lock() mock.calls.ComputeInstanceGetInfo = append(mock.calls.ComputeInstanceGetInfo, callInfo) mock.lockComputeInstanceGetInfo.Unlock() return mock.ComputeInstanceGetInfoFunc(computeInstance) } // ComputeInstanceGetInfoCalls gets all the calls that were made to ComputeInstanceGetInfo. // Check the length with: // // len(mockedInterface.ComputeInstanceGetInfoCalls()) func (mock *Interface) ComputeInstanceGetInfoCalls() []struct { ComputeInstance nvml.ComputeInstance } { var calls []struct { ComputeInstance nvml.ComputeInstance } mock.lockComputeInstanceGetInfo.RLock() calls = mock.calls.ComputeInstanceGetInfo mock.lockComputeInstanceGetInfo.RUnlock() return calls } // DeviceClearAccountingPids calls DeviceClearAccountingPidsFunc. func (mock *Interface) DeviceClearAccountingPids(device nvml.Device) nvml.Return { if mock.DeviceClearAccountingPidsFunc == nil { panic("Interface.DeviceClearAccountingPidsFunc: method is nil but Interface.DeviceClearAccountingPids was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceClearAccountingPids.Lock() mock.calls.DeviceClearAccountingPids = append(mock.calls.DeviceClearAccountingPids, callInfo) mock.lockDeviceClearAccountingPids.Unlock() return mock.DeviceClearAccountingPidsFunc(device) } // DeviceClearAccountingPidsCalls gets all the calls that were made to DeviceClearAccountingPids. // Check the length with: // // len(mockedInterface.DeviceClearAccountingPidsCalls()) func (mock *Interface) DeviceClearAccountingPidsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceClearAccountingPids.RLock() calls = mock.calls.DeviceClearAccountingPids mock.lockDeviceClearAccountingPids.RUnlock() return calls } // DeviceClearCpuAffinity calls DeviceClearCpuAffinityFunc. func (mock *Interface) DeviceClearCpuAffinity(device nvml.Device) nvml.Return { if mock.DeviceClearCpuAffinityFunc == nil { panic("Interface.DeviceClearCpuAffinityFunc: method is nil but Interface.DeviceClearCpuAffinity was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceClearCpuAffinity.Lock() mock.calls.DeviceClearCpuAffinity = append(mock.calls.DeviceClearCpuAffinity, callInfo) mock.lockDeviceClearCpuAffinity.Unlock() return mock.DeviceClearCpuAffinityFunc(device) } // DeviceClearCpuAffinityCalls gets all the calls that were made to DeviceClearCpuAffinity. // Check the length with: // // len(mockedInterface.DeviceClearCpuAffinityCalls()) func (mock *Interface) DeviceClearCpuAffinityCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceClearCpuAffinity.RLock() calls = mock.calls.DeviceClearCpuAffinity mock.lockDeviceClearCpuAffinity.RUnlock() return calls } // DeviceClearEccErrorCounts calls DeviceClearEccErrorCountsFunc. func (mock *Interface) DeviceClearEccErrorCounts(device nvml.Device, eccCounterType nvml.EccCounterType) nvml.Return { if mock.DeviceClearEccErrorCountsFunc == nil { panic("Interface.DeviceClearEccErrorCountsFunc: method is nil but Interface.DeviceClearEccErrorCounts was just called") } callInfo := struct { Device nvml.Device EccCounterType nvml.EccCounterType }{ Device: device, EccCounterType: eccCounterType, } mock.lockDeviceClearEccErrorCounts.Lock() mock.calls.DeviceClearEccErrorCounts = append(mock.calls.DeviceClearEccErrorCounts, callInfo) mock.lockDeviceClearEccErrorCounts.Unlock() return mock.DeviceClearEccErrorCountsFunc(device, eccCounterType) } // DeviceClearEccErrorCountsCalls gets all the calls that were made to DeviceClearEccErrorCounts. // Check the length with: // // len(mockedInterface.DeviceClearEccErrorCountsCalls()) func (mock *Interface) DeviceClearEccErrorCountsCalls() []struct { Device nvml.Device EccCounterType nvml.EccCounterType } { var calls []struct { Device nvml.Device EccCounterType nvml.EccCounterType } mock.lockDeviceClearEccErrorCounts.RLock() calls = mock.calls.DeviceClearEccErrorCounts mock.lockDeviceClearEccErrorCounts.RUnlock() return calls } // DeviceClearFieldValues calls DeviceClearFieldValuesFunc. func (mock *Interface) DeviceClearFieldValues(device nvml.Device, fieldValues []nvml.FieldValue) nvml.Return { if mock.DeviceClearFieldValuesFunc == nil { panic("Interface.DeviceClearFieldValuesFunc: method is nil but Interface.DeviceClearFieldValues was just called") } callInfo := struct { Device nvml.Device FieldValues []nvml.FieldValue }{ Device: device, FieldValues: fieldValues, } mock.lockDeviceClearFieldValues.Lock() mock.calls.DeviceClearFieldValues = append(mock.calls.DeviceClearFieldValues, callInfo) mock.lockDeviceClearFieldValues.Unlock() return mock.DeviceClearFieldValuesFunc(device, fieldValues) } // DeviceClearFieldValuesCalls gets all the calls that were made to DeviceClearFieldValues. // Check the length with: // // len(mockedInterface.DeviceClearFieldValuesCalls()) func (mock *Interface) DeviceClearFieldValuesCalls() []struct { Device nvml.Device FieldValues []nvml.FieldValue } { var calls []struct { Device nvml.Device FieldValues []nvml.FieldValue } mock.lockDeviceClearFieldValues.RLock() calls = mock.calls.DeviceClearFieldValues mock.lockDeviceClearFieldValues.RUnlock() return calls } // DeviceCreateGpuInstance calls DeviceCreateGpuInstanceFunc. func (mock *Interface) DeviceCreateGpuInstance(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (nvml.GpuInstance, nvml.Return) { if mock.DeviceCreateGpuInstanceFunc == nil { panic("Interface.DeviceCreateGpuInstanceFunc: method is nil but Interface.DeviceCreateGpuInstance was just called") } callInfo := struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ Device: device, GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockDeviceCreateGpuInstance.Lock() mock.calls.DeviceCreateGpuInstance = append(mock.calls.DeviceCreateGpuInstance, callInfo) mock.lockDeviceCreateGpuInstance.Unlock() return mock.DeviceCreateGpuInstanceFunc(device, gpuInstanceProfileInfo) } // DeviceCreateGpuInstanceCalls gets all the calls that were made to DeviceCreateGpuInstance. // Check the length with: // // len(mockedInterface.DeviceCreateGpuInstanceCalls()) func (mock *Interface) DeviceCreateGpuInstanceCalls() []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockDeviceCreateGpuInstance.RLock() calls = mock.calls.DeviceCreateGpuInstance mock.lockDeviceCreateGpuInstance.RUnlock() return calls } // DeviceCreateGpuInstanceWithPlacement calls DeviceCreateGpuInstanceWithPlacementFunc. func (mock *Interface) DeviceCreateGpuInstanceWithPlacement(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo, gpuInstancePlacement *nvml.GpuInstancePlacement) (nvml.GpuInstance, nvml.Return) { if mock.DeviceCreateGpuInstanceWithPlacementFunc == nil { panic("Interface.DeviceCreateGpuInstanceWithPlacementFunc: method is nil but Interface.DeviceCreateGpuInstanceWithPlacement was just called") } callInfo := struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo GpuInstancePlacement *nvml.GpuInstancePlacement }{ Device: device, GpuInstanceProfileInfo: gpuInstanceProfileInfo, GpuInstancePlacement: gpuInstancePlacement, } mock.lockDeviceCreateGpuInstanceWithPlacement.Lock() mock.calls.DeviceCreateGpuInstanceWithPlacement = append(mock.calls.DeviceCreateGpuInstanceWithPlacement, callInfo) mock.lockDeviceCreateGpuInstanceWithPlacement.Unlock() return mock.DeviceCreateGpuInstanceWithPlacementFunc(device, gpuInstanceProfileInfo, gpuInstancePlacement) } // DeviceCreateGpuInstanceWithPlacementCalls gets all the calls that were made to DeviceCreateGpuInstanceWithPlacement. // Check the length with: // // len(mockedInterface.DeviceCreateGpuInstanceWithPlacementCalls()) func (mock *Interface) DeviceCreateGpuInstanceWithPlacementCalls() []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo GpuInstancePlacement *nvml.GpuInstancePlacement } { var calls []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo GpuInstancePlacement *nvml.GpuInstancePlacement } mock.lockDeviceCreateGpuInstanceWithPlacement.RLock() calls = mock.calls.DeviceCreateGpuInstanceWithPlacement mock.lockDeviceCreateGpuInstanceWithPlacement.RUnlock() return calls } // DeviceDiscoverGpus calls DeviceDiscoverGpusFunc. func (mock *Interface) DeviceDiscoverGpus() (nvml.PciInfo, nvml.Return) { if mock.DeviceDiscoverGpusFunc == nil { panic("Interface.DeviceDiscoverGpusFunc: method is nil but Interface.DeviceDiscoverGpus was just called") } callInfo := struct { }{} mock.lockDeviceDiscoverGpus.Lock() mock.calls.DeviceDiscoverGpus = append(mock.calls.DeviceDiscoverGpus, callInfo) mock.lockDeviceDiscoverGpus.Unlock() return mock.DeviceDiscoverGpusFunc() } // DeviceDiscoverGpusCalls gets all the calls that were made to DeviceDiscoverGpus. // Check the length with: // // len(mockedInterface.DeviceDiscoverGpusCalls()) func (mock *Interface) DeviceDiscoverGpusCalls() []struct { } { var calls []struct { } mock.lockDeviceDiscoverGpus.RLock() calls = mock.calls.DeviceDiscoverGpus mock.lockDeviceDiscoverGpus.RUnlock() return calls } // DeviceFreezeNvLinkUtilizationCounter calls DeviceFreezeNvLinkUtilizationCounterFunc. func (mock *Interface) DeviceFreezeNvLinkUtilizationCounter(device nvml.Device, n1 int, n2 int, enableState nvml.EnableState) nvml.Return { if mock.DeviceFreezeNvLinkUtilizationCounterFunc == nil { panic("Interface.DeviceFreezeNvLinkUtilizationCounterFunc: method is nil but Interface.DeviceFreezeNvLinkUtilizationCounter was just called") } callInfo := struct { Device nvml.Device N1 int N2 int EnableState nvml.EnableState }{ Device: device, N1: n1, N2: n2, EnableState: enableState, } mock.lockDeviceFreezeNvLinkUtilizationCounter.Lock() mock.calls.DeviceFreezeNvLinkUtilizationCounter = append(mock.calls.DeviceFreezeNvLinkUtilizationCounter, callInfo) mock.lockDeviceFreezeNvLinkUtilizationCounter.Unlock() return mock.DeviceFreezeNvLinkUtilizationCounterFunc(device, n1, n2, enableState) } // DeviceFreezeNvLinkUtilizationCounterCalls gets all the calls that were made to DeviceFreezeNvLinkUtilizationCounter. // Check the length with: // // len(mockedInterface.DeviceFreezeNvLinkUtilizationCounterCalls()) func (mock *Interface) DeviceFreezeNvLinkUtilizationCounterCalls() []struct { Device nvml.Device N1 int N2 int EnableState nvml.EnableState } { var calls []struct { Device nvml.Device N1 int N2 int EnableState nvml.EnableState } mock.lockDeviceFreezeNvLinkUtilizationCounter.RLock() calls = mock.calls.DeviceFreezeNvLinkUtilizationCounter mock.lockDeviceFreezeNvLinkUtilizationCounter.RUnlock() return calls } // DeviceGetAPIRestriction calls DeviceGetAPIRestrictionFunc. func (mock *Interface) DeviceGetAPIRestriction(device nvml.Device, restrictedAPI nvml.RestrictedAPI) (nvml.EnableState, nvml.Return) { if mock.DeviceGetAPIRestrictionFunc == nil { panic("Interface.DeviceGetAPIRestrictionFunc: method is nil but Interface.DeviceGetAPIRestriction was just called") } callInfo := struct { Device nvml.Device RestrictedAPI nvml.RestrictedAPI }{ Device: device, RestrictedAPI: restrictedAPI, } mock.lockDeviceGetAPIRestriction.Lock() mock.calls.DeviceGetAPIRestriction = append(mock.calls.DeviceGetAPIRestriction, callInfo) mock.lockDeviceGetAPIRestriction.Unlock() return mock.DeviceGetAPIRestrictionFunc(device, restrictedAPI) } // DeviceGetAPIRestrictionCalls gets all the calls that were made to DeviceGetAPIRestriction. // Check the length with: // // len(mockedInterface.DeviceGetAPIRestrictionCalls()) func (mock *Interface) DeviceGetAPIRestrictionCalls() []struct { Device nvml.Device RestrictedAPI nvml.RestrictedAPI } { var calls []struct { Device nvml.Device RestrictedAPI nvml.RestrictedAPI } mock.lockDeviceGetAPIRestriction.RLock() calls = mock.calls.DeviceGetAPIRestriction mock.lockDeviceGetAPIRestriction.RUnlock() return calls } // DeviceGetAccountingBufferSize calls DeviceGetAccountingBufferSizeFunc. func (mock *Interface) DeviceGetAccountingBufferSize(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetAccountingBufferSizeFunc == nil { panic("Interface.DeviceGetAccountingBufferSizeFunc: method is nil but Interface.DeviceGetAccountingBufferSize was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetAccountingBufferSize.Lock() mock.calls.DeviceGetAccountingBufferSize = append(mock.calls.DeviceGetAccountingBufferSize, callInfo) mock.lockDeviceGetAccountingBufferSize.Unlock() return mock.DeviceGetAccountingBufferSizeFunc(device) } // DeviceGetAccountingBufferSizeCalls gets all the calls that were made to DeviceGetAccountingBufferSize. // Check the length with: // // len(mockedInterface.DeviceGetAccountingBufferSizeCalls()) func (mock *Interface) DeviceGetAccountingBufferSizeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetAccountingBufferSize.RLock() calls = mock.calls.DeviceGetAccountingBufferSize mock.lockDeviceGetAccountingBufferSize.RUnlock() return calls } // DeviceGetAccountingMode calls DeviceGetAccountingModeFunc. func (mock *Interface) DeviceGetAccountingMode(device nvml.Device) (nvml.EnableState, nvml.Return) { if mock.DeviceGetAccountingModeFunc == nil { panic("Interface.DeviceGetAccountingModeFunc: method is nil but Interface.DeviceGetAccountingMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetAccountingMode.Lock() mock.calls.DeviceGetAccountingMode = append(mock.calls.DeviceGetAccountingMode, callInfo) mock.lockDeviceGetAccountingMode.Unlock() return mock.DeviceGetAccountingModeFunc(device) } // DeviceGetAccountingModeCalls gets all the calls that were made to DeviceGetAccountingMode. // Check the length with: // // len(mockedInterface.DeviceGetAccountingModeCalls()) func (mock *Interface) DeviceGetAccountingModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetAccountingMode.RLock() calls = mock.calls.DeviceGetAccountingMode mock.lockDeviceGetAccountingMode.RUnlock() return calls } // DeviceGetAccountingPids calls DeviceGetAccountingPidsFunc. func (mock *Interface) DeviceGetAccountingPids(device nvml.Device) ([]int, nvml.Return) { if mock.DeviceGetAccountingPidsFunc == nil { panic("Interface.DeviceGetAccountingPidsFunc: method is nil but Interface.DeviceGetAccountingPids was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetAccountingPids.Lock() mock.calls.DeviceGetAccountingPids = append(mock.calls.DeviceGetAccountingPids, callInfo) mock.lockDeviceGetAccountingPids.Unlock() return mock.DeviceGetAccountingPidsFunc(device) } // DeviceGetAccountingPidsCalls gets all the calls that were made to DeviceGetAccountingPids. // Check the length with: // // len(mockedInterface.DeviceGetAccountingPidsCalls()) func (mock *Interface) DeviceGetAccountingPidsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetAccountingPids.RLock() calls = mock.calls.DeviceGetAccountingPids mock.lockDeviceGetAccountingPids.RUnlock() return calls } // DeviceGetAccountingStats calls DeviceGetAccountingStatsFunc. func (mock *Interface) DeviceGetAccountingStats(device nvml.Device, v uint32) (nvml.AccountingStats, nvml.Return) { if mock.DeviceGetAccountingStatsFunc == nil { panic("Interface.DeviceGetAccountingStatsFunc: method is nil but Interface.DeviceGetAccountingStats was just called") } callInfo := struct { Device nvml.Device V uint32 }{ Device: device, V: v, } mock.lockDeviceGetAccountingStats.Lock() mock.calls.DeviceGetAccountingStats = append(mock.calls.DeviceGetAccountingStats, callInfo) mock.lockDeviceGetAccountingStats.Unlock() return mock.DeviceGetAccountingStatsFunc(device, v) } // DeviceGetAccountingStatsCalls gets all the calls that were made to DeviceGetAccountingStats. // Check the length with: // // len(mockedInterface.DeviceGetAccountingStatsCalls()) func (mock *Interface) DeviceGetAccountingStatsCalls() []struct { Device nvml.Device V uint32 } { var calls []struct { Device nvml.Device V uint32 } mock.lockDeviceGetAccountingStats.RLock() calls = mock.calls.DeviceGetAccountingStats mock.lockDeviceGetAccountingStats.RUnlock() return calls } // DeviceGetActiveVgpus calls DeviceGetActiveVgpusFunc. func (mock *Interface) DeviceGetActiveVgpus(device nvml.Device) ([]nvml.VgpuInstance, nvml.Return) { if mock.DeviceGetActiveVgpusFunc == nil { panic("Interface.DeviceGetActiveVgpusFunc: method is nil but Interface.DeviceGetActiveVgpus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetActiveVgpus.Lock() mock.calls.DeviceGetActiveVgpus = append(mock.calls.DeviceGetActiveVgpus, callInfo) mock.lockDeviceGetActiveVgpus.Unlock() return mock.DeviceGetActiveVgpusFunc(device) } // DeviceGetActiveVgpusCalls gets all the calls that were made to DeviceGetActiveVgpus. // Check the length with: // // len(mockedInterface.DeviceGetActiveVgpusCalls()) func (mock *Interface) DeviceGetActiveVgpusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetActiveVgpus.RLock() calls = mock.calls.DeviceGetActiveVgpus mock.lockDeviceGetActiveVgpus.RUnlock() return calls } // DeviceGetAdaptiveClockInfoStatus calls DeviceGetAdaptiveClockInfoStatusFunc. func (mock *Interface) DeviceGetAdaptiveClockInfoStatus(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetAdaptiveClockInfoStatusFunc == nil { panic("Interface.DeviceGetAdaptiveClockInfoStatusFunc: method is nil but Interface.DeviceGetAdaptiveClockInfoStatus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetAdaptiveClockInfoStatus.Lock() mock.calls.DeviceGetAdaptiveClockInfoStatus = append(mock.calls.DeviceGetAdaptiveClockInfoStatus, callInfo) mock.lockDeviceGetAdaptiveClockInfoStatus.Unlock() return mock.DeviceGetAdaptiveClockInfoStatusFunc(device) } // DeviceGetAdaptiveClockInfoStatusCalls gets all the calls that were made to DeviceGetAdaptiveClockInfoStatus. // Check the length with: // // len(mockedInterface.DeviceGetAdaptiveClockInfoStatusCalls()) func (mock *Interface) DeviceGetAdaptiveClockInfoStatusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetAdaptiveClockInfoStatus.RLock() calls = mock.calls.DeviceGetAdaptiveClockInfoStatus mock.lockDeviceGetAdaptiveClockInfoStatus.RUnlock() return calls } // DeviceGetAddressingMode calls DeviceGetAddressingModeFunc. func (mock *Interface) DeviceGetAddressingMode(device nvml.Device) (nvml.DeviceAddressingMode, nvml.Return) { if mock.DeviceGetAddressingModeFunc == nil { panic("Interface.DeviceGetAddressingModeFunc: method is nil but Interface.DeviceGetAddressingMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetAddressingMode.Lock() mock.calls.DeviceGetAddressingMode = append(mock.calls.DeviceGetAddressingMode, callInfo) mock.lockDeviceGetAddressingMode.Unlock() return mock.DeviceGetAddressingModeFunc(device) } // DeviceGetAddressingModeCalls gets all the calls that were made to DeviceGetAddressingMode. // Check the length with: // // len(mockedInterface.DeviceGetAddressingModeCalls()) func (mock *Interface) DeviceGetAddressingModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetAddressingMode.RLock() calls = mock.calls.DeviceGetAddressingMode mock.lockDeviceGetAddressingMode.RUnlock() return calls } // DeviceGetApplicationsClock calls DeviceGetApplicationsClockFunc. func (mock *Interface) DeviceGetApplicationsClock(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { if mock.DeviceGetApplicationsClockFunc == nil { panic("Interface.DeviceGetApplicationsClockFunc: method is nil but Interface.DeviceGetApplicationsClock was just called") } callInfo := struct { Device nvml.Device ClockType nvml.ClockType }{ Device: device, ClockType: clockType, } mock.lockDeviceGetApplicationsClock.Lock() mock.calls.DeviceGetApplicationsClock = append(mock.calls.DeviceGetApplicationsClock, callInfo) mock.lockDeviceGetApplicationsClock.Unlock() return mock.DeviceGetApplicationsClockFunc(device, clockType) } // DeviceGetApplicationsClockCalls gets all the calls that were made to DeviceGetApplicationsClock. // Check the length with: // // len(mockedInterface.DeviceGetApplicationsClockCalls()) func (mock *Interface) DeviceGetApplicationsClockCalls() []struct { Device nvml.Device ClockType nvml.ClockType } { var calls []struct { Device nvml.Device ClockType nvml.ClockType } mock.lockDeviceGetApplicationsClock.RLock() calls = mock.calls.DeviceGetApplicationsClock mock.lockDeviceGetApplicationsClock.RUnlock() return calls } // DeviceGetArchitecture calls DeviceGetArchitectureFunc. func (mock *Interface) DeviceGetArchitecture(device nvml.Device) (nvml.DeviceArchitecture, nvml.Return) { if mock.DeviceGetArchitectureFunc == nil { panic("Interface.DeviceGetArchitectureFunc: method is nil but Interface.DeviceGetArchitecture was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetArchitecture.Lock() mock.calls.DeviceGetArchitecture = append(mock.calls.DeviceGetArchitecture, callInfo) mock.lockDeviceGetArchitecture.Unlock() return mock.DeviceGetArchitectureFunc(device) } // DeviceGetArchitectureCalls gets all the calls that were made to DeviceGetArchitecture. // Check the length with: // // len(mockedInterface.DeviceGetArchitectureCalls()) func (mock *Interface) DeviceGetArchitectureCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetArchitecture.RLock() calls = mock.calls.DeviceGetArchitecture mock.lockDeviceGetArchitecture.RUnlock() return calls } // DeviceGetAttributes calls DeviceGetAttributesFunc. func (mock *Interface) DeviceGetAttributes(device nvml.Device) (nvml.DeviceAttributes, nvml.Return) { if mock.DeviceGetAttributesFunc == nil { panic("Interface.DeviceGetAttributesFunc: method is nil but Interface.DeviceGetAttributes was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetAttributes.Lock() mock.calls.DeviceGetAttributes = append(mock.calls.DeviceGetAttributes, callInfo) mock.lockDeviceGetAttributes.Unlock() return mock.DeviceGetAttributesFunc(device) } // DeviceGetAttributesCalls gets all the calls that were made to DeviceGetAttributes. // Check the length with: // // len(mockedInterface.DeviceGetAttributesCalls()) func (mock *Interface) DeviceGetAttributesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetAttributes.RLock() calls = mock.calls.DeviceGetAttributes mock.lockDeviceGetAttributes.RUnlock() return calls } // DeviceGetAutoBoostedClocksEnabled calls DeviceGetAutoBoostedClocksEnabledFunc. func (mock *Interface) DeviceGetAutoBoostedClocksEnabled(device nvml.Device) (nvml.EnableState, nvml.EnableState, nvml.Return) { if mock.DeviceGetAutoBoostedClocksEnabledFunc == nil { panic("Interface.DeviceGetAutoBoostedClocksEnabledFunc: method is nil but Interface.DeviceGetAutoBoostedClocksEnabled was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetAutoBoostedClocksEnabled.Lock() mock.calls.DeviceGetAutoBoostedClocksEnabled = append(mock.calls.DeviceGetAutoBoostedClocksEnabled, callInfo) mock.lockDeviceGetAutoBoostedClocksEnabled.Unlock() return mock.DeviceGetAutoBoostedClocksEnabledFunc(device) } // DeviceGetAutoBoostedClocksEnabledCalls gets all the calls that were made to DeviceGetAutoBoostedClocksEnabled. // Check the length with: // // len(mockedInterface.DeviceGetAutoBoostedClocksEnabledCalls()) func (mock *Interface) DeviceGetAutoBoostedClocksEnabledCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetAutoBoostedClocksEnabled.RLock() calls = mock.calls.DeviceGetAutoBoostedClocksEnabled mock.lockDeviceGetAutoBoostedClocksEnabled.RUnlock() return calls } // DeviceGetBAR1MemoryInfo calls DeviceGetBAR1MemoryInfoFunc. func (mock *Interface) DeviceGetBAR1MemoryInfo(device nvml.Device) (nvml.BAR1Memory, nvml.Return) { if mock.DeviceGetBAR1MemoryInfoFunc == nil { panic("Interface.DeviceGetBAR1MemoryInfoFunc: method is nil but Interface.DeviceGetBAR1MemoryInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetBAR1MemoryInfo.Lock() mock.calls.DeviceGetBAR1MemoryInfo = append(mock.calls.DeviceGetBAR1MemoryInfo, callInfo) mock.lockDeviceGetBAR1MemoryInfo.Unlock() return mock.DeviceGetBAR1MemoryInfoFunc(device) } // DeviceGetBAR1MemoryInfoCalls gets all the calls that were made to DeviceGetBAR1MemoryInfo. // Check the length with: // // len(mockedInterface.DeviceGetBAR1MemoryInfoCalls()) func (mock *Interface) DeviceGetBAR1MemoryInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetBAR1MemoryInfo.RLock() calls = mock.calls.DeviceGetBAR1MemoryInfo mock.lockDeviceGetBAR1MemoryInfo.RUnlock() return calls } // DeviceGetBoardId calls DeviceGetBoardIdFunc. func (mock *Interface) DeviceGetBoardId(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetBoardIdFunc == nil { panic("Interface.DeviceGetBoardIdFunc: method is nil but Interface.DeviceGetBoardId was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetBoardId.Lock() mock.calls.DeviceGetBoardId = append(mock.calls.DeviceGetBoardId, callInfo) mock.lockDeviceGetBoardId.Unlock() return mock.DeviceGetBoardIdFunc(device) } // DeviceGetBoardIdCalls gets all the calls that were made to DeviceGetBoardId. // Check the length with: // // len(mockedInterface.DeviceGetBoardIdCalls()) func (mock *Interface) DeviceGetBoardIdCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetBoardId.RLock() calls = mock.calls.DeviceGetBoardId mock.lockDeviceGetBoardId.RUnlock() return calls } // DeviceGetBoardPartNumber calls DeviceGetBoardPartNumberFunc. func (mock *Interface) DeviceGetBoardPartNumber(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetBoardPartNumberFunc == nil { panic("Interface.DeviceGetBoardPartNumberFunc: method is nil but Interface.DeviceGetBoardPartNumber was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetBoardPartNumber.Lock() mock.calls.DeviceGetBoardPartNumber = append(mock.calls.DeviceGetBoardPartNumber, callInfo) mock.lockDeviceGetBoardPartNumber.Unlock() return mock.DeviceGetBoardPartNumberFunc(device) } // DeviceGetBoardPartNumberCalls gets all the calls that were made to DeviceGetBoardPartNumber. // Check the length with: // // len(mockedInterface.DeviceGetBoardPartNumberCalls()) func (mock *Interface) DeviceGetBoardPartNumberCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetBoardPartNumber.RLock() calls = mock.calls.DeviceGetBoardPartNumber mock.lockDeviceGetBoardPartNumber.RUnlock() return calls } // DeviceGetBrand calls DeviceGetBrandFunc. func (mock *Interface) DeviceGetBrand(device nvml.Device) (nvml.BrandType, nvml.Return) { if mock.DeviceGetBrandFunc == nil { panic("Interface.DeviceGetBrandFunc: method is nil but Interface.DeviceGetBrand was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetBrand.Lock() mock.calls.DeviceGetBrand = append(mock.calls.DeviceGetBrand, callInfo) mock.lockDeviceGetBrand.Unlock() return mock.DeviceGetBrandFunc(device) } // DeviceGetBrandCalls gets all the calls that were made to DeviceGetBrand. // Check the length with: // // len(mockedInterface.DeviceGetBrandCalls()) func (mock *Interface) DeviceGetBrandCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetBrand.RLock() calls = mock.calls.DeviceGetBrand mock.lockDeviceGetBrand.RUnlock() return calls } // DeviceGetBridgeChipInfo calls DeviceGetBridgeChipInfoFunc. func (mock *Interface) DeviceGetBridgeChipInfo(device nvml.Device) (nvml.BridgeChipHierarchy, nvml.Return) { if mock.DeviceGetBridgeChipInfoFunc == nil { panic("Interface.DeviceGetBridgeChipInfoFunc: method is nil but Interface.DeviceGetBridgeChipInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetBridgeChipInfo.Lock() mock.calls.DeviceGetBridgeChipInfo = append(mock.calls.DeviceGetBridgeChipInfo, callInfo) mock.lockDeviceGetBridgeChipInfo.Unlock() return mock.DeviceGetBridgeChipInfoFunc(device) } // DeviceGetBridgeChipInfoCalls gets all the calls that were made to DeviceGetBridgeChipInfo. // Check the length with: // // len(mockedInterface.DeviceGetBridgeChipInfoCalls()) func (mock *Interface) DeviceGetBridgeChipInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetBridgeChipInfo.RLock() calls = mock.calls.DeviceGetBridgeChipInfo mock.lockDeviceGetBridgeChipInfo.RUnlock() return calls } // DeviceGetBusType calls DeviceGetBusTypeFunc. func (mock *Interface) DeviceGetBusType(device nvml.Device) (nvml.BusType, nvml.Return) { if mock.DeviceGetBusTypeFunc == nil { panic("Interface.DeviceGetBusTypeFunc: method is nil but Interface.DeviceGetBusType was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetBusType.Lock() mock.calls.DeviceGetBusType = append(mock.calls.DeviceGetBusType, callInfo) mock.lockDeviceGetBusType.Unlock() return mock.DeviceGetBusTypeFunc(device) } // DeviceGetBusTypeCalls gets all the calls that were made to DeviceGetBusType. // Check the length with: // // len(mockedInterface.DeviceGetBusTypeCalls()) func (mock *Interface) DeviceGetBusTypeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetBusType.RLock() calls = mock.calls.DeviceGetBusType mock.lockDeviceGetBusType.RUnlock() return calls } // DeviceGetC2cModeInfoV calls DeviceGetC2cModeInfoVFunc. func (mock *Interface) DeviceGetC2cModeInfoV(device nvml.Device) nvml.C2cModeInfoHandler { if mock.DeviceGetC2cModeInfoVFunc == nil { panic("Interface.DeviceGetC2cModeInfoVFunc: method is nil but Interface.DeviceGetC2cModeInfoV was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetC2cModeInfoV.Lock() mock.calls.DeviceGetC2cModeInfoV = append(mock.calls.DeviceGetC2cModeInfoV, callInfo) mock.lockDeviceGetC2cModeInfoV.Unlock() return mock.DeviceGetC2cModeInfoVFunc(device) } // DeviceGetC2cModeInfoVCalls gets all the calls that were made to DeviceGetC2cModeInfoV. // Check the length with: // // len(mockedInterface.DeviceGetC2cModeInfoVCalls()) func (mock *Interface) DeviceGetC2cModeInfoVCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetC2cModeInfoV.RLock() calls = mock.calls.DeviceGetC2cModeInfoV mock.lockDeviceGetC2cModeInfoV.RUnlock() return calls } // DeviceGetCapabilities calls DeviceGetCapabilitiesFunc. func (mock *Interface) DeviceGetCapabilities(device nvml.Device) (nvml.DeviceCapabilities, nvml.Return) { if mock.DeviceGetCapabilitiesFunc == nil { panic("Interface.DeviceGetCapabilitiesFunc: method is nil but Interface.DeviceGetCapabilities was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCapabilities.Lock() mock.calls.DeviceGetCapabilities = append(mock.calls.DeviceGetCapabilities, callInfo) mock.lockDeviceGetCapabilities.Unlock() return mock.DeviceGetCapabilitiesFunc(device) } // DeviceGetCapabilitiesCalls gets all the calls that were made to DeviceGetCapabilities. // Check the length with: // // len(mockedInterface.DeviceGetCapabilitiesCalls()) func (mock *Interface) DeviceGetCapabilitiesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCapabilities.RLock() calls = mock.calls.DeviceGetCapabilities mock.lockDeviceGetCapabilities.RUnlock() return calls } // DeviceGetClkMonStatus calls DeviceGetClkMonStatusFunc. func (mock *Interface) DeviceGetClkMonStatus(device nvml.Device) (nvml.ClkMonStatus, nvml.Return) { if mock.DeviceGetClkMonStatusFunc == nil { panic("Interface.DeviceGetClkMonStatusFunc: method is nil but Interface.DeviceGetClkMonStatus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetClkMonStatus.Lock() mock.calls.DeviceGetClkMonStatus = append(mock.calls.DeviceGetClkMonStatus, callInfo) mock.lockDeviceGetClkMonStatus.Unlock() return mock.DeviceGetClkMonStatusFunc(device) } // DeviceGetClkMonStatusCalls gets all the calls that were made to DeviceGetClkMonStatus. // Check the length with: // // len(mockedInterface.DeviceGetClkMonStatusCalls()) func (mock *Interface) DeviceGetClkMonStatusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetClkMonStatus.RLock() calls = mock.calls.DeviceGetClkMonStatus mock.lockDeviceGetClkMonStatus.RUnlock() return calls } // DeviceGetClock calls DeviceGetClockFunc. func (mock *Interface) DeviceGetClock(device nvml.Device, clockType nvml.ClockType, clockId nvml.ClockId) (uint32, nvml.Return) { if mock.DeviceGetClockFunc == nil { panic("Interface.DeviceGetClockFunc: method is nil but Interface.DeviceGetClock was just called") } callInfo := struct { Device nvml.Device ClockType nvml.ClockType ClockId nvml.ClockId }{ Device: device, ClockType: clockType, ClockId: clockId, } mock.lockDeviceGetClock.Lock() mock.calls.DeviceGetClock = append(mock.calls.DeviceGetClock, callInfo) mock.lockDeviceGetClock.Unlock() return mock.DeviceGetClockFunc(device, clockType, clockId) } // DeviceGetClockCalls gets all the calls that were made to DeviceGetClock. // Check the length with: // // len(mockedInterface.DeviceGetClockCalls()) func (mock *Interface) DeviceGetClockCalls() []struct { Device nvml.Device ClockType nvml.ClockType ClockId nvml.ClockId } { var calls []struct { Device nvml.Device ClockType nvml.ClockType ClockId nvml.ClockId } mock.lockDeviceGetClock.RLock() calls = mock.calls.DeviceGetClock mock.lockDeviceGetClock.RUnlock() return calls } // DeviceGetClockInfo calls DeviceGetClockInfoFunc. func (mock *Interface) DeviceGetClockInfo(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { if mock.DeviceGetClockInfoFunc == nil { panic("Interface.DeviceGetClockInfoFunc: method is nil but Interface.DeviceGetClockInfo was just called") } callInfo := struct { Device nvml.Device ClockType nvml.ClockType }{ Device: device, ClockType: clockType, } mock.lockDeviceGetClockInfo.Lock() mock.calls.DeviceGetClockInfo = append(mock.calls.DeviceGetClockInfo, callInfo) mock.lockDeviceGetClockInfo.Unlock() return mock.DeviceGetClockInfoFunc(device, clockType) } // DeviceGetClockInfoCalls gets all the calls that were made to DeviceGetClockInfo. // Check the length with: // // len(mockedInterface.DeviceGetClockInfoCalls()) func (mock *Interface) DeviceGetClockInfoCalls() []struct { Device nvml.Device ClockType nvml.ClockType } { var calls []struct { Device nvml.Device ClockType nvml.ClockType } mock.lockDeviceGetClockInfo.RLock() calls = mock.calls.DeviceGetClockInfo mock.lockDeviceGetClockInfo.RUnlock() return calls } // DeviceGetClockOffsets calls DeviceGetClockOffsetsFunc. func (mock *Interface) DeviceGetClockOffsets(device nvml.Device) (nvml.ClockOffset, nvml.Return) { if mock.DeviceGetClockOffsetsFunc == nil { panic("Interface.DeviceGetClockOffsetsFunc: method is nil but Interface.DeviceGetClockOffsets was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetClockOffsets.Lock() mock.calls.DeviceGetClockOffsets = append(mock.calls.DeviceGetClockOffsets, callInfo) mock.lockDeviceGetClockOffsets.Unlock() return mock.DeviceGetClockOffsetsFunc(device) } // DeviceGetClockOffsetsCalls gets all the calls that were made to DeviceGetClockOffsets. // Check the length with: // // len(mockedInterface.DeviceGetClockOffsetsCalls()) func (mock *Interface) DeviceGetClockOffsetsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetClockOffsets.RLock() calls = mock.calls.DeviceGetClockOffsets mock.lockDeviceGetClockOffsets.RUnlock() return calls } // DeviceGetComputeInstanceId calls DeviceGetComputeInstanceIdFunc. func (mock *Interface) DeviceGetComputeInstanceId(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetComputeInstanceIdFunc == nil { panic("Interface.DeviceGetComputeInstanceIdFunc: method is nil but Interface.DeviceGetComputeInstanceId was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetComputeInstanceId.Lock() mock.calls.DeviceGetComputeInstanceId = append(mock.calls.DeviceGetComputeInstanceId, callInfo) mock.lockDeviceGetComputeInstanceId.Unlock() return mock.DeviceGetComputeInstanceIdFunc(device) } // DeviceGetComputeInstanceIdCalls gets all the calls that were made to DeviceGetComputeInstanceId. // Check the length with: // // len(mockedInterface.DeviceGetComputeInstanceIdCalls()) func (mock *Interface) DeviceGetComputeInstanceIdCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetComputeInstanceId.RLock() calls = mock.calls.DeviceGetComputeInstanceId mock.lockDeviceGetComputeInstanceId.RUnlock() return calls } // DeviceGetComputeMode calls DeviceGetComputeModeFunc. func (mock *Interface) DeviceGetComputeMode(device nvml.Device) (nvml.ComputeMode, nvml.Return) { if mock.DeviceGetComputeModeFunc == nil { panic("Interface.DeviceGetComputeModeFunc: method is nil but Interface.DeviceGetComputeMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetComputeMode.Lock() mock.calls.DeviceGetComputeMode = append(mock.calls.DeviceGetComputeMode, callInfo) mock.lockDeviceGetComputeMode.Unlock() return mock.DeviceGetComputeModeFunc(device) } // DeviceGetComputeModeCalls gets all the calls that were made to DeviceGetComputeMode. // Check the length with: // // len(mockedInterface.DeviceGetComputeModeCalls()) func (mock *Interface) DeviceGetComputeModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetComputeMode.RLock() calls = mock.calls.DeviceGetComputeMode mock.lockDeviceGetComputeMode.RUnlock() return calls } // DeviceGetComputeRunningProcesses calls DeviceGetComputeRunningProcessesFunc. func (mock *Interface) DeviceGetComputeRunningProcesses(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) { if mock.DeviceGetComputeRunningProcessesFunc == nil { panic("Interface.DeviceGetComputeRunningProcessesFunc: method is nil but Interface.DeviceGetComputeRunningProcesses was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetComputeRunningProcesses.Lock() mock.calls.DeviceGetComputeRunningProcesses = append(mock.calls.DeviceGetComputeRunningProcesses, callInfo) mock.lockDeviceGetComputeRunningProcesses.Unlock() return mock.DeviceGetComputeRunningProcessesFunc(device) } // DeviceGetComputeRunningProcessesCalls gets all the calls that were made to DeviceGetComputeRunningProcesses. // Check the length with: // // len(mockedInterface.DeviceGetComputeRunningProcessesCalls()) func (mock *Interface) DeviceGetComputeRunningProcessesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetComputeRunningProcesses.RLock() calls = mock.calls.DeviceGetComputeRunningProcesses mock.lockDeviceGetComputeRunningProcesses.RUnlock() return calls } // DeviceGetConfComputeGpuAttestationReport calls DeviceGetConfComputeGpuAttestationReportFunc. func (mock *Interface) DeviceGetConfComputeGpuAttestationReport(device nvml.Device, confComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport) nvml.Return { if mock.DeviceGetConfComputeGpuAttestationReportFunc == nil { panic("Interface.DeviceGetConfComputeGpuAttestationReportFunc: method is nil but Interface.DeviceGetConfComputeGpuAttestationReport was just called") } callInfo := struct { Device nvml.Device ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport }{ Device: device, ConfComputeGpuAttestationReport: confComputeGpuAttestationReport, } mock.lockDeviceGetConfComputeGpuAttestationReport.Lock() mock.calls.DeviceGetConfComputeGpuAttestationReport = append(mock.calls.DeviceGetConfComputeGpuAttestationReport, callInfo) mock.lockDeviceGetConfComputeGpuAttestationReport.Unlock() return mock.DeviceGetConfComputeGpuAttestationReportFunc(device, confComputeGpuAttestationReport) } // DeviceGetConfComputeGpuAttestationReportCalls gets all the calls that were made to DeviceGetConfComputeGpuAttestationReport. // Check the length with: // // len(mockedInterface.DeviceGetConfComputeGpuAttestationReportCalls()) func (mock *Interface) DeviceGetConfComputeGpuAttestationReportCalls() []struct { Device nvml.Device ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport } { var calls []struct { Device nvml.Device ConfComputeGpuAttestationReport *nvml.ConfComputeGpuAttestationReport } mock.lockDeviceGetConfComputeGpuAttestationReport.RLock() calls = mock.calls.DeviceGetConfComputeGpuAttestationReport mock.lockDeviceGetConfComputeGpuAttestationReport.RUnlock() return calls } // DeviceGetConfComputeGpuCertificate calls DeviceGetConfComputeGpuCertificateFunc. func (mock *Interface) DeviceGetConfComputeGpuCertificate(device nvml.Device) (nvml.ConfComputeGpuCertificate, nvml.Return) { if mock.DeviceGetConfComputeGpuCertificateFunc == nil { panic("Interface.DeviceGetConfComputeGpuCertificateFunc: method is nil but Interface.DeviceGetConfComputeGpuCertificate was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetConfComputeGpuCertificate.Lock() mock.calls.DeviceGetConfComputeGpuCertificate = append(mock.calls.DeviceGetConfComputeGpuCertificate, callInfo) mock.lockDeviceGetConfComputeGpuCertificate.Unlock() return mock.DeviceGetConfComputeGpuCertificateFunc(device) } // DeviceGetConfComputeGpuCertificateCalls gets all the calls that were made to DeviceGetConfComputeGpuCertificate. // Check the length with: // // len(mockedInterface.DeviceGetConfComputeGpuCertificateCalls()) func (mock *Interface) DeviceGetConfComputeGpuCertificateCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetConfComputeGpuCertificate.RLock() calls = mock.calls.DeviceGetConfComputeGpuCertificate mock.lockDeviceGetConfComputeGpuCertificate.RUnlock() return calls } // DeviceGetConfComputeMemSizeInfo calls DeviceGetConfComputeMemSizeInfoFunc. func (mock *Interface) DeviceGetConfComputeMemSizeInfo(device nvml.Device) (nvml.ConfComputeMemSizeInfo, nvml.Return) { if mock.DeviceGetConfComputeMemSizeInfoFunc == nil { panic("Interface.DeviceGetConfComputeMemSizeInfoFunc: method is nil but Interface.DeviceGetConfComputeMemSizeInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetConfComputeMemSizeInfo.Lock() mock.calls.DeviceGetConfComputeMemSizeInfo = append(mock.calls.DeviceGetConfComputeMemSizeInfo, callInfo) mock.lockDeviceGetConfComputeMemSizeInfo.Unlock() return mock.DeviceGetConfComputeMemSizeInfoFunc(device) } // DeviceGetConfComputeMemSizeInfoCalls gets all the calls that were made to DeviceGetConfComputeMemSizeInfo. // Check the length with: // // len(mockedInterface.DeviceGetConfComputeMemSizeInfoCalls()) func (mock *Interface) DeviceGetConfComputeMemSizeInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetConfComputeMemSizeInfo.RLock() calls = mock.calls.DeviceGetConfComputeMemSizeInfo mock.lockDeviceGetConfComputeMemSizeInfo.RUnlock() return calls } // DeviceGetConfComputeProtectedMemoryUsage calls DeviceGetConfComputeProtectedMemoryUsageFunc. func (mock *Interface) DeviceGetConfComputeProtectedMemoryUsage(device nvml.Device) (nvml.Memory, nvml.Return) { if mock.DeviceGetConfComputeProtectedMemoryUsageFunc == nil { panic("Interface.DeviceGetConfComputeProtectedMemoryUsageFunc: method is nil but Interface.DeviceGetConfComputeProtectedMemoryUsage was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetConfComputeProtectedMemoryUsage.Lock() mock.calls.DeviceGetConfComputeProtectedMemoryUsage = append(mock.calls.DeviceGetConfComputeProtectedMemoryUsage, callInfo) mock.lockDeviceGetConfComputeProtectedMemoryUsage.Unlock() return mock.DeviceGetConfComputeProtectedMemoryUsageFunc(device) } // DeviceGetConfComputeProtectedMemoryUsageCalls gets all the calls that were made to DeviceGetConfComputeProtectedMemoryUsage. // Check the length with: // // len(mockedInterface.DeviceGetConfComputeProtectedMemoryUsageCalls()) func (mock *Interface) DeviceGetConfComputeProtectedMemoryUsageCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetConfComputeProtectedMemoryUsage.RLock() calls = mock.calls.DeviceGetConfComputeProtectedMemoryUsage mock.lockDeviceGetConfComputeProtectedMemoryUsage.RUnlock() return calls } // DeviceGetCoolerInfo calls DeviceGetCoolerInfoFunc. func (mock *Interface) DeviceGetCoolerInfo(device nvml.Device) (nvml.CoolerInfo, nvml.Return) { if mock.DeviceGetCoolerInfoFunc == nil { panic("Interface.DeviceGetCoolerInfoFunc: method is nil but Interface.DeviceGetCoolerInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCoolerInfo.Lock() mock.calls.DeviceGetCoolerInfo = append(mock.calls.DeviceGetCoolerInfo, callInfo) mock.lockDeviceGetCoolerInfo.Unlock() return mock.DeviceGetCoolerInfoFunc(device) } // DeviceGetCoolerInfoCalls gets all the calls that were made to DeviceGetCoolerInfo. // Check the length with: // // len(mockedInterface.DeviceGetCoolerInfoCalls()) func (mock *Interface) DeviceGetCoolerInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCoolerInfo.RLock() calls = mock.calls.DeviceGetCoolerInfo mock.lockDeviceGetCoolerInfo.RUnlock() return calls } // DeviceGetCount calls DeviceGetCountFunc. func (mock *Interface) DeviceGetCount() (int, nvml.Return) { if mock.DeviceGetCountFunc == nil { panic("Interface.DeviceGetCountFunc: method is nil but Interface.DeviceGetCount was just called") } callInfo := struct { }{} mock.lockDeviceGetCount.Lock() mock.calls.DeviceGetCount = append(mock.calls.DeviceGetCount, callInfo) mock.lockDeviceGetCount.Unlock() return mock.DeviceGetCountFunc() } // DeviceGetCountCalls gets all the calls that were made to DeviceGetCount. // Check the length with: // // len(mockedInterface.DeviceGetCountCalls()) func (mock *Interface) DeviceGetCountCalls() []struct { } { var calls []struct { } mock.lockDeviceGetCount.RLock() calls = mock.calls.DeviceGetCount mock.lockDeviceGetCount.RUnlock() return calls } // DeviceGetCpuAffinity calls DeviceGetCpuAffinityFunc. func (mock *Interface) DeviceGetCpuAffinity(device nvml.Device, n int) ([]uint, nvml.Return) { if mock.DeviceGetCpuAffinityFunc == nil { panic("Interface.DeviceGetCpuAffinityFunc: method is nil but Interface.DeviceGetCpuAffinity was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetCpuAffinity.Lock() mock.calls.DeviceGetCpuAffinity = append(mock.calls.DeviceGetCpuAffinity, callInfo) mock.lockDeviceGetCpuAffinity.Unlock() return mock.DeviceGetCpuAffinityFunc(device, n) } // DeviceGetCpuAffinityCalls gets all the calls that were made to DeviceGetCpuAffinity. // Check the length with: // // len(mockedInterface.DeviceGetCpuAffinityCalls()) func (mock *Interface) DeviceGetCpuAffinityCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetCpuAffinity.RLock() calls = mock.calls.DeviceGetCpuAffinity mock.lockDeviceGetCpuAffinity.RUnlock() return calls } // DeviceGetCpuAffinityWithinScope calls DeviceGetCpuAffinityWithinScopeFunc. func (mock *Interface) DeviceGetCpuAffinityWithinScope(device nvml.Device, n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { if mock.DeviceGetCpuAffinityWithinScopeFunc == nil { panic("Interface.DeviceGetCpuAffinityWithinScopeFunc: method is nil but Interface.DeviceGetCpuAffinityWithinScope was just called") } callInfo := struct { Device nvml.Device N int AffinityScope nvml.AffinityScope }{ Device: device, N: n, AffinityScope: affinityScope, } mock.lockDeviceGetCpuAffinityWithinScope.Lock() mock.calls.DeviceGetCpuAffinityWithinScope = append(mock.calls.DeviceGetCpuAffinityWithinScope, callInfo) mock.lockDeviceGetCpuAffinityWithinScope.Unlock() return mock.DeviceGetCpuAffinityWithinScopeFunc(device, n, affinityScope) } // DeviceGetCpuAffinityWithinScopeCalls gets all the calls that were made to DeviceGetCpuAffinityWithinScope. // Check the length with: // // len(mockedInterface.DeviceGetCpuAffinityWithinScopeCalls()) func (mock *Interface) DeviceGetCpuAffinityWithinScopeCalls() []struct { Device nvml.Device N int AffinityScope nvml.AffinityScope } { var calls []struct { Device nvml.Device N int AffinityScope nvml.AffinityScope } mock.lockDeviceGetCpuAffinityWithinScope.RLock() calls = mock.calls.DeviceGetCpuAffinityWithinScope mock.lockDeviceGetCpuAffinityWithinScope.RUnlock() return calls } // DeviceGetCreatableVgpus calls DeviceGetCreatableVgpusFunc. func (mock *Interface) DeviceGetCreatableVgpus(device nvml.Device) ([]nvml.VgpuTypeId, nvml.Return) { if mock.DeviceGetCreatableVgpusFunc == nil { panic("Interface.DeviceGetCreatableVgpusFunc: method is nil but Interface.DeviceGetCreatableVgpus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCreatableVgpus.Lock() mock.calls.DeviceGetCreatableVgpus = append(mock.calls.DeviceGetCreatableVgpus, callInfo) mock.lockDeviceGetCreatableVgpus.Unlock() return mock.DeviceGetCreatableVgpusFunc(device) } // DeviceGetCreatableVgpusCalls gets all the calls that were made to DeviceGetCreatableVgpus. // Check the length with: // // len(mockedInterface.DeviceGetCreatableVgpusCalls()) func (mock *Interface) DeviceGetCreatableVgpusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCreatableVgpus.RLock() calls = mock.calls.DeviceGetCreatableVgpus mock.lockDeviceGetCreatableVgpus.RUnlock() return calls } // DeviceGetCudaComputeCapability calls DeviceGetCudaComputeCapabilityFunc. func (mock *Interface) DeviceGetCudaComputeCapability(device nvml.Device) (int, int, nvml.Return) { if mock.DeviceGetCudaComputeCapabilityFunc == nil { panic("Interface.DeviceGetCudaComputeCapabilityFunc: method is nil but Interface.DeviceGetCudaComputeCapability was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCudaComputeCapability.Lock() mock.calls.DeviceGetCudaComputeCapability = append(mock.calls.DeviceGetCudaComputeCapability, callInfo) mock.lockDeviceGetCudaComputeCapability.Unlock() return mock.DeviceGetCudaComputeCapabilityFunc(device) } // DeviceGetCudaComputeCapabilityCalls gets all the calls that were made to DeviceGetCudaComputeCapability. // Check the length with: // // len(mockedInterface.DeviceGetCudaComputeCapabilityCalls()) func (mock *Interface) DeviceGetCudaComputeCapabilityCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCudaComputeCapability.RLock() calls = mock.calls.DeviceGetCudaComputeCapability mock.lockDeviceGetCudaComputeCapability.RUnlock() return calls } // DeviceGetCurrPcieLinkGeneration calls DeviceGetCurrPcieLinkGenerationFunc. func (mock *Interface) DeviceGetCurrPcieLinkGeneration(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetCurrPcieLinkGenerationFunc == nil { panic("Interface.DeviceGetCurrPcieLinkGenerationFunc: method is nil but Interface.DeviceGetCurrPcieLinkGeneration was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCurrPcieLinkGeneration.Lock() mock.calls.DeviceGetCurrPcieLinkGeneration = append(mock.calls.DeviceGetCurrPcieLinkGeneration, callInfo) mock.lockDeviceGetCurrPcieLinkGeneration.Unlock() return mock.DeviceGetCurrPcieLinkGenerationFunc(device) } // DeviceGetCurrPcieLinkGenerationCalls gets all the calls that were made to DeviceGetCurrPcieLinkGeneration. // Check the length with: // // len(mockedInterface.DeviceGetCurrPcieLinkGenerationCalls()) func (mock *Interface) DeviceGetCurrPcieLinkGenerationCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCurrPcieLinkGeneration.RLock() calls = mock.calls.DeviceGetCurrPcieLinkGeneration mock.lockDeviceGetCurrPcieLinkGeneration.RUnlock() return calls } // DeviceGetCurrPcieLinkWidth calls DeviceGetCurrPcieLinkWidthFunc. func (mock *Interface) DeviceGetCurrPcieLinkWidth(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetCurrPcieLinkWidthFunc == nil { panic("Interface.DeviceGetCurrPcieLinkWidthFunc: method is nil but Interface.DeviceGetCurrPcieLinkWidth was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCurrPcieLinkWidth.Lock() mock.calls.DeviceGetCurrPcieLinkWidth = append(mock.calls.DeviceGetCurrPcieLinkWidth, callInfo) mock.lockDeviceGetCurrPcieLinkWidth.Unlock() return mock.DeviceGetCurrPcieLinkWidthFunc(device) } // DeviceGetCurrPcieLinkWidthCalls gets all the calls that were made to DeviceGetCurrPcieLinkWidth. // Check the length with: // // len(mockedInterface.DeviceGetCurrPcieLinkWidthCalls()) func (mock *Interface) DeviceGetCurrPcieLinkWidthCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCurrPcieLinkWidth.RLock() calls = mock.calls.DeviceGetCurrPcieLinkWidth mock.lockDeviceGetCurrPcieLinkWidth.RUnlock() return calls } // DeviceGetCurrentClockFreqs calls DeviceGetCurrentClockFreqsFunc. func (mock *Interface) DeviceGetCurrentClockFreqs(device nvml.Device) (nvml.DeviceCurrentClockFreqs, nvml.Return) { if mock.DeviceGetCurrentClockFreqsFunc == nil { panic("Interface.DeviceGetCurrentClockFreqsFunc: method is nil but Interface.DeviceGetCurrentClockFreqs was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCurrentClockFreqs.Lock() mock.calls.DeviceGetCurrentClockFreqs = append(mock.calls.DeviceGetCurrentClockFreqs, callInfo) mock.lockDeviceGetCurrentClockFreqs.Unlock() return mock.DeviceGetCurrentClockFreqsFunc(device) } // DeviceGetCurrentClockFreqsCalls gets all the calls that were made to DeviceGetCurrentClockFreqs. // Check the length with: // // len(mockedInterface.DeviceGetCurrentClockFreqsCalls()) func (mock *Interface) DeviceGetCurrentClockFreqsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCurrentClockFreqs.RLock() calls = mock.calls.DeviceGetCurrentClockFreqs mock.lockDeviceGetCurrentClockFreqs.RUnlock() return calls } // DeviceGetCurrentClocksEventReasons calls DeviceGetCurrentClocksEventReasonsFunc. func (mock *Interface) DeviceGetCurrentClocksEventReasons(device nvml.Device) (uint64, nvml.Return) { if mock.DeviceGetCurrentClocksEventReasonsFunc == nil { panic("Interface.DeviceGetCurrentClocksEventReasonsFunc: method is nil but Interface.DeviceGetCurrentClocksEventReasons was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCurrentClocksEventReasons.Lock() mock.calls.DeviceGetCurrentClocksEventReasons = append(mock.calls.DeviceGetCurrentClocksEventReasons, callInfo) mock.lockDeviceGetCurrentClocksEventReasons.Unlock() return mock.DeviceGetCurrentClocksEventReasonsFunc(device) } // DeviceGetCurrentClocksEventReasonsCalls gets all the calls that were made to DeviceGetCurrentClocksEventReasons. // Check the length with: // // len(mockedInterface.DeviceGetCurrentClocksEventReasonsCalls()) func (mock *Interface) DeviceGetCurrentClocksEventReasonsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCurrentClocksEventReasons.RLock() calls = mock.calls.DeviceGetCurrentClocksEventReasons mock.lockDeviceGetCurrentClocksEventReasons.RUnlock() return calls } // DeviceGetCurrentClocksThrottleReasons calls DeviceGetCurrentClocksThrottleReasonsFunc. func (mock *Interface) DeviceGetCurrentClocksThrottleReasons(device nvml.Device) (uint64, nvml.Return) { if mock.DeviceGetCurrentClocksThrottleReasonsFunc == nil { panic("Interface.DeviceGetCurrentClocksThrottleReasonsFunc: method is nil but Interface.DeviceGetCurrentClocksThrottleReasons was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetCurrentClocksThrottleReasons.Lock() mock.calls.DeviceGetCurrentClocksThrottleReasons = append(mock.calls.DeviceGetCurrentClocksThrottleReasons, callInfo) mock.lockDeviceGetCurrentClocksThrottleReasons.Unlock() return mock.DeviceGetCurrentClocksThrottleReasonsFunc(device) } // DeviceGetCurrentClocksThrottleReasonsCalls gets all the calls that were made to DeviceGetCurrentClocksThrottleReasons. // Check the length with: // // len(mockedInterface.DeviceGetCurrentClocksThrottleReasonsCalls()) func (mock *Interface) DeviceGetCurrentClocksThrottleReasonsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetCurrentClocksThrottleReasons.RLock() calls = mock.calls.DeviceGetCurrentClocksThrottleReasons mock.lockDeviceGetCurrentClocksThrottleReasons.RUnlock() return calls } // DeviceGetDecoderUtilization calls DeviceGetDecoderUtilizationFunc. func (mock *Interface) DeviceGetDecoderUtilization(device nvml.Device) (uint32, uint32, nvml.Return) { if mock.DeviceGetDecoderUtilizationFunc == nil { panic("Interface.DeviceGetDecoderUtilizationFunc: method is nil but Interface.DeviceGetDecoderUtilization was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDecoderUtilization.Lock() mock.calls.DeviceGetDecoderUtilization = append(mock.calls.DeviceGetDecoderUtilization, callInfo) mock.lockDeviceGetDecoderUtilization.Unlock() return mock.DeviceGetDecoderUtilizationFunc(device) } // DeviceGetDecoderUtilizationCalls gets all the calls that were made to DeviceGetDecoderUtilization. // Check the length with: // // len(mockedInterface.DeviceGetDecoderUtilizationCalls()) func (mock *Interface) DeviceGetDecoderUtilizationCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDecoderUtilization.RLock() calls = mock.calls.DeviceGetDecoderUtilization mock.lockDeviceGetDecoderUtilization.RUnlock() return calls } // DeviceGetDefaultApplicationsClock calls DeviceGetDefaultApplicationsClockFunc. func (mock *Interface) DeviceGetDefaultApplicationsClock(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { if mock.DeviceGetDefaultApplicationsClockFunc == nil { panic("Interface.DeviceGetDefaultApplicationsClockFunc: method is nil but Interface.DeviceGetDefaultApplicationsClock was just called") } callInfo := struct { Device nvml.Device ClockType nvml.ClockType }{ Device: device, ClockType: clockType, } mock.lockDeviceGetDefaultApplicationsClock.Lock() mock.calls.DeviceGetDefaultApplicationsClock = append(mock.calls.DeviceGetDefaultApplicationsClock, callInfo) mock.lockDeviceGetDefaultApplicationsClock.Unlock() return mock.DeviceGetDefaultApplicationsClockFunc(device, clockType) } // DeviceGetDefaultApplicationsClockCalls gets all the calls that were made to DeviceGetDefaultApplicationsClock. // Check the length with: // // len(mockedInterface.DeviceGetDefaultApplicationsClockCalls()) func (mock *Interface) DeviceGetDefaultApplicationsClockCalls() []struct { Device nvml.Device ClockType nvml.ClockType } { var calls []struct { Device nvml.Device ClockType nvml.ClockType } mock.lockDeviceGetDefaultApplicationsClock.RLock() calls = mock.calls.DeviceGetDefaultApplicationsClock mock.lockDeviceGetDefaultApplicationsClock.RUnlock() return calls } // DeviceGetDefaultEccMode calls DeviceGetDefaultEccModeFunc. func (mock *Interface) DeviceGetDefaultEccMode(device nvml.Device) (nvml.EnableState, nvml.Return) { if mock.DeviceGetDefaultEccModeFunc == nil { panic("Interface.DeviceGetDefaultEccModeFunc: method is nil but Interface.DeviceGetDefaultEccMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDefaultEccMode.Lock() mock.calls.DeviceGetDefaultEccMode = append(mock.calls.DeviceGetDefaultEccMode, callInfo) mock.lockDeviceGetDefaultEccMode.Unlock() return mock.DeviceGetDefaultEccModeFunc(device) } // DeviceGetDefaultEccModeCalls gets all the calls that were made to DeviceGetDefaultEccMode. // Check the length with: // // len(mockedInterface.DeviceGetDefaultEccModeCalls()) func (mock *Interface) DeviceGetDefaultEccModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDefaultEccMode.RLock() calls = mock.calls.DeviceGetDefaultEccMode mock.lockDeviceGetDefaultEccMode.RUnlock() return calls } // DeviceGetDetailedEccErrors calls DeviceGetDetailedEccErrorsFunc. func (mock *Interface) DeviceGetDetailedEccErrors(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (nvml.EccErrorCounts, nvml.Return) { if mock.DeviceGetDetailedEccErrorsFunc == nil { panic("Interface.DeviceGetDetailedEccErrorsFunc: method is nil but Interface.DeviceGetDetailedEccErrors was just called") } callInfo := struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType }{ Device: device, MemoryErrorType: memoryErrorType, EccCounterType: eccCounterType, } mock.lockDeviceGetDetailedEccErrors.Lock() mock.calls.DeviceGetDetailedEccErrors = append(mock.calls.DeviceGetDetailedEccErrors, callInfo) mock.lockDeviceGetDetailedEccErrors.Unlock() return mock.DeviceGetDetailedEccErrorsFunc(device, memoryErrorType, eccCounterType) } // DeviceGetDetailedEccErrorsCalls gets all the calls that were made to DeviceGetDetailedEccErrors. // Check the length with: // // len(mockedInterface.DeviceGetDetailedEccErrorsCalls()) func (mock *Interface) DeviceGetDetailedEccErrorsCalls() []struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } { var calls []struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } mock.lockDeviceGetDetailedEccErrors.RLock() calls = mock.calls.DeviceGetDetailedEccErrors mock.lockDeviceGetDetailedEccErrors.RUnlock() return calls } // DeviceGetDeviceHandleFromMigDeviceHandle calls DeviceGetDeviceHandleFromMigDeviceHandleFunc. func (mock *Interface) DeviceGetDeviceHandleFromMigDeviceHandle(device nvml.Device) (nvml.Device, nvml.Return) { if mock.DeviceGetDeviceHandleFromMigDeviceHandleFunc == nil { panic("Interface.DeviceGetDeviceHandleFromMigDeviceHandleFunc: method is nil but Interface.DeviceGetDeviceHandleFromMigDeviceHandle was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDeviceHandleFromMigDeviceHandle.Lock() mock.calls.DeviceGetDeviceHandleFromMigDeviceHandle = append(mock.calls.DeviceGetDeviceHandleFromMigDeviceHandle, callInfo) mock.lockDeviceGetDeviceHandleFromMigDeviceHandle.Unlock() return mock.DeviceGetDeviceHandleFromMigDeviceHandleFunc(device) } // DeviceGetDeviceHandleFromMigDeviceHandleCalls gets all the calls that were made to DeviceGetDeviceHandleFromMigDeviceHandle. // Check the length with: // // len(mockedInterface.DeviceGetDeviceHandleFromMigDeviceHandleCalls()) func (mock *Interface) DeviceGetDeviceHandleFromMigDeviceHandleCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDeviceHandleFromMigDeviceHandle.RLock() calls = mock.calls.DeviceGetDeviceHandleFromMigDeviceHandle mock.lockDeviceGetDeviceHandleFromMigDeviceHandle.RUnlock() return calls } // DeviceGetDisplayActive calls DeviceGetDisplayActiveFunc. func (mock *Interface) DeviceGetDisplayActive(device nvml.Device) (nvml.EnableState, nvml.Return) { if mock.DeviceGetDisplayActiveFunc == nil { panic("Interface.DeviceGetDisplayActiveFunc: method is nil but Interface.DeviceGetDisplayActive was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDisplayActive.Lock() mock.calls.DeviceGetDisplayActive = append(mock.calls.DeviceGetDisplayActive, callInfo) mock.lockDeviceGetDisplayActive.Unlock() return mock.DeviceGetDisplayActiveFunc(device) } // DeviceGetDisplayActiveCalls gets all the calls that were made to DeviceGetDisplayActive. // Check the length with: // // len(mockedInterface.DeviceGetDisplayActiveCalls()) func (mock *Interface) DeviceGetDisplayActiveCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDisplayActive.RLock() calls = mock.calls.DeviceGetDisplayActive mock.lockDeviceGetDisplayActive.RUnlock() return calls } // DeviceGetDisplayMode calls DeviceGetDisplayModeFunc. func (mock *Interface) DeviceGetDisplayMode(device nvml.Device) (nvml.EnableState, nvml.Return) { if mock.DeviceGetDisplayModeFunc == nil { panic("Interface.DeviceGetDisplayModeFunc: method is nil but Interface.DeviceGetDisplayMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDisplayMode.Lock() mock.calls.DeviceGetDisplayMode = append(mock.calls.DeviceGetDisplayMode, callInfo) mock.lockDeviceGetDisplayMode.Unlock() return mock.DeviceGetDisplayModeFunc(device) } // DeviceGetDisplayModeCalls gets all the calls that were made to DeviceGetDisplayMode. // Check the length with: // // len(mockedInterface.DeviceGetDisplayModeCalls()) func (mock *Interface) DeviceGetDisplayModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDisplayMode.RLock() calls = mock.calls.DeviceGetDisplayMode mock.lockDeviceGetDisplayMode.RUnlock() return calls } // DeviceGetDramEncryptionMode calls DeviceGetDramEncryptionModeFunc. func (mock *Interface) DeviceGetDramEncryptionMode(device nvml.Device) (nvml.DramEncryptionInfo, nvml.DramEncryptionInfo, nvml.Return) { if mock.DeviceGetDramEncryptionModeFunc == nil { panic("Interface.DeviceGetDramEncryptionModeFunc: method is nil but Interface.DeviceGetDramEncryptionMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDramEncryptionMode.Lock() mock.calls.DeviceGetDramEncryptionMode = append(mock.calls.DeviceGetDramEncryptionMode, callInfo) mock.lockDeviceGetDramEncryptionMode.Unlock() return mock.DeviceGetDramEncryptionModeFunc(device) } // DeviceGetDramEncryptionModeCalls gets all the calls that were made to DeviceGetDramEncryptionMode. // Check the length with: // // len(mockedInterface.DeviceGetDramEncryptionModeCalls()) func (mock *Interface) DeviceGetDramEncryptionModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDramEncryptionMode.RLock() calls = mock.calls.DeviceGetDramEncryptionMode mock.lockDeviceGetDramEncryptionMode.RUnlock() return calls } // DeviceGetDriverModel calls DeviceGetDriverModelFunc. func (mock *Interface) DeviceGetDriverModel(device nvml.Device) (nvml.DriverModel, nvml.DriverModel, nvml.Return) { if mock.DeviceGetDriverModelFunc == nil { panic("Interface.DeviceGetDriverModelFunc: method is nil but Interface.DeviceGetDriverModel was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDriverModel.Lock() mock.calls.DeviceGetDriverModel = append(mock.calls.DeviceGetDriverModel, callInfo) mock.lockDeviceGetDriverModel.Unlock() return mock.DeviceGetDriverModelFunc(device) } // DeviceGetDriverModelCalls gets all the calls that were made to DeviceGetDriverModel. // Check the length with: // // len(mockedInterface.DeviceGetDriverModelCalls()) func (mock *Interface) DeviceGetDriverModelCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDriverModel.RLock() calls = mock.calls.DeviceGetDriverModel mock.lockDeviceGetDriverModel.RUnlock() return calls } // DeviceGetDriverModel_v2 calls DeviceGetDriverModel_v2Func. func (mock *Interface) DeviceGetDriverModel_v2(device nvml.Device) (nvml.DriverModel, nvml.DriverModel, nvml.Return) { if mock.DeviceGetDriverModel_v2Func == nil { panic("Interface.DeviceGetDriverModel_v2Func: method is nil but Interface.DeviceGetDriverModel_v2 was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDriverModel_v2.Lock() mock.calls.DeviceGetDriverModel_v2 = append(mock.calls.DeviceGetDriverModel_v2, callInfo) mock.lockDeviceGetDriverModel_v2.Unlock() return mock.DeviceGetDriverModel_v2Func(device) } // DeviceGetDriverModel_v2Calls gets all the calls that were made to DeviceGetDriverModel_v2. // Check the length with: // // len(mockedInterface.DeviceGetDriverModel_v2Calls()) func (mock *Interface) DeviceGetDriverModel_v2Calls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDriverModel_v2.RLock() calls = mock.calls.DeviceGetDriverModel_v2 mock.lockDeviceGetDriverModel_v2.RUnlock() return calls } // DeviceGetDynamicPstatesInfo calls DeviceGetDynamicPstatesInfoFunc. func (mock *Interface) DeviceGetDynamicPstatesInfo(device nvml.Device) (nvml.GpuDynamicPstatesInfo, nvml.Return) { if mock.DeviceGetDynamicPstatesInfoFunc == nil { panic("Interface.DeviceGetDynamicPstatesInfoFunc: method is nil but Interface.DeviceGetDynamicPstatesInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetDynamicPstatesInfo.Lock() mock.calls.DeviceGetDynamicPstatesInfo = append(mock.calls.DeviceGetDynamicPstatesInfo, callInfo) mock.lockDeviceGetDynamicPstatesInfo.Unlock() return mock.DeviceGetDynamicPstatesInfoFunc(device) } // DeviceGetDynamicPstatesInfoCalls gets all the calls that were made to DeviceGetDynamicPstatesInfo. // Check the length with: // // len(mockedInterface.DeviceGetDynamicPstatesInfoCalls()) func (mock *Interface) DeviceGetDynamicPstatesInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetDynamicPstatesInfo.RLock() calls = mock.calls.DeviceGetDynamicPstatesInfo mock.lockDeviceGetDynamicPstatesInfo.RUnlock() return calls } // DeviceGetEccMode calls DeviceGetEccModeFunc. func (mock *Interface) DeviceGetEccMode(device nvml.Device) (nvml.EnableState, nvml.EnableState, nvml.Return) { if mock.DeviceGetEccModeFunc == nil { panic("Interface.DeviceGetEccModeFunc: method is nil but Interface.DeviceGetEccMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetEccMode.Lock() mock.calls.DeviceGetEccMode = append(mock.calls.DeviceGetEccMode, callInfo) mock.lockDeviceGetEccMode.Unlock() return mock.DeviceGetEccModeFunc(device) } // DeviceGetEccModeCalls gets all the calls that were made to DeviceGetEccMode. // Check the length with: // // len(mockedInterface.DeviceGetEccModeCalls()) func (mock *Interface) DeviceGetEccModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetEccMode.RLock() calls = mock.calls.DeviceGetEccMode mock.lockDeviceGetEccMode.RUnlock() return calls } // DeviceGetEncoderCapacity calls DeviceGetEncoderCapacityFunc. func (mock *Interface) DeviceGetEncoderCapacity(device nvml.Device, encoderType nvml.EncoderType) (int, nvml.Return) { if mock.DeviceGetEncoderCapacityFunc == nil { panic("Interface.DeviceGetEncoderCapacityFunc: method is nil but Interface.DeviceGetEncoderCapacity was just called") } callInfo := struct { Device nvml.Device EncoderType nvml.EncoderType }{ Device: device, EncoderType: encoderType, } mock.lockDeviceGetEncoderCapacity.Lock() mock.calls.DeviceGetEncoderCapacity = append(mock.calls.DeviceGetEncoderCapacity, callInfo) mock.lockDeviceGetEncoderCapacity.Unlock() return mock.DeviceGetEncoderCapacityFunc(device, encoderType) } // DeviceGetEncoderCapacityCalls gets all the calls that were made to DeviceGetEncoderCapacity. // Check the length with: // // len(mockedInterface.DeviceGetEncoderCapacityCalls()) func (mock *Interface) DeviceGetEncoderCapacityCalls() []struct { Device nvml.Device EncoderType nvml.EncoderType } { var calls []struct { Device nvml.Device EncoderType nvml.EncoderType } mock.lockDeviceGetEncoderCapacity.RLock() calls = mock.calls.DeviceGetEncoderCapacity mock.lockDeviceGetEncoderCapacity.RUnlock() return calls } // DeviceGetEncoderSessions calls DeviceGetEncoderSessionsFunc. func (mock *Interface) DeviceGetEncoderSessions(device nvml.Device) ([]nvml.EncoderSessionInfo, nvml.Return) { if mock.DeviceGetEncoderSessionsFunc == nil { panic("Interface.DeviceGetEncoderSessionsFunc: method is nil but Interface.DeviceGetEncoderSessions was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetEncoderSessions.Lock() mock.calls.DeviceGetEncoderSessions = append(mock.calls.DeviceGetEncoderSessions, callInfo) mock.lockDeviceGetEncoderSessions.Unlock() return mock.DeviceGetEncoderSessionsFunc(device) } // DeviceGetEncoderSessionsCalls gets all the calls that were made to DeviceGetEncoderSessions. // Check the length with: // // len(mockedInterface.DeviceGetEncoderSessionsCalls()) func (mock *Interface) DeviceGetEncoderSessionsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetEncoderSessions.RLock() calls = mock.calls.DeviceGetEncoderSessions mock.lockDeviceGetEncoderSessions.RUnlock() return calls } // DeviceGetEncoderStats calls DeviceGetEncoderStatsFunc. func (mock *Interface) DeviceGetEncoderStats(device nvml.Device) (int, uint32, uint32, nvml.Return) { if mock.DeviceGetEncoderStatsFunc == nil { panic("Interface.DeviceGetEncoderStatsFunc: method is nil but Interface.DeviceGetEncoderStats was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetEncoderStats.Lock() mock.calls.DeviceGetEncoderStats = append(mock.calls.DeviceGetEncoderStats, callInfo) mock.lockDeviceGetEncoderStats.Unlock() return mock.DeviceGetEncoderStatsFunc(device) } // DeviceGetEncoderStatsCalls gets all the calls that were made to DeviceGetEncoderStats. // Check the length with: // // len(mockedInterface.DeviceGetEncoderStatsCalls()) func (mock *Interface) DeviceGetEncoderStatsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetEncoderStats.RLock() calls = mock.calls.DeviceGetEncoderStats mock.lockDeviceGetEncoderStats.RUnlock() return calls } // DeviceGetEncoderUtilization calls DeviceGetEncoderUtilizationFunc. func (mock *Interface) DeviceGetEncoderUtilization(device nvml.Device) (uint32, uint32, nvml.Return) { if mock.DeviceGetEncoderUtilizationFunc == nil { panic("Interface.DeviceGetEncoderUtilizationFunc: method is nil but Interface.DeviceGetEncoderUtilization was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetEncoderUtilization.Lock() mock.calls.DeviceGetEncoderUtilization = append(mock.calls.DeviceGetEncoderUtilization, callInfo) mock.lockDeviceGetEncoderUtilization.Unlock() return mock.DeviceGetEncoderUtilizationFunc(device) } // DeviceGetEncoderUtilizationCalls gets all the calls that were made to DeviceGetEncoderUtilization. // Check the length with: // // len(mockedInterface.DeviceGetEncoderUtilizationCalls()) func (mock *Interface) DeviceGetEncoderUtilizationCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetEncoderUtilization.RLock() calls = mock.calls.DeviceGetEncoderUtilization mock.lockDeviceGetEncoderUtilization.RUnlock() return calls } // DeviceGetEnforcedPowerLimit calls DeviceGetEnforcedPowerLimitFunc. func (mock *Interface) DeviceGetEnforcedPowerLimit(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetEnforcedPowerLimitFunc == nil { panic("Interface.DeviceGetEnforcedPowerLimitFunc: method is nil but Interface.DeviceGetEnforcedPowerLimit was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetEnforcedPowerLimit.Lock() mock.calls.DeviceGetEnforcedPowerLimit = append(mock.calls.DeviceGetEnforcedPowerLimit, callInfo) mock.lockDeviceGetEnforcedPowerLimit.Unlock() return mock.DeviceGetEnforcedPowerLimitFunc(device) } // DeviceGetEnforcedPowerLimitCalls gets all the calls that were made to DeviceGetEnforcedPowerLimit. // Check the length with: // // len(mockedInterface.DeviceGetEnforcedPowerLimitCalls()) func (mock *Interface) DeviceGetEnforcedPowerLimitCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetEnforcedPowerLimit.RLock() calls = mock.calls.DeviceGetEnforcedPowerLimit mock.lockDeviceGetEnforcedPowerLimit.RUnlock() return calls } // DeviceGetFBCSessions calls DeviceGetFBCSessionsFunc. func (mock *Interface) DeviceGetFBCSessions(device nvml.Device) ([]nvml.FBCSessionInfo, nvml.Return) { if mock.DeviceGetFBCSessionsFunc == nil { panic("Interface.DeviceGetFBCSessionsFunc: method is nil but Interface.DeviceGetFBCSessions was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetFBCSessions.Lock() mock.calls.DeviceGetFBCSessions = append(mock.calls.DeviceGetFBCSessions, callInfo) mock.lockDeviceGetFBCSessions.Unlock() return mock.DeviceGetFBCSessionsFunc(device) } // DeviceGetFBCSessionsCalls gets all the calls that were made to DeviceGetFBCSessions. // Check the length with: // // len(mockedInterface.DeviceGetFBCSessionsCalls()) func (mock *Interface) DeviceGetFBCSessionsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetFBCSessions.RLock() calls = mock.calls.DeviceGetFBCSessions mock.lockDeviceGetFBCSessions.RUnlock() return calls } // DeviceGetFBCStats calls DeviceGetFBCStatsFunc. func (mock *Interface) DeviceGetFBCStats(device nvml.Device) (nvml.FBCStats, nvml.Return) { if mock.DeviceGetFBCStatsFunc == nil { panic("Interface.DeviceGetFBCStatsFunc: method is nil but Interface.DeviceGetFBCStats was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetFBCStats.Lock() mock.calls.DeviceGetFBCStats = append(mock.calls.DeviceGetFBCStats, callInfo) mock.lockDeviceGetFBCStats.Unlock() return mock.DeviceGetFBCStatsFunc(device) } // DeviceGetFBCStatsCalls gets all the calls that were made to DeviceGetFBCStats. // Check the length with: // // len(mockedInterface.DeviceGetFBCStatsCalls()) func (mock *Interface) DeviceGetFBCStatsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetFBCStats.RLock() calls = mock.calls.DeviceGetFBCStats mock.lockDeviceGetFBCStats.RUnlock() return calls } // DeviceGetFanControlPolicy_v2 calls DeviceGetFanControlPolicy_v2Func. func (mock *Interface) DeviceGetFanControlPolicy_v2(device nvml.Device, n int) (nvml.FanControlPolicy, nvml.Return) { if mock.DeviceGetFanControlPolicy_v2Func == nil { panic("Interface.DeviceGetFanControlPolicy_v2Func: method is nil but Interface.DeviceGetFanControlPolicy_v2 was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetFanControlPolicy_v2.Lock() mock.calls.DeviceGetFanControlPolicy_v2 = append(mock.calls.DeviceGetFanControlPolicy_v2, callInfo) mock.lockDeviceGetFanControlPolicy_v2.Unlock() return mock.DeviceGetFanControlPolicy_v2Func(device, n) } // DeviceGetFanControlPolicy_v2Calls gets all the calls that were made to DeviceGetFanControlPolicy_v2. // Check the length with: // // len(mockedInterface.DeviceGetFanControlPolicy_v2Calls()) func (mock *Interface) DeviceGetFanControlPolicy_v2Calls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetFanControlPolicy_v2.RLock() calls = mock.calls.DeviceGetFanControlPolicy_v2 mock.lockDeviceGetFanControlPolicy_v2.RUnlock() return calls } // DeviceGetFanSpeed calls DeviceGetFanSpeedFunc. func (mock *Interface) DeviceGetFanSpeed(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetFanSpeedFunc == nil { panic("Interface.DeviceGetFanSpeedFunc: method is nil but Interface.DeviceGetFanSpeed was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetFanSpeed.Lock() mock.calls.DeviceGetFanSpeed = append(mock.calls.DeviceGetFanSpeed, callInfo) mock.lockDeviceGetFanSpeed.Unlock() return mock.DeviceGetFanSpeedFunc(device) } // DeviceGetFanSpeedCalls gets all the calls that were made to DeviceGetFanSpeed. // Check the length with: // // len(mockedInterface.DeviceGetFanSpeedCalls()) func (mock *Interface) DeviceGetFanSpeedCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetFanSpeed.RLock() calls = mock.calls.DeviceGetFanSpeed mock.lockDeviceGetFanSpeed.RUnlock() return calls } // DeviceGetFanSpeedRPM calls DeviceGetFanSpeedRPMFunc. func (mock *Interface) DeviceGetFanSpeedRPM(device nvml.Device) (nvml.FanSpeedInfo, nvml.Return) { if mock.DeviceGetFanSpeedRPMFunc == nil { panic("Interface.DeviceGetFanSpeedRPMFunc: method is nil but Interface.DeviceGetFanSpeedRPM was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetFanSpeedRPM.Lock() mock.calls.DeviceGetFanSpeedRPM = append(mock.calls.DeviceGetFanSpeedRPM, callInfo) mock.lockDeviceGetFanSpeedRPM.Unlock() return mock.DeviceGetFanSpeedRPMFunc(device) } // DeviceGetFanSpeedRPMCalls gets all the calls that were made to DeviceGetFanSpeedRPM. // Check the length with: // // len(mockedInterface.DeviceGetFanSpeedRPMCalls()) func (mock *Interface) DeviceGetFanSpeedRPMCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetFanSpeedRPM.RLock() calls = mock.calls.DeviceGetFanSpeedRPM mock.lockDeviceGetFanSpeedRPM.RUnlock() return calls } // DeviceGetFanSpeed_v2 calls DeviceGetFanSpeed_v2Func. func (mock *Interface) DeviceGetFanSpeed_v2(device nvml.Device, n int) (uint32, nvml.Return) { if mock.DeviceGetFanSpeed_v2Func == nil { panic("Interface.DeviceGetFanSpeed_v2Func: method is nil but Interface.DeviceGetFanSpeed_v2 was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetFanSpeed_v2.Lock() mock.calls.DeviceGetFanSpeed_v2 = append(mock.calls.DeviceGetFanSpeed_v2, callInfo) mock.lockDeviceGetFanSpeed_v2.Unlock() return mock.DeviceGetFanSpeed_v2Func(device, n) } // DeviceGetFanSpeed_v2Calls gets all the calls that were made to DeviceGetFanSpeed_v2. // Check the length with: // // len(mockedInterface.DeviceGetFanSpeed_v2Calls()) func (mock *Interface) DeviceGetFanSpeed_v2Calls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetFanSpeed_v2.RLock() calls = mock.calls.DeviceGetFanSpeed_v2 mock.lockDeviceGetFanSpeed_v2.RUnlock() return calls } // DeviceGetFieldValues calls DeviceGetFieldValuesFunc. func (mock *Interface) DeviceGetFieldValues(device nvml.Device, fieldValues []nvml.FieldValue) nvml.Return { if mock.DeviceGetFieldValuesFunc == nil { panic("Interface.DeviceGetFieldValuesFunc: method is nil but Interface.DeviceGetFieldValues was just called") } callInfo := struct { Device nvml.Device FieldValues []nvml.FieldValue }{ Device: device, FieldValues: fieldValues, } mock.lockDeviceGetFieldValues.Lock() mock.calls.DeviceGetFieldValues = append(mock.calls.DeviceGetFieldValues, callInfo) mock.lockDeviceGetFieldValues.Unlock() return mock.DeviceGetFieldValuesFunc(device, fieldValues) } // DeviceGetFieldValuesCalls gets all the calls that were made to DeviceGetFieldValues. // Check the length with: // // len(mockedInterface.DeviceGetFieldValuesCalls()) func (mock *Interface) DeviceGetFieldValuesCalls() []struct { Device nvml.Device FieldValues []nvml.FieldValue } { var calls []struct { Device nvml.Device FieldValues []nvml.FieldValue } mock.lockDeviceGetFieldValues.RLock() calls = mock.calls.DeviceGetFieldValues mock.lockDeviceGetFieldValues.RUnlock() return calls } // DeviceGetGpcClkMinMaxVfOffset calls DeviceGetGpcClkMinMaxVfOffsetFunc. func (mock *Interface) DeviceGetGpcClkMinMaxVfOffset(device nvml.Device) (int, int, nvml.Return) { if mock.DeviceGetGpcClkMinMaxVfOffsetFunc == nil { panic("Interface.DeviceGetGpcClkMinMaxVfOffsetFunc: method is nil but Interface.DeviceGetGpcClkMinMaxVfOffset was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGpcClkMinMaxVfOffset.Lock() mock.calls.DeviceGetGpcClkMinMaxVfOffset = append(mock.calls.DeviceGetGpcClkMinMaxVfOffset, callInfo) mock.lockDeviceGetGpcClkMinMaxVfOffset.Unlock() return mock.DeviceGetGpcClkMinMaxVfOffsetFunc(device) } // DeviceGetGpcClkMinMaxVfOffsetCalls gets all the calls that were made to DeviceGetGpcClkMinMaxVfOffset. // Check the length with: // // len(mockedInterface.DeviceGetGpcClkMinMaxVfOffsetCalls()) func (mock *Interface) DeviceGetGpcClkMinMaxVfOffsetCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGpcClkMinMaxVfOffset.RLock() calls = mock.calls.DeviceGetGpcClkMinMaxVfOffset mock.lockDeviceGetGpcClkMinMaxVfOffset.RUnlock() return calls } // DeviceGetGpcClkVfOffset calls DeviceGetGpcClkVfOffsetFunc. func (mock *Interface) DeviceGetGpcClkVfOffset(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetGpcClkVfOffsetFunc == nil { panic("Interface.DeviceGetGpcClkVfOffsetFunc: method is nil but Interface.DeviceGetGpcClkVfOffset was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGpcClkVfOffset.Lock() mock.calls.DeviceGetGpcClkVfOffset = append(mock.calls.DeviceGetGpcClkVfOffset, callInfo) mock.lockDeviceGetGpcClkVfOffset.Unlock() return mock.DeviceGetGpcClkVfOffsetFunc(device) } // DeviceGetGpcClkVfOffsetCalls gets all the calls that were made to DeviceGetGpcClkVfOffset. // Check the length with: // // len(mockedInterface.DeviceGetGpcClkVfOffsetCalls()) func (mock *Interface) DeviceGetGpcClkVfOffsetCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGpcClkVfOffset.RLock() calls = mock.calls.DeviceGetGpcClkVfOffset mock.lockDeviceGetGpcClkVfOffset.RUnlock() return calls } // DeviceGetGpuFabricInfo calls DeviceGetGpuFabricInfoFunc. func (mock *Interface) DeviceGetGpuFabricInfo(device nvml.Device) (nvml.GpuFabricInfo, nvml.Return) { if mock.DeviceGetGpuFabricInfoFunc == nil { panic("Interface.DeviceGetGpuFabricInfoFunc: method is nil but Interface.DeviceGetGpuFabricInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGpuFabricInfo.Lock() mock.calls.DeviceGetGpuFabricInfo = append(mock.calls.DeviceGetGpuFabricInfo, callInfo) mock.lockDeviceGetGpuFabricInfo.Unlock() return mock.DeviceGetGpuFabricInfoFunc(device) } // DeviceGetGpuFabricInfoCalls gets all the calls that were made to DeviceGetGpuFabricInfo. // Check the length with: // // len(mockedInterface.DeviceGetGpuFabricInfoCalls()) func (mock *Interface) DeviceGetGpuFabricInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGpuFabricInfo.RLock() calls = mock.calls.DeviceGetGpuFabricInfo mock.lockDeviceGetGpuFabricInfo.RUnlock() return calls } // DeviceGetGpuFabricInfoV calls DeviceGetGpuFabricInfoVFunc. func (mock *Interface) DeviceGetGpuFabricInfoV(device nvml.Device) nvml.GpuFabricInfoHandler { if mock.DeviceGetGpuFabricInfoVFunc == nil { panic("Interface.DeviceGetGpuFabricInfoVFunc: method is nil but Interface.DeviceGetGpuFabricInfoV was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGpuFabricInfoV.Lock() mock.calls.DeviceGetGpuFabricInfoV = append(mock.calls.DeviceGetGpuFabricInfoV, callInfo) mock.lockDeviceGetGpuFabricInfoV.Unlock() return mock.DeviceGetGpuFabricInfoVFunc(device) } // DeviceGetGpuFabricInfoVCalls gets all the calls that were made to DeviceGetGpuFabricInfoV. // Check the length with: // // len(mockedInterface.DeviceGetGpuFabricInfoVCalls()) func (mock *Interface) DeviceGetGpuFabricInfoVCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGpuFabricInfoV.RLock() calls = mock.calls.DeviceGetGpuFabricInfoV mock.lockDeviceGetGpuFabricInfoV.RUnlock() return calls } // DeviceGetGpuInstanceById calls DeviceGetGpuInstanceByIdFunc. func (mock *Interface) DeviceGetGpuInstanceById(device nvml.Device, n int) (nvml.GpuInstance, nvml.Return) { if mock.DeviceGetGpuInstanceByIdFunc == nil { panic("Interface.DeviceGetGpuInstanceByIdFunc: method is nil but Interface.DeviceGetGpuInstanceById was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetGpuInstanceById.Lock() mock.calls.DeviceGetGpuInstanceById = append(mock.calls.DeviceGetGpuInstanceById, callInfo) mock.lockDeviceGetGpuInstanceById.Unlock() return mock.DeviceGetGpuInstanceByIdFunc(device, n) } // DeviceGetGpuInstanceByIdCalls gets all the calls that were made to DeviceGetGpuInstanceById. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstanceByIdCalls()) func (mock *Interface) DeviceGetGpuInstanceByIdCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetGpuInstanceById.RLock() calls = mock.calls.DeviceGetGpuInstanceById mock.lockDeviceGetGpuInstanceById.RUnlock() return calls } // DeviceGetGpuInstanceId calls DeviceGetGpuInstanceIdFunc. func (mock *Interface) DeviceGetGpuInstanceId(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetGpuInstanceIdFunc == nil { panic("Interface.DeviceGetGpuInstanceIdFunc: method is nil but Interface.DeviceGetGpuInstanceId was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGpuInstanceId.Lock() mock.calls.DeviceGetGpuInstanceId = append(mock.calls.DeviceGetGpuInstanceId, callInfo) mock.lockDeviceGetGpuInstanceId.Unlock() return mock.DeviceGetGpuInstanceIdFunc(device) } // DeviceGetGpuInstanceIdCalls gets all the calls that were made to DeviceGetGpuInstanceId. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstanceIdCalls()) func (mock *Interface) DeviceGetGpuInstanceIdCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGpuInstanceId.RLock() calls = mock.calls.DeviceGetGpuInstanceId mock.lockDeviceGetGpuInstanceId.RUnlock() return calls } // DeviceGetGpuInstancePossiblePlacements calls DeviceGetGpuInstancePossiblePlacementsFunc. func (mock *Interface) DeviceGetGpuInstancePossiblePlacements(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstancePlacement, nvml.Return) { if mock.DeviceGetGpuInstancePossiblePlacementsFunc == nil { panic("Interface.DeviceGetGpuInstancePossiblePlacementsFunc: method is nil but Interface.DeviceGetGpuInstancePossiblePlacements was just called") } callInfo := struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ Device: device, GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockDeviceGetGpuInstancePossiblePlacements.Lock() mock.calls.DeviceGetGpuInstancePossiblePlacements = append(mock.calls.DeviceGetGpuInstancePossiblePlacements, callInfo) mock.lockDeviceGetGpuInstancePossiblePlacements.Unlock() return mock.DeviceGetGpuInstancePossiblePlacementsFunc(device, gpuInstanceProfileInfo) } // DeviceGetGpuInstancePossiblePlacementsCalls gets all the calls that were made to DeviceGetGpuInstancePossiblePlacements. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstancePossiblePlacementsCalls()) func (mock *Interface) DeviceGetGpuInstancePossiblePlacementsCalls() []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockDeviceGetGpuInstancePossiblePlacements.RLock() calls = mock.calls.DeviceGetGpuInstancePossiblePlacements mock.lockDeviceGetGpuInstancePossiblePlacements.RUnlock() return calls } // DeviceGetGpuInstanceProfileInfo calls DeviceGetGpuInstanceProfileInfoFunc. func (mock *Interface) DeviceGetGpuInstanceProfileInfo(device nvml.Device, n int) (nvml.GpuInstanceProfileInfo, nvml.Return) { if mock.DeviceGetGpuInstanceProfileInfoFunc == nil { panic("Interface.DeviceGetGpuInstanceProfileInfoFunc: method is nil but Interface.DeviceGetGpuInstanceProfileInfo was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetGpuInstanceProfileInfo.Lock() mock.calls.DeviceGetGpuInstanceProfileInfo = append(mock.calls.DeviceGetGpuInstanceProfileInfo, callInfo) mock.lockDeviceGetGpuInstanceProfileInfo.Unlock() return mock.DeviceGetGpuInstanceProfileInfoFunc(device, n) } // DeviceGetGpuInstanceProfileInfoCalls gets all the calls that were made to DeviceGetGpuInstanceProfileInfo. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstanceProfileInfoCalls()) func (mock *Interface) DeviceGetGpuInstanceProfileInfoCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetGpuInstanceProfileInfo.RLock() calls = mock.calls.DeviceGetGpuInstanceProfileInfo mock.lockDeviceGetGpuInstanceProfileInfo.RUnlock() return calls } // DeviceGetGpuInstanceProfileInfoByIdV calls DeviceGetGpuInstanceProfileInfoByIdVFunc. func (mock *Interface) DeviceGetGpuInstanceProfileInfoByIdV(device nvml.Device, n int) nvml.GpuInstanceProfileInfoByIdHandler { if mock.DeviceGetGpuInstanceProfileInfoByIdVFunc == nil { panic("Interface.DeviceGetGpuInstanceProfileInfoByIdVFunc: method is nil but Interface.DeviceGetGpuInstanceProfileInfoByIdV was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetGpuInstanceProfileInfoByIdV.Lock() mock.calls.DeviceGetGpuInstanceProfileInfoByIdV = append(mock.calls.DeviceGetGpuInstanceProfileInfoByIdV, callInfo) mock.lockDeviceGetGpuInstanceProfileInfoByIdV.Unlock() return mock.DeviceGetGpuInstanceProfileInfoByIdVFunc(device, n) } // DeviceGetGpuInstanceProfileInfoByIdVCalls gets all the calls that were made to DeviceGetGpuInstanceProfileInfoByIdV. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstanceProfileInfoByIdVCalls()) func (mock *Interface) DeviceGetGpuInstanceProfileInfoByIdVCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetGpuInstanceProfileInfoByIdV.RLock() calls = mock.calls.DeviceGetGpuInstanceProfileInfoByIdV mock.lockDeviceGetGpuInstanceProfileInfoByIdV.RUnlock() return calls } // DeviceGetGpuInstanceProfileInfoV calls DeviceGetGpuInstanceProfileInfoVFunc. func (mock *Interface) DeviceGetGpuInstanceProfileInfoV(device nvml.Device, n int) nvml.GpuInstanceProfileInfoHandler { if mock.DeviceGetGpuInstanceProfileInfoVFunc == nil { panic("Interface.DeviceGetGpuInstanceProfileInfoVFunc: method is nil but Interface.DeviceGetGpuInstanceProfileInfoV was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetGpuInstanceProfileInfoV.Lock() mock.calls.DeviceGetGpuInstanceProfileInfoV = append(mock.calls.DeviceGetGpuInstanceProfileInfoV, callInfo) mock.lockDeviceGetGpuInstanceProfileInfoV.Unlock() return mock.DeviceGetGpuInstanceProfileInfoVFunc(device, n) } // DeviceGetGpuInstanceProfileInfoVCalls gets all the calls that were made to DeviceGetGpuInstanceProfileInfoV. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstanceProfileInfoVCalls()) func (mock *Interface) DeviceGetGpuInstanceProfileInfoVCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetGpuInstanceProfileInfoV.RLock() calls = mock.calls.DeviceGetGpuInstanceProfileInfoV mock.lockDeviceGetGpuInstanceProfileInfoV.RUnlock() return calls } // DeviceGetGpuInstanceRemainingCapacity calls DeviceGetGpuInstanceRemainingCapacityFunc. func (mock *Interface) DeviceGetGpuInstanceRemainingCapacity(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) (int, nvml.Return) { if mock.DeviceGetGpuInstanceRemainingCapacityFunc == nil { panic("Interface.DeviceGetGpuInstanceRemainingCapacityFunc: method is nil but Interface.DeviceGetGpuInstanceRemainingCapacity was just called") } callInfo := struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ Device: device, GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockDeviceGetGpuInstanceRemainingCapacity.Lock() mock.calls.DeviceGetGpuInstanceRemainingCapacity = append(mock.calls.DeviceGetGpuInstanceRemainingCapacity, callInfo) mock.lockDeviceGetGpuInstanceRemainingCapacity.Unlock() return mock.DeviceGetGpuInstanceRemainingCapacityFunc(device, gpuInstanceProfileInfo) } // DeviceGetGpuInstanceRemainingCapacityCalls gets all the calls that were made to DeviceGetGpuInstanceRemainingCapacity. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstanceRemainingCapacityCalls()) func (mock *Interface) DeviceGetGpuInstanceRemainingCapacityCalls() []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockDeviceGetGpuInstanceRemainingCapacity.RLock() calls = mock.calls.DeviceGetGpuInstanceRemainingCapacity mock.lockDeviceGetGpuInstanceRemainingCapacity.RUnlock() return calls } // DeviceGetGpuInstances calls DeviceGetGpuInstancesFunc. func (mock *Interface) DeviceGetGpuInstances(device nvml.Device, gpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo) ([]nvml.GpuInstance, nvml.Return) { if mock.DeviceGetGpuInstancesFunc == nil { panic("Interface.DeviceGetGpuInstancesFunc: method is nil but Interface.DeviceGetGpuInstances was just called") } callInfo := struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo }{ Device: device, GpuInstanceProfileInfo: gpuInstanceProfileInfo, } mock.lockDeviceGetGpuInstances.Lock() mock.calls.DeviceGetGpuInstances = append(mock.calls.DeviceGetGpuInstances, callInfo) mock.lockDeviceGetGpuInstances.Unlock() return mock.DeviceGetGpuInstancesFunc(device, gpuInstanceProfileInfo) } // DeviceGetGpuInstancesCalls gets all the calls that were made to DeviceGetGpuInstances. // Check the length with: // // len(mockedInterface.DeviceGetGpuInstancesCalls()) func (mock *Interface) DeviceGetGpuInstancesCalls() []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } { var calls []struct { Device nvml.Device GpuInstanceProfileInfo *nvml.GpuInstanceProfileInfo } mock.lockDeviceGetGpuInstances.RLock() calls = mock.calls.DeviceGetGpuInstances mock.lockDeviceGetGpuInstances.RUnlock() return calls } // DeviceGetGpuMaxPcieLinkGeneration calls DeviceGetGpuMaxPcieLinkGenerationFunc. func (mock *Interface) DeviceGetGpuMaxPcieLinkGeneration(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetGpuMaxPcieLinkGenerationFunc == nil { panic("Interface.DeviceGetGpuMaxPcieLinkGenerationFunc: method is nil but Interface.DeviceGetGpuMaxPcieLinkGeneration was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGpuMaxPcieLinkGeneration.Lock() mock.calls.DeviceGetGpuMaxPcieLinkGeneration = append(mock.calls.DeviceGetGpuMaxPcieLinkGeneration, callInfo) mock.lockDeviceGetGpuMaxPcieLinkGeneration.Unlock() return mock.DeviceGetGpuMaxPcieLinkGenerationFunc(device) } // DeviceGetGpuMaxPcieLinkGenerationCalls gets all the calls that were made to DeviceGetGpuMaxPcieLinkGeneration. // Check the length with: // // len(mockedInterface.DeviceGetGpuMaxPcieLinkGenerationCalls()) func (mock *Interface) DeviceGetGpuMaxPcieLinkGenerationCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGpuMaxPcieLinkGeneration.RLock() calls = mock.calls.DeviceGetGpuMaxPcieLinkGeneration mock.lockDeviceGetGpuMaxPcieLinkGeneration.RUnlock() return calls } // DeviceGetGpuOperationMode calls DeviceGetGpuOperationModeFunc. func (mock *Interface) DeviceGetGpuOperationMode(device nvml.Device) (nvml.GpuOperationMode, nvml.GpuOperationMode, nvml.Return) { if mock.DeviceGetGpuOperationModeFunc == nil { panic("Interface.DeviceGetGpuOperationModeFunc: method is nil but Interface.DeviceGetGpuOperationMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGpuOperationMode.Lock() mock.calls.DeviceGetGpuOperationMode = append(mock.calls.DeviceGetGpuOperationMode, callInfo) mock.lockDeviceGetGpuOperationMode.Unlock() return mock.DeviceGetGpuOperationModeFunc(device) } // DeviceGetGpuOperationModeCalls gets all the calls that were made to DeviceGetGpuOperationMode. // Check the length with: // // len(mockedInterface.DeviceGetGpuOperationModeCalls()) func (mock *Interface) DeviceGetGpuOperationModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGpuOperationMode.RLock() calls = mock.calls.DeviceGetGpuOperationMode mock.lockDeviceGetGpuOperationMode.RUnlock() return calls } // DeviceGetGraphicsRunningProcesses calls DeviceGetGraphicsRunningProcessesFunc. func (mock *Interface) DeviceGetGraphicsRunningProcesses(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) { if mock.DeviceGetGraphicsRunningProcessesFunc == nil { panic("Interface.DeviceGetGraphicsRunningProcessesFunc: method is nil but Interface.DeviceGetGraphicsRunningProcesses was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGraphicsRunningProcesses.Lock() mock.calls.DeviceGetGraphicsRunningProcesses = append(mock.calls.DeviceGetGraphicsRunningProcesses, callInfo) mock.lockDeviceGetGraphicsRunningProcesses.Unlock() return mock.DeviceGetGraphicsRunningProcessesFunc(device) } // DeviceGetGraphicsRunningProcessesCalls gets all the calls that were made to DeviceGetGraphicsRunningProcesses. // Check the length with: // // len(mockedInterface.DeviceGetGraphicsRunningProcessesCalls()) func (mock *Interface) DeviceGetGraphicsRunningProcessesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGraphicsRunningProcesses.RLock() calls = mock.calls.DeviceGetGraphicsRunningProcesses mock.lockDeviceGetGraphicsRunningProcesses.RUnlock() return calls } // DeviceGetGridLicensableFeatures calls DeviceGetGridLicensableFeaturesFunc. func (mock *Interface) DeviceGetGridLicensableFeatures(device nvml.Device) (nvml.GridLicensableFeatures, nvml.Return) { if mock.DeviceGetGridLicensableFeaturesFunc == nil { panic("Interface.DeviceGetGridLicensableFeaturesFunc: method is nil but Interface.DeviceGetGridLicensableFeatures was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGridLicensableFeatures.Lock() mock.calls.DeviceGetGridLicensableFeatures = append(mock.calls.DeviceGetGridLicensableFeatures, callInfo) mock.lockDeviceGetGridLicensableFeatures.Unlock() return mock.DeviceGetGridLicensableFeaturesFunc(device) } // DeviceGetGridLicensableFeaturesCalls gets all the calls that were made to DeviceGetGridLicensableFeatures. // Check the length with: // // len(mockedInterface.DeviceGetGridLicensableFeaturesCalls()) func (mock *Interface) DeviceGetGridLicensableFeaturesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGridLicensableFeatures.RLock() calls = mock.calls.DeviceGetGridLicensableFeatures mock.lockDeviceGetGridLicensableFeatures.RUnlock() return calls } // DeviceGetGspFirmwareMode calls DeviceGetGspFirmwareModeFunc. func (mock *Interface) DeviceGetGspFirmwareMode(device nvml.Device) (bool, bool, nvml.Return) { if mock.DeviceGetGspFirmwareModeFunc == nil { panic("Interface.DeviceGetGspFirmwareModeFunc: method is nil but Interface.DeviceGetGspFirmwareMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGspFirmwareMode.Lock() mock.calls.DeviceGetGspFirmwareMode = append(mock.calls.DeviceGetGspFirmwareMode, callInfo) mock.lockDeviceGetGspFirmwareMode.Unlock() return mock.DeviceGetGspFirmwareModeFunc(device) } // DeviceGetGspFirmwareModeCalls gets all the calls that were made to DeviceGetGspFirmwareMode. // Check the length with: // // len(mockedInterface.DeviceGetGspFirmwareModeCalls()) func (mock *Interface) DeviceGetGspFirmwareModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGspFirmwareMode.RLock() calls = mock.calls.DeviceGetGspFirmwareMode mock.lockDeviceGetGspFirmwareMode.RUnlock() return calls } // DeviceGetGspFirmwareVersion calls DeviceGetGspFirmwareVersionFunc. func (mock *Interface) DeviceGetGspFirmwareVersion(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetGspFirmwareVersionFunc == nil { panic("Interface.DeviceGetGspFirmwareVersionFunc: method is nil but Interface.DeviceGetGspFirmwareVersion was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetGspFirmwareVersion.Lock() mock.calls.DeviceGetGspFirmwareVersion = append(mock.calls.DeviceGetGspFirmwareVersion, callInfo) mock.lockDeviceGetGspFirmwareVersion.Unlock() return mock.DeviceGetGspFirmwareVersionFunc(device) } // DeviceGetGspFirmwareVersionCalls gets all the calls that were made to DeviceGetGspFirmwareVersion. // Check the length with: // // len(mockedInterface.DeviceGetGspFirmwareVersionCalls()) func (mock *Interface) DeviceGetGspFirmwareVersionCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetGspFirmwareVersion.RLock() calls = mock.calls.DeviceGetGspFirmwareVersion mock.lockDeviceGetGspFirmwareVersion.RUnlock() return calls } // DeviceGetHandleByIndex calls DeviceGetHandleByIndexFunc. func (mock *Interface) DeviceGetHandleByIndex(n int) (nvml.Device, nvml.Return) { if mock.DeviceGetHandleByIndexFunc == nil { panic("Interface.DeviceGetHandleByIndexFunc: method is nil but Interface.DeviceGetHandleByIndex was just called") } callInfo := struct { N int }{ N: n, } mock.lockDeviceGetHandleByIndex.Lock() mock.calls.DeviceGetHandleByIndex = append(mock.calls.DeviceGetHandleByIndex, callInfo) mock.lockDeviceGetHandleByIndex.Unlock() return mock.DeviceGetHandleByIndexFunc(n) } // DeviceGetHandleByIndexCalls gets all the calls that were made to DeviceGetHandleByIndex. // Check the length with: // // len(mockedInterface.DeviceGetHandleByIndexCalls()) func (mock *Interface) DeviceGetHandleByIndexCalls() []struct { N int } { var calls []struct { N int } mock.lockDeviceGetHandleByIndex.RLock() calls = mock.calls.DeviceGetHandleByIndex mock.lockDeviceGetHandleByIndex.RUnlock() return calls } // DeviceGetHandleByPciBusId calls DeviceGetHandleByPciBusIdFunc. func (mock *Interface) DeviceGetHandleByPciBusId(s string) (nvml.Device, nvml.Return) { if mock.DeviceGetHandleByPciBusIdFunc == nil { panic("Interface.DeviceGetHandleByPciBusIdFunc: method is nil but Interface.DeviceGetHandleByPciBusId was just called") } callInfo := struct { S string }{ S: s, } mock.lockDeviceGetHandleByPciBusId.Lock() mock.calls.DeviceGetHandleByPciBusId = append(mock.calls.DeviceGetHandleByPciBusId, callInfo) mock.lockDeviceGetHandleByPciBusId.Unlock() return mock.DeviceGetHandleByPciBusIdFunc(s) } // DeviceGetHandleByPciBusIdCalls gets all the calls that were made to DeviceGetHandleByPciBusId. // Check the length with: // // len(mockedInterface.DeviceGetHandleByPciBusIdCalls()) func (mock *Interface) DeviceGetHandleByPciBusIdCalls() []struct { S string } { var calls []struct { S string } mock.lockDeviceGetHandleByPciBusId.RLock() calls = mock.calls.DeviceGetHandleByPciBusId mock.lockDeviceGetHandleByPciBusId.RUnlock() return calls } // DeviceGetHandleBySerial calls DeviceGetHandleBySerialFunc. func (mock *Interface) DeviceGetHandleBySerial(s string) (nvml.Device, nvml.Return) { if mock.DeviceGetHandleBySerialFunc == nil { panic("Interface.DeviceGetHandleBySerialFunc: method is nil but Interface.DeviceGetHandleBySerial was just called") } callInfo := struct { S string }{ S: s, } mock.lockDeviceGetHandleBySerial.Lock() mock.calls.DeviceGetHandleBySerial = append(mock.calls.DeviceGetHandleBySerial, callInfo) mock.lockDeviceGetHandleBySerial.Unlock() return mock.DeviceGetHandleBySerialFunc(s) } // DeviceGetHandleBySerialCalls gets all the calls that were made to DeviceGetHandleBySerial. // Check the length with: // // len(mockedInterface.DeviceGetHandleBySerialCalls()) func (mock *Interface) DeviceGetHandleBySerialCalls() []struct { S string } { var calls []struct { S string } mock.lockDeviceGetHandleBySerial.RLock() calls = mock.calls.DeviceGetHandleBySerial mock.lockDeviceGetHandleBySerial.RUnlock() return calls } // DeviceGetHandleByUUID calls DeviceGetHandleByUUIDFunc. func (mock *Interface) DeviceGetHandleByUUID(s string) (nvml.Device, nvml.Return) { if mock.DeviceGetHandleByUUIDFunc == nil { panic("Interface.DeviceGetHandleByUUIDFunc: method is nil but Interface.DeviceGetHandleByUUID was just called") } callInfo := struct { S string }{ S: s, } mock.lockDeviceGetHandleByUUID.Lock() mock.calls.DeviceGetHandleByUUID = append(mock.calls.DeviceGetHandleByUUID, callInfo) mock.lockDeviceGetHandleByUUID.Unlock() return mock.DeviceGetHandleByUUIDFunc(s) } // DeviceGetHandleByUUIDCalls gets all the calls that were made to DeviceGetHandleByUUID. // Check the length with: // // len(mockedInterface.DeviceGetHandleByUUIDCalls()) func (mock *Interface) DeviceGetHandleByUUIDCalls() []struct { S string } { var calls []struct { S string } mock.lockDeviceGetHandleByUUID.RLock() calls = mock.calls.DeviceGetHandleByUUID mock.lockDeviceGetHandleByUUID.RUnlock() return calls } // DeviceGetHandleByUUIDV calls DeviceGetHandleByUUIDVFunc. func (mock *Interface) DeviceGetHandleByUUIDV(uUID *nvml.UUID) (nvml.Device, nvml.Return) { if mock.DeviceGetHandleByUUIDVFunc == nil { panic("Interface.DeviceGetHandleByUUIDVFunc: method is nil but Interface.DeviceGetHandleByUUIDV was just called") } callInfo := struct { UUID *nvml.UUID }{ UUID: uUID, } mock.lockDeviceGetHandleByUUIDV.Lock() mock.calls.DeviceGetHandleByUUIDV = append(mock.calls.DeviceGetHandleByUUIDV, callInfo) mock.lockDeviceGetHandleByUUIDV.Unlock() return mock.DeviceGetHandleByUUIDVFunc(uUID) } // DeviceGetHandleByUUIDVCalls gets all the calls that were made to DeviceGetHandleByUUIDV. // Check the length with: // // len(mockedInterface.DeviceGetHandleByUUIDVCalls()) func (mock *Interface) DeviceGetHandleByUUIDVCalls() []struct { UUID *nvml.UUID } { var calls []struct { UUID *nvml.UUID } mock.lockDeviceGetHandleByUUIDV.RLock() calls = mock.calls.DeviceGetHandleByUUIDV mock.lockDeviceGetHandleByUUIDV.RUnlock() return calls } // DeviceGetHostVgpuMode calls DeviceGetHostVgpuModeFunc. func (mock *Interface) DeviceGetHostVgpuMode(device nvml.Device) (nvml.HostVgpuMode, nvml.Return) { if mock.DeviceGetHostVgpuModeFunc == nil { panic("Interface.DeviceGetHostVgpuModeFunc: method is nil but Interface.DeviceGetHostVgpuMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetHostVgpuMode.Lock() mock.calls.DeviceGetHostVgpuMode = append(mock.calls.DeviceGetHostVgpuMode, callInfo) mock.lockDeviceGetHostVgpuMode.Unlock() return mock.DeviceGetHostVgpuModeFunc(device) } // DeviceGetHostVgpuModeCalls gets all the calls that were made to DeviceGetHostVgpuMode. // Check the length with: // // len(mockedInterface.DeviceGetHostVgpuModeCalls()) func (mock *Interface) DeviceGetHostVgpuModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetHostVgpuMode.RLock() calls = mock.calls.DeviceGetHostVgpuMode mock.lockDeviceGetHostVgpuMode.RUnlock() return calls } // DeviceGetIndex calls DeviceGetIndexFunc. func (mock *Interface) DeviceGetIndex(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetIndexFunc == nil { panic("Interface.DeviceGetIndexFunc: method is nil but Interface.DeviceGetIndex was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetIndex.Lock() mock.calls.DeviceGetIndex = append(mock.calls.DeviceGetIndex, callInfo) mock.lockDeviceGetIndex.Unlock() return mock.DeviceGetIndexFunc(device) } // DeviceGetIndexCalls gets all the calls that were made to DeviceGetIndex. // Check the length with: // // len(mockedInterface.DeviceGetIndexCalls()) func (mock *Interface) DeviceGetIndexCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetIndex.RLock() calls = mock.calls.DeviceGetIndex mock.lockDeviceGetIndex.RUnlock() return calls } // DeviceGetInforomConfigurationChecksum calls DeviceGetInforomConfigurationChecksumFunc. func (mock *Interface) DeviceGetInforomConfigurationChecksum(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetInforomConfigurationChecksumFunc == nil { panic("Interface.DeviceGetInforomConfigurationChecksumFunc: method is nil but Interface.DeviceGetInforomConfigurationChecksum was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetInforomConfigurationChecksum.Lock() mock.calls.DeviceGetInforomConfigurationChecksum = append(mock.calls.DeviceGetInforomConfigurationChecksum, callInfo) mock.lockDeviceGetInforomConfigurationChecksum.Unlock() return mock.DeviceGetInforomConfigurationChecksumFunc(device) } // DeviceGetInforomConfigurationChecksumCalls gets all the calls that were made to DeviceGetInforomConfigurationChecksum. // Check the length with: // // len(mockedInterface.DeviceGetInforomConfigurationChecksumCalls()) func (mock *Interface) DeviceGetInforomConfigurationChecksumCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetInforomConfigurationChecksum.RLock() calls = mock.calls.DeviceGetInforomConfigurationChecksum mock.lockDeviceGetInforomConfigurationChecksum.RUnlock() return calls } // DeviceGetInforomImageVersion calls DeviceGetInforomImageVersionFunc. func (mock *Interface) DeviceGetInforomImageVersion(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetInforomImageVersionFunc == nil { panic("Interface.DeviceGetInforomImageVersionFunc: method is nil but Interface.DeviceGetInforomImageVersion was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetInforomImageVersion.Lock() mock.calls.DeviceGetInforomImageVersion = append(mock.calls.DeviceGetInforomImageVersion, callInfo) mock.lockDeviceGetInforomImageVersion.Unlock() return mock.DeviceGetInforomImageVersionFunc(device) } // DeviceGetInforomImageVersionCalls gets all the calls that were made to DeviceGetInforomImageVersion. // Check the length with: // // len(mockedInterface.DeviceGetInforomImageVersionCalls()) func (mock *Interface) DeviceGetInforomImageVersionCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetInforomImageVersion.RLock() calls = mock.calls.DeviceGetInforomImageVersion mock.lockDeviceGetInforomImageVersion.RUnlock() return calls } // DeviceGetInforomVersion calls DeviceGetInforomVersionFunc. func (mock *Interface) DeviceGetInforomVersion(device nvml.Device, inforomObject nvml.InforomObject) (string, nvml.Return) { if mock.DeviceGetInforomVersionFunc == nil { panic("Interface.DeviceGetInforomVersionFunc: method is nil but Interface.DeviceGetInforomVersion was just called") } callInfo := struct { Device nvml.Device InforomObject nvml.InforomObject }{ Device: device, InforomObject: inforomObject, } mock.lockDeviceGetInforomVersion.Lock() mock.calls.DeviceGetInforomVersion = append(mock.calls.DeviceGetInforomVersion, callInfo) mock.lockDeviceGetInforomVersion.Unlock() return mock.DeviceGetInforomVersionFunc(device, inforomObject) } // DeviceGetInforomVersionCalls gets all the calls that were made to DeviceGetInforomVersion. // Check the length with: // // len(mockedInterface.DeviceGetInforomVersionCalls()) func (mock *Interface) DeviceGetInforomVersionCalls() []struct { Device nvml.Device InforomObject nvml.InforomObject } { var calls []struct { Device nvml.Device InforomObject nvml.InforomObject } mock.lockDeviceGetInforomVersion.RLock() calls = mock.calls.DeviceGetInforomVersion mock.lockDeviceGetInforomVersion.RUnlock() return calls } // DeviceGetIrqNum calls DeviceGetIrqNumFunc. func (mock *Interface) DeviceGetIrqNum(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetIrqNumFunc == nil { panic("Interface.DeviceGetIrqNumFunc: method is nil but Interface.DeviceGetIrqNum was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetIrqNum.Lock() mock.calls.DeviceGetIrqNum = append(mock.calls.DeviceGetIrqNum, callInfo) mock.lockDeviceGetIrqNum.Unlock() return mock.DeviceGetIrqNumFunc(device) } // DeviceGetIrqNumCalls gets all the calls that were made to DeviceGetIrqNum. // Check the length with: // // len(mockedInterface.DeviceGetIrqNumCalls()) func (mock *Interface) DeviceGetIrqNumCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetIrqNum.RLock() calls = mock.calls.DeviceGetIrqNum mock.lockDeviceGetIrqNum.RUnlock() return calls } // DeviceGetJpgUtilization calls DeviceGetJpgUtilizationFunc. func (mock *Interface) DeviceGetJpgUtilization(device nvml.Device) (uint32, uint32, nvml.Return) { if mock.DeviceGetJpgUtilizationFunc == nil { panic("Interface.DeviceGetJpgUtilizationFunc: method is nil but Interface.DeviceGetJpgUtilization was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetJpgUtilization.Lock() mock.calls.DeviceGetJpgUtilization = append(mock.calls.DeviceGetJpgUtilization, callInfo) mock.lockDeviceGetJpgUtilization.Unlock() return mock.DeviceGetJpgUtilizationFunc(device) } // DeviceGetJpgUtilizationCalls gets all the calls that were made to DeviceGetJpgUtilization. // Check the length with: // // len(mockedInterface.DeviceGetJpgUtilizationCalls()) func (mock *Interface) DeviceGetJpgUtilizationCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetJpgUtilization.RLock() calls = mock.calls.DeviceGetJpgUtilization mock.lockDeviceGetJpgUtilization.RUnlock() return calls } // DeviceGetLastBBXFlushTime calls DeviceGetLastBBXFlushTimeFunc. func (mock *Interface) DeviceGetLastBBXFlushTime(device nvml.Device) (uint64, uint, nvml.Return) { if mock.DeviceGetLastBBXFlushTimeFunc == nil { panic("Interface.DeviceGetLastBBXFlushTimeFunc: method is nil but Interface.DeviceGetLastBBXFlushTime was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetLastBBXFlushTime.Lock() mock.calls.DeviceGetLastBBXFlushTime = append(mock.calls.DeviceGetLastBBXFlushTime, callInfo) mock.lockDeviceGetLastBBXFlushTime.Unlock() return mock.DeviceGetLastBBXFlushTimeFunc(device) } // DeviceGetLastBBXFlushTimeCalls gets all the calls that were made to DeviceGetLastBBXFlushTime. // Check the length with: // // len(mockedInterface.DeviceGetLastBBXFlushTimeCalls()) func (mock *Interface) DeviceGetLastBBXFlushTimeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetLastBBXFlushTime.RLock() calls = mock.calls.DeviceGetLastBBXFlushTime mock.lockDeviceGetLastBBXFlushTime.RUnlock() return calls } // DeviceGetMPSComputeRunningProcesses calls DeviceGetMPSComputeRunningProcessesFunc. func (mock *Interface) DeviceGetMPSComputeRunningProcesses(device nvml.Device) ([]nvml.ProcessInfo, nvml.Return) { if mock.DeviceGetMPSComputeRunningProcessesFunc == nil { panic("Interface.DeviceGetMPSComputeRunningProcessesFunc: method is nil but Interface.DeviceGetMPSComputeRunningProcesses was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMPSComputeRunningProcesses.Lock() mock.calls.DeviceGetMPSComputeRunningProcesses = append(mock.calls.DeviceGetMPSComputeRunningProcesses, callInfo) mock.lockDeviceGetMPSComputeRunningProcesses.Unlock() return mock.DeviceGetMPSComputeRunningProcessesFunc(device) } // DeviceGetMPSComputeRunningProcessesCalls gets all the calls that were made to DeviceGetMPSComputeRunningProcesses. // Check the length with: // // len(mockedInterface.DeviceGetMPSComputeRunningProcessesCalls()) func (mock *Interface) DeviceGetMPSComputeRunningProcessesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMPSComputeRunningProcesses.RLock() calls = mock.calls.DeviceGetMPSComputeRunningProcesses mock.lockDeviceGetMPSComputeRunningProcesses.RUnlock() return calls } // DeviceGetMarginTemperature calls DeviceGetMarginTemperatureFunc. func (mock *Interface) DeviceGetMarginTemperature(device nvml.Device) (nvml.MarginTemperature, nvml.Return) { if mock.DeviceGetMarginTemperatureFunc == nil { panic("Interface.DeviceGetMarginTemperatureFunc: method is nil but Interface.DeviceGetMarginTemperature was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMarginTemperature.Lock() mock.calls.DeviceGetMarginTemperature = append(mock.calls.DeviceGetMarginTemperature, callInfo) mock.lockDeviceGetMarginTemperature.Unlock() return mock.DeviceGetMarginTemperatureFunc(device) } // DeviceGetMarginTemperatureCalls gets all the calls that were made to DeviceGetMarginTemperature. // Check the length with: // // len(mockedInterface.DeviceGetMarginTemperatureCalls()) func (mock *Interface) DeviceGetMarginTemperatureCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMarginTemperature.RLock() calls = mock.calls.DeviceGetMarginTemperature mock.lockDeviceGetMarginTemperature.RUnlock() return calls } // DeviceGetMaxClockInfo calls DeviceGetMaxClockInfoFunc. func (mock *Interface) DeviceGetMaxClockInfo(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { if mock.DeviceGetMaxClockInfoFunc == nil { panic("Interface.DeviceGetMaxClockInfoFunc: method is nil but Interface.DeviceGetMaxClockInfo was just called") } callInfo := struct { Device nvml.Device ClockType nvml.ClockType }{ Device: device, ClockType: clockType, } mock.lockDeviceGetMaxClockInfo.Lock() mock.calls.DeviceGetMaxClockInfo = append(mock.calls.DeviceGetMaxClockInfo, callInfo) mock.lockDeviceGetMaxClockInfo.Unlock() return mock.DeviceGetMaxClockInfoFunc(device, clockType) } // DeviceGetMaxClockInfoCalls gets all the calls that were made to DeviceGetMaxClockInfo. // Check the length with: // // len(mockedInterface.DeviceGetMaxClockInfoCalls()) func (mock *Interface) DeviceGetMaxClockInfoCalls() []struct { Device nvml.Device ClockType nvml.ClockType } { var calls []struct { Device nvml.Device ClockType nvml.ClockType } mock.lockDeviceGetMaxClockInfo.RLock() calls = mock.calls.DeviceGetMaxClockInfo mock.lockDeviceGetMaxClockInfo.RUnlock() return calls } // DeviceGetMaxCustomerBoostClock calls DeviceGetMaxCustomerBoostClockFunc. func (mock *Interface) DeviceGetMaxCustomerBoostClock(device nvml.Device, clockType nvml.ClockType) (uint32, nvml.Return) { if mock.DeviceGetMaxCustomerBoostClockFunc == nil { panic("Interface.DeviceGetMaxCustomerBoostClockFunc: method is nil but Interface.DeviceGetMaxCustomerBoostClock was just called") } callInfo := struct { Device nvml.Device ClockType nvml.ClockType }{ Device: device, ClockType: clockType, } mock.lockDeviceGetMaxCustomerBoostClock.Lock() mock.calls.DeviceGetMaxCustomerBoostClock = append(mock.calls.DeviceGetMaxCustomerBoostClock, callInfo) mock.lockDeviceGetMaxCustomerBoostClock.Unlock() return mock.DeviceGetMaxCustomerBoostClockFunc(device, clockType) } // DeviceGetMaxCustomerBoostClockCalls gets all the calls that were made to DeviceGetMaxCustomerBoostClock. // Check the length with: // // len(mockedInterface.DeviceGetMaxCustomerBoostClockCalls()) func (mock *Interface) DeviceGetMaxCustomerBoostClockCalls() []struct { Device nvml.Device ClockType nvml.ClockType } { var calls []struct { Device nvml.Device ClockType nvml.ClockType } mock.lockDeviceGetMaxCustomerBoostClock.RLock() calls = mock.calls.DeviceGetMaxCustomerBoostClock mock.lockDeviceGetMaxCustomerBoostClock.RUnlock() return calls } // DeviceGetMaxMigDeviceCount calls DeviceGetMaxMigDeviceCountFunc. func (mock *Interface) DeviceGetMaxMigDeviceCount(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetMaxMigDeviceCountFunc == nil { panic("Interface.DeviceGetMaxMigDeviceCountFunc: method is nil but Interface.DeviceGetMaxMigDeviceCount was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMaxMigDeviceCount.Lock() mock.calls.DeviceGetMaxMigDeviceCount = append(mock.calls.DeviceGetMaxMigDeviceCount, callInfo) mock.lockDeviceGetMaxMigDeviceCount.Unlock() return mock.DeviceGetMaxMigDeviceCountFunc(device) } // DeviceGetMaxMigDeviceCountCalls gets all the calls that were made to DeviceGetMaxMigDeviceCount. // Check the length with: // // len(mockedInterface.DeviceGetMaxMigDeviceCountCalls()) func (mock *Interface) DeviceGetMaxMigDeviceCountCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMaxMigDeviceCount.RLock() calls = mock.calls.DeviceGetMaxMigDeviceCount mock.lockDeviceGetMaxMigDeviceCount.RUnlock() return calls } // DeviceGetMaxPcieLinkGeneration calls DeviceGetMaxPcieLinkGenerationFunc. func (mock *Interface) DeviceGetMaxPcieLinkGeneration(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetMaxPcieLinkGenerationFunc == nil { panic("Interface.DeviceGetMaxPcieLinkGenerationFunc: method is nil but Interface.DeviceGetMaxPcieLinkGeneration was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMaxPcieLinkGeneration.Lock() mock.calls.DeviceGetMaxPcieLinkGeneration = append(mock.calls.DeviceGetMaxPcieLinkGeneration, callInfo) mock.lockDeviceGetMaxPcieLinkGeneration.Unlock() return mock.DeviceGetMaxPcieLinkGenerationFunc(device) } // DeviceGetMaxPcieLinkGenerationCalls gets all the calls that were made to DeviceGetMaxPcieLinkGeneration. // Check the length with: // // len(mockedInterface.DeviceGetMaxPcieLinkGenerationCalls()) func (mock *Interface) DeviceGetMaxPcieLinkGenerationCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMaxPcieLinkGeneration.RLock() calls = mock.calls.DeviceGetMaxPcieLinkGeneration mock.lockDeviceGetMaxPcieLinkGeneration.RUnlock() return calls } // DeviceGetMaxPcieLinkWidth calls DeviceGetMaxPcieLinkWidthFunc. func (mock *Interface) DeviceGetMaxPcieLinkWidth(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetMaxPcieLinkWidthFunc == nil { panic("Interface.DeviceGetMaxPcieLinkWidthFunc: method is nil but Interface.DeviceGetMaxPcieLinkWidth was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMaxPcieLinkWidth.Lock() mock.calls.DeviceGetMaxPcieLinkWidth = append(mock.calls.DeviceGetMaxPcieLinkWidth, callInfo) mock.lockDeviceGetMaxPcieLinkWidth.Unlock() return mock.DeviceGetMaxPcieLinkWidthFunc(device) } // DeviceGetMaxPcieLinkWidthCalls gets all the calls that were made to DeviceGetMaxPcieLinkWidth. // Check the length with: // // len(mockedInterface.DeviceGetMaxPcieLinkWidthCalls()) func (mock *Interface) DeviceGetMaxPcieLinkWidthCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMaxPcieLinkWidth.RLock() calls = mock.calls.DeviceGetMaxPcieLinkWidth mock.lockDeviceGetMaxPcieLinkWidth.RUnlock() return calls } // DeviceGetMemClkMinMaxVfOffset calls DeviceGetMemClkMinMaxVfOffsetFunc. func (mock *Interface) DeviceGetMemClkMinMaxVfOffset(device nvml.Device) (int, int, nvml.Return) { if mock.DeviceGetMemClkMinMaxVfOffsetFunc == nil { panic("Interface.DeviceGetMemClkMinMaxVfOffsetFunc: method is nil but Interface.DeviceGetMemClkMinMaxVfOffset was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMemClkMinMaxVfOffset.Lock() mock.calls.DeviceGetMemClkMinMaxVfOffset = append(mock.calls.DeviceGetMemClkMinMaxVfOffset, callInfo) mock.lockDeviceGetMemClkMinMaxVfOffset.Unlock() return mock.DeviceGetMemClkMinMaxVfOffsetFunc(device) } // DeviceGetMemClkMinMaxVfOffsetCalls gets all the calls that were made to DeviceGetMemClkMinMaxVfOffset. // Check the length with: // // len(mockedInterface.DeviceGetMemClkMinMaxVfOffsetCalls()) func (mock *Interface) DeviceGetMemClkMinMaxVfOffsetCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMemClkMinMaxVfOffset.RLock() calls = mock.calls.DeviceGetMemClkMinMaxVfOffset mock.lockDeviceGetMemClkMinMaxVfOffset.RUnlock() return calls } // DeviceGetMemClkVfOffset calls DeviceGetMemClkVfOffsetFunc. func (mock *Interface) DeviceGetMemClkVfOffset(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetMemClkVfOffsetFunc == nil { panic("Interface.DeviceGetMemClkVfOffsetFunc: method is nil but Interface.DeviceGetMemClkVfOffset was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMemClkVfOffset.Lock() mock.calls.DeviceGetMemClkVfOffset = append(mock.calls.DeviceGetMemClkVfOffset, callInfo) mock.lockDeviceGetMemClkVfOffset.Unlock() return mock.DeviceGetMemClkVfOffsetFunc(device) } // DeviceGetMemClkVfOffsetCalls gets all the calls that were made to DeviceGetMemClkVfOffset. // Check the length with: // // len(mockedInterface.DeviceGetMemClkVfOffsetCalls()) func (mock *Interface) DeviceGetMemClkVfOffsetCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMemClkVfOffset.RLock() calls = mock.calls.DeviceGetMemClkVfOffset mock.lockDeviceGetMemClkVfOffset.RUnlock() return calls } // DeviceGetMemoryAffinity calls DeviceGetMemoryAffinityFunc. func (mock *Interface) DeviceGetMemoryAffinity(device nvml.Device, n int, affinityScope nvml.AffinityScope) ([]uint, nvml.Return) { if mock.DeviceGetMemoryAffinityFunc == nil { panic("Interface.DeviceGetMemoryAffinityFunc: method is nil but Interface.DeviceGetMemoryAffinity was just called") } callInfo := struct { Device nvml.Device N int AffinityScope nvml.AffinityScope }{ Device: device, N: n, AffinityScope: affinityScope, } mock.lockDeviceGetMemoryAffinity.Lock() mock.calls.DeviceGetMemoryAffinity = append(mock.calls.DeviceGetMemoryAffinity, callInfo) mock.lockDeviceGetMemoryAffinity.Unlock() return mock.DeviceGetMemoryAffinityFunc(device, n, affinityScope) } // DeviceGetMemoryAffinityCalls gets all the calls that were made to DeviceGetMemoryAffinity. // Check the length with: // // len(mockedInterface.DeviceGetMemoryAffinityCalls()) func (mock *Interface) DeviceGetMemoryAffinityCalls() []struct { Device nvml.Device N int AffinityScope nvml.AffinityScope } { var calls []struct { Device nvml.Device N int AffinityScope nvml.AffinityScope } mock.lockDeviceGetMemoryAffinity.RLock() calls = mock.calls.DeviceGetMemoryAffinity mock.lockDeviceGetMemoryAffinity.RUnlock() return calls } // DeviceGetMemoryBusWidth calls DeviceGetMemoryBusWidthFunc. func (mock *Interface) DeviceGetMemoryBusWidth(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetMemoryBusWidthFunc == nil { panic("Interface.DeviceGetMemoryBusWidthFunc: method is nil but Interface.DeviceGetMemoryBusWidth was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMemoryBusWidth.Lock() mock.calls.DeviceGetMemoryBusWidth = append(mock.calls.DeviceGetMemoryBusWidth, callInfo) mock.lockDeviceGetMemoryBusWidth.Unlock() return mock.DeviceGetMemoryBusWidthFunc(device) } // DeviceGetMemoryBusWidthCalls gets all the calls that were made to DeviceGetMemoryBusWidth. // Check the length with: // // len(mockedInterface.DeviceGetMemoryBusWidthCalls()) func (mock *Interface) DeviceGetMemoryBusWidthCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMemoryBusWidth.RLock() calls = mock.calls.DeviceGetMemoryBusWidth mock.lockDeviceGetMemoryBusWidth.RUnlock() return calls } // DeviceGetMemoryErrorCounter calls DeviceGetMemoryErrorCounterFunc. func (mock *Interface) DeviceGetMemoryErrorCounter(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType, memoryLocation nvml.MemoryLocation) (uint64, nvml.Return) { if mock.DeviceGetMemoryErrorCounterFunc == nil { panic("Interface.DeviceGetMemoryErrorCounterFunc: method is nil but Interface.DeviceGetMemoryErrorCounter was just called") } callInfo := struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType MemoryLocation nvml.MemoryLocation }{ Device: device, MemoryErrorType: memoryErrorType, EccCounterType: eccCounterType, MemoryLocation: memoryLocation, } mock.lockDeviceGetMemoryErrorCounter.Lock() mock.calls.DeviceGetMemoryErrorCounter = append(mock.calls.DeviceGetMemoryErrorCounter, callInfo) mock.lockDeviceGetMemoryErrorCounter.Unlock() return mock.DeviceGetMemoryErrorCounterFunc(device, memoryErrorType, eccCounterType, memoryLocation) } // DeviceGetMemoryErrorCounterCalls gets all the calls that were made to DeviceGetMemoryErrorCounter. // Check the length with: // // len(mockedInterface.DeviceGetMemoryErrorCounterCalls()) func (mock *Interface) DeviceGetMemoryErrorCounterCalls() []struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType MemoryLocation nvml.MemoryLocation } { var calls []struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType MemoryLocation nvml.MemoryLocation } mock.lockDeviceGetMemoryErrorCounter.RLock() calls = mock.calls.DeviceGetMemoryErrorCounter mock.lockDeviceGetMemoryErrorCounter.RUnlock() return calls } // DeviceGetMemoryInfo calls DeviceGetMemoryInfoFunc. func (mock *Interface) DeviceGetMemoryInfo(device nvml.Device) (nvml.Memory, nvml.Return) { if mock.DeviceGetMemoryInfoFunc == nil { panic("Interface.DeviceGetMemoryInfoFunc: method is nil but Interface.DeviceGetMemoryInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMemoryInfo.Lock() mock.calls.DeviceGetMemoryInfo = append(mock.calls.DeviceGetMemoryInfo, callInfo) mock.lockDeviceGetMemoryInfo.Unlock() return mock.DeviceGetMemoryInfoFunc(device) } // DeviceGetMemoryInfoCalls gets all the calls that were made to DeviceGetMemoryInfo. // Check the length with: // // len(mockedInterface.DeviceGetMemoryInfoCalls()) func (mock *Interface) DeviceGetMemoryInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMemoryInfo.RLock() calls = mock.calls.DeviceGetMemoryInfo mock.lockDeviceGetMemoryInfo.RUnlock() return calls } // DeviceGetMemoryInfo_v2 calls DeviceGetMemoryInfo_v2Func. func (mock *Interface) DeviceGetMemoryInfo_v2(device nvml.Device) (nvml.Memory_v2, nvml.Return) { if mock.DeviceGetMemoryInfo_v2Func == nil { panic("Interface.DeviceGetMemoryInfo_v2Func: method is nil but Interface.DeviceGetMemoryInfo_v2 was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMemoryInfo_v2.Lock() mock.calls.DeviceGetMemoryInfo_v2 = append(mock.calls.DeviceGetMemoryInfo_v2, callInfo) mock.lockDeviceGetMemoryInfo_v2.Unlock() return mock.DeviceGetMemoryInfo_v2Func(device) } // DeviceGetMemoryInfo_v2Calls gets all the calls that were made to DeviceGetMemoryInfo_v2. // Check the length with: // // len(mockedInterface.DeviceGetMemoryInfo_v2Calls()) func (mock *Interface) DeviceGetMemoryInfo_v2Calls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMemoryInfo_v2.RLock() calls = mock.calls.DeviceGetMemoryInfo_v2 mock.lockDeviceGetMemoryInfo_v2.RUnlock() return calls } // DeviceGetMigDeviceHandleByIndex calls DeviceGetMigDeviceHandleByIndexFunc. func (mock *Interface) DeviceGetMigDeviceHandleByIndex(device nvml.Device, n int) (nvml.Device, nvml.Return) { if mock.DeviceGetMigDeviceHandleByIndexFunc == nil { panic("Interface.DeviceGetMigDeviceHandleByIndexFunc: method is nil but Interface.DeviceGetMigDeviceHandleByIndex was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetMigDeviceHandleByIndex.Lock() mock.calls.DeviceGetMigDeviceHandleByIndex = append(mock.calls.DeviceGetMigDeviceHandleByIndex, callInfo) mock.lockDeviceGetMigDeviceHandleByIndex.Unlock() return mock.DeviceGetMigDeviceHandleByIndexFunc(device, n) } // DeviceGetMigDeviceHandleByIndexCalls gets all the calls that were made to DeviceGetMigDeviceHandleByIndex. // Check the length with: // // len(mockedInterface.DeviceGetMigDeviceHandleByIndexCalls()) func (mock *Interface) DeviceGetMigDeviceHandleByIndexCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetMigDeviceHandleByIndex.RLock() calls = mock.calls.DeviceGetMigDeviceHandleByIndex mock.lockDeviceGetMigDeviceHandleByIndex.RUnlock() return calls } // DeviceGetMigMode calls DeviceGetMigModeFunc. func (mock *Interface) DeviceGetMigMode(device nvml.Device) (int, int, nvml.Return) { if mock.DeviceGetMigModeFunc == nil { panic("Interface.DeviceGetMigModeFunc: method is nil but Interface.DeviceGetMigMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMigMode.Lock() mock.calls.DeviceGetMigMode = append(mock.calls.DeviceGetMigMode, callInfo) mock.lockDeviceGetMigMode.Unlock() return mock.DeviceGetMigModeFunc(device) } // DeviceGetMigModeCalls gets all the calls that were made to DeviceGetMigMode. // Check the length with: // // len(mockedInterface.DeviceGetMigModeCalls()) func (mock *Interface) DeviceGetMigModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMigMode.RLock() calls = mock.calls.DeviceGetMigMode mock.lockDeviceGetMigMode.RUnlock() return calls } // DeviceGetMinMaxClockOfPState calls DeviceGetMinMaxClockOfPStateFunc. func (mock *Interface) DeviceGetMinMaxClockOfPState(device nvml.Device, clockType nvml.ClockType, pstates nvml.Pstates) (uint32, uint32, nvml.Return) { if mock.DeviceGetMinMaxClockOfPStateFunc == nil { panic("Interface.DeviceGetMinMaxClockOfPStateFunc: method is nil but Interface.DeviceGetMinMaxClockOfPState was just called") } callInfo := struct { Device nvml.Device ClockType nvml.ClockType Pstates nvml.Pstates }{ Device: device, ClockType: clockType, Pstates: pstates, } mock.lockDeviceGetMinMaxClockOfPState.Lock() mock.calls.DeviceGetMinMaxClockOfPState = append(mock.calls.DeviceGetMinMaxClockOfPState, callInfo) mock.lockDeviceGetMinMaxClockOfPState.Unlock() return mock.DeviceGetMinMaxClockOfPStateFunc(device, clockType, pstates) } // DeviceGetMinMaxClockOfPStateCalls gets all the calls that were made to DeviceGetMinMaxClockOfPState. // Check the length with: // // len(mockedInterface.DeviceGetMinMaxClockOfPStateCalls()) func (mock *Interface) DeviceGetMinMaxClockOfPStateCalls() []struct { Device nvml.Device ClockType nvml.ClockType Pstates nvml.Pstates } { var calls []struct { Device nvml.Device ClockType nvml.ClockType Pstates nvml.Pstates } mock.lockDeviceGetMinMaxClockOfPState.RLock() calls = mock.calls.DeviceGetMinMaxClockOfPState mock.lockDeviceGetMinMaxClockOfPState.RUnlock() return calls } // DeviceGetMinMaxFanSpeed calls DeviceGetMinMaxFanSpeedFunc. func (mock *Interface) DeviceGetMinMaxFanSpeed(device nvml.Device) (int, int, nvml.Return) { if mock.DeviceGetMinMaxFanSpeedFunc == nil { panic("Interface.DeviceGetMinMaxFanSpeedFunc: method is nil but Interface.DeviceGetMinMaxFanSpeed was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMinMaxFanSpeed.Lock() mock.calls.DeviceGetMinMaxFanSpeed = append(mock.calls.DeviceGetMinMaxFanSpeed, callInfo) mock.lockDeviceGetMinMaxFanSpeed.Unlock() return mock.DeviceGetMinMaxFanSpeedFunc(device) } // DeviceGetMinMaxFanSpeedCalls gets all the calls that were made to DeviceGetMinMaxFanSpeed. // Check the length with: // // len(mockedInterface.DeviceGetMinMaxFanSpeedCalls()) func (mock *Interface) DeviceGetMinMaxFanSpeedCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMinMaxFanSpeed.RLock() calls = mock.calls.DeviceGetMinMaxFanSpeed mock.lockDeviceGetMinMaxFanSpeed.RUnlock() return calls } // DeviceGetMinorNumber calls DeviceGetMinorNumberFunc. func (mock *Interface) DeviceGetMinorNumber(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetMinorNumberFunc == nil { panic("Interface.DeviceGetMinorNumberFunc: method is nil but Interface.DeviceGetMinorNumber was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMinorNumber.Lock() mock.calls.DeviceGetMinorNumber = append(mock.calls.DeviceGetMinorNumber, callInfo) mock.lockDeviceGetMinorNumber.Unlock() return mock.DeviceGetMinorNumberFunc(device) } // DeviceGetMinorNumberCalls gets all the calls that were made to DeviceGetMinorNumber. // Check the length with: // // len(mockedInterface.DeviceGetMinorNumberCalls()) func (mock *Interface) DeviceGetMinorNumberCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMinorNumber.RLock() calls = mock.calls.DeviceGetMinorNumber mock.lockDeviceGetMinorNumber.RUnlock() return calls } // DeviceGetModuleId calls DeviceGetModuleIdFunc. func (mock *Interface) DeviceGetModuleId(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetModuleIdFunc == nil { panic("Interface.DeviceGetModuleIdFunc: method is nil but Interface.DeviceGetModuleId was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetModuleId.Lock() mock.calls.DeviceGetModuleId = append(mock.calls.DeviceGetModuleId, callInfo) mock.lockDeviceGetModuleId.Unlock() return mock.DeviceGetModuleIdFunc(device) } // DeviceGetModuleIdCalls gets all the calls that were made to DeviceGetModuleId. // Check the length with: // // len(mockedInterface.DeviceGetModuleIdCalls()) func (mock *Interface) DeviceGetModuleIdCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetModuleId.RLock() calls = mock.calls.DeviceGetModuleId mock.lockDeviceGetModuleId.RUnlock() return calls } // DeviceGetMultiGpuBoard calls DeviceGetMultiGpuBoardFunc. func (mock *Interface) DeviceGetMultiGpuBoard(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetMultiGpuBoardFunc == nil { panic("Interface.DeviceGetMultiGpuBoardFunc: method is nil but Interface.DeviceGetMultiGpuBoard was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetMultiGpuBoard.Lock() mock.calls.DeviceGetMultiGpuBoard = append(mock.calls.DeviceGetMultiGpuBoard, callInfo) mock.lockDeviceGetMultiGpuBoard.Unlock() return mock.DeviceGetMultiGpuBoardFunc(device) } // DeviceGetMultiGpuBoardCalls gets all the calls that were made to DeviceGetMultiGpuBoard. // Check the length with: // // len(mockedInterface.DeviceGetMultiGpuBoardCalls()) func (mock *Interface) DeviceGetMultiGpuBoardCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetMultiGpuBoard.RLock() calls = mock.calls.DeviceGetMultiGpuBoard mock.lockDeviceGetMultiGpuBoard.RUnlock() return calls } // DeviceGetName calls DeviceGetNameFunc. func (mock *Interface) DeviceGetName(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetNameFunc == nil { panic("Interface.DeviceGetNameFunc: method is nil but Interface.DeviceGetName was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetName.Lock() mock.calls.DeviceGetName = append(mock.calls.DeviceGetName, callInfo) mock.lockDeviceGetName.Unlock() return mock.DeviceGetNameFunc(device) } // DeviceGetNameCalls gets all the calls that were made to DeviceGetName. // Check the length with: // // len(mockedInterface.DeviceGetNameCalls()) func (mock *Interface) DeviceGetNameCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetName.RLock() calls = mock.calls.DeviceGetName mock.lockDeviceGetName.RUnlock() return calls } // DeviceGetNumFans calls DeviceGetNumFansFunc. func (mock *Interface) DeviceGetNumFans(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetNumFansFunc == nil { panic("Interface.DeviceGetNumFansFunc: method is nil but Interface.DeviceGetNumFans was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetNumFans.Lock() mock.calls.DeviceGetNumFans = append(mock.calls.DeviceGetNumFans, callInfo) mock.lockDeviceGetNumFans.Unlock() return mock.DeviceGetNumFansFunc(device) } // DeviceGetNumFansCalls gets all the calls that were made to DeviceGetNumFans. // Check the length with: // // len(mockedInterface.DeviceGetNumFansCalls()) func (mock *Interface) DeviceGetNumFansCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetNumFans.RLock() calls = mock.calls.DeviceGetNumFans mock.lockDeviceGetNumFans.RUnlock() return calls } // DeviceGetNumGpuCores calls DeviceGetNumGpuCoresFunc. func (mock *Interface) DeviceGetNumGpuCores(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetNumGpuCoresFunc == nil { panic("Interface.DeviceGetNumGpuCoresFunc: method is nil but Interface.DeviceGetNumGpuCores was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetNumGpuCores.Lock() mock.calls.DeviceGetNumGpuCores = append(mock.calls.DeviceGetNumGpuCores, callInfo) mock.lockDeviceGetNumGpuCores.Unlock() return mock.DeviceGetNumGpuCoresFunc(device) } // DeviceGetNumGpuCoresCalls gets all the calls that were made to DeviceGetNumGpuCores. // Check the length with: // // len(mockedInterface.DeviceGetNumGpuCoresCalls()) func (mock *Interface) DeviceGetNumGpuCoresCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetNumGpuCores.RLock() calls = mock.calls.DeviceGetNumGpuCores mock.lockDeviceGetNumGpuCores.RUnlock() return calls } // DeviceGetNumaNodeId calls DeviceGetNumaNodeIdFunc. func (mock *Interface) DeviceGetNumaNodeId(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetNumaNodeIdFunc == nil { panic("Interface.DeviceGetNumaNodeIdFunc: method is nil but Interface.DeviceGetNumaNodeId was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetNumaNodeId.Lock() mock.calls.DeviceGetNumaNodeId = append(mock.calls.DeviceGetNumaNodeId, callInfo) mock.lockDeviceGetNumaNodeId.Unlock() return mock.DeviceGetNumaNodeIdFunc(device) } // DeviceGetNumaNodeIdCalls gets all the calls that were made to DeviceGetNumaNodeId. // Check the length with: // // len(mockedInterface.DeviceGetNumaNodeIdCalls()) func (mock *Interface) DeviceGetNumaNodeIdCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetNumaNodeId.RLock() calls = mock.calls.DeviceGetNumaNodeId mock.lockDeviceGetNumaNodeId.RUnlock() return calls } // DeviceGetNvLinkCapability calls DeviceGetNvLinkCapabilityFunc. func (mock *Interface) DeviceGetNvLinkCapability(device nvml.Device, n int, nvLinkCapability nvml.NvLinkCapability) (uint32, nvml.Return) { if mock.DeviceGetNvLinkCapabilityFunc == nil { panic("Interface.DeviceGetNvLinkCapabilityFunc: method is nil but Interface.DeviceGetNvLinkCapability was just called") } callInfo := struct { Device nvml.Device N int NvLinkCapability nvml.NvLinkCapability }{ Device: device, N: n, NvLinkCapability: nvLinkCapability, } mock.lockDeviceGetNvLinkCapability.Lock() mock.calls.DeviceGetNvLinkCapability = append(mock.calls.DeviceGetNvLinkCapability, callInfo) mock.lockDeviceGetNvLinkCapability.Unlock() return mock.DeviceGetNvLinkCapabilityFunc(device, n, nvLinkCapability) } // DeviceGetNvLinkCapabilityCalls gets all the calls that were made to DeviceGetNvLinkCapability. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkCapabilityCalls()) func (mock *Interface) DeviceGetNvLinkCapabilityCalls() []struct { Device nvml.Device N int NvLinkCapability nvml.NvLinkCapability } { var calls []struct { Device nvml.Device N int NvLinkCapability nvml.NvLinkCapability } mock.lockDeviceGetNvLinkCapability.RLock() calls = mock.calls.DeviceGetNvLinkCapability mock.lockDeviceGetNvLinkCapability.RUnlock() return calls } // DeviceGetNvLinkErrorCounter calls DeviceGetNvLinkErrorCounterFunc. func (mock *Interface) DeviceGetNvLinkErrorCounter(device nvml.Device, n int, nvLinkErrorCounter nvml.NvLinkErrorCounter) (uint64, nvml.Return) { if mock.DeviceGetNvLinkErrorCounterFunc == nil { panic("Interface.DeviceGetNvLinkErrorCounterFunc: method is nil but Interface.DeviceGetNvLinkErrorCounter was just called") } callInfo := struct { Device nvml.Device N int NvLinkErrorCounter nvml.NvLinkErrorCounter }{ Device: device, N: n, NvLinkErrorCounter: nvLinkErrorCounter, } mock.lockDeviceGetNvLinkErrorCounter.Lock() mock.calls.DeviceGetNvLinkErrorCounter = append(mock.calls.DeviceGetNvLinkErrorCounter, callInfo) mock.lockDeviceGetNvLinkErrorCounter.Unlock() return mock.DeviceGetNvLinkErrorCounterFunc(device, n, nvLinkErrorCounter) } // DeviceGetNvLinkErrorCounterCalls gets all the calls that were made to DeviceGetNvLinkErrorCounter. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkErrorCounterCalls()) func (mock *Interface) DeviceGetNvLinkErrorCounterCalls() []struct { Device nvml.Device N int NvLinkErrorCounter nvml.NvLinkErrorCounter } { var calls []struct { Device nvml.Device N int NvLinkErrorCounter nvml.NvLinkErrorCounter } mock.lockDeviceGetNvLinkErrorCounter.RLock() calls = mock.calls.DeviceGetNvLinkErrorCounter mock.lockDeviceGetNvLinkErrorCounter.RUnlock() return calls } // DeviceGetNvLinkInfo calls DeviceGetNvLinkInfoFunc. func (mock *Interface) DeviceGetNvLinkInfo(device nvml.Device) nvml.NvLinkInfoHandler { if mock.DeviceGetNvLinkInfoFunc == nil { panic("Interface.DeviceGetNvLinkInfoFunc: method is nil but Interface.DeviceGetNvLinkInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetNvLinkInfo.Lock() mock.calls.DeviceGetNvLinkInfo = append(mock.calls.DeviceGetNvLinkInfo, callInfo) mock.lockDeviceGetNvLinkInfo.Unlock() return mock.DeviceGetNvLinkInfoFunc(device) } // DeviceGetNvLinkInfoCalls gets all the calls that were made to DeviceGetNvLinkInfo. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkInfoCalls()) func (mock *Interface) DeviceGetNvLinkInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetNvLinkInfo.RLock() calls = mock.calls.DeviceGetNvLinkInfo mock.lockDeviceGetNvLinkInfo.RUnlock() return calls } // DeviceGetNvLinkRemoteDeviceType calls DeviceGetNvLinkRemoteDeviceTypeFunc. func (mock *Interface) DeviceGetNvLinkRemoteDeviceType(device nvml.Device, n int) (nvml.IntNvLinkDeviceType, nvml.Return) { if mock.DeviceGetNvLinkRemoteDeviceTypeFunc == nil { panic("Interface.DeviceGetNvLinkRemoteDeviceTypeFunc: method is nil but Interface.DeviceGetNvLinkRemoteDeviceType was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetNvLinkRemoteDeviceType.Lock() mock.calls.DeviceGetNvLinkRemoteDeviceType = append(mock.calls.DeviceGetNvLinkRemoteDeviceType, callInfo) mock.lockDeviceGetNvLinkRemoteDeviceType.Unlock() return mock.DeviceGetNvLinkRemoteDeviceTypeFunc(device, n) } // DeviceGetNvLinkRemoteDeviceTypeCalls gets all the calls that were made to DeviceGetNvLinkRemoteDeviceType. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkRemoteDeviceTypeCalls()) func (mock *Interface) DeviceGetNvLinkRemoteDeviceTypeCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetNvLinkRemoteDeviceType.RLock() calls = mock.calls.DeviceGetNvLinkRemoteDeviceType mock.lockDeviceGetNvLinkRemoteDeviceType.RUnlock() return calls } // DeviceGetNvLinkRemotePciInfo calls DeviceGetNvLinkRemotePciInfoFunc. func (mock *Interface) DeviceGetNvLinkRemotePciInfo(device nvml.Device, n int) (nvml.PciInfo, nvml.Return) { if mock.DeviceGetNvLinkRemotePciInfoFunc == nil { panic("Interface.DeviceGetNvLinkRemotePciInfoFunc: method is nil but Interface.DeviceGetNvLinkRemotePciInfo was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetNvLinkRemotePciInfo.Lock() mock.calls.DeviceGetNvLinkRemotePciInfo = append(mock.calls.DeviceGetNvLinkRemotePciInfo, callInfo) mock.lockDeviceGetNvLinkRemotePciInfo.Unlock() return mock.DeviceGetNvLinkRemotePciInfoFunc(device, n) } // DeviceGetNvLinkRemotePciInfoCalls gets all the calls that were made to DeviceGetNvLinkRemotePciInfo. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkRemotePciInfoCalls()) func (mock *Interface) DeviceGetNvLinkRemotePciInfoCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetNvLinkRemotePciInfo.RLock() calls = mock.calls.DeviceGetNvLinkRemotePciInfo mock.lockDeviceGetNvLinkRemotePciInfo.RUnlock() return calls } // DeviceGetNvLinkState calls DeviceGetNvLinkStateFunc. func (mock *Interface) DeviceGetNvLinkState(device nvml.Device, n int) (nvml.EnableState, nvml.Return) { if mock.DeviceGetNvLinkStateFunc == nil { panic("Interface.DeviceGetNvLinkStateFunc: method is nil but Interface.DeviceGetNvLinkState was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetNvLinkState.Lock() mock.calls.DeviceGetNvLinkState = append(mock.calls.DeviceGetNvLinkState, callInfo) mock.lockDeviceGetNvLinkState.Unlock() return mock.DeviceGetNvLinkStateFunc(device, n) } // DeviceGetNvLinkStateCalls gets all the calls that were made to DeviceGetNvLinkState. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkStateCalls()) func (mock *Interface) DeviceGetNvLinkStateCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetNvLinkState.RLock() calls = mock.calls.DeviceGetNvLinkState mock.lockDeviceGetNvLinkState.RUnlock() return calls } // DeviceGetNvLinkUtilizationControl calls DeviceGetNvLinkUtilizationControlFunc. func (mock *Interface) DeviceGetNvLinkUtilizationControl(device nvml.Device, n1 int, n2 int) (nvml.NvLinkUtilizationControl, nvml.Return) { if mock.DeviceGetNvLinkUtilizationControlFunc == nil { panic("Interface.DeviceGetNvLinkUtilizationControlFunc: method is nil but Interface.DeviceGetNvLinkUtilizationControl was just called") } callInfo := struct { Device nvml.Device N1 int N2 int }{ Device: device, N1: n1, N2: n2, } mock.lockDeviceGetNvLinkUtilizationControl.Lock() mock.calls.DeviceGetNvLinkUtilizationControl = append(mock.calls.DeviceGetNvLinkUtilizationControl, callInfo) mock.lockDeviceGetNvLinkUtilizationControl.Unlock() return mock.DeviceGetNvLinkUtilizationControlFunc(device, n1, n2) } // DeviceGetNvLinkUtilizationControlCalls gets all the calls that were made to DeviceGetNvLinkUtilizationControl. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkUtilizationControlCalls()) func (mock *Interface) DeviceGetNvLinkUtilizationControlCalls() []struct { Device nvml.Device N1 int N2 int } { var calls []struct { Device nvml.Device N1 int N2 int } mock.lockDeviceGetNvLinkUtilizationControl.RLock() calls = mock.calls.DeviceGetNvLinkUtilizationControl mock.lockDeviceGetNvLinkUtilizationControl.RUnlock() return calls } // DeviceGetNvLinkUtilizationCounter calls DeviceGetNvLinkUtilizationCounterFunc. func (mock *Interface) DeviceGetNvLinkUtilizationCounter(device nvml.Device, n1 int, n2 int) (uint64, uint64, nvml.Return) { if mock.DeviceGetNvLinkUtilizationCounterFunc == nil { panic("Interface.DeviceGetNvLinkUtilizationCounterFunc: method is nil but Interface.DeviceGetNvLinkUtilizationCounter was just called") } callInfo := struct { Device nvml.Device N1 int N2 int }{ Device: device, N1: n1, N2: n2, } mock.lockDeviceGetNvLinkUtilizationCounter.Lock() mock.calls.DeviceGetNvLinkUtilizationCounter = append(mock.calls.DeviceGetNvLinkUtilizationCounter, callInfo) mock.lockDeviceGetNvLinkUtilizationCounter.Unlock() return mock.DeviceGetNvLinkUtilizationCounterFunc(device, n1, n2) } // DeviceGetNvLinkUtilizationCounterCalls gets all the calls that were made to DeviceGetNvLinkUtilizationCounter. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkUtilizationCounterCalls()) func (mock *Interface) DeviceGetNvLinkUtilizationCounterCalls() []struct { Device nvml.Device N1 int N2 int } { var calls []struct { Device nvml.Device N1 int N2 int } mock.lockDeviceGetNvLinkUtilizationCounter.RLock() calls = mock.calls.DeviceGetNvLinkUtilizationCounter mock.lockDeviceGetNvLinkUtilizationCounter.RUnlock() return calls } // DeviceGetNvLinkVersion calls DeviceGetNvLinkVersionFunc. func (mock *Interface) DeviceGetNvLinkVersion(device nvml.Device, n int) (uint32, nvml.Return) { if mock.DeviceGetNvLinkVersionFunc == nil { panic("Interface.DeviceGetNvLinkVersionFunc: method is nil but Interface.DeviceGetNvLinkVersion was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetNvLinkVersion.Lock() mock.calls.DeviceGetNvLinkVersion = append(mock.calls.DeviceGetNvLinkVersion, callInfo) mock.lockDeviceGetNvLinkVersion.Unlock() return mock.DeviceGetNvLinkVersionFunc(device, n) } // DeviceGetNvLinkVersionCalls gets all the calls that were made to DeviceGetNvLinkVersion. // Check the length with: // // len(mockedInterface.DeviceGetNvLinkVersionCalls()) func (mock *Interface) DeviceGetNvLinkVersionCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetNvLinkVersion.RLock() calls = mock.calls.DeviceGetNvLinkVersion mock.lockDeviceGetNvLinkVersion.RUnlock() return calls } // DeviceGetNvlinkBwMode calls DeviceGetNvlinkBwModeFunc. func (mock *Interface) DeviceGetNvlinkBwMode(device nvml.Device) (nvml.NvlinkGetBwMode, nvml.Return) { if mock.DeviceGetNvlinkBwModeFunc == nil { panic("Interface.DeviceGetNvlinkBwModeFunc: method is nil but Interface.DeviceGetNvlinkBwMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetNvlinkBwMode.Lock() mock.calls.DeviceGetNvlinkBwMode = append(mock.calls.DeviceGetNvlinkBwMode, callInfo) mock.lockDeviceGetNvlinkBwMode.Unlock() return mock.DeviceGetNvlinkBwModeFunc(device) } // DeviceGetNvlinkBwModeCalls gets all the calls that were made to DeviceGetNvlinkBwMode. // Check the length with: // // len(mockedInterface.DeviceGetNvlinkBwModeCalls()) func (mock *Interface) DeviceGetNvlinkBwModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetNvlinkBwMode.RLock() calls = mock.calls.DeviceGetNvlinkBwMode mock.lockDeviceGetNvlinkBwMode.RUnlock() return calls } // DeviceGetNvlinkSupportedBwModes calls DeviceGetNvlinkSupportedBwModesFunc. func (mock *Interface) DeviceGetNvlinkSupportedBwModes(device nvml.Device) (nvml.NvlinkSupportedBwModes, nvml.Return) { if mock.DeviceGetNvlinkSupportedBwModesFunc == nil { panic("Interface.DeviceGetNvlinkSupportedBwModesFunc: method is nil but Interface.DeviceGetNvlinkSupportedBwModes was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetNvlinkSupportedBwModes.Lock() mock.calls.DeviceGetNvlinkSupportedBwModes = append(mock.calls.DeviceGetNvlinkSupportedBwModes, callInfo) mock.lockDeviceGetNvlinkSupportedBwModes.Unlock() return mock.DeviceGetNvlinkSupportedBwModesFunc(device) } // DeviceGetNvlinkSupportedBwModesCalls gets all the calls that were made to DeviceGetNvlinkSupportedBwModes. // Check the length with: // // len(mockedInterface.DeviceGetNvlinkSupportedBwModesCalls()) func (mock *Interface) DeviceGetNvlinkSupportedBwModesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetNvlinkSupportedBwModes.RLock() calls = mock.calls.DeviceGetNvlinkSupportedBwModes mock.lockDeviceGetNvlinkSupportedBwModes.RUnlock() return calls } // DeviceGetOfaUtilization calls DeviceGetOfaUtilizationFunc. func (mock *Interface) DeviceGetOfaUtilization(device nvml.Device) (uint32, uint32, nvml.Return) { if mock.DeviceGetOfaUtilizationFunc == nil { panic("Interface.DeviceGetOfaUtilizationFunc: method is nil but Interface.DeviceGetOfaUtilization was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetOfaUtilization.Lock() mock.calls.DeviceGetOfaUtilization = append(mock.calls.DeviceGetOfaUtilization, callInfo) mock.lockDeviceGetOfaUtilization.Unlock() return mock.DeviceGetOfaUtilizationFunc(device) } // DeviceGetOfaUtilizationCalls gets all the calls that were made to DeviceGetOfaUtilization. // Check the length with: // // len(mockedInterface.DeviceGetOfaUtilizationCalls()) func (mock *Interface) DeviceGetOfaUtilizationCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetOfaUtilization.RLock() calls = mock.calls.DeviceGetOfaUtilization mock.lockDeviceGetOfaUtilization.RUnlock() return calls } // DeviceGetP2PStatus calls DeviceGetP2PStatusFunc. func (mock *Interface) DeviceGetP2PStatus(device1 nvml.Device, device2 nvml.Device, gpuP2PCapsIndex nvml.GpuP2PCapsIndex) (nvml.GpuP2PStatus, nvml.Return) { if mock.DeviceGetP2PStatusFunc == nil { panic("Interface.DeviceGetP2PStatusFunc: method is nil but Interface.DeviceGetP2PStatus was just called") } callInfo := struct { Device1 nvml.Device Device2 nvml.Device GpuP2PCapsIndex nvml.GpuP2PCapsIndex }{ Device1: device1, Device2: device2, GpuP2PCapsIndex: gpuP2PCapsIndex, } mock.lockDeviceGetP2PStatus.Lock() mock.calls.DeviceGetP2PStatus = append(mock.calls.DeviceGetP2PStatus, callInfo) mock.lockDeviceGetP2PStatus.Unlock() return mock.DeviceGetP2PStatusFunc(device1, device2, gpuP2PCapsIndex) } // DeviceGetP2PStatusCalls gets all the calls that were made to DeviceGetP2PStatus. // Check the length with: // // len(mockedInterface.DeviceGetP2PStatusCalls()) func (mock *Interface) DeviceGetP2PStatusCalls() []struct { Device1 nvml.Device Device2 nvml.Device GpuP2PCapsIndex nvml.GpuP2PCapsIndex } { var calls []struct { Device1 nvml.Device Device2 nvml.Device GpuP2PCapsIndex nvml.GpuP2PCapsIndex } mock.lockDeviceGetP2PStatus.RLock() calls = mock.calls.DeviceGetP2PStatus mock.lockDeviceGetP2PStatus.RUnlock() return calls } // DeviceGetPciInfo calls DeviceGetPciInfoFunc. func (mock *Interface) DeviceGetPciInfo(device nvml.Device) (nvml.PciInfo, nvml.Return) { if mock.DeviceGetPciInfoFunc == nil { panic("Interface.DeviceGetPciInfoFunc: method is nil but Interface.DeviceGetPciInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPciInfo.Lock() mock.calls.DeviceGetPciInfo = append(mock.calls.DeviceGetPciInfo, callInfo) mock.lockDeviceGetPciInfo.Unlock() return mock.DeviceGetPciInfoFunc(device) } // DeviceGetPciInfoCalls gets all the calls that were made to DeviceGetPciInfo. // Check the length with: // // len(mockedInterface.DeviceGetPciInfoCalls()) func (mock *Interface) DeviceGetPciInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPciInfo.RLock() calls = mock.calls.DeviceGetPciInfo mock.lockDeviceGetPciInfo.RUnlock() return calls } // DeviceGetPciInfoExt calls DeviceGetPciInfoExtFunc. func (mock *Interface) DeviceGetPciInfoExt(device nvml.Device) (nvml.PciInfoExt, nvml.Return) { if mock.DeviceGetPciInfoExtFunc == nil { panic("Interface.DeviceGetPciInfoExtFunc: method is nil but Interface.DeviceGetPciInfoExt was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPciInfoExt.Lock() mock.calls.DeviceGetPciInfoExt = append(mock.calls.DeviceGetPciInfoExt, callInfo) mock.lockDeviceGetPciInfoExt.Unlock() return mock.DeviceGetPciInfoExtFunc(device) } // DeviceGetPciInfoExtCalls gets all the calls that were made to DeviceGetPciInfoExt. // Check the length with: // // len(mockedInterface.DeviceGetPciInfoExtCalls()) func (mock *Interface) DeviceGetPciInfoExtCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPciInfoExt.RLock() calls = mock.calls.DeviceGetPciInfoExt mock.lockDeviceGetPciInfoExt.RUnlock() return calls } // DeviceGetPcieLinkMaxSpeed calls DeviceGetPcieLinkMaxSpeedFunc. func (mock *Interface) DeviceGetPcieLinkMaxSpeed(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetPcieLinkMaxSpeedFunc == nil { panic("Interface.DeviceGetPcieLinkMaxSpeedFunc: method is nil but Interface.DeviceGetPcieLinkMaxSpeed was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPcieLinkMaxSpeed.Lock() mock.calls.DeviceGetPcieLinkMaxSpeed = append(mock.calls.DeviceGetPcieLinkMaxSpeed, callInfo) mock.lockDeviceGetPcieLinkMaxSpeed.Unlock() return mock.DeviceGetPcieLinkMaxSpeedFunc(device) } // DeviceGetPcieLinkMaxSpeedCalls gets all the calls that were made to DeviceGetPcieLinkMaxSpeed. // Check the length with: // // len(mockedInterface.DeviceGetPcieLinkMaxSpeedCalls()) func (mock *Interface) DeviceGetPcieLinkMaxSpeedCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPcieLinkMaxSpeed.RLock() calls = mock.calls.DeviceGetPcieLinkMaxSpeed mock.lockDeviceGetPcieLinkMaxSpeed.RUnlock() return calls } // DeviceGetPcieReplayCounter calls DeviceGetPcieReplayCounterFunc. func (mock *Interface) DeviceGetPcieReplayCounter(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetPcieReplayCounterFunc == nil { panic("Interface.DeviceGetPcieReplayCounterFunc: method is nil but Interface.DeviceGetPcieReplayCounter was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPcieReplayCounter.Lock() mock.calls.DeviceGetPcieReplayCounter = append(mock.calls.DeviceGetPcieReplayCounter, callInfo) mock.lockDeviceGetPcieReplayCounter.Unlock() return mock.DeviceGetPcieReplayCounterFunc(device) } // DeviceGetPcieReplayCounterCalls gets all the calls that were made to DeviceGetPcieReplayCounter. // Check the length with: // // len(mockedInterface.DeviceGetPcieReplayCounterCalls()) func (mock *Interface) DeviceGetPcieReplayCounterCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPcieReplayCounter.RLock() calls = mock.calls.DeviceGetPcieReplayCounter mock.lockDeviceGetPcieReplayCounter.RUnlock() return calls } // DeviceGetPcieSpeed calls DeviceGetPcieSpeedFunc. func (mock *Interface) DeviceGetPcieSpeed(device nvml.Device) (int, nvml.Return) { if mock.DeviceGetPcieSpeedFunc == nil { panic("Interface.DeviceGetPcieSpeedFunc: method is nil but Interface.DeviceGetPcieSpeed was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPcieSpeed.Lock() mock.calls.DeviceGetPcieSpeed = append(mock.calls.DeviceGetPcieSpeed, callInfo) mock.lockDeviceGetPcieSpeed.Unlock() return mock.DeviceGetPcieSpeedFunc(device) } // DeviceGetPcieSpeedCalls gets all the calls that were made to DeviceGetPcieSpeed. // Check the length with: // // len(mockedInterface.DeviceGetPcieSpeedCalls()) func (mock *Interface) DeviceGetPcieSpeedCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPcieSpeed.RLock() calls = mock.calls.DeviceGetPcieSpeed mock.lockDeviceGetPcieSpeed.RUnlock() return calls } // DeviceGetPcieThroughput calls DeviceGetPcieThroughputFunc. func (mock *Interface) DeviceGetPcieThroughput(device nvml.Device, pcieUtilCounter nvml.PcieUtilCounter) (uint32, nvml.Return) { if mock.DeviceGetPcieThroughputFunc == nil { panic("Interface.DeviceGetPcieThroughputFunc: method is nil but Interface.DeviceGetPcieThroughput was just called") } callInfo := struct { Device nvml.Device PcieUtilCounter nvml.PcieUtilCounter }{ Device: device, PcieUtilCounter: pcieUtilCounter, } mock.lockDeviceGetPcieThroughput.Lock() mock.calls.DeviceGetPcieThroughput = append(mock.calls.DeviceGetPcieThroughput, callInfo) mock.lockDeviceGetPcieThroughput.Unlock() return mock.DeviceGetPcieThroughputFunc(device, pcieUtilCounter) } // DeviceGetPcieThroughputCalls gets all the calls that were made to DeviceGetPcieThroughput. // Check the length with: // // len(mockedInterface.DeviceGetPcieThroughputCalls()) func (mock *Interface) DeviceGetPcieThroughputCalls() []struct { Device nvml.Device PcieUtilCounter nvml.PcieUtilCounter } { var calls []struct { Device nvml.Device PcieUtilCounter nvml.PcieUtilCounter } mock.lockDeviceGetPcieThroughput.RLock() calls = mock.calls.DeviceGetPcieThroughput mock.lockDeviceGetPcieThroughput.RUnlock() return calls } // DeviceGetPdi calls DeviceGetPdiFunc. func (mock *Interface) DeviceGetPdi(device nvml.Device) (nvml.Pdi, nvml.Return) { if mock.DeviceGetPdiFunc == nil { panic("Interface.DeviceGetPdiFunc: method is nil but Interface.DeviceGetPdi was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPdi.Lock() mock.calls.DeviceGetPdi = append(mock.calls.DeviceGetPdi, callInfo) mock.lockDeviceGetPdi.Unlock() return mock.DeviceGetPdiFunc(device) } // DeviceGetPdiCalls gets all the calls that were made to DeviceGetPdi. // Check the length with: // // len(mockedInterface.DeviceGetPdiCalls()) func (mock *Interface) DeviceGetPdiCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPdi.RLock() calls = mock.calls.DeviceGetPdi mock.lockDeviceGetPdi.RUnlock() return calls } // DeviceGetPerformanceModes calls DeviceGetPerformanceModesFunc. func (mock *Interface) DeviceGetPerformanceModes(device nvml.Device) (nvml.DevicePerfModes, nvml.Return) { if mock.DeviceGetPerformanceModesFunc == nil { panic("Interface.DeviceGetPerformanceModesFunc: method is nil but Interface.DeviceGetPerformanceModes was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPerformanceModes.Lock() mock.calls.DeviceGetPerformanceModes = append(mock.calls.DeviceGetPerformanceModes, callInfo) mock.lockDeviceGetPerformanceModes.Unlock() return mock.DeviceGetPerformanceModesFunc(device) } // DeviceGetPerformanceModesCalls gets all the calls that were made to DeviceGetPerformanceModes. // Check the length with: // // len(mockedInterface.DeviceGetPerformanceModesCalls()) func (mock *Interface) DeviceGetPerformanceModesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPerformanceModes.RLock() calls = mock.calls.DeviceGetPerformanceModes mock.lockDeviceGetPerformanceModes.RUnlock() return calls } // DeviceGetPerformanceState calls DeviceGetPerformanceStateFunc. func (mock *Interface) DeviceGetPerformanceState(device nvml.Device) (nvml.Pstates, nvml.Return) { if mock.DeviceGetPerformanceStateFunc == nil { panic("Interface.DeviceGetPerformanceStateFunc: method is nil but Interface.DeviceGetPerformanceState was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPerformanceState.Lock() mock.calls.DeviceGetPerformanceState = append(mock.calls.DeviceGetPerformanceState, callInfo) mock.lockDeviceGetPerformanceState.Unlock() return mock.DeviceGetPerformanceStateFunc(device) } // DeviceGetPerformanceStateCalls gets all the calls that were made to DeviceGetPerformanceState. // Check the length with: // // len(mockedInterface.DeviceGetPerformanceStateCalls()) func (mock *Interface) DeviceGetPerformanceStateCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPerformanceState.RLock() calls = mock.calls.DeviceGetPerformanceState mock.lockDeviceGetPerformanceState.RUnlock() return calls } // DeviceGetPersistenceMode calls DeviceGetPersistenceModeFunc. func (mock *Interface) DeviceGetPersistenceMode(device nvml.Device) (nvml.EnableState, nvml.Return) { if mock.DeviceGetPersistenceModeFunc == nil { panic("Interface.DeviceGetPersistenceModeFunc: method is nil but Interface.DeviceGetPersistenceMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPersistenceMode.Lock() mock.calls.DeviceGetPersistenceMode = append(mock.calls.DeviceGetPersistenceMode, callInfo) mock.lockDeviceGetPersistenceMode.Unlock() return mock.DeviceGetPersistenceModeFunc(device) } // DeviceGetPersistenceModeCalls gets all the calls that were made to DeviceGetPersistenceMode. // Check the length with: // // len(mockedInterface.DeviceGetPersistenceModeCalls()) func (mock *Interface) DeviceGetPersistenceModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPersistenceMode.RLock() calls = mock.calls.DeviceGetPersistenceMode mock.lockDeviceGetPersistenceMode.RUnlock() return calls } // DeviceGetPgpuMetadataString calls DeviceGetPgpuMetadataStringFunc. func (mock *Interface) DeviceGetPgpuMetadataString(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetPgpuMetadataStringFunc == nil { panic("Interface.DeviceGetPgpuMetadataStringFunc: method is nil but Interface.DeviceGetPgpuMetadataString was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPgpuMetadataString.Lock() mock.calls.DeviceGetPgpuMetadataString = append(mock.calls.DeviceGetPgpuMetadataString, callInfo) mock.lockDeviceGetPgpuMetadataString.Unlock() return mock.DeviceGetPgpuMetadataStringFunc(device) } // DeviceGetPgpuMetadataStringCalls gets all the calls that were made to DeviceGetPgpuMetadataString. // Check the length with: // // len(mockedInterface.DeviceGetPgpuMetadataStringCalls()) func (mock *Interface) DeviceGetPgpuMetadataStringCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPgpuMetadataString.RLock() calls = mock.calls.DeviceGetPgpuMetadataString mock.lockDeviceGetPgpuMetadataString.RUnlock() return calls } // DeviceGetPlatformInfo calls DeviceGetPlatformInfoFunc. func (mock *Interface) DeviceGetPlatformInfo(device nvml.Device) (nvml.PlatformInfo, nvml.Return) { if mock.DeviceGetPlatformInfoFunc == nil { panic("Interface.DeviceGetPlatformInfoFunc: method is nil but Interface.DeviceGetPlatformInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPlatformInfo.Lock() mock.calls.DeviceGetPlatformInfo = append(mock.calls.DeviceGetPlatformInfo, callInfo) mock.lockDeviceGetPlatformInfo.Unlock() return mock.DeviceGetPlatformInfoFunc(device) } // DeviceGetPlatformInfoCalls gets all the calls that were made to DeviceGetPlatformInfo. // Check the length with: // // len(mockedInterface.DeviceGetPlatformInfoCalls()) func (mock *Interface) DeviceGetPlatformInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPlatformInfo.RLock() calls = mock.calls.DeviceGetPlatformInfo mock.lockDeviceGetPlatformInfo.RUnlock() return calls } // DeviceGetPowerManagementDefaultLimit calls DeviceGetPowerManagementDefaultLimitFunc. func (mock *Interface) DeviceGetPowerManagementDefaultLimit(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetPowerManagementDefaultLimitFunc == nil { panic("Interface.DeviceGetPowerManagementDefaultLimitFunc: method is nil but Interface.DeviceGetPowerManagementDefaultLimit was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerManagementDefaultLimit.Lock() mock.calls.DeviceGetPowerManagementDefaultLimit = append(mock.calls.DeviceGetPowerManagementDefaultLimit, callInfo) mock.lockDeviceGetPowerManagementDefaultLimit.Unlock() return mock.DeviceGetPowerManagementDefaultLimitFunc(device) } // DeviceGetPowerManagementDefaultLimitCalls gets all the calls that were made to DeviceGetPowerManagementDefaultLimit. // Check the length with: // // len(mockedInterface.DeviceGetPowerManagementDefaultLimitCalls()) func (mock *Interface) DeviceGetPowerManagementDefaultLimitCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerManagementDefaultLimit.RLock() calls = mock.calls.DeviceGetPowerManagementDefaultLimit mock.lockDeviceGetPowerManagementDefaultLimit.RUnlock() return calls } // DeviceGetPowerManagementLimit calls DeviceGetPowerManagementLimitFunc. func (mock *Interface) DeviceGetPowerManagementLimit(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetPowerManagementLimitFunc == nil { panic("Interface.DeviceGetPowerManagementLimitFunc: method is nil but Interface.DeviceGetPowerManagementLimit was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerManagementLimit.Lock() mock.calls.DeviceGetPowerManagementLimit = append(mock.calls.DeviceGetPowerManagementLimit, callInfo) mock.lockDeviceGetPowerManagementLimit.Unlock() return mock.DeviceGetPowerManagementLimitFunc(device) } // DeviceGetPowerManagementLimitCalls gets all the calls that were made to DeviceGetPowerManagementLimit. // Check the length with: // // len(mockedInterface.DeviceGetPowerManagementLimitCalls()) func (mock *Interface) DeviceGetPowerManagementLimitCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerManagementLimit.RLock() calls = mock.calls.DeviceGetPowerManagementLimit mock.lockDeviceGetPowerManagementLimit.RUnlock() return calls } // DeviceGetPowerManagementLimitConstraints calls DeviceGetPowerManagementLimitConstraintsFunc. func (mock *Interface) DeviceGetPowerManagementLimitConstraints(device nvml.Device) (uint32, uint32, nvml.Return) { if mock.DeviceGetPowerManagementLimitConstraintsFunc == nil { panic("Interface.DeviceGetPowerManagementLimitConstraintsFunc: method is nil but Interface.DeviceGetPowerManagementLimitConstraints was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerManagementLimitConstraints.Lock() mock.calls.DeviceGetPowerManagementLimitConstraints = append(mock.calls.DeviceGetPowerManagementLimitConstraints, callInfo) mock.lockDeviceGetPowerManagementLimitConstraints.Unlock() return mock.DeviceGetPowerManagementLimitConstraintsFunc(device) } // DeviceGetPowerManagementLimitConstraintsCalls gets all the calls that were made to DeviceGetPowerManagementLimitConstraints. // Check the length with: // // len(mockedInterface.DeviceGetPowerManagementLimitConstraintsCalls()) func (mock *Interface) DeviceGetPowerManagementLimitConstraintsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerManagementLimitConstraints.RLock() calls = mock.calls.DeviceGetPowerManagementLimitConstraints mock.lockDeviceGetPowerManagementLimitConstraints.RUnlock() return calls } // DeviceGetPowerManagementMode calls DeviceGetPowerManagementModeFunc. func (mock *Interface) DeviceGetPowerManagementMode(device nvml.Device) (nvml.EnableState, nvml.Return) { if mock.DeviceGetPowerManagementModeFunc == nil { panic("Interface.DeviceGetPowerManagementModeFunc: method is nil but Interface.DeviceGetPowerManagementMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerManagementMode.Lock() mock.calls.DeviceGetPowerManagementMode = append(mock.calls.DeviceGetPowerManagementMode, callInfo) mock.lockDeviceGetPowerManagementMode.Unlock() return mock.DeviceGetPowerManagementModeFunc(device) } // DeviceGetPowerManagementModeCalls gets all the calls that were made to DeviceGetPowerManagementMode. // Check the length with: // // len(mockedInterface.DeviceGetPowerManagementModeCalls()) func (mock *Interface) DeviceGetPowerManagementModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerManagementMode.RLock() calls = mock.calls.DeviceGetPowerManagementMode mock.lockDeviceGetPowerManagementMode.RUnlock() return calls } // DeviceGetPowerMizerMode_v1 calls DeviceGetPowerMizerMode_v1Func. func (mock *Interface) DeviceGetPowerMizerMode_v1(device nvml.Device) (nvml.DevicePowerMizerModes_v1, nvml.Return) { if mock.DeviceGetPowerMizerMode_v1Func == nil { panic("Interface.DeviceGetPowerMizerMode_v1Func: method is nil but Interface.DeviceGetPowerMizerMode_v1 was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerMizerMode_v1.Lock() mock.calls.DeviceGetPowerMizerMode_v1 = append(mock.calls.DeviceGetPowerMizerMode_v1, callInfo) mock.lockDeviceGetPowerMizerMode_v1.Unlock() return mock.DeviceGetPowerMizerMode_v1Func(device) } // DeviceGetPowerMizerMode_v1Calls gets all the calls that were made to DeviceGetPowerMizerMode_v1. // Check the length with: // // len(mockedInterface.DeviceGetPowerMizerMode_v1Calls()) func (mock *Interface) DeviceGetPowerMizerMode_v1Calls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerMizerMode_v1.RLock() calls = mock.calls.DeviceGetPowerMizerMode_v1 mock.lockDeviceGetPowerMizerMode_v1.RUnlock() return calls } // DeviceGetPowerSource calls DeviceGetPowerSourceFunc. func (mock *Interface) DeviceGetPowerSource(device nvml.Device) (nvml.PowerSource, nvml.Return) { if mock.DeviceGetPowerSourceFunc == nil { panic("Interface.DeviceGetPowerSourceFunc: method is nil but Interface.DeviceGetPowerSource was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerSource.Lock() mock.calls.DeviceGetPowerSource = append(mock.calls.DeviceGetPowerSource, callInfo) mock.lockDeviceGetPowerSource.Unlock() return mock.DeviceGetPowerSourceFunc(device) } // DeviceGetPowerSourceCalls gets all the calls that were made to DeviceGetPowerSource. // Check the length with: // // len(mockedInterface.DeviceGetPowerSourceCalls()) func (mock *Interface) DeviceGetPowerSourceCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerSource.RLock() calls = mock.calls.DeviceGetPowerSource mock.lockDeviceGetPowerSource.RUnlock() return calls } // DeviceGetPowerState calls DeviceGetPowerStateFunc. func (mock *Interface) DeviceGetPowerState(device nvml.Device) (nvml.Pstates, nvml.Return) { if mock.DeviceGetPowerStateFunc == nil { panic("Interface.DeviceGetPowerStateFunc: method is nil but Interface.DeviceGetPowerState was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerState.Lock() mock.calls.DeviceGetPowerState = append(mock.calls.DeviceGetPowerState, callInfo) mock.lockDeviceGetPowerState.Unlock() return mock.DeviceGetPowerStateFunc(device) } // DeviceGetPowerStateCalls gets all the calls that were made to DeviceGetPowerState. // Check the length with: // // len(mockedInterface.DeviceGetPowerStateCalls()) func (mock *Interface) DeviceGetPowerStateCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerState.RLock() calls = mock.calls.DeviceGetPowerState mock.lockDeviceGetPowerState.RUnlock() return calls } // DeviceGetPowerUsage calls DeviceGetPowerUsageFunc. func (mock *Interface) DeviceGetPowerUsage(device nvml.Device) (uint32, nvml.Return) { if mock.DeviceGetPowerUsageFunc == nil { panic("Interface.DeviceGetPowerUsageFunc: method is nil but Interface.DeviceGetPowerUsage was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetPowerUsage.Lock() mock.calls.DeviceGetPowerUsage = append(mock.calls.DeviceGetPowerUsage, callInfo) mock.lockDeviceGetPowerUsage.Unlock() return mock.DeviceGetPowerUsageFunc(device) } // DeviceGetPowerUsageCalls gets all the calls that were made to DeviceGetPowerUsage. // Check the length with: // // len(mockedInterface.DeviceGetPowerUsageCalls()) func (mock *Interface) DeviceGetPowerUsageCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetPowerUsage.RLock() calls = mock.calls.DeviceGetPowerUsage mock.lockDeviceGetPowerUsage.RUnlock() return calls } // DeviceGetProcessUtilization calls DeviceGetProcessUtilizationFunc. func (mock *Interface) DeviceGetProcessUtilization(device nvml.Device, v uint64) ([]nvml.ProcessUtilizationSample, nvml.Return) { if mock.DeviceGetProcessUtilizationFunc == nil { panic("Interface.DeviceGetProcessUtilizationFunc: method is nil but Interface.DeviceGetProcessUtilization was just called") } callInfo := struct { Device nvml.Device V uint64 }{ Device: device, V: v, } mock.lockDeviceGetProcessUtilization.Lock() mock.calls.DeviceGetProcessUtilization = append(mock.calls.DeviceGetProcessUtilization, callInfo) mock.lockDeviceGetProcessUtilization.Unlock() return mock.DeviceGetProcessUtilizationFunc(device, v) } // DeviceGetProcessUtilizationCalls gets all the calls that were made to DeviceGetProcessUtilization. // Check the length with: // // len(mockedInterface.DeviceGetProcessUtilizationCalls()) func (mock *Interface) DeviceGetProcessUtilizationCalls() []struct { Device nvml.Device V uint64 } { var calls []struct { Device nvml.Device V uint64 } mock.lockDeviceGetProcessUtilization.RLock() calls = mock.calls.DeviceGetProcessUtilization mock.lockDeviceGetProcessUtilization.RUnlock() return calls } // DeviceGetProcessesUtilizationInfo calls DeviceGetProcessesUtilizationInfoFunc. func (mock *Interface) DeviceGetProcessesUtilizationInfo(device nvml.Device) (nvml.ProcessesUtilizationInfo, nvml.Return) { if mock.DeviceGetProcessesUtilizationInfoFunc == nil { panic("Interface.DeviceGetProcessesUtilizationInfoFunc: method is nil but Interface.DeviceGetProcessesUtilizationInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetProcessesUtilizationInfo.Lock() mock.calls.DeviceGetProcessesUtilizationInfo = append(mock.calls.DeviceGetProcessesUtilizationInfo, callInfo) mock.lockDeviceGetProcessesUtilizationInfo.Unlock() return mock.DeviceGetProcessesUtilizationInfoFunc(device) } // DeviceGetProcessesUtilizationInfoCalls gets all the calls that were made to DeviceGetProcessesUtilizationInfo. // Check the length with: // // len(mockedInterface.DeviceGetProcessesUtilizationInfoCalls()) func (mock *Interface) DeviceGetProcessesUtilizationInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetProcessesUtilizationInfo.RLock() calls = mock.calls.DeviceGetProcessesUtilizationInfo mock.lockDeviceGetProcessesUtilizationInfo.RUnlock() return calls } // DeviceGetRemappedRows calls DeviceGetRemappedRowsFunc. func (mock *Interface) DeviceGetRemappedRows(device nvml.Device) (int, int, bool, bool, nvml.Return) { if mock.DeviceGetRemappedRowsFunc == nil { panic("Interface.DeviceGetRemappedRowsFunc: method is nil but Interface.DeviceGetRemappedRows was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetRemappedRows.Lock() mock.calls.DeviceGetRemappedRows = append(mock.calls.DeviceGetRemappedRows, callInfo) mock.lockDeviceGetRemappedRows.Unlock() return mock.DeviceGetRemappedRowsFunc(device) } // DeviceGetRemappedRowsCalls gets all the calls that were made to DeviceGetRemappedRows. // Check the length with: // // len(mockedInterface.DeviceGetRemappedRowsCalls()) func (mock *Interface) DeviceGetRemappedRowsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetRemappedRows.RLock() calls = mock.calls.DeviceGetRemappedRows mock.lockDeviceGetRemappedRows.RUnlock() return calls } // DeviceGetRepairStatus calls DeviceGetRepairStatusFunc. func (mock *Interface) DeviceGetRepairStatus(device nvml.Device) (nvml.RepairStatus, nvml.Return) { if mock.DeviceGetRepairStatusFunc == nil { panic("Interface.DeviceGetRepairStatusFunc: method is nil but Interface.DeviceGetRepairStatus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetRepairStatus.Lock() mock.calls.DeviceGetRepairStatus = append(mock.calls.DeviceGetRepairStatus, callInfo) mock.lockDeviceGetRepairStatus.Unlock() return mock.DeviceGetRepairStatusFunc(device) } // DeviceGetRepairStatusCalls gets all the calls that were made to DeviceGetRepairStatus. // Check the length with: // // len(mockedInterface.DeviceGetRepairStatusCalls()) func (mock *Interface) DeviceGetRepairStatusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetRepairStatus.RLock() calls = mock.calls.DeviceGetRepairStatus mock.lockDeviceGetRepairStatus.RUnlock() return calls } // DeviceGetRetiredPages calls DeviceGetRetiredPagesFunc. func (mock *Interface) DeviceGetRetiredPages(device nvml.Device, pageRetirementCause nvml.PageRetirementCause) ([]uint64, nvml.Return) { if mock.DeviceGetRetiredPagesFunc == nil { panic("Interface.DeviceGetRetiredPagesFunc: method is nil but Interface.DeviceGetRetiredPages was just called") } callInfo := struct { Device nvml.Device PageRetirementCause nvml.PageRetirementCause }{ Device: device, PageRetirementCause: pageRetirementCause, } mock.lockDeviceGetRetiredPages.Lock() mock.calls.DeviceGetRetiredPages = append(mock.calls.DeviceGetRetiredPages, callInfo) mock.lockDeviceGetRetiredPages.Unlock() return mock.DeviceGetRetiredPagesFunc(device, pageRetirementCause) } // DeviceGetRetiredPagesCalls gets all the calls that were made to DeviceGetRetiredPages. // Check the length with: // // len(mockedInterface.DeviceGetRetiredPagesCalls()) func (mock *Interface) DeviceGetRetiredPagesCalls() []struct { Device nvml.Device PageRetirementCause nvml.PageRetirementCause } { var calls []struct { Device nvml.Device PageRetirementCause nvml.PageRetirementCause } mock.lockDeviceGetRetiredPages.RLock() calls = mock.calls.DeviceGetRetiredPages mock.lockDeviceGetRetiredPages.RUnlock() return calls } // DeviceGetRetiredPagesPendingStatus calls DeviceGetRetiredPagesPendingStatusFunc. func (mock *Interface) DeviceGetRetiredPagesPendingStatus(device nvml.Device) (nvml.EnableState, nvml.Return) { if mock.DeviceGetRetiredPagesPendingStatusFunc == nil { panic("Interface.DeviceGetRetiredPagesPendingStatusFunc: method is nil but Interface.DeviceGetRetiredPagesPendingStatus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetRetiredPagesPendingStatus.Lock() mock.calls.DeviceGetRetiredPagesPendingStatus = append(mock.calls.DeviceGetRetiredPagesPendingStatus, callInfo) mock.lockDeviceGetRetiredPagesPendingStatus.Unlock() return mock.DeviceGetRetiredPagesPendingStatusFunc(device) } // DeviceGetRetiredPagesPendingStatusCalls gets all the calls that were made to DeviceGetRetiredPagesPendingStatus. // Check the length with: // // len(mockedInterface.DeviceGetRetiredPagesPendingStatusCalls()) func (mock *Interface) DeviceGetRetiredPagesPendingStatusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetRetiredPagesPendingStatus.RLock() calls = mock.calls.DeviceGetRetiredPagesPendingStatus mock.lockDeviceGetRetiredPagesPendingStatus.RUnlock() return calls } // DeviceGetRetiredPages_v2 calls DeviceGetRetiredPages_v2Func. func (mock *Interface) DeviceGetRetiredPages_v2(device nvml.Device, pageRetirementCause nvml.PageRetirementCause) ([]uint64, []uint64, nvml.Return) { if mock.DeviceGetRetiredPages_v2Func == nil { panic("Interface.DeviceGetRetiredPages_v2Func: method is nil but Interface.DeviceGetRetiredPages_v2 was just called") } callInfo := struct { Device nvml.Device PageRetirementCause nvml.PageRetirementCause }{ Device: device, PageRetirementCause: pageRetirementCause, } mock.lockDeviceGetRetiredPages_v2.Lock() mock.calls.DeviceGetRetiredPages_v2 = append(mock.calls.DeviceGetRetiredPages_v2, callInfo) mock.lockDeviceGetRetiredPages_v2.Unlock() return mock.DeviceGetRetiredPages_v2Func(device, pageRetirementCause) } // DeviceGetRetiredPages_v2Calls gets all the calls that were made to DeviceGetRetiredPages_v2. // Check the length with: // // len(mockedInterface.DeviceGetRetiredPages_v2Calls()) func (mock *Interface) DeviceGetRetiredPages_v2Calls() []struct { Device nvml.Device PageRetirementCause nvml.PageRetirementCause } { var calls []struct { Device nvml.Device PageRetirementCause nvml.PageRetirementCause } mock.lockDeviceGetRetiredPages_v2.RLock() calls = mock.calls.DeviceGetRetiredPages_v2 mock.lockDeviceGetRetiredPages_v2.RUnlock() return calls } // DeviceGetRowRemapperHistogram calls DeviceGetRowRemapperHistogramFunc. func (mock *Interface) DeviceGetRowRemapperHistogram(device nvml.Device) (nvml.RowRemapperHistogramValues, nvml.Return) { if mock.DeviceGetRowRemapperHistogramFunc == nil { panic("Interface.DeviceGetRowRemapperHistogramFunc: method is nil but Interface.DeviceGetRowRemapperHistogram was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetRowRemapperHistogram.Lock() mock.calls.DeviceGetRowRemapperHistogram = append(mock.calls.DeviceGetRowRemapperHistogram, callInfo) mock.lockDeviceGetRowRemapperHistogram.Unlock() return mock.DeviceGetRowRemapperHistogramFunc(device) } // DeviceGetRowRemapperHistogramCalls gets all the calls that were made to DeviceGetRowRemapperHistogram. // Check the length with: // // len(mockedInterface.DeviceGetRowRemapperHistogramCalls()) func (mock *Interface) DeviceGetRowRemapperHistogramCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetRowRemapperHistogram.RLock() calls = mock.calls.DeviceGetRowRemapperHistogram mock.lockDeviceGetRowRemapperHistogram.RUnlock() return calls } // DeviceGetRunningProcessDetailList calls DeviceGetRunningProcessDetailListFunc. func (mock *Interface) DeviceGetRunningProcessDetailList(device nvml.Device) (nvml.ProcessDetailList, nvml.Return) { if mock.DeviceGetRunningProcessDetailListFunc == nil { panic("Interface.DeviceGetRunningProcessDetailListFunc: method is nil but Interface.DeviceGetRunningProcessDetailList was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetRunningProcessDetailList.Lock() mock.calls.DeviceGetRunningProcessDetailList = append(mock.calls.DeviceGetRunningProcessDetailList, callInfo) mock.lockDeviceGetRunningProcessDetailList.Unlock() return mock.DeviceGetRunningProcessDetailListFunc(device) } // DeviceGetRunningProcessDetailListCalls gets all the calls that were made to DeviceGetRunningProcessDetailList. // Check the length with: // // len(mockedInterface.DeviceGetRunningProcessDetailListCalls()) func (mock *Interface) DeviceGetRunningProcessDetailListCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetRunningProcessDetailList.RLock() calls = mock.calls.DeviceGetRunningProcessDetailList mock.lockDeviceGetRunningProcessDetailList.RUnlock() return calls } // DeviceGetSamples calls DeviceGetSamplesFunc. func (mock *Interface) DeviceGetSamples(device nvml.Device, samplingType nvml.SamplingType, v uint64) (nvml.ValueType, []nvml.Sample, nvml.Return) { if mock.DeviceGetSamplesFunc == nil { panic("Interface.DeviceGetSamplesFunc: method is nil but Interface.DeviceGetSamples was just called") } callInfo := struct { Device nvml.Device SamplingType nvml.SamplingType V uint64 }{ Device: device, SamplingType: samplingType, V: v, } mock.lockDeviceGetSamples.Lock() mock.calls.DeviceGetSamples = append(mock.calls.DeviceGetSamples, callInfo) mock.lockDeviceGetSamples.Unlock() return mock.DeviceGetSamplesFunc(device, samplingType, v) } // DeviceGetSamplesCalls gets all the calls that were made to DeviceGetSamples. // Check the length with: // // len(mockedInterface.DeviceGetSamplesCalls()) func (mock *Interface) DeviceGetSamplesCalls() []struct { Device nvml.Device SamplingType nvml.SamplingType V uint64 } { var calls []struct { Device nvml.Device SamplingType nvml.SamplingType V uint64 } mock.lockDeviceGetSamples.RLock() calls = mock.calls.DeviceGetSamples mock.lockDeviceGetSamples.RUnlock() return calls } // DeviceGetSerial calls DeviceGetSerialFunc. func (mock *Interface) DeviceGetSerial(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetSerialFunc == nil { panic("Interface.DeviceGetSerialFunc: method is nil but Interface.DeviceGetSerial was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSerial.Lock() mock.calls.DeviceGetSerial = append(mock.calls.DeviceGetSerial, callInfo) mock.lockDeviceGetSerial.Unlock() return mock.DeviceGetSerialFunc(device) } // DeviceGetSerialCalls gets all the calls that were made to DeviceGetSerial. // Check the length with: // // len(mockedInterface.DeviceGetSerialCalls()) func (mock *Interface) DeviceGetSerialCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSerial.RLock() calls = mock.calls.DeviceGetSerial mock.lockDeviceGetSerial.RUnlock() return calls } // DeviceGetSramEccErrorStatus calls DeviceGetSramEccErrorStatusFunc. func (mock *Interface) DeviceGetSramEccErrorStatus(device nvml.Device) (nvml.EccSramErrorStatus, nvml.Return) { if mock.DeviceGetSramEccErrorStatusFunc == nil { panic("Interface.DeviceGetSramEccErrorStatusFunc: method is nil but Interface.DeviceGetSramEccErrorStatus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSramEccErrorStatus.Lock() mock.calls.DeviceGetSramEccErrorStatus = append(mock.calls.DeviceGetSramEccErrorStatus, callInfo) mock.lockDeviceGetSramEccErrorStatus.Unlock() return mock.DeviceGetSramEccErrorStatusFunc(device) } // DeviceGetSramEccErrorStatusCalls gets all the calls that were made to DeviceGetSramEccErrorStatus. // Check the length with: // // len(mockedInterface.DeviceGetSramEccErrorStatusCalls()) func (mock *Interface) DeviceGetSramEccErrorStatusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSramEccErrorStatus.RLock() calls = mock.calls.DeviceGetSramEccErrorStatus mock.lockDeviceGetSramEccErrorStatus.RUnlock() return calls } // DeviceGetSramUniqueUncorrectedEccErrorCounts calls DeviceGetSramUniqueUncorrectedEccErrorCountsFunc. func (mock *Interface) DeviceGetSramUniqueUncorrectedEccErrorCounts(device nvml.Device, eccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts) nvml.Return { if mock.DeviceGetSramUniqueUncorrectedEccErrorCountsFunc == nil { panic("Interface.DeviceGetSramUniqueUncorrectedEccErrorCountsFunc: method is nil but Interface.DeviceGetSramUniqueUncorrectedEccErrorCounts was just called") } callInfo := struct { Device nvml.Device EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts }{ Device: device, EccSramUniqueUncorrectedErrorCounts: eccSramUniqueUncorrectedErrorCounts, } mock.lockDeviceGetSramUniqueUncorrectedEccErrorCounts.Lock() mock.calls.DeviceGetSramUniqueUncorrectedEccErrorCounts = append(mock.calls.DeviceGetSramUniqueUncorrectedEccErrorCounts, callInfo) mock.lockDeviceGetSramUniqueUncorrectedEccErrorCounts.Unlock() return mock.DeviceGetSramUniqueUncorrectedEccErrorCountsFunc(device, eccSramUniqueUncorrectedErrorCounts) } // DeviceGetSramUniqueUncorrectedEccErrorCountsCalls gets all the calls that were made to DeviceGetSramUniqueUncorrectedEccErrorCounts. // Check the length with: // // len(mockedInterface.DeviceGetSramUniqueUncorrectedEccErrorCountsCalls()) func (mock *Interface) DeviceGetSramUniqueUncorrectedEccErrorCountsCalls() []struct { Device nvml.Device EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts } { var calls []struct { Device nvml.Device EccSramUniqueUncorrectedErrorCounts *nvml.EccSramUniqueUncorrectedErrorCounts } mock.lockDeviceGetSramUniqueUncorrectedEccErrorCounts.RLock() calls = mock.calls.DeviceGetSramUniqueUncorrectedEccErrorCounts mock.lockDeviceGetSramUniqueUncorrectedEccErrorCounts.RUnlock() return calls } // DeviceGetSupportedClocksEventReasons calls DeviceGetSupportedClocksEventReasonsFunc. func (mock *Interface) DeviceGetSupportedClocksEventReasons(device nvml.Device) (uint64, nvml.Return) { if mock.DeviceGetSupportedClocksEventReasonsFunc == nil { panic("Interface.DeviceGetSupportedClocksEventReasonsFunc: method is nil but Interface.DeviceGetSupportedClocksEventReasons was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSupportedClocksEventReasons.Lock() mock.calls.DeviceGetSupportedClocksEventReasons = append(mock.calls.DeviceGetSupportedClocksEventReasons, callInfo) mock.lockDeviceGetSupportedClocksEventReasons.Unlock() return mock.DeviceGetSupportedClocksEventReasonsFunc(device) } // DeviceGetSupportedClocksEventReasonsCalls gets all the calls that were made to DeviceGetSupportedClocksEventReasons. // Check the length with: // // len(mockedInterface.DeviceGetSupportedClocksEventReasonsCalls()) func (mock *Interface) DeviceGetSupportedClocksEventReasonsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSupportedClocksEventReasons.RLock() calls = mock.calls.DeviceGetSupportedClocksEventReasons mock.lockDeviceGetSupportedClocksEventReasons.RUnlock() return calls } // DeviceGetSupportedClocksThrottleReasons calls DeviceGetSupportedClocksThrottleReasonsFunc. func (mock *Interface) DeviceGetSupportedClocksThrottleReasons(device nvml.Device) (uint64, nvml.Return) { if mock.DeviceGetSupportedClocksThrottleReasonsFunc == nil { panic("Interface.DeviceGetSupportedClocksThrottleReasonsFunc: method is nil but Interface.DeviceGetSupportedClocksThrottleReasons was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSupportedClocksThrottleReasons.Lock() mock.calls.DeviceGetSupportedClocksThrottleReasons = append(mock.calls.DeviceGetSupportedClocksThrottleReasons, callInfo) mock.lockDeviceGetSupportedClocksThrottleReasons.Unlock() return mock.DeviceGetSupportedClocksThrottleReasonsFunc(device) } // DeviceGetSupportedClocksThrottleReasonsCalls gets all the calls that were made to DeviceGetSupportedClocksThrottleReasons. // Check the length with: // // len(mockedInterface.DeviceGetSupportedClocksThrottleReasonsCalls()) func (mock *Interface) DeviceGetSupportedClocksThrottleReasonsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSupportedClocksThrottleReasons.RLock() calls = mock.calls.DeviceGetSupportedClocksThrottleReasons mock.lockDeviceGetSupportedClocksThrottleReasons.RUnlock() return calls } // DeviceGetSupportedEventTypes calls DeviceGetSupportedEventTypesFunc. func (mock *Interface) DeviceGetSupportedEventTypes(device nvml.Device) (uint64, nvml.Return) { if mock.DeviceGetSupportedEventTypesFunc == nil { panic("Interface.DeviceGetSupportedEventTypesFunc: method is nil but Interface.DeviceGetSupportedEventTypes was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSupportedEventTypes.Lock() mock.calls.DeviceGetSupportedEventTypes = append(mock.calls.DeviceGetSupportedEventTypes, callInfo) mock.lockDeviceGetSupportedEventTypes.Unlock() return mock.DeviceGetSupportedEventTypesFunc(device) } // DeviceGetSupportedEventTypesCalls gets all the calls that were made to DeviceGetSupportedEventTypes. // Check the length with: // // len(mockedInterface.DeviceGetSupportedEventTypesCalls()) func (mock *Interface) DeviceGetSupportedEventTypesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSupportedEventTypes.RLock() calls = mock.calls.DeviceGetSupportedEventTypes mock.lockDeviceGetSupportedEventTypes.RUnlock() return calls } // DeviceGetSupportedGraphicsClocks calls DeviceGetSupportedGraphicsClocksFunc. func (mock *Interface) DeviceGetSupportedGraphicsClocks(device nvml.Device, n int) (int, uint32, nvml.Return) { if mock.DeviceGetSupportedGraphicsClocksFunc == nil { panic("Interface.DeviceGetSupportedGraphicsClocksFunc: method is nil but Interface.DeviceGetSupportedGraphicsClocks was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetSupportedGraphicsClocks.Lock() mock.calls.DeviceGetSupportedGraphicsClocks = append(mock.calls.DeviceGetSupportedGraphicsClocks, callInfo) mock.lockDeviceGetSupportedGraphicsClocks.Unlock() return mock.DeviceGetSupportedGraphicsClocksFunc(device, n) } // DeviceGetSupportedGraphicsClocksCalls gets all the calls that were made to DeviceGetSupportedGraphicsClocks. // Check the length with: // // len(mockedInterface.DeviceGetSupportedGraphicsClocksCalls()) func (mock *Interface) DeviceGetSupportedGraphicsClocksCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetSupportedGraphicsClocks.RLock() calls = mock.calls.DeviceGetSupportedGraphicsClocks mock.lockDeviceGetSupportedGraphicsClocks.RUnlock() return calls } // DeviceGetSupportedMemoryClocks calls DeviceGetSupportedMemoryClocksFunc. func (mock *Interface) DeviceGetSupportedMemoryClocks(device nvml.Device) (int, uint32, nvml.Return) { if mock.DeviceGetSupportedMemoryClocksFunc == nil { panic("Interface.DeviceGetSupportedMemoryClocksFunc: method is nil but Interface.DeviceGetSupportedMemoryClocks was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSupportedMemoryClocks.Lock() mock.calls.DeviceGetSupportedMemoryClocks = append(mock.calls.DeviceGetSupportedMemoryClocks, callInfo) mock.lockDeviceGetSupportedMemoryClocks.Unlock() return mock.DeviceGetSupportedMemoryClocksFunc(device) } // DeviceGetSupportedMemoryClocksCalls gets all the calls that were made to DeviceGetSupportedMemoryClocks. // Check the length with: // // len(mockedInterface.DeviceGetSupportedMemoryClocksCalls()) func (mock *Interface) DeviceGetSupportedMemoryClocksCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSupportedMemoryClocks.RLock() calls = mock.calls.DeviceGetSupportedMemoryClocks mock.lockDeviceGetSupportedMemoryClocks.RUnlock() return calls } // DeviceGetSupportedPerformanceStates calls DeviceGetSupportedPerformanceStatesFunc. func (mock *Interface) DeviceGetSupportedPerformanceStates(device nvml.Device) ([]nvml.Pstates, nvml.Return) { if mock.DeviceGetSupportedPerformanceStatesFunc == nil { panic("Interface.DeviceGetSupportedPerformanceStatesFunc: method is nil but Interface.DeviceGetSupportedPerformanceStates was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSupportedPerformanceStates.Lock() mock.calls.DeviceGetSupportedPerformanceStates = append(mock.calls.DeviceGetSupportedPerformanceStates, callInfo) mock.lockDeviceGetSupportedPerformanceStates.Unlock() return mock.DeviceGetSupportedPerformanceStatesFunc(device) } // DeviceGetSupportedPerformanceStatesCalls gets all the calls that were made to DeviceGetSupportedPerformanceStates. // Check the length with: // // len(mockedInterface.DeviceGetSupportedPerformanceStatesCalls()) func (mock *Interface) DeviceGetSupportedPerformanceStatesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSupportedPerformanceStates.RLock() calls = mock.calls.DeviceGetSupportedPerformanceStates mock.lockDeviceGetSupportedPerformanceStates.RUnlock() return calls } // DeviceGetSupportedVgpus calls DeviceGetSupportedVgpusFunc. func (mock *Interface) DeviceGetSupportedVgpus(device nvml.Device) ([]nvml.VgpuTypeId, nvml.Return) { if mock.DeviceGetSupportedVgpusFunc == nil { panic("Interface.DeviceGetSupportedVgpusFunc: method is nil but Interface.DeviceGetSupportedVgpus was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetSupportedVgpus.Lock() mock.calls.DeviceGetSupportedVgpus = append(mock.calls.DeviceGetSupportedVgpus, callInfo) mock.lockDeviceGetSupportedVgpus.Unlock() return mock.DeviceGetSupportedVgpusFunc(device) } // DeviceGetSupportedVgpusCalls gets all the calls that were made to DeviceGetSupportedVgpus. // Check the length with: // // len(mockedInterface.DeviceGetSupportedVgpusCalls()) func (mock *Interface) DeviceGetSupportedVgpusCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetSupportedVgpus.RLock() calls = mock.calls.DeviceGetSupportedVgpus mock.lockDeviceGetSupportedVgpus.RUnlock() return calls } // DeviceGetTargetFanSpeed calls DeviceGetTargetFanSpeedFunc. func (mock *Interface) DeviceGetTargetFanSpeed(device nvml.Device, n int) (int, nvml.Return) { if mock.DeviceGetTargetFanSpeedFunc == nil { panic("Interface.DeviceGetTargetFanSpeedFunc: method is nil but Interface.DeviceGetTargetFanSpeed was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceGetTargetFanSpeed.Lock() mock.calls.DeviceGetTargetFanSpeed = append(mock.calls.DeviceGetTargetFanSpeed, callInfo) mock.lockDeviceGetTargetFanSpeed.Unlock() return mock.DeviceGetTargetFanSpeedFunc(device, n) } // DeviceGetTargetFanSpeedCalls gets all the calls that were made to DeviceGetTargetFanSpeed. // Check the length with: // // len(mockedInterface.DeviceGetTargetFanSpeedCalls()) func (mock *Interface) DeviceGetTargetFanSpeedCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceGetTargetFanSpeed.RLock() calls = mock.calls.DeviceGetTargetFanSpeed mock.lockDeviceGetTargetFanSpeed.RUnlock() return calls } // DeviceGetTemperature calls DeviceGetTemperatureFunc. func (mock *Interface) DeviceGetTemperature(device nvml.Device, temperatureSensors nvml.TemperatureSensors) (uint32, nvml.Return) { if mock.DeviceGetTemperatureFunc == nil { panic("Interface.DeviceGetTemperatureFunc: method is nil but Interface.DeviceGetTemperature was just called") } callInfo := struct { Device nvml.Device TemperatureSensors nvml.TemperatureSensors }{ Device: device, TemperatureSensors: temperatureSensors, } mock.lockDeviceGetTemperature.Lock() mock.calls.DeviceGetTemperature = append(mock.calls.DeviceGetTemperature, callInfo) mock.lockDeviceGetTemperature.Unlock() return mock.DeviceGetTemperatureFunc(device, temperatureSensors) } // DeviceGetTemperatureCalls gets all the calls that were made to DeviceGetTemperature. // Check the length with: // // len(mockedInterface.DeviceGetTemperatureCalls()) func (mock *Interface) DeviceGetTemperatureCalls() []struct { Device nvml.Device TemperatureSensors nvml.TemperatureSensors } { var calls []struct { Device nvml.Device TemperatureSensors nvml.TemperatureSensors } mock.lockDeviceGetTemperature.RLock() calls = mock.calls.DeviceGetTemperature mock.lockDeviceGetTemperature.RUnlock() return calls } // DeviceGetTemperatureThreshold calls DeviceGetTemperatureThresholdFunc. func (mock *Interface) DeviceGetTemperatureThreshold(device nvml.Device, temperatureThresholds nvml.TemperatureThresholds) (uint32, nvml.Return) { if mock.DeviceGetTemperatureThresholdFunc == nil { panic("Interface.DeviceGetTemperatureThresholdFunc: method is nil but Interface.DeviceGetTemperatureThreshold was just called") } callInfo := struct { Device nvml.Device TemperatureThresholds nvml.TemperatureThresholds }{ Device: device, TemperatureThresholds: temperatureThresholds, } mock.lockDeviceGetTemperatureThreshold.Lock() mock.calls.DeviceGetTemperatureThreshold = append(mock.calls.DeviceGetTemperatureThreshold, callInfo) mock.lockDeviceGetTemperatureThreshold.Unlock() return mock.DeviceGetTemperatureThresholdFunc(device, temperatureThresholds) } // DeviceGetTemperatureThresholdCalls gets all the calls that were made to DeviceGetTemperatureThreshold. // Check the length with: // // len(mockedInterface.DeviceGetTemperatureThresholdCalls()) func (mock *Interface) DeviceGetTemperatureThresholdCalls() []struct { Device nvml.Device TemperatureThresholds nvml.TemperatureThresholds } { var calls []struct { Device nvml.Device TemperatureThresholds nvml.TemperatureThresholds } mock.lockDeviceGetTemperatureThreshold.RLock() calls = mock.calls.DeviceGetTemperatureThreshold mock.lockDeviceGetTemperatureThreshold.RUnlock() return calls } // DeviceGetTemperatureV calls DeviceGetTemperatureVFunc. func (mock *Interface) DeviceGetTemperatureV(device nvml.Device) nvml.TemperatureHandler { if mock.DeviceGetTemperatureVFunc == nil { panic("Interface.DeviceGetTemperatureVFunc: method is nil but Interface.DeviceGetTemperatureV was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetTemperatureV.Lock() mock.calls.DeviceGetTemperatureV = append(mock.calls.DeviceGetTemperatureV, callInfo) mock.lockDeviceGetTemperatureV.Unlock() return mock.DeviceGetTemperatureVFunc(device) } // DeviceGetTemperatureVCalls gets all the calls that were made to DeviceGetTemperatureV. // Check the length with: // // len(mockedInterface.DeviceGetTemperatureVCalls()) func (mock *Interface) DeviceGetTemperatureVCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetTemperatureV.RLock() calls = mock.calls.DeviceGetTemperatureV mock.lockDeviceGetTemperatureV.RUnlock() return calls } // DeviceGetThermalSettings calls DeviceGetThermalSettingsFunc. func (mock *Interface) DeviceGetThermalSettings(device nvml.Device, v uint32) (nvml.GpuThermalSettings, nvml.Return) { if mock.DeviceGetThermalSettingsFunc == nil { panic("Interface.DeviceGetThermalSettingsFunc: method is nil but Interface.DeviceGetThermalSettings was just called") } callInfo := struct { Device nvml.Device V uint32 }{ Device: device, V: v, } mock.lockDeviceGetThermalSettings.Lock() mock.calls.DeviceGetThermalSettings = append(mock.calls.DeviceGetThermalSettings, callInfo) mock.lockDeviceGetThermalSettings.Unlock() return mock.DeviceGetThermalSettingsFunc(device, v) } // DeviceGetThermalSettingsCalls gets all the calls that were made to DeviceGetThermalSettings. // Check the length with: // // len(mockedInterface.DeviceGetThermalSettingsCalls()) func (mock *Interface) DeviceGetThermalSettingsCalls() []struct { Device nvml.Device V uint32 } { var calls []struct { Device nvml.Device V uint32 } mock.lockDeviceGetThermalSettings.RLock() calls = mock.calls.DeviceGetThermalSettings mock.lockDeviceGetThermalSettings.RUnlock() return calls } // DeviceGetTopologyCommonAncestor calls DeviceGetTopologyCommonAncestorFunc. func (mock *Interface) DeviceGetTopologyCommonAncestor(device1 nvml.Device, device2 nvml.Device) (nvml.GpuTopologyLevel, nvml.Return) { if mock.DeviceGetTopologyCommonAncestorFunc == nil { panic("Interface.DeviceGetTopologyCommonAncestorFunc: method is nil but Interface.DeviceGetTopologyCommonAncestor was just called") } callInfo := struct { Device1 nvml.Device Device2 nvml.Device }{ Device1: device1, Device2: device2, } mock.lockDeviceGetTopologyCommonAncestor.Lock() mock.calls.DeviceGetTopologyCommonAncestor = append(mock.calls.DeviceGetTopologyCommonAncestor, callInfo) mock.lockDeviceGetTopologyCommonAncestor.Unlock() return mock.DeviceGetTopologyCommonAncestorFunc(device1, device2) } // DeviceGetTopologyCommonAncestorCalls gets all the calls that were made to DeviceGetTopologyCommonAncestor. // Check the length with: // // len(mockedInterface.DeviceGetTopologyCommonAncestorCalls()) func (mock *Interface) DeviceGetTopologyCommonAncestorCalls() []struct { Device1 nvml.Device Device2 nvml.Device } { var calls []struct { Device1 nvml.Device Device2 nvml.Device } mock.lockDeviceGetTopologyCommonAncestor.RLock() calls = mock.calls.DeviceGetTopologyCommonAncestor mock.lockDeviceGetTopologyCommonAncestor.RUnlock() return calls } // DeviceGetTopologyNearestGpus calls DeviceGetTopologyNearestGpusFunc. func (mock *Interface) DeviceGetTopologyNearestGpus(device nvml.Device, gpuTopologyLevel nvml.GpuTopologyLevel) ([]nvml.Device, nvml.Return) { if mock.DeviceGetTopologyNearestGpusFunc == nil { panic("Interface.DeviceGetTopologyNearestGpusFunc: method is nil but Interface.DeviceGetTopologyNearestGpus was just called") } callInfo := struct { Device nvml.Device GpuTopologyLevel nvml.GpuTopologyLevel }{ Device: device, GpuTopologyLevel: gpuTopologyLevel, } mock.lockDeviceGetTopologyNearestGpus.Lock() mock.calls.DeviceGetTopologyNearestGpus = append(mock.calls.DeviceGetTopologyNearestGpus, callInfo) mock.lockDeviceGetTopologyNearestGpus.Unlock() return mock.DeviceGetTopologyNearestGpusFunc(device, gpuTopologyLevel) } // DeviceGetTopologyNearestGpusCalls gets all the calls that were made to DeviceGetTopologyNearestGpus. // Check the length with: // // len(mockedInterface.DeviceGetTopologyNearestGpusCalls()) func (mock *Interface) DeviceGetTopologyNearestGpusCalls() []struct { Device nvml.Device GpuTopologyLevel nvml.GpuTopologyLevel } { var calls []struct { Device nvml.Device GpuTopologyLevel nvml.GpuTopologyLevel } mock.lockDeviceGetTopologyNearestGpus.RLock() calls = mock.calls.DeviceGetTopologyNearestGpus mock.lockDeviceGetTopologyNearestGpus.RUnlock() return calls } // DeviceGetTotalEccErrors calls DeviceGetTotalEccErrorsFunc. func (mock *Interface) DeviceGetTotalEccErrors(device nvml.Device, memoryErrorType nvml.MemoryErrorType, eccCounterType nvml.EccCounterType) (uint64, nvml.Return) { if mock.DeviceGetTotalEccErrorsFunc == nil { panic("Interface.DeviceGetTotalEccErrorsFunc: method is nil but Interface.DeviceGetTotalEccErrors was just called") } callInfo := struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType }{ Device: device, MemoryErrorType: memoryErrorType, EccCounterType: eccCounterType, } mock.lockDeviceGetTotalEccErrors.Lock() mock.calls.DeviceGetTotalEccErrors = append(mock.calls.DeviceGetTotalEccErrors, callInfo) mock.lockDeviceGetTotalEccErrors.Unlock() return mock.DeviceGetTotalEccErrorsFunc(device, memoryErrorType, eccCounterType) } // DeviceGetTotalEccErrorsCalls gets all the calls that were made to DeviceGetTotalEccErrors. // Check the length with: // // len(mockedInterface.DeviceGetTotalEccErrorsCalls()) func (mock *Interface) DeviceGetTotalEccErrorsCalls() []struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } { var calls []struct { Device nvml.Device MemoryErrorType nvml.MemoryErrorType EccCounterType nvml.EccCounterType } mock.lockDeviceGetTotalEccErrors.RLock() calls = mock.calls.DeviceGetTotalEccErrors mock.lockDeviceGetTotalEccErrors.RUnlock() return calls } // DeviceGetTotalEnergyConsumption calls DeviceGetTotalEnergyConsumptionFunc. func (mock *Interface) DeviceGetTotalEnergyConsumption(device nvml.Device) (uint64, nvml.Return) { if mock.DeviceGetTotalEnergyConsumptionFunc == nil { panic("Interface.DeviceGetTotalEnergyConsumptionFunc: method is nil but Interface.DeviceGetTotalEnergyConsumption was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetTotalEnergyConsumption.Lock() mock.calls.DeviceGetTotalEnergyConsumption = append(mock.calls.DeviceGetTotalEnergyConsumption, callInfo) mock.lockDeviceGetTotalEnergyConsumption.Unlock() return mock.DeviceGetTotalEnergyConsumptionFunc(device) } // DeviceGetTotalEnergyConsumptionCalls gets all the calls that were made to DeviceGetTotalEnergyConsumption. // Check the length with: // // len(mockedInterface.DeviceGetTotalEnergyConsumptionCalls()) func (mock *Interface) DeviceGetTotalEnergyConsumptionCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetTotalEnergyConsumption.RLock() calls = mock.calls.DeviceGetTotalEnergyConsumption mock.lockDeviceGetTotalEnergyConsumption.RUnlock() return calls } // DeviceGetUUID calls DeviceGetUUIDFunc. func (mock *Interface) DeviceGetUUID(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetUUIDFunc == nil { panic("Interface.DeviceGetUUIDFunc: method is nil but Interface.DeviceGetUUID was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetUUID.Lock() mock.calls.DeviceGetUUID = append(mock.calls.DeviceGetUUID, callInfo) mock.lockDeviceGetUUID.Unlock() return mock.DeviceGetUUIDFunc(device) } // DeviceGetUUIDCalls gets all the calls that were made to DeviceGetUUID. // Check the length with: // // len(mockedInterface.DeviceGetUUIDCalls()) func (mock *Interface) DeviceGetUUIDCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetUUID.RLock() calls = mock.calls.DeviceGetUUID mock.lockDeviceGetUUID.RUnlock() return calls } // DeviceGetUtilizationRates calls DeviceGetUtilizationRatesFunc. func (mock *Interface) DeviceGetUtilizationRates(device nvml.Device) (nvml.Utilization, nvml.Return) { if mock.DeviceGetUtilizationRatesFunc == nil { panic("Interface.DeviceGetUtilizationRatesFunc: method is nil but Interface.DeviceGetUtilizationRates was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetUtilizationRates.Lock() mock.calls.DeviceGetUtilizationRates = append(mock.calls.DeviceGetUtilizationRates, callInfo) mock.lockDeviceGetUtilizationRates.Unlock() return mock.DeviceGetUtilizationRatesFunc(device) } // DeviceGetUtilizationRatesCalls gets all the calls that were made to DeviceGetUtilizationRates. // Check the length with: // // len(mockedInterface.DeviceGetUtilizationRatesCalls()) func (mock *Interface) DeviceGetUtilizationRatesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetUtilizationRates.RLock() calls = mock.calls.DeviceGetUtilizationRates mock.lockDeviceGetUtilizationRates.RUnlock() return calls } // DeviceGetVbiosVersion calls DeviceGetVbiosVersionFunc. func (mock *Interface) DeviceGetVbiosVersion(device nvml.Device) (string, nvml.Return) { if mock.DeviceGetVbiosVersionFunc == nil { panic("Interface.DeviceGetVbiosVersionFunc: method is nil but Interface.DeviceGetVbiosVersion was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVbiosVersion.Lock() mock.calls.DeviceGetVbiosVersion = append(mock.calls.DeviceGetVbiosVersion, callInfo) mock.lockDeviceGetVbiosVersion.Unlock() return mock.DeviceGetVbiosVersionFunc(device) } // DeviceGetVbiosVersionCalls gets all the calls that were made to DeviceGetVbiosVersion. // Check the length with: // // len(mockedInterface.DeviceGetVbiosVersionCalls()) func (mock *Interface) DeviceGetVbiosVersionCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVbiosVersion.RLock() calls = mock.calls.DeviceGetVbiosVersion mock.lockDeviceGetVbiosVersion.RUnlock() return calls } // DeviceGetVgpuCapabilities calls DeviceGetVgpuCapabilitiesFunc. func (mock *Interface) DeviceGetVgpuCapabilities(device nvml.Device, deviceVgpuCapability nvml.DeviceVgpuCapability) (bool, nvml.Return) { if mock.DeviceGetVgpuCapabilitiesFunc == nil { panic("Interface.DeviceGetVgpuCapabilitiesFunc: method is nil but Interface.DeviceGetVgpuCapabilities was just called") } callInfo := struct { Device nvml.Device DeviceVgpuCapability nvml.DeviceVgpuCapability }{ Device: device, DeviceVgpuCapability: deviceVgpuCapability, } mock.lockDeviceGetVgpuCapabilities.Lock() mock.calls.DeviceGetVgpuCapabilities = append(mock.calls.DeviceGetVgpuCapabilities, callInfo) mock.lockDeviceGetVgpuCapabilities.Unlock() return mock.DeviceGetVgpuCapabilitiesFunc(device, deviceVgpuCapability) } // DeviceGetVgpuCapabilitiesCalls gets all the calls that were made to DeviceGetVgpuCapabilities. // Check the length with: // // len(mockedInterface.DeviceGetVgpuCapabilitiesCalls()) func (mock *Interface) DeviceGetVgpuCapabilitiesCalls() []struct { Device nvml.Device DeviceVgpuCapability nvml.DeviceVgpuCapability } { var calls []struct { Device nvml.Device DeviceVgpuCapability nvml.DeviceVgpuCapability } mock.lockDeviceGetVgpuCapabilities.RLock() calls = mock.calls.DeviceGetVgpuCapabilities mock.lockDeviceGetVgpuCapabilities.RUnlock() return calls } // DeviceGetVgpuHeterogeneousMode calls DeviceGetVgpuHeterogeneousModeFunc. func (mock *Interface) DeviceGetVgpuHeterogeneousMode(device nvml.Device) (nvml.VgpuHeterogeneousMode, nvml.Return) { if mock.DeviceGetVgpuHeterogeneousModeFunc == nil { panic("Interface.DeviceGetVgpuHeterogeneousModeFunc: method is nil but Interface.DeviceGetVgpuHeterogeneousMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVgpuHeterogeneousMode.Lock() mock.calls.DeviceGetVgpuHeterogeneousMode = append(mock.calls.DeviceGetVgpuHeterogeneousMode, callInfo) mock.lockDeviceGetVgpuHeterogeneousMode.Unlock() return mock.DeviceGetVgpuHeterogeneousModeFunc(device) } // DeviceGetVgpuHeterogeneousModeCalls gets all the calls that were made to DeviceGetVgpuHeterogeneousMode. // Check the length with: // // len(mockedInterface.DeviceGetVgpuHeterogeneousModeCalls()) func (mock *Interface) DeviceGetVgpuHeterogeneousModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVgpuHeterogeneousMode.RLock() calls = mock.calls.DeviceGetVgpuHeterogeneousMode mock.lockDeviceGetVgpuHeterogeneousMode.RUnlock() return calls } // DeviceGetVgpuInstancesUtilizationInfo calls DeviceGetVgpuInstancesUtilizationInfoFunc. func (mock *Interface) DeviceGetVgpuInstancesUtilizationInfo(device nvml.Device) (nvml.VgpuInstancesUtilizationInfo, nvml.Return) { if mock.DeviceGetVgpuInstancesUtilizationInfoFunc == nil { panic("Interface.DeviceGetVgpuInstancesUtilizationInfoFunc: method is nil but Interface.DeviceGetVgpuInstancesUtilizationInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVgpuInstancesUtilizationInfo.Lock() mock.calls.DeviceGetVgpuInstancesUtilizationInfo = append(mock.calls.DeviceGetVgpuInstancesUtilizationInfo, callInfo) mock.lockDeviceGetVgpuInstancesUtilizationInfo.Unlock() return mock.DeviceGetVgpuInstancesUtilizationInfoFunc(device) } // DeviceGetVgpuInstancesUtilizationInfoCalls gets all the calls that were made to DeviceGetVgpuInstancesUtilizationInfo. // Check the length with: // // len(mockedInterface.DeviceGetVgpuInstancesUtilizationInfoCalls()) func (mock *Interface) DeviceGetVgpuInstancesUtilizationInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVgpuInstancesUtilizationInfo.RLock() calls = mock.calls.DeviceGetVgpuInstancesUtilizationInfo mock.lockDeviceGetVgpuInstancesUtilizationInfo.RUnlock() return calls } // DeviceGetVgpuMetadata calls DeviceGetVgpuMetadataFunc. func (mock *Interface) DeviceGetVgpuMetadata(device nvml.Device) (nvml.VgpuPgpuMetadata, nvml.Return) { if mock.DeviceGetVgpuMetadataFunc == nil { panic("Interface.DeviceGetVgpuMetadataFunc: method is nil but Interface.DeviceGetVgpuMetadata was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVgpuMetadata.Lock() mock.calls.DeviceGetVgpuMetadata = append(mock.calls.DeviceGetVgpuMetadata, callInfo) mock.lockDeviceGetVgpuMetadata.Unlock() return mock.DeviceGetVgpuMetadataFunc(device) } // DeviceGetVgpuMetadataCalls gets all the calls that were made to DeviceGetVgpuMetadata. // Check the length with: // // len(mockedInterface.DeviceGetVgpuMetadataCalls()) func (mock *Interface) DeviceGetVgpuMetadataCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVgpuMetadata.RLock() calls = mock.calls.DeviceGetVgpuMetadata mock.lockDeviceGetVgpuMetadata.RUnlock() return calls } // DeviceGetVgpuProcessUtilization calls DeviceGetVgpuProcessUtilizationFunc. func (mock *Interface) DeviceGetVgpuProcessUtilization(device nvml.Device, v uint64) ([]nvml.VgpuProcessUtilizationSample, nvml.Return) { if mock.DeviceGetVgpuProcessUtilizationFunc == nil { panic("Interface.DeviceGetVgpuProcessUtilizationFunc: method is nil but Interface.DeviceGetVgpuProcessUtilization was just called") } callInfo := struct { Device nvml.Device V uint64 }{ Device: device, V: v, } mock.lockDeviceGetVgpuProcessUtilization.Lock() mock.calls.DeviceGetVgpuProcessUtilization = append(mock.calls.DeviceGetVgpuProcessUtilization, callInfo) mock.lockDeviceGetVgpuProcessUtilization.Unlock() return mock.DeviceGetVgpuProcessUtilizationFunc(device, v) } // DeviceGetVgpuProcessUtilizationCalls gets all the calls that were made to DeviceGetVgpuProcessUtilization. // Check the length with: // // len(mockedInterface.DeviceGetVgpuProcessUtilizationCalls()) func (mock *Interface) DeviceGetVgpuProcessUtilizationCalls() []struct { Device nvml.Device V uint64 } { var calls []struct { Device nvml.Device V uint64 } mock.lockDeviceGetVgpuProcessUtilization.RLock() calls = mock.calls.DeviceGetVgpuProcessUtilization mock.lockDeviceGetVgpuProcessUtilization.RUnlock() return calls } // DeviceGetVgpuProcessesUtilizationInfo calls DeviceGetVgpuProcessesUtilizationInfoFunc. func (mock *Interface) DeviceGetVgpuProcessesUtilizationInfo(device nvml.Device) (nvml.VgpuProcessesUtilizationInfo, nvml.Return) { if mock.DeviceGetVgpuProcessesUtilizationInfoFunc == nil { panic("Interface.DeviceGetVgpuProcessesUtilizationInfoFunc: method is nil but Interface.DeviceGetVgpuProcessesUtilizationInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVgpuProcessesUtilizationInfo.Lock() mock.calls.DeviceGetVgpuProcessesUtilizationInfo = append(mock.calls.DeviceGetVgpuProcessesUtilizationInfo, callInfo) mock.lockDeviceGetVgpuProcessesUtilizationInfo.Unlock() return mock.DeviceGetVgpuProcessesUtilizationInfoFunc(device) } // DeviceGetVgpuProcessesUtilizationInfoCalls gets all the calls that were made to DeviceGetVgpuProcessesUtilizationInfo. // Check the length with: // // len(mockedInterface.DeviceGetVgpuProcessesUtilizationInfoCalls()) func (mock *Interface) DeviceGetVgpuProcessesUtilizationInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVgpuProcessesUtilizationInfo.RLock() calls = mock.calls.DeviceGetVgpuProcessesUtilizationInfo mock.lockDeviceGetVgpuProcessesUtilizationInfo.RUnlock() return calls } // DeviceGetVgpuSchedulerCapabilities calls DeviceGetVgpuSchedulerCapabilitiesFunc. func (mock *Interface) DeviceGetVgpuSchedulerCapabilities(device nvml.Device) (nvml.VgpuSchedulerCapabilities, nvml.Return) { if mock.DeviceGetVgpuSchedulerCapabilitiesFunc == nil { panic("Interface.DeviceGetVgpuSchedulerCapabilitiesFunc: method is nil but Interface.DeviceGetVgpuSchedulerCapabilities was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVgpuSchedulerCapabilities.Lock() mock.calls.DeviceGetVgpuSchedulerCapabilities = append(mock.calls.DeviceGetVgpuSchedulerCapabilities, callInfo) mock.lockDeviceGetVgpuSchedulerCapabilities.Unlock() return mock.DeviceGetVgpuSchedulerCapabilitiesFunc(device) } // DeviceGetVgpuSchedulerCapabilitiesCalls gets all the calls that were made to DeviceGetVgpuSchedulerCapabilities. // Check the length with: // // len(mockedInterface.DeviceGetVgpuSchedulerCapabilitiesCalls()) func (mock *Interface) DeviceGetVgpuSchedulerCapabilitiesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVgpuSchedulerCapabilities.RLock() calls = mock.calls.DeviceGetVgpuSchedulerCapabilities mock.lockDeviceGetVgpuSchedulerCapabilities.RUnlock() return calls } // DeviceGetVgpuSchedulerLog calls DeviceGetVgpuSchedulerLogFunc. func (mock *Interface) DeviceGetVgpuSchedulerLog(device nvml.Device) (nvml.VgpuSchedulerLog, nvml.Return) { if mock.DeviceGetVgpuSchedulerLogFunc == nil { panic("Interface.DeviceGetVgpuSchedulerLogFunc: method is nil but Interface.DeviceGetVgpuSchedulerLog was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVgpuSchedulerLog.Lock() mock.calls.DeviceGetVgpuSchedulerLog = append(mock.calls.DeviceGetVgpuSchedulerLog, callInfo) mock.lockDeviceGetVgpuSchedulerLog.Unlock() return mock.DeviceGetVgpuSchedulerLogFunc(device) } // DeviceGetVgpuSchedulerLogCalls gets all the calls that were made to DeviceGetVgpuSchedulerLog. // Check the length with: // // len(mockedInterface.DeviceGetVgpuSchedulerLogCalls()) func (mock *Interface) DeviceGetVgpuSchedulerLogCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVgpuSchedulerLog.RLock() calls = mock.calls.DeviceGetVgpuSchedulerLog mock.lockDeviceGetVgpuSchedulerLog.RUnlock() return calls } // DeviceGetVgpuSchedulerState calls DeviceGetVgpuSchedulerStateFunc. func (mock *Interface) DeviceGetVgpuSchedulerState(device nvml.Device) (nvml.VgpuSchedulerGetState, nvml.Return) { if mock.DeviceGetVgpuSchedulerStateFunc == nil { panic("Interface.DeviceGetVgpuSchedulerStateFunc: method is nil but Interface.DeviceGetVgpuSchedulerState was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVgpuSchedulerState.Lock() mock.calls.DeviceGetVgpuSchedulerState = append(mock.calls.DeviceGetVgpuSchedulerState, callInfo) mock.lockDeviceGetVgpuSchedulerState.Unlock() return mock.DeviceGetVgpuSchedulerStateFunc(device) } // DeviceGetVgpuSchedulerStateCalls gets all the calls that were made to DeviceGetVgpuSchedulerState. // Check the length with: // // len(mockedInterface.DeviceGetVgpuSchedulerStateCalls()) func (mock *Interface) DeviceGetVgpuSchedulerStateCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVgpuSchedulerState.RLock() calls = mock.calls.DeviceGetVgpuSchedulerState mock.lockDeviceGetVgpuSchedulerState.RUnlock() return calls } // DeviceGetVgpuTypeCreatablePlacements calls DeviceGetVgpuTypeCreatablePlacementsFunc. func (mock *Interface) DeviceGetVgpuTypeCreatablePlacements(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { if mock.DeviceGetVgpuTypeCreatablePlacementsFunc == nil { panic("Interface.DeviceGetVgpuTypeCreatablePlacementsFunc: method is nil but Interface.DeviceGetVgpuTypeCreatablePlacements was just called") } callInfo := struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId }{ Device: device, VgpuTypeId: vgpuTypeId, } mock.lockDeviceGetVgpuTypeCreatablePlacements.Lock() mock.calls.DeviceGetVgpuTypeCreatablePlacements = append(mock.calls.DeviceGetVgpuTypeCreatablePlacements, callInfo) mock.lockDeviceGetVgpuTypeCreatablePlacements.Unlock() return mock.DeviceGetVgpuTypeCreatablePlacementsFunc(device, vgpuTypeId) } // DeviceGetVgpuTypeCreatablePlacementsCalls gets all the calls that were made to DeviceGetVgpuTypeCreatablePlacements. // Check the length with: // // len(mockedInterface.DeviceGetVgpuTypeCreatablePlacementsCalls()) func (mock *Interface) DeviceGetVgpuTypeCreatablePlacementsCalls() []struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId } { var calls []struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId } mock.lockDeviceGetVgpuTypeCreatablePlacements.RLock() calls = mock.calls.DeviceGetVgpuTypeCreatablePlacements mock.lockDeviceGetVgpuTypeCreatablePlacements.RUnlock() return calls } // DeviceGetVgpuTypeSupportedPlacements calls DeviceGetVgpuTypeSupportedPlacementsFunc. func (mock *Interface) DeviceGetVgpuTypeSupportedPlacements(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuPlacementList, nvml.Return) { if mock.DeviceGetVgpuTypeSupportedPlacementsFunc == nil { panic("Interface.DeviceGetVgpuTypeSupportedPlacementsFunc: method is nil but Interface.DeviceGetVgpuTypeSupportedPlacements was just called") } callInfo := struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId }{ Device: device, VgpuTypeId: vgpuTypeId, } mock.lockDeviceGetVgpuTypeSupportedPlacements.Lock() mock.calls.DeviceGetVgpuTypeSupportedPlacements = append(mock.calls.DeviceGetVgpuTypeSupportedPlacements, callInfo) mock.lockDeviceGetVgpuTypeSupportedPlacements.Unlock() return mock.DeviceGetVgpuTypeSupportedPlacementsFunc(device, vgpuTypeId) } // DeviceGetVgpuTypeSupportedPlacementsCalls gets all the calls that were made to DeviceGetVgpuTypeSupportedPlacements. // Check the length with: // // len(mockedInterface.DeviceGetVgpuTypeSupportedPlacementsCalls()) func (mock *Interface) DeviceGetVgpuTypeSupportedPlacementsCalls() []struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId } { var calls []struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId } mock.lockDeviceGetVgpuTypeSupportedPlacements.RLock() calls = mock.calls.DeviceGetVgpuTypeSupportedPlacements mock.lockDeviceGetVgpuTypeSupportedPlacements.RUnlock() return calls } // DeviceGetVgpuUtilization calls DeviceGetVgpuUtilizationFunc. func (mock *Interface) DeviceGetVgpuUtilization(device nvml.Device, v uint64) (nvml.ValueType, []nvml.VgpuInstanceUtilizationSample, nvml.Return) { if mock.DeviceGetVgpuUtilizationFunc == nil { panic("Interface.DeviceGetVgpuUtilizationFunc: method is nil but Interface.DeviceGetVgpuUtilization was just called") } callInfo := struct { Device nvml.Device V uint64 }{ Device: device, V: v, } mock.lockDeviceGetVgpuUtilization.Lock() mock.calls.DeviceGetVgpuUtilization = append(mock.calls.DeviceGetVgpuUtilization, callInfo) mock.lockDeviceGetVgpuUtilization.Unlock() return mock.DeviceGetVgpuUtilizationFunc(device, v) } // DeviceGetVgpuUtilizationCalls gets all the calls that were made to DeviceGetVgpuUtilization. // Check the length with: // // len(mockedInterface.DeviceGetVgpuUtilizationCalls()) func (mock *Interface) DeviceGetVgpuUtilizationCalls() []struct { Device nvml.Device V uint64 } { var calls []struct { Device nvml.Device V uint64 } mock.lockDeviceGetVgpuUtilization.RLock() calls = mock.calls.DeviceGetVgpuUtilization mock.lockDeviceGetVgpuUtilization.RUnlock() return calls } // DeviceGetViolationStatus calls DeviceGetViolationStatusFunc. func (mock *Interface) DeviceGetViolationStatus(device nvml.Device, perfPolicyType nvml.PerfPolicyType) (nvml.ViolationTime, nvml.Return) { if mock.DeviceGetViolationStatusFunc == nil { panic("Interface.DeviceGetViolationStatusFunc: method is nil but Interface.DeviceGetViolationStatus was just called") } callInfo := struct { Device nvml.Device PerfPolicyType nvml.PerfPolicyType }{ Device: device, PerfPolicyType: perfPolicyType, } mock.lockDeviceGetViolationStatus.Lock() mock.calls.DeviceGetViolationStatus = append(mock.calls.DeviceGetViolationStatus, callInfo) mock.lockDeviceGetViolationStatus.Unlock() return mock.DeviceGetViolationStatusFunc(device, perfPolicyType) } // DeviceGetViolationStatusCalls gets all the calls that were made to DeviceGetViolationStatus. // Check the length with: // // len(mockedInterface.DeviceGetViolationStatusCalls()) func (mock *Interface) DeviceGetViolationStatusCalls() []struct { Device nvml.Device PerfPolicyType nvml.PerfPolicyType } { var calls []struct { Device nvml.Device PerfPolicyType nvml.PerfPolicyType } mock.lockDeviceGetViolationStatus.RLock() calls = mock.calls.DeviceGetViolationStatus mock.lockDeviceGetViolationStatus.RUnlock() return calls } // DeviceGetVirtualizationMode calls DeviceGetVirtualizationModeFunc. func (mock *Interface) DeviceGetVirtualizationMode(device nvml.Device) (nvml.GpuVirtualizationMode, nvml.Return) { if mock.DeviceGetVirtualizationModeFunc == nil { panic("Interface.DeviceGetVirtualizationModeFunc: method is nil but Interface.DeviceGetVirtualizationMode was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceGetVirtualizationMode.Lock() mock.calls.DeviceGetVirtualizationMode = append(mock.calls.DeviceGetVirtualizationMode, callInfo) mock.lockDeviceGetVirtualizationMode.Unlock() return mock.DeviceGetVirtualizationModeFunc(device) } // DeviceGetVirtualizationModeCalls gets all the calls that were made to DeviceGetVirtualizationMode. // Check the length with: // // len(mockedInterface.DeviceGetVirtualizationModeCalls()) func (mock *Interface) DeviceGetVirtualizationModeCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceGetVirtualizationMode.RLock() calls = mock.calls.DeviceGetVirtualizationMode mock.lockDeviceGetVirtualizationMode.RUnlock() return calls } // DeviceIsMigDeviceHandle calls DeviceIsMigDeviceHandleFunc. func (mock *Interface) DeviceIsMigDeviceHandle(device nvml.Device) (bool, nvml.Return) { if mock.DeviceIsMigDeviceHandleFunc == nil { panic("Interface.DeviceIsMigDeviceHandleFunc: method is nil but Interface.DeviceIsMigDeviceHandle was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceIsMigDeviceHandle.Lock() mock.calls.DeviceIsMigDeviceHandle = append(mock.calls.DeviceIsMigDeviceHandle, callInfo) mock.lockDeviceIsMigDeviceHandle.Unlock() return mock.DeviceIsMigDeviceHandleFunc(device) } // DeviceIsMigDeviceHandleCalls gets all the calls that were made to DeviceIsMigDeviceHandle. // Check the length with: // // len(mockedInterface.DeviceIsMigDeviceHandleCalls()) func (mock *Interface) DeviceIsMigDeviceHandleCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceIsMigDeviceHandle.RLock() calls = mock.calls.DeviceIsMigDeviceHandle mock.lockDeviceIsMigDeviceHandle.RUnlock() return calls } // DeviceModifyDrainState calls DeviceModifyDrainStateFunc. func (mock *Interface) DeviceModifyDrainState(pciInfo *nvml.PciInfo, enableState nvml.EnableState) nvml.Return { if mock.DeviceModifyDrainStateFunc == nil { panic("Interface.DeviceModifyDrainStateFunc: method is nil but Interface.DeviceModifyDrainState was just called") } callInfo := struct { PciInfo *nvml.PciInfo EnableState nvml.EnableState }{ PciInfo: pciInfo, EnableState: enableState, } mock.lockDeviceModifyDrainState.Lock() mock.calls.DeviceModifyDrainState = append(mock.calls.DeviceModifyDrainState, callInfo) mock.lockDeviceModifyDrainState.Unlock() return mock.DeviceModifyDrainStateFunc(pciInfo, enableState) } // DeviceModifyDrainStateCalls gets all the calls that were made to DeviceModifyDrainState. // Check the length with: // // len(mockedInterface.DeviceModifyDrainStateCalls()) func (mock *Interface) DeviceModifyDrainStateCalls() []struct { PciInfo *nvml.PciInfo EnableState nvml.EnableState } { var calls []struct { PciInfo *nvml.PciInfo EnableState nvml.EnableState } mock.lockDeviceModifyDrainState.RLock() calls = mock.calls.DeviceModifyDrainState mock.lockDeviceModifyDrainState.RUnlock() return calls } // DeviceOnSameBoard calls DeviceOnSameBoardFunc. func (mock *Interface) DeviceOnSameBoard(device1 nvml.Device, device2 nvml.Device) (int, nvml.Return) { if mock.DeviceOnSameBoardFunc == nil { panic("Interface.DeviceOnSameBoardFunc: method is nil but Interface.DeviceOnSameBoard was just called") } callInfo := struct { Device1 nvml.Device Device2 nvml.Device }{ Device1: device1, Device2: device2, } mock.lockDeviceOnSameBoard.Lock() mock.calls.DeviceOnSameBoard = append(mock.calls.DeviceOnSameBoard, callInfo) mock.lockDeviceOnSameBoard.Unlock() return mock.DeviceOnSameBoardFunc(device1, device2) } // DeviceOnSameBoardCalls gets all the calls that were made to DeviceOnSameBoard. // Check the length with: // // len(mockedInterface.DeviceOnSameBoardCalls()) func (mock *Interface) DeviceOnSameBoardCalls() []struct { Device1 nvml.Device Device2 nvml.Device } { var calls []struct { Device1 nvml.Device Device2 nvml.Device } mock.lockDeviceOnSameBoard.RLock() calls = mock.calls.DeviceOnSameBoard mock.lockDeviceOnSameBoard.RUnlock() return calls } // DevicePowerSmoothingActivatePresetProfile calls DevicePowerSmoothingActivatePresetProfileFunc. func (mock *Interface) DevicePowerSmoothingActivatePresetProfile(device nvml.Device, powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { if mock.DevicePowerSmoothingActivatePresetProfileFunc == nil { panic("Interface.DevicePowerSmoothingActivatePresetProfileFunc: method is nil but Interface.DevicePowerSmoothingActivatePresetProfile was just called") } callInfo := struct { Device nvml.Device PowerSmoothingProfile *nvml.PowerSmoothingProfile }{ Device: device, PowerSmoothingProfile: powerSmoothingProfile, } mock.lockDevicePowerSmoothingActivatePresetProfile.Lock() mock.calls.DevicePowerSmoothingActivatePresetProfile = append(mock.calls.DevicePowerSmoothingActivatePresetProfile, callInfo) mock.lockDevicePowerSmoothingActivatePresetProfile.Unlock() return mock.DevicePowerSmoothingActivatePresetProfileFunc(device, powerSmoothingProfile) } // DevicePowerSmoothingActivatePresetProfileCalls gets all the calls that were made to DevicePowerSmoothingActivatePresetProfile. // Check the length with: // // len(mockedInterface.DevicePowerSmoothingActivatePresetProfileCalls()) func (mock *Interface) DevicePowerSmoothingActivatePresetProfileCalls() []struct { Device nvml.Device PowerSmoothingProfile *nvml.PowerSmoothingProfile } { var calls []struct { Device nvml.Device PowerSmoothingProfile *nvml.PowerSmoothingProfile } mock.lockDevicePowerSmoothingActivatePresetProfile.RLock() calls = mock.calls.DevicePowerSmoothingActivatePresetProfile mock.lockDevicePowerSmoothingActivatePresetProfile.RUnlock() return calls } // DevicePowerSmoothingSetState calls DevicePowerSmoothingSetStateFunc. func (mock *Interface) DevicePowerSmoothingSetState(device nvml.Device, powerSmoothingState *nvml.PowerSmoothingState) nvml.Return { if mock.DevicePowerSmoothingSetStateFunc == nil { panic("Interface.DevicePowerSmoothingSetStateFunc: method is nil but Interface.DevicePowerSmoothingSetState was just called") } callInfo := struct { Device nvml.Device PowerSmoothingState *nvml.PowerSmoothingState }{ Device: device, PowerSmoothingState: powerSmoothingState, } mock.lockDevicePowerSmoothingSetState.Lock() mock.calls.DevicePowerSmoothingSetState = append(mock.calls.DevicePowerSmoothingSetState, callInfo) mock.lockDevicePowerSmoothingSetState.Unlock() return mock.DevicePowerSmoothingSetStateFunc(device, powerSmoothingState) } // DevicePowerSmoothingSetStateCalls gets all the calls that were made to DevicePowerSmoothingSetState. // Check the length with: // // len(mockedInterface.DevicePowerSmoothingSetStateCalls()) func (mock *Interface) DevicePowerSmoothingSetStateCalls() []struct { Device nvml.Device PowerSmoothingState *nvml.PowerSmoothingState } { var calls []struct { Device nvml.Device PowerSmoothingState *nvml.PowerSmoothingState } mock.lockDevicePowerSmoothingSetState.RLock() calls = mock.calls.DevicePowerSmoothingSetState mock.lockDevicePowerSmoothingSetState.RUnlock() return calls } // DevicePowerSmoothingUpdatePresetProfileParam calls DevicePowerSmoothingUpdatePresetProfileParamFunc. func (mock *Interface) DevicePowerSmoothingUpdatePresetProfileParam(device nvml.Device, powerSmoothingProfile *nvml.PowerSmoothingProfile) nvml.Return { if mock.DevicePowerSmoothingUpdatePresetProfileParamFunc == nil { panic("Interface.DevicePowerSmoothingUpdatePresetProfileParamFunc: method is nil but Interface.DevicePowerSmoothingUpdatePresetProfileParam was just called") } callInfo := struct { Device nvml.Device PowerSmoothingProfile *nvml.PowerSmoothingProfile }{ Device: device, PowerSmoothingProfile: powerSmoothingProfile, } mock.lockDevicePowerSmoothingUpdatePresetProfileParam.Lock() mock.calls.DevicePowerSmoothingUpdatePresetProfileParam = append(mock.calls.DevicePowerSmoothingUpdatePresetProfileParam, callInfo) mock.lockDevicePowerSmoothingUpdatePresetProfileParam.Unlock() return mock.DevicePowerSmoothingUpdatePresetProfileParamFunc(device, powerSmoothingProfile) } // DevicePowerSmoothingUpdatePresetProfileParamCalls gets all the calls that were made to DevicePowerSmoothingUpdatePresetProfileParam. // Check the length with: // // len(mockedInterface.DevicePowerSmoothingUpdatePresetProfileParamCalls()) func (mock *Interface) DevicePowerSmoothingUpdatePresetProfileParamCalls() []struct { Device nvml.Device PowerSmoothingProfile *nvml.PowerSmoothingProfile } { var calls []struct { Device nvml.Device PowerSmoothingProfile *nvml.PowerSmoothingProfile } mock.lockDevicePowerSmoothingUpdatePresetProfileParam.RLock() calls = mock.calls.DevicePowerSmoothingUpdatePresetProfileParam mock.lockDevicePowerSmoothingUpdatePresetProfileParam.RUnlock() return calls } // DeviceQueryDrainState calls DeviceQueryDrainStateFunc. func (mock *Interface) DeviceQueryDrainState(pciInfo *nvml.PciInfo) (nvml.EnableState, nvml.Return) { if mock.DeviceQueryDrainStateFunc == nil { panic("Interface.DeviceQueryDrainStateFunc: method is nil but Interface.DeviceQueryDrainState was just called") } callInfo := struct { PciInfo *nvml.PciInfo }{ PciInfo: pciInfo, } mock.lockDeviceQueryDrainState.Lock() mock.calls.DeviceQueryDrainState = append(mock.calls.DeviceQueryDrainState, callInfo) mock.lockDeviceQueryDrainState.Unlock() return mock.DeviceQueryDrainStateFunc(pciInfo) } // DeviceQueryDrainStateCalls gets all the calls that were made to DeviceQueryDrainState. // Check the length with: // // len(mockedInterface.DeviceQueryDrainStateCalls()) func (mock *Interface) DeviceQueryDrainStateCalls() []struct { PciInfo *nvml.PciInfo } { var calls []struct { PciInfo *nvml.PciInfo } mock.lockDeviceQueryDrainState.RLock() calls = mock.calls.DeviceQueryDrainState mock.lockDeviceQueryDrainState.RUnlock() return calls } // DeviceReadWritePRM_v1 calls DeviceReadWritePRM_v1Func. func (mock *Interface) DeviceReadWritePRM_v1(device nvml.Device, pRMTLV_v1 *nvml.PRMTLV_v1) nvml.Return { if mock.DeviceReadWritePRM_v1Func == nil { panic("Interface.DeviceReadWritePRM_v1Func: method is nil but Interface.DeviceReadWritePRM_v1 was just called") } callInfo := struct { Device nvml.Device PRMTLV_v1 *nvml.PRMTLV_v1 }{ Device: device, PRMTLV_v1: pRMTLV_v1, } mock.lockDeviceReadWritePRM_v1.Lock() mock.calls.DeviceReadWritePRM_v1 = append(mock.calls.DeviceReadWritePRM_v1, callInfo) mock.lockDeviceReadWritePRM_v1.Unlock() return mock.DeviceReadWritePRM_v1Func(device, pRMTLV_v1) } // DeviceReadWritePRM_v1Calls gets all the calls that were made to DeviceReadWritePRM_v1. // Check the length with: // // len(mockedInterface.DeviceReadWritePRM_v1Calls()) func (mock *Interface) DeviceReadWritePRM_v1Calls() []struct { Device nvml.Device PRMTLV_v1 *nvml.PRMTLV_v1 } { var calls []struct { Device nvml.Device PRMTLV_v1 *nvml.PRMTLV_v1 } mock.lockDeviceReadWritePRM_v1.RLock() calls = mock.calls.DeviceReadWritePRM_v1 mock.lockDeviceReadWritePRM_v1.RUnlock() return calls } // DeviceRegisterEvents calls DeviceRegisterEventsFunc. func (mock *Interface) DeviceRegisterEvents(device nvml.Device, v uint64, eventSet nvml.EventSet) nvml.Return { if mock.DeviceRegisterEventsFunc == nil { panic("Interface.DeviceRegisterEventsFunc: method is nil but Interface.DeviceRegisterEvents was just called") } callInfo := struct { Device nvml.Device V uint64 EventSet nvml.EventSet }{ Device: device, V: v, EventSet: eventSet, } mock.lockDeviceRegisterEvents.Lock() mock.calls.DeviceRegisterEvents = append(mock.calls.DeviceRegisterEvents, callInfo) mock.lockDeviceRegisterEvents.Unlock() return mock.DeviceRegisterEventsFunc(device, v, eventSet) } // DeviceRegisterEventsCalls gets all the calls that were made to DeviceRegisterEvents. // Check the length with: // // len(mockedInterface.DeviceRegisterEventsCalls()) func (mock *Interface) DeviceRegisterEventsCalls() []struct { Device nvml.Device V uint64 EventSet nvml.EventSet } { var calls []struct { Device nvml.Device V uint64 EventSet nvml.EventSet } mock.lockDeviceRegisterEvents.RLock() calls = mock.calls.DeviceRegisterEvents mock.lockDeviceRegisterEvents.RUnlock() return calls } // DeviceRemoveGpu calls DeviceRemoveGpuFunc. func (mock *Interface) DeviceRemoveGpu(pciInfo *nvml.PciInfo) nvml.Return { if mock.DeviceRemoveGpuFunc == nil { panic("Interface.DeviceRemoveGpuFunc: method is nil but Interface.DeviceRemoveGpu was just called") } callInfo := struct { PciInfo *nvml.PciInfo }{ PciInfo: pciInfo, } mock.lockDeviceRemoveGpu.Lock() mock.calls.DeviceRemoveGpu = append(mock.calls.DeviceRemoveGpu, callInfo) mock.lockDeviceRemoveGpu.Unlock() return mock.DeviceRemoveGpuFunc(pciInfo) } // DeviceRemoveGpuCalls gets all the calls that were made to DeviceRemoveGpu. // Check the length with: // // len(mockedInterface.DeviceRemoveGpuCalls()) func (mock *Interface) DeviceRemoveGpuCalls() []struct { PciInfo *nvml.PciInfo } { var calls []struct { PciInfo *nvml.PciInfo } mock.lockDeviceRemoveGpu.RLock() calls = mock.calls.DeviceRemoveGpu mock.lockDeviceRemoveGpu.RUnlock() return calls } // DeviceRemoveGpu_v2 calls DeviceRemoveGpu_v2Func. func (mock *Interface) DeviceRemoveGpu_v2(pciInfo *nvml.PciInfo, detachGpuState nvml.DetachGpuState, pcieLinkState nvml.PcieLinkState) nvml.Return { if mock.DeviceRemoveGpu_v2Func == nil { panic("Interface.DeviceRemoveGpu_v2Func: method is nil but Interface.DeviceRemoveGpu_v2 was just called") } callInfo := struct { PciInfo *nvml.PciInfo DetachGpuState nvml.DetachGpuState PcieLinkState nvml.PcieLinkState }{ PciInfo: pciInfo, DetachGpuState: detachGpuState, PcieLinkState: pcieLinkState, } mock.lockDeviceRemoveGpu_v2.Lock() mock.calls.DeviceRemoveGpu_v2 = append(mock.calls.DeviceRemoveGpu_v2, callInfo) mock.lockDeviceRemoveGpu_v2.Unlock() return mock.DeviceRemoveGpu_v2Func(pciInfo, detachGpuState, pcieLinkState) } // DeviceRemoveGpu_v2Calls gets all the calls that were made to DeviceRemoveGpu_v2. // Check the length with: // // len(mockedInterface.DeviceRemoveGpu_v2Calls()) func (mock *Interface) DeviceRemoveGpu_v2Calls() []struct { PciInfo *nvml.PciInfo DetachGpuState nvml.DetachGpuState PcieLinkState nvml.PcieLinkState } { var calls []struct { PciInfo *nvml.PciInfo DetachGpuState nvml.DetachGpuState PcieLinkState nvml.PcieLinkState } mock.lockDeviceRemoveGpu_v2.RLock() calls = mock.calls.DeviceRemoveGpu_v2 mock.lockDeviceRemoveGpu_v2.RUnlock() return calls } // DeviceResetApplicationsClocks calls DeviceResetApplicationsClocksFunc. func (mock *Interface) DeviceResetApplicationsClocks(device nvml.Device) nvml.Return { if mock.DeviceResetApplicationsClocksFunc == nil { panic("Interface.DeviceResetApplicationsClocksFunc: method is nil but Interface.DeviceResetApplicationsClocks was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceResetApplicationsClocks.Lock() mock.calls.DeviceResetApplicationsClocks = append(mock.calls.DeviceResetApplicationsClocks, callInfo) mock.lockDeviceResetApplicationsClocks.Unlock() return mock.DeviceResetApplicationsClocksFunc(device) } // DeviceResetApplicationsClocksCalls gets all the calls that were made to DeviceResetApplicationsClocks. // Check the length with: // // len(mockedInterface.DeviceResetApplicationsClocksCalls()) func (mock *Interface) DeviceResetApplicationsClocksCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceResetApplicationsClocks.RLock() calls = mock.calls.DeviceResetApplicationsClocks mock.lockDeviceResetApplicationsClocks.RUnlock() return calls } // DeviceResetGpuLockedClocks calls DeviceResetGpuLockedClocksFunc. func (mock *Interface) DeviceResetGpuLockedClocks(device nvml.Device) nvml.Return { if mock.DeviceResetGpuLockedClocksFunc == nil { panic("Interface.DeviceResetGpuLockedClocksFunc: method is nil but Interface.DeviceResetGpuLockedClocks was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceResetGpuLockedClocks.Lock() mock.calls.DeviceResetGpuLockedClocks = append(mock.calls.DeviceResetGpuLockedClocks, callInfo) mock.lockDeviceResetGpuLockedClocks.Unlock() return mock.DeviceResetGpuLockedClocksFunc(device) } // DeviceResetGpuLockedClocksCalls gets all the calls that were made to DeviceResetGpuLockedClocks. // Check the length with: // // len(mockedInterface.DeviceResetGpuLockedClocksCalls()) func (mock *Interface) DeviceResetGpuLockedClocksCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceResetGpuLockedClocks.RLock() calls = mock.calls.DeviceResetGpuLockedClocks mock.lockDeviceResetGpuLockedClocks.RUnlock() return calls } // DeviceResetMemoryLockedClocks calls DeviceResetMemoryLockedClocksFunc. func (mock *Interface) DeviceResetMemoryLockedClocks(device nvml.Device) nvml.Return { if mock.DeviceResetMemoryLockedClocksFunc == nil { panic("Interface.DeviceResetMemoryLockedClocksFunc: method is nil but Interface.DeviceResetMemoryLockedClocks was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceResetMemoryLockedClocks.Lock() mock.calls.DeviceResetMemoryLockedClocks = append(mock.calls.DeviceResetMemoryLockedClocks, callInfo) mock.lockDeviceResetMemoryLockedClocks.Unlock() return mock.DeviceResetMemoryLockedClocksFunc(device) } // DeviceResetMemoryLockedClocksCalls gets all the calls that were made to DeviceResetMemoryLockedClocks. // Check the length with: // // len(mockedInterface.DeviceResetMemoryLockedClocksCalls()) func (mock *Interface) DeviceResetMemoryLockedClocksCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceResetMemoryLockedClocks.RLock() calls = mock.calls.DeviceResetMemoryLockedClocks mock.lockDeviceResetMemoryLockedClocks.RUnlock() return calls } // DeviceResetNvLinkErrorCounters calls DeviceResetNvLinkErrorCountersFunc. func (mock *Interface) DeviceResetNvLinkErrorCounters(device nvml.Device, n int) nvml.Return { if mock.DeviceResetNvLinkErrorCountersFunc == nil { panic("Interface.DeviceResetNvLinkErrorCountersFunc: method is nil but Interface.DeviceResetNvLinkErrorCounters was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceResetNvLinkErrorCounters.Lock() mock.calls.DeviceResetNvLinkErrorCounters = append(mock.calls.DeviceResetNvLinkErrorCounters, callInfo) mock.lockDeviceResetNvLinkErrorCounters.Unlock() return mock.DeviceResetNvLinkErrorCountersFunc(device, n) } // DeviceResetNvLinkErrorCountersCalls gets all the calls that were made to DeviceResetNvLinkErrorCounters. // Check the length with: // // len(mockedInterface.DeviceResetNvLinkErrorCountersCalls()) func (mock *Interface) DeviceResetNvLinkErrorCountersCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceResetNvLinkErrorCounters.RLock() calls = mock.calls.DeviceResetNvLinkErrorCounters mock.lockDeviceResetNvLinkErrorCounters.RUnlock() return calls } // DeviceResetNvLinkUtilizationCounter calls DeviceResetNvLinkUtilizationCounterFunc. func (mock *Interface) DeviceResetNvLinkUtilizationCounter(device nvml.Device, n1 int, n2 int) nvml.Return { if mock.DeviceResetNvLinkUtilizationCounterFunc == nil { panic("Interface.DeviceResetNvLinkUtilizationCounterFunc: method is nil but Interface.DeviceResetNvLinkUtilizationCounter was just called") } callInfo := struct { Device nvml.Device N1 int N2 int }{ Device: device, N1: n1, N2: n2, } mock.lockDeviceResetNvLinkUtilizationCounter.Lock() mock.calls.DeviceResetNvLinkUtilizationCounter = append(mock.calls.DeviceResetNvLinkUtilizationCounter, callInfo) mock.lockDeviceResetNvLinkUtilizationCounter.Unlock() return mock.DeviceResetNvLinkUtilizationCounterFunc(device, n1, n2) } // DeviceResetNvLinkUtilizationCounterCalls gets all the calls that were made to DeviceResetNvLinkUtilizationCounter. // Check the length with: // // len(mockedInterface.DeviceResetNvLinkUtilizationCounterCalls()) func (mock *Interface) DeviceResetNvLinkUtilizationCounterCalls() []struct { Device nvml.Device N1 int N2 int } { var calls []struct { Device nvml.Device N1 int N2 int } mock.lockDeviceResetNvLinkUtilizationCounter.RLock() calls = mock.calls.DeviceResetNvLinkUtilizationCounter mock.lockDeviceResetNvLinkUtilizationCounter.RUnlock() return calls } // DeviceSetAPIRestriction calls DeviceSetAPIRestrictionFunc. func (mock *Interface) DeviceSetAPIRestriction(device nvml.Device, restrictedAPI nvml.RestrictedAPI, enableState nvml.EnableState) nvml.Return { if mock.DeviceSetAPIRestrictionFunc == nil { panic("Interface.DeviceSetAPIRestrictionFunc: method is nil but Interface.DeviceSetAPIRestriction was just called") } callInfo := struct { Device nvml.Device RestrictedAPI nvml.RestrictedAPI EnableState nvml.EnableState }{ Device: device, RestrictedAPI: restrictedAPI, EnableState: enableState, } mock.lockDeviceSetAPIRestriction.Lock() mock.calls.DeviceSetAPIRestriction = append(mock.calls.DeviceSetAPIRestriction, callInfo) mock.lockDeviceSetAPIRestriction.Unlock() return mock.DeviceSetAPIRestrictionFunc(device, restrictedAPI, enableState) } // DeviceSetAPIRestrictionCalls gets all the calls that were made to DeviceSetAPIRestriction. // Check the length with: // // len(mockedInterface.DeviceSetAPIRestrictionCalls()) func (mock *Interface) DeviceSetAPIRestrictionCalls() []struct { Device nvml.Device RestrictedAPI nvml.RestrictedAPI EnableState nvml.EnableState } { var calls []struct { Device nvml.Device RestrictedAPI nvml.RestrictedAPI EnableState nvml.EnableState } mock.lockDeviceSetAPIRestriction.RLock() calls = mock.calls.DeviceSetAPIRestriction mock.lockDeviceSetAPIRestriction.RUnlock() return calls } // DeviceSetAccountingMode calls DeviceSetAccountingModeFunc. func (mock *Interface) DeviceSetAccountingMode(device nvml.Device, enableState nvml.EnableState) nvml.Return { if mock.DeviceSetAccountingModeFunc == nil { panic("Interface.DeviceSetAccountingModeFunc: method is nil but Interface.DeviceSetAccountingMode was just called") } callInfo := struct { Device nvml.Device EnableState nvml.EnableState }{ Device: device, EnableState: enableState, } mock.lockDeviceSetAccountingMode.Lock() mock.calls.DeviceSetAccountingMode = append(mock.calls.DeviceSetAccountingMode, callInfo) mock.lockDeviceSetAccountingMode.Unlock() return mock.DeviceSetAccountingModeFunc(device, enableState) } // DeviceSetAccountingModeCalls gets all the calls that were made to DeviceSetAccountingMode. // Check the length with: // // len(mockedInterface.DeviceSetAccountingModeCalls()) func (mock *Interface) DeviceSetAccountingModeCalls() []struct { Device nvml.Device EnableState nvml.EnableState } { var calls []struct { Device nvml.Device EnableState nvml.EnableState } mock.lockDeviceSetAccountingMode.RLock() calls = mock.calls.DeviceSetAccountingMode mock.lockDeviceSetAccountingMode.RUnlock() return calls } // DeviceSetApplicationsClocks calls DeviceSetApplicationsClocksFunc. func (mock *Interface) DeviceSetApplicationsClocks(device nvml.Device, v1 uint32, v2 uint32) nvml.Return { if mock.DeviceSetApplicationsClocksFunc == nil { panic("Interface.DeviceSetApplicationsClocksFunc: method is nil but Interface.DeviceSetApplicationsClocks was just called") } callInfo := struct { Device nvml.Device V1 uint32 V2 uint32 }{ Device: device, V1: v1, V2: v2, } mock.lockDeviceSetApplicationsClocks.Lock() mock.calls.DeviceSetApplicationsClocks = append(mock.calls.DeviceSetApplicationsClocks, callInfo) mock.lockDeviceSetApplicationsClocks.Unlock() return mock.DeviceSetApplicationsClocksFunc(device, v1, v2) } // DeviceSetApplicationsClocksCalls gets all the calls that were made to DeviceSetApplicationsClocks. // Check the length with: // // len(mockedInterface.DeviceSetApplicationsClocksCalls()) func (mock *Interface) DeviceSetApplicationsClocksCalls() []struct { Device nvml.Device V1 uint32 V2 uint32 } { var calls []struct { Device nvml.Device V1 uint32 V2 uint32 } mock.lockDeviceSetApplicationsClocks.RLock() calls = mock.calls.DeviceSetApplicationsClocks mock.lockDeviceSetApplicationsClocks.RUnlock() return calls } // DeviceSetAutoBoostedClocksEnabled calls DeviceSetAutoBoostedClocksEnabledFunc. func (mock *Interface) DeviceSetAutoBoostedClocksEnabled(device nvml.Device, enableState nvml.EnableState) nvml.Return { if mock.DeviceSetAutoBoostedClocksEnabledFunc == nil { panic("Interface.DeviceSetAutoBoostedClocksEnabledFunc: method is nil but Interface.DeviceSetAutoBoostedClocksEnabled was just called") } callInfo := struct { Device nvml.Device EnableState nvml.EnableState }{ Device: device, EnableState: enableState, } mock.lockDeviceSetAutoBoostedClocksEnabled.Lock() mock.calls.DeviceSetAutoBoostedClocksEnabled = append(mock.calls.DeviceSetAutoBoostedClocksEnabled, callInfo) mock.lockDeviceSetAutoBoostedClocksEnabled.Unlock() return mock.DeviceSetAutoBoostedClocksEnabledFunc(device, enableState) } // DeviceSetAutoBoostedClocksEnabledCalls gets all the calls that were made to DeviceSetAutoBoostedClocksEnabled. // Check the length with: // // len(mockedInterface.DeviceSetAutoBoostedClocksEnabledCalls()) func (mock *Interface) DeviceSetAutoBoostedClocksEnabledCalls() []struct { Device nvml.Device EnableState nvml.EnableState } { var calls []struct { Device nvml.Device EnableState nvml.EnableState } mock.lockDeviceSetAutoBoostedClocksEnabled.RLock() calls = mock.calls.DeviceSetAutoBoostedClocksEnabled mock.lockDeviceSetAutoBoostedClocksEnabled.RUnlock() return calls } // DeviceSetClockOffsets calls DeviceSetClockOffsetsFunc. func (mock *Interface) DeviceSetClockOffsets(device nvml.Device, clockOffset nvml.ClockOffset) nvml.Return { if mock.DeviceSetClockOffsetsFunc == nil { panic("Interface.DeviceSetClockOffsetsFunc: method is nil but Interface.DeviceSetClockOffsets was just called") } callInfo := struct { Device nvml.Device ClockOffset nvml.ClockOffset }{ Device: device, ClockOffset: clockOffset, } mock.lockDeviceSetClockOffsets.Lock() mock.calls.DeviceSetClockOffsets = append(mock.calls.DeviceSetClockOffsets, callInfo) mock.lockDeviceSetClockOffsets.Unlock() return mock.DeviceSetClockOffsetsFunc(device, clockOffset) } // DeviceSetClockOffsetsCalls gets all the calls that were made to DeviceSetClockOffsets. // Check the length with: // // len(mockedInterface.DeviceSetClockOffsetsCalls()) func (mock *Interface) DeviceSetClockOffsetsCalls() []struct { Device nvml.Device ClockOffset nvml.ClockOffset } { var calls []struct { Device nvml.Device ClockOffset nvml.ClockOffset } mock.lockDeviceSetClockOffsets.RLock() calls = mock.calls.DeviceSetClockOffsets mock.lockDeviceSetClockOffsets.RUnlock() return calls } // DeviceSetComputeMode calls DeviceSetComputeModeFunc. func (mock *Interface) DeviceSetComputeMode(device nvml.Device, computeMode nvml.ComputeMode) nvml.Return { if mock.DeviceSetComputeModeFunc == nil { panic("Interface.DeviceSetComputeModeFunc: method is nil but Interface.DeviceSetComputeMode was just called") } callInfo := struct { Device nvml.Device ComputeMode nvml.ComputeMode }{ Device: device, ComputeMode: computeMode, } mock.lockDeviceSetComputeMode.Lock() mock.calls.DeviceSetComputeMode = append(mock.calls.DeviceSetComputeMode, callInfo) mock.lockDeviceSetComputeMode.Unlock() return mock.DeviceSetComputeModeFunc(device, computeMode) } // DeviceSetComputeModeCalls gets all the calls that were made to DeviceSetComputeMode. // Check the length with: // // len(mockedInterface.DeviceSetComputeModeCalls()) func (mock *Interface) DeviceSetComputeModeCalls() []struct { Device nvml.Device ComputeMode nvml.ComputeMode } { var calls []struct { Device nvml.Device ComputeMode nvml.ComputeMode } mock.lockDeviceSetComputeMode.RLock() calls = mock.calls.DeviceSetComputeMode mock.lockDeviceSetComputeMode.RUnlock() return calls } // DeviceSetConfComputeUnprotectedMemSize calls DeviceSetConfComputeUnprotectedMemSizeFunc. func (mock *Interface) DeviceSetConfComputeUnprotectedMemSize(device nvml.Device, v uint64) nvml.Return { if mock.DeviceSetConfComputeUnprotectedMemSizeFunc == nil { panic("Interface.DeviceSetConfComputeUnprotectedMemSizeFunc: method is nil but Interface.DeviceSetConfComputeUnprotectedMemSize was just called") } callInfo := struct { Device nvml.Device V uint64 }{ Device: device, V: v, } mock.lockDeviceSetConfComputeUnprotectedMemSize.Lock() mock.calls.DeviceSetConfComputeUnprotectedMemSize = append(mock.calls.DeviceSetConfComputeUnprotectedMemSize, callInfo) mock.lockDeviceSetConfComputeUnprotectedMemSize.Unlock() return mock.DeviceSetConfComputeUnprotectedMemSizeFunc(device, v) } // DeviceSetConfComputeUnprotectedMemSizeCalls gets all the calls that were made to DeviceSetConfComputeUnprotectedMemSize. // Check the length with: // // len(mockedInterface.DeviceSetConfComputeUnprotectedMemSizeCalls()) func (mock *Interface) DeviceSetConfComputeUnprotectedMemSizeCalls() []struct { Device nvml.Device V uint64 } { var calls []struct { Device nvml.Device V uint64 } mock.lockDeviceSetConfComputeUnprotectedMemSize.RLock() calls = mock.calls.DeviceSetConfComputeUnprotectedMemSize mock.lockDeviceSetConfComputeUnprotectedMemSize.RUnlock() return calls } // DeviceSetCpuAffinity calls DeviceSetCpuAffinityFunc. func (mock *Interface) DeviceSetCpuAffinity(device nvml.Device) nvml.Return { if mock.DeviceSetCpuAffinityFunc == nil { panic("Interface.DeviceSetCpuAffinityFunc: method is nil but Interface.DeviceSetCpuAffinity was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceSetCpuAffinity.Lock() mock.calls.DeviceSetCpuAffinity = append(mock.calls.DeviceSetCpuAffinity, callInfo) mock.lockDeviceSetCpuAffinity.Unlock() return mock.DeviceSetCpuAffinityFunc(device) } // DeviceSetCpuAffinityCalls gets all the calls that were made to DeviceSetCpuAffinity. // Check the length with: // // len(mockedInterface.DeviceSetCpuAffinityCalls()) func (mock *Interface) DeviceSetCpuAffinityCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceSetCpuAffinity.RLock() calls = mock.calls.DeviceSetCpuAffinity mock.lockDeviceSetCpuAffinity.RUnlock() return calls } // DeviceSetDefaultAutoBoostedClocksEnabled calls DeviceSetDefaultAutoBoostedClocksEnabledFunc. func (mock *Interface) DeviceSetDefaultAutoBoostedClocksEnabled(device nvml.Device, enableState nvml.EnableState, v uint32) nvml.Return { if mock.DeviceSetDefaultAutoBoostedClocksEnabledFunc == nil { panic("Interface.DeviceSetDefaultAutoBoostedClocksEnabledFunc: method is nil but Interface.DeviceSetDefaultAutoBoostedClocksEnabled was just called") } callInfo := struct { Device nvml.Device EnableState nvml.EnableState V uint32 }{ Device: device, EnableState: enableState, V: v, } mock.lockDeviceSetDefaultAutoBoostedClocksEnabled.Lock() mock.calls.DeviceSetDefaultAutoBoostedClocksEnabled = append(mock.calls.DeviceSetDefaultAutoBoostedClocksEnabled, callInfo) mock.lockDeviceSetDefaultAutoBoostedClocksEnabled.Unlock() return mock.DeviceSetDefaultAutoBoostedClocksEnabledFunc(device, enableState, v) } // DeviceSetDefaultAutoBoostedClocksEnabledCalls gets all the calls that were made to DeviceSetDefaultAutoBoostedClocksEnabled. // Check the length with: // // len(mockedInterface.DeviceSetDefaultAutoBoostedClocksEnabledCalls()) func (mock *Interface) DeviceSetDefaultAutoBoostedClocksEnabledCalls() []struct { Device nvml.Device EnableState nvml.EnableState V uint32 } { var calls []struct { Device nvml.Device EnableState nvml.EnableState V uint32 } mock.lockDeviceSetDefaultAutoBoostedClocksEnabled.RLock() calls = mock.calls.DeviceSetDefaultAutoBoostedClocksEnabled mock.lockDeviceSetDefaultAutoBoostedClocksEnabled.RUnlock() return calls } // DeviceSetDefaultFanSpeed_v2 calls DeviceSetDefaultFanSpeed_v2Func. func (mock *Interface) DeviceSetDefaultFanSpeed_v2(device nvml.Device, n int) nvml.Return { if mock.DeviceSetDefaultFanSpeed_v2Func == nil { panic("Interface.DeviceSetDefaultFanSpeed_v2Func: method is nil but Interface.DeviceSetDefaultFanSpeed_v2 was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceSetDefaultFanSpeed_v2.Lock() mock.calls.DeviceSetDefaultFanSpeed_v2 = append(mock.calls.DeviceSetDefaultFanSpeed_v2, callInfo) mock.lockDeviceSetDefaultFanSpeed_v2.Unlock() return mock.DeviceSetDefaultFanSpeed_v2Func(device, n) } // DeviceSetDefaultFanSpeed_v2Calls gets all the calls that were made to DeviceSetDefaultFanSpeed_v2. // Check the length with: // // len(mockedInterface.DeviceSetDefaultFanSpeed_v2Calls()) func (mock *Interface) DeviceSetDefaultFanSpeed_v2Calls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceSetDefaultFanSpeed_v2.RLock() calls = mock.calls.DeviceSetDefaultFanSpeed_v2 mock.lockDeviceSetDefaultFanSpeed_v2.RUnlock() return calls } // DeviceSetDramEncryptionMode calls DeviceSetDramEncryptionModeFunc. func (mock *Interface) DeviceSetDramEncryptionMode(device nvml.Device, dramEncryptionInfo *nvml.DramEncryptionInfo) nvml.Return { if mock.DeviceSetDramEncryptionModeFunc == nil { panic("Interface.DeviceSetDramEncryptionModeFunc: method is nil but Interface.DeviceSetDramEncryptionMode was just called") } callInfo := struct { Device nvml.Device DramEncryptionInfo *nvml.DramEncryptionInfo }{ Device: device, DramEncryptionInfo: dramEncryptionInfo, } mock.lockDeviceSetDramEncryptionMode.Lock() mock.calls.DeviceSetDramEncryptionMode = append(mock.calls.DeviceSetDramEncryptionMode, callInfo) mock.lockDeviceSetDramEncryptionMode.Unlock() return mock.DeviceSetDramEncryptionModeFunc(device, dramEncryptionInfo) } // DeviceSetDramEncryptionModeCalls gets all the calls that were made to DeviceSetDramEncryptionMode. // Check the length with: // // len(mockedInterface.DeviceSetDramEncryptionModeCalls()) func (mock *Interface) DeviceSetDramEncryptionModeCalls() []struct { Device nvml.Device DramEncryptionInfo *nvml.DramEncryptionInfo } { var calls []struct { Device nvml.Device DramEncryptionInfo *nvml.DramEncryptionInfo } mock.lockDeviceSetDramEncryptionMode.RLock() calls = mock.calls.DeviceSetDramEncryptionMode mock.lockDeviceSetDramEncryptionMode.RUnlock() return calls } // DeviceSetDriverModel calls DeviceSetDriverModelFunc. func (mock *Interface) DeviceSetDriverModel(device nvml.Device, driverModel nvml.DriverModel, v uint32) nvml.Return { if mock.DeviceSetDriverModelFunc == nil { panic("Interface.DeviceSetDriverModelFunc: method is nil but Interface.DeviceSetDriverModel was just called") } callInfo := struct { Device nvml.Device DriverModel nvml.DriverModel V uint32 }{ Device: device, DriverModel: driverModel, V: v, } mock.lockDeviceSetDriverModel.Lock() mock.calls.DeviceSetDriverModel = append(mock.calls.DeviceSetDriverModel, callInfo) mock.lockDeviceSetDriverModel.Unlock() return mock.DeviceSetDriverModelFunc(device, driverModel, v) } // DeviceSetDriverModelCalls gets all the calls that were made to DeviceSetDriverModel. // Check the length with: // // len(mockedInterface.DeviceSetDriverModelCalls()) func (mock *Interface) DeviceSetDriverModelCalls() []struct { Device nvml.Device DriverModel nvml.DriverModel V uint32 } { var calls []struct { Device nvml.Device DriverModel nvml.DriverModel V uint32 } mock.lockDeviceSetDriverModel.RLock() calls = mock.calls.DeviceSetDriverModel mock.lockDeviceSetDriverModel.RUnlock() return calls } // DeviceSetEccMode calls DeviceSetEccModeFunc. func (mock *Interface) DeviceSetEccMode(device nvml.Device, enableState nvml.EnableState) nvml.Return { if mock.DeviceSetEccModeFunc == nil { panic("Interface.DeviceSetEccModeFunc: method is nil but Interface.DeviceSetEccMode was just called") } callInfo := struct { Device nvml.Device EnableState nvml.EnableState }{ Device: device, EnableState: enableState, } mock.lockDeviceSetEccMode.Lock() mock.calls.DeviceSetEccMode = append(mock.calls.DeviceSetEccMode, callInfo) mock.lockDeviceSetEccMode.Unlock() return mock.DeviceSetEccModeFunc(device, enableState) } // DeviceSetEccModeCalls gets all the calls that were made to DeviceSetEccMode. // Check the length with: // // len(mockedInterface.DeviceSetEccModeCalls()) func (mock *Interface) DeviceSetEccModeCalls() []struct { Device nvml.Device EnableState nvml.EnableState } { var calls []struct { Device nvml.Device EnableState nvml.EnableState } mock.lockDeviceSetEccMode.RLock() calls = mock.calls.DeviceSetEccMode mock.lockDeviceSetEccMode.RUnlock() return calls } // DeviceSetFanControlPolicy calls DeviceSetFanControlPolicyFunc. func (mock *Interface) DeviceSetFanControlPolicy(device nvml.Device, n int, fanControlPolicy nvml.FanControlPolicy) nvml.Return { if mock.DeviceSetFanControlPolicyFunc == nil { panic("Interface.DeviceSetFanControlPolicyFunc: method is nil but Interface.DeviceSetFanControlPolicy was just called") } callInfo := struct { Device nvml.Device N int FanControlPolicy nvml.FanControlPolicy }{ Device: device, N: n, FanControlPolicy: fanControlPolicy, } mock.lockDeviceSetFanControlPolicy.Lock() mock.calls.DeviceSetFanControlPolicy = append(mock.calls.DeviceSetFanControlPolicy, callInfo) mock.lockDeviceSetFanControlPolicy.Unlock() return mock.DeviceSetFanControlPolicyFunc(device, n, fanControlPolicy) } // DeviceSetFanControlPolicyCalls gets all the calls that were made to DeviceSetFanControlPolicy. // Check the length with: // // len(mockedInterface.DeviceSetFanControlPolicyCalls()) func (mock *Interface) DeviceSetFanControlPolicyCalls() []struct { Device nvml.Device N int FanControlPolicy nvml.FanControlPolicy } { var calls []struct { Device nvml.Device N int FanControlPolicy nvml.FanControlPolicy } mock.lockDeviceSetFanControlPolicy.RLock() calls = mock.calls.DeviceSetFanControlPolicy mock.lockDeviceSetFanControlPolicy.RUnlock() return calls } // DeviceSetFanSpeed_v2 calls DeviceSetFanSpeed_v2Func. func (mock *Interface) DeviceSetFanSpeed_v2(device nvml.Device, n1 int, n2 int) nvml.Return { if mock.DeviceSetFanSpeed_v2Func == nil { panic("Interface.DeviceSetFanSpeed_v2Func: method is nil but Interface.DeviceSetFanSpeed_v2 was just called") } callInfo := struct { Device nvml.Device N1 int N2 int }{ Device: device, N1: n1, N2: n2, } mock.lockDeviceSetFanSpeed_v2.Lock() mock.calls.DeviceSetFanSpeed_v2 = append(mock.calls.DeviceSetFanSpeed_v2, callInfo) mock.lockDeviceSetFanSpeed_v2.Unlock() return mock.DeviceSetFanSpeed_v2Func(device, n1, n2) } // DeviceSetFanSpeed_v2Calls gets all the calls that were made to DeviceSetFanSpeed_v2. // Check the length with: // // len(mockedInterface.DeviceSetFanSpeed_v2Calls()) func (mock *Interface) DeviceSetFanSpeed_v2Calls() []struct { Device nvml.Device N1 int N2 int } { var calls []struct { Device nvml.Device N1 int N2 int } mock.lockDeviceSetFanSpeed_v2.RLock() calls = mock.calls.DeviceSetFanSpeed_v2 mock.lockDeviceSetFanSpeed_v2.RUnlock() return calls } // DeviceSetGpcClkVfOffset calls DeviceSetGpcClkVfOffsetFunc. func (mock *Interface) DeviceSetGpcClkVfOffset(device nvml.Device, n int) nvml.Return { if mock.DeviceSetGpcClkVfOffsetFunc == nil { panic("Interface.DeviceSetGpcClkVfOffsetFunc: method is nil but Interface.DeviceSetGpcClkVfOffset was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceSetGpcClkVfOffset.Lock() mock.calls.DeviceSetGpcClkVfOffset = append(mock.calls.DeviceSetGpcClkVfOffset, callInfo) mock.lockDeviceSetGpcClkVfOffset.Unlock() return mock.DeviceSetGpcClkVfOffsetFunc(device, n) } // DeviceSetGpcClkVfOffsetCalls gets all the calls that were made to DeviceSetGpcClkVfOffset. // Check the length with: // // len(mockedInterface.DeviceSetGpcClkVfOffsetCalls()) func (mock *Interface) DeviceSetGpcClkVfOffsetCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceSetGpcClkVfOffset.RLock() calls = mock.calls.DeviceSetGpcClkVfOffset mock.lockDeviceSetGpcClkVfOffset.RUnlock() return calls } // DeviceSetGpuLockedClocks calls DeviceSetGpuLockedClocksFunc. func (mock *Interface) DeviceSetGpuLockedClocks(device nvml.Device, v1 uint32, v2 uint32) nvml.Return { if mock.DeviceSetGpuLockedClocksFunc == nil { panic("Interface.DeviceSetGpuLockedClocksFunc: method is nil but Interface.DeviceSetGpuLockedClocks was just called") } callInfo := struct { Device nvml.Device V1 uint32 V2 uint32 }{ Device: device, V1: v1, V2: v2, } mock.lockDeviceSetGpuLockedClocks.Lock() mock.calls.DeviceSetGpuLockedClocks = append(mock.calls.DeviceSetGpuLockedClocks, callInfo) mock.lockDeviceSetGpuLockedClocks.Unlock() return mock.DeviceSetGpuLockedClocksFunc(device, v1, v2) } // DeviceSetGpuLockedClocksCalls gets all the calls that were made to DeviceSetGpuLockedClocks. // Check the length with: // // len(mockedInterface.DeviceSetGpuLockedClocksCalls()) func (mock *Interface) DeviceSetGpuLockedClocksCalls() []struct { Device nvml.Device V1 uint32 V2 uint32 } { var calls []struct { Device nvml.Device V1 uint32 V2 uint32 } mock.lockDeviceSetGpuLockedClocks.RLock() calls = mock.calls.DeviceSetGpuLockedClocks mock.lockDeviceSetGpuLockedClocks.RUnlock() return calls } // DeviceSetGpuOperationMode calls DeviceSetGpuOperationModeFunc. func (mock *Interface) DeviceSetGpuOperationMode(device nvml.Device, gpuOperationMode nvml.GpuOperationMode) nvml.Return { if mock.DeviceSetGpuOperationModeFunc == nil { panic("Interface.DeviceSetGpuOperationModeFunc: method is nil but Interface.DeviceSetGpuOperationMode was just called") } callInfo := struct { Device nvml.Device GpuOperationMode nvml.GpuOperationMode }{ Device: device, GpuOperationMode: gpuOperationMode, } mock.lockDeviceSetGpuOperationMode.Lock() mock.calls.DeviceSetGpuOperationMode = append(mock.calls.DeviceSetGpuOperationMode, callInfo) mock.lockDeviceSetGpuOperationMode.Unlock() return mock.DeviceSetGpuOperationModeFunc(device, gpuOperationMode) } // DeviceSetGpuOperationModeCalls gets all the calls that were made to DeviceSetGpuOperationMode. // Check the length with: // // len(mockedInterface.DeviceSetGpuOperationModeCalls()) func (mock *Interface) DeviceSetGpuOperationModeCalls() []struct { Device nvml.Device GpuOperationMode nvml.GpuOperationMode } { var calls []struct { Device nvml.Device GpuOperationMode nvml.GpuOperationMode } mock.lockDeviceSetGpuOperationMode.RLock() calls = mock.calls.DeviceSetGpuOperationMode mock.lockDeviceSetGpuOperationMode.RUnlock() return calls } // DeviceSetMemClkVfOffset calls DeviceSetMemClkVfOffsetFunc. func (mock *Interface) DeviceSetMemClkVfOffset(device nvml.Device, n int) nvml.Return { if mock.DeviceSetMemClkVfOffsetFunc == nil { panic("Interface.DeviceSetMemClkVfOffsetFunc: method is nil but Interface.DeviceSetMemClkVfOffset was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceSetMemClkVfOffset.Lock() mock.calls.DeviceSetMemClkVfOffset = append(mock.calls.DeviceSetMemClkVfOffset, callInfo) mock.lockDeviceSetMemClkVfOffset.Unlock() return mock.DeviceSetMemClkVfOffsetFunc(device, n) } // DeviceSetMemClkVfOffsetCalls gets all the calls that were made to DeviceSetMemClkVfOffset. // Check the length with: // // len(mockedInterface.DeviceSetMemClkVfOffsetCalls()) func (mock *Interface) DeviceSetMemClkVfOffsetCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceSetMemClkVfOffset.RLock() calls = mock.calls.DeviceSetMemClkVfOffset mock.lockDeviceSetMemClkVfOffset.RUnlock() return calls } // DeviceSetMemoryLockedClocks calls DeviceSetMemoryLockedClocksFunc. func (mock *Interface) DeviceSetMemoryLockedClocks(device nvml.Device, v1 uint32, v2 uint32) nvml.Return { if mock.DeviceSetMemoryLockedClocksFunc == nil { panic("Interface.DeviceSetMemoryLockedClocksFunc: method is nil but Interface.DeviceSetMemoryLockedClocks was just called") } callInfo := struct { Device nvml.Device V1 uint32 V2 uint32 }{ Device: device, V1: v1, V2: v2, } mock.lockDeviceSetMemoryLockedClocks.Lock() mock.calls.DeviceSetMemoryLockedClocks = append(mock.calls.DeviceSetMemoryLockedClocks, callInfo) mock.lockDeviceSetMemoryLockedClocks.Unlock() return mock.DeviceSetMemoryLockedClocksFunc(device, v1, v2) } // DeviceSetMemoryLockedClocksCalls gets all the calls that were made to DeviceSetMemoryLockedClocks. // Check the length with: // // len(mockedInterface.DeviceSetMemoryLockedClocksCalls()) func (mock *Interface) DeviceSetMemoryLockedClocksCalls() []struct { Device nvml.Device V1 uint32 V2 uint32 } { var calls []struct { Device nvml.Device V1 uint32 V2 uint32 } mock.lockDeviceSetMemoryLockedClocks.RLock() calls = mock.calls.DeviceSetMemoryLockedClocks mock.lockDeviceSetMemoryLockedClocks.RUnlock() return calls } // DeviceSetMigMode calls DeviceSetMigModeFunc. func (mock *Interface) DeviceSetMigMode(device nvml.Device, n int) (nvml.Return, nvml.Return) { if mock.DeviceSetMigModeFunc == nil { panic("Interface.DeviceSetMigModeFunc: method is nil but Interface.DeviceSetMigMode was just called") } callInfo := struct { Device nvml.Device N int }{ Device: device, N: n, } mock.lockDeviceSetMigMode.Lock() mock.calls.DeviceSetMigMode = append(mock.calls.DeviceSetMigMode, callInfo) mock.lockDeviceSetMigMode.Unlock() return mock.DeviceSetMigModeFunc(device, n) } // DeviceSetMigModeCalls gets all the calls that were made to DeviceSetMigMode. // Check the length with: // // len(mockedInterface.DeviceSetMigModeCalls()) func (mock *Interface) DeviceSetMigModeCalls() []struct { Device nvml.Device N int } { var calls []struct { Device nvml.Device N int } mock.lockDeviceSetMigMode.RLock() calls = mock.calls.DeviceSetMigMode mock.lockDeviceSetMigMode.RUnlock() return calls } // DeviceSetNvLinkDeviceLowPowerThreshold calls DeviceSetNvLinkDeviceLowPowerThresholdFunc. func (mock *Interface) DeviceSetNvLinkDeviceLowPowerThreshold(device nvml.Device, nvLinkPowerThres *nvml.NvLinkPowerThres) nvml.Return { if mock.DeviceSetNvLinkDeviceLowPowerThresholdFunc == nil { panic("Interface.DeviceSetNvLinkDeviceLowPowerThresholdFunc: method is nil but Interface.DeviceSetNvLinkDeviceLowPowerThreshold was just called") } callInfo := struct { Device nvml.Device NvLinkPowerThres *nvml.NvLinkPowerThres }{ Device: device, NvLinkPowerThres: nvLinkPowerThres, } mock.lockDeviceSetNvLinkDeviceLowPowerThreshold.Lock() mock.calls.DeviceSetNvLinkDeviceLowPowerThreshold = append(mock.calls.DeviceSetNvLinkDeviceLowPowerThreshold, callInfo) mock.lockDeviceSetNvLinkDeviceLowPowerThreshold.Unlock() return mock.DeviceSetNvLinkDeviceLowPowerThresholdFunc(device, nvLinkPowerThres) } // DeviceSetNvLinkDeviceLowPowerThresholdCalls gets all the calls that were made to DeviceSetNvLinkDeviceLowPowerThreshold. // Check the length with: // // len(mockedInterface.DeviceSetNvLinkDeviceLowPowerThresholdCalls()) func (mock *Interface) DeviceSetNvLinkDeviceLowPowerThresholdCalls() []struct { Device nvml.Device NvLinkPowerThres *nvml.NvLinkPowerThres } { var calls []struct { Device nvml.Device NvLinkPowerThres *nvml.NvLinkPowerThres } mock.lockDeviceSetNvLinkDeviceLowPowerThreshold.RLock() calls = mock.calls.DeviceSetNvLinkDeviceLowPowerThreshold mock.lockDeviceSetNvLinkDeviceLowPowerThreshold.RUnlock() return calls } // DeviceSetNvLinkUtilizationControl calls DeviceSetNvLinkUtilizationControlFunc. func (mock *Interface) DeviceSetNvLinkUtilizationControl(device nvml.Device, n1 int, n2 int, nvLinkUtilizationControl *nvml.NvLinkUtilizationControl, b bool) nvml.Return { if mock.DeviceSetNvLinkUtilizationControlFunc == nil { panic("Interface.DeviceSetNvLinkUtilizationControlFunc: method is nil but Interface.DeviceSetNvLinkUtilizationControl was just called") } callInfo := struct { Device nvml.Device N1 int N2 int NvLinkUtilizationControl *nvml.NvLinkUtilizationControl B bool }{ Device: device, N1: n1, N2: n2, NvLinkUtilizationControl: nvLinkUtilizationControl, B: b, } mock.lockDeviceSetNvLinkUtilizationControl.Lock() mock.calls.DeviceSetNvLinkUtilizationControl = append(mock.calls.DeviceSetNvLinkUtilizationControl, callInfo) mock.lockDeviceSetNvLinkUtilizationControl.Unlock() return mock.DeviceSetNvLinkUtilizationControlFunc(device, n1, n2, nvLinkUtilizationControl, b) } // DeviceSetNvLinkUtilizationControlCalls gets all the calls that were made to DeviceSetNvLinkUtilizationControl. // Check the length with: // // len(mockedInterface.DeviceSetNvLinkUtilizationControlCalls()) func (mock *Interface) DeviceSetNvLinkUtilizationControlCalls() []struct { Device nvml.Device N1 int N2 int NvLinkUtilizationControl *nvml.NvLinkUtilizationControl B bool } { var calls []struct { Device nvml.Device N1 int N2 int NvLinkUtilizationControl *nvml.NvLinkUtilizationControl B bool } mock.lockDeviceSetNvLinkUtilizationControl.RLock() calls = mock.calls.DeviceSetNvLinkUtilizationControl mock.lockDeviceSetNvLinkUtilizationControl.RUnlock() return calls } // DeviceSetNvlinkBwMode calls DeviceSetNvlinkBwModeFunc. func (mock *Interface) DeviceSetNvlinkBwMode(device nvml.Device, nvlinkSetBwMode *nvml.NvlinkSetBwMode) nvml.Return { if mock.DeviceSetNvlinkBwModeFunc == nil { panic("Interface.DeviceSetNvlinkBwModeFunc: method is nil but Interface.DeviceSetNvlinkBwMode was just called") } callInfo := struct { Device nvml.Device NvlinkSetBwMode *nvml.NvlinkSetBwMode }{ Device: device, NvlinkSetBwMode: nvlinkSetBwMode, } mock.lockDeviceSetNvlinkBwMode.Lock() mock.calls.DeviceSetNvlinkBwMode = append(mock.calls.DeviceSetNvlinkBwMode, callInfo) mock.lockDeviceSetNvlinkBwMode.Unlock() return mock.DeviceSetNvlinkBwModeFunc(device, nvlinkSetBwMode) } // DeviceSetNvlinkBwModeCalls gets all the calls that were made to DeviceSetNvlinkBwMode. // Check the length with: // // len(mockedInterface.DeviceSetNvlinkBwModeCalls()) func (mock *Interface) DeviceSetNvlinkBwModeCalls() []struct { Device nvml.Device NvlinkSetBwMode *nvml.NvlinkSetBwMode } { var calls []struct { Device nvml.Device NvlinkSetBwMode *nvml.NvlinkSetBwMode } mock.lockDeviceSetNvlinkBwMode.RLock() calls = mock.calls.DeviceSetNvlinkBwMode mock.lockDeviceSetNvlinkBwMode.RUnlock() return calls } // DeviceSetPersistenceMode calls DeviceSetPersistenceModeFunc. func (mock *Interface) DeviceSetPersistenceMode(device nvml.Device, enableState nvml.EnableState) nvml.Return { if mock.DeviceSetPersistenceModeFunc == nil { panic("Interface.DeviceSetPersistenceModeFunc: method is nil but Interface.DeviceSetPersistenceMode was just called") } callInfo := struct { Device nvml.Device EnableState nvml.EnableState }{ Device: device, EnableState: enableState, } mock.lockDeviceSetPersistenceMode.Lock() mock.calls.DeviceSetPersistenceMode = append(mock.calls.DeviceSetPersistenceMode, callInfo) mock.lockDeviceSetPersistenceMode.Unlock() return mock.DeviceSetPersistenceModeFunc(device, enableState) } // DeviceSetPersistenceModeCalls gets all the calls that were made to DeviceSetPersistenceMode. // Check the length with: // // len(mockedInterface.DeviceSetPersistenceModeCalls()) func (mock *Interface) DeviceSetPersistenceModeCalls() []struct { Device nvml.Device EnableState nvml.EnableState } { var calls []struct { Device nvml.Device EnableState nvml.EnableState } mock.lockDeviceSetPersistenceMode.RLock() calls = mock.calls.DeviceSetPersistenceMode mock.lockDeviceSetPersistenceMode.RUnlock() return calls } // DeviceSetPowerManagementLimit calls DeviceSetPowerManagementLimitFunc. func (mock *Interface) DeviceSetPowerManagementLimit(device nvml.Device, v uint32) nvml.Return { if mock.DeviceSetPowerManagementLimitFunc == nil { panic("Interface.DeviceSetPowerManagementLimitFunc: method is nil but Interface.DeviceSetPowerManagementLimit was just called") } callInfo := struct { Device nvml.Device V uint32 }{ Device: device, V: v, } mock.lockDeviceSetPowerManagementLimit.Lock() mock.calls.DeviceSetPowerManagementLimit = append(mock.calls.DeviceSetPowerManagementLimit, callInfo) mock.lockDeviceSetPowerManagementLimit.Unlock() return mock.DeviceSetPowerManagementLimitFunc(device, v) } // DeviceSetPowerManagementLimitCalls gets all the calls that were made to DeviceSetPowerManagementLimit. // Check the length with: // // len(mockedInterface.DeviceSetPowerManagementLimitCalls()) func (mock *Interface) DeviceSetPowerManagementLimitCalls() []struct { Device nvml.Device V uint32 } { var calls []struct { Device nvml.Device V uint32 } mock.lockDeviceSetPowerManagementLimit.RLock() calls = mock.calls.DeviceSetPowerManagementLimit mock.lockDeviceSetPowerManagementLimit.RUnlock() return calls } // DeviceSetPowerManagementLimit_v2 calls DeviceSetPowerManagementLimit_v2Func. func (mock *Interface) DeviceSetPowerManagementLimit_v2(device nvml.Device, powerValue_v2 *nvml.PowerValue_v2) nvml.Return { if mock.DeviceSetPowerManagementLimit_v2Func == nil { panic("Interface.DeviceSetPowerManagementLimit_v2Func: method is nil but Interface.DeviceSetPowerManagementLimit_v2 was just called") } callInfo := struct { Device nvml.Device PowerValue_v2 *nvml.PowerValue_v2 }{ Device: device, PowerValue_v2: powerValue_v2, } mock.lockDeviceSetPowerManagementLimit_v2.Lock() mock.calls.DeviceSetPowerManagementLimit_v2 = append(mock.calls.DeviceSetPowerManagementLimit_v2, callInfo) mock.lockDeviceSetPowerManagementLimit_v2.Unlock() return mock.DeviceSetPowerManagementLimit_v2Func(device, powerValue_v2) } // DeviceSetPowerManagementLimit_v2Calls gets all the calls that were made to DeviceSetPowerManagementLimit_v2. // Check the length with: // // len(mockedInterface.DeviceSetPowerManagementLimit_v2Calls()) func (mock *Interface) DeviceSetPowerManagementLimit_v2Calls() []struct { Device nvml.Device PowerValue_v2 *nvml.PowerValue_v2 } { var calls []struct { Device nvml.Device PowerValue_v2 *nvml.PowerValue_v2 } mock.lockDeviceSetPowerManagementLimit_v2.RLock() calls = mock.calls.DeviceSetPowerManagementLimit_v2 mock.lockDeviceSetPowerManagementLimit_v2.RUnlock() return calls } // DeviceSetTemperatureThreshold calls DeviceSetTemperatureThresholdFunc. func (mock *Interface) DeviceSetTemperatureThreshold(device nvml.Device, temperatureThresholds nvml.TemperatureThresholds, n int) nvml.Return { if mock.DeviceSetTemperatureThresholdFunc == nil { panic("Interface.DeviceSetTemperatureThresholdFunc: method is nil but Interface.DeviceSetTemperatureThreshold was just called") } callInfo := struct { Device nvml.Device TemperatureThresholds nvml.TemperatureThresholds N int }{ Device: device, TemperatureThresholds: temperatureThresholds, N: n, } mock.lockDeviceSetTemperatureThreshold.Lock() mock.calls.DeviceSetTemperatureThreshold = append(mock.calls.DeviceSetTemperatureThreshold, callInfo) mock.lockDeviceSetTemperatureThreshold.Unlock() return mock.DeviceSetTemperatureThresholdFunc(device, temperatureThresholds, n) } // DeviceSetTemperatureThresholdCalls gets all the calls that were made to DeviceSetTemperatureThreshold. // Check the length with: // // len(mockedInterface.DeviceSetTemperatureThresholdCalls()) func (mock *Interface) DeviceSetTemperatureThresholdCalls() []struct { Device nvml.Device TemperatureThresholds nvml.TemperatureThresholds N int } { var calls []struct { Device nvml.Device TemperatureThresholds nvml.TemperatureThresholds N int } mock.lockDeviceSetTemperatureThreshold.RLock() calls = mock.calls.DeviceSetTemperatureThreshold mock.lockDeviceSetTemperatureThreshold.RUnlock() return calls } // DeviceSetVgpuCapabilities calls DeviceSetVgpuCapabilitiesFunc. func (mock *Interface) DeviceSetVgpuCapabilities(device nvml.Device, deviceVgpuCapability nvml.DeviceVgpuCapability, enableState nvml.EnableState) nvml.Return { if mock.DeviceSetVgpuCapabilitiesFunc == nil { panic("Interface.DeviceSetVgpuCapabilitiesFunc: method is nil but Interface.DeviceSetVgpuCapabilities was just called") } callInfo := struct { Device nvml.Device DeviceVgpuCapability nvml.DeviceVgpuCapability EnableState nvml.EnableState }{ Device: device, DeviceVgpuCapability: deviceVgpuCapability, EnableState: enableState, } mock.lockDeviceSetVgpuCapabilities.Lock() mock.calls.DeviceSetVgpuCapabilities = append(mock.calls.DeviceSetVgpuCapabilities, callInfo) mock.lockDeviceSetVgpuCapabilities.Unlock() return mock.DeviceSetVgpuCapabilitiesFunc(device, deviceVgpuCapability, enableState) } // DeviceSetVgpuCapabilitiesCalls gets all the calls that were made to DeviceSetVgpuCapabilities. // Check the length with: // // len(mockedInterface.DeviceSetVgpuCapabilitiesCalls()) func (mock *Interface) DeviceSetVgpuCapabilitiesCalls() []struct { Device nvml.Device DeviceVgpuCapability nvml.DeviceVgpuCapability EnableState nvml.EnableState } { var calls []struct { Device nvml.Device DeviceVgpuCapability nvml.DeviceVgpuCapability EnableState nvml.EnableState } mock.lockDeviceSetVgpuCapabilities.RLock() calls = mock.calls.DeviceSetVgpuCapabilities mock.lockDeviceSetVgpuCapabilities.RUnlock() return calls } // DeviceSetVgpuHeterogeneousMode calls DeviceSetVgpuHeterogeneousModeFunc. func (mock *Interface) DeviceSetVgpuHeterogeneousMode(device nvml.Device, vgpuHeterogeneousMode nvml.VgpuHeterogeneousMode) nvml.Return { if mock.DeviceSetVgpuHeterogeneousModeFunc == nil { panic("Interface.DeviceSetVgpuHeterogeneousModeFunc: method is nil but Interface.DeviceSetVgpuHeterogeneousMode was just called") } callInfo := struct { Device nvml.Device VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode }{ Device: device, VgpuHeterogeneousMode: vgpuHeterogeneousMode, } mock.lockDeviceSetVgpuHeterogeneousMode.Lock() mock.calls.DeviceSetVgpuHeterogeneousMode = append(mock.calls.DeviceSetVgpuHeterogeneousMode, callInfo) mock.lockDeviceSetVgpuHeterogeneousMode.Unlock() return mock.DeviceSetVgpuHeterogeneousModeFunc(device, vgpuHeterogeneousMode) } // DeviceSetVgpuHeterogeneousModeCalls gets all the calls that were made to DeviceSetVgpuHeterogeneousMode. // Check the length with: // // len(mockedInterface.DeviceSetVgpuHeterogeneousModeCalls()) func (mock *Interface) DeviceSetVgpuHeterogeneousModeCalls() []struct { Device nvml.Device VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode } { var calls []struct { Device nvml.Device VgpuHeterogeneousMode nvml.VgpuHeterogeneousMode } mock.lockDeviceSetVgpuHeterogeneousMode.RLock() calls = mock.calls.DeviceSetVgpuHeterogeneousMode mock.lockDeviceSetVgpuHeterogeneousMode.RUnlock() return calls } // DeviceSetVgpuSchedulerState calls DeviceSetVgpuSchedulerStateFunc. func (mock *Interface) DeviceSetVgpuSchedulerState(device nvml.Device, vgpuSchedulerSetState *nvml.VgpuSchedulerSetState) nvml.Return { if mock.DeviceSetVgpuSchedulerStateFunc == nil { panic("Interface.DeviceSetVgpuSchedulerStateFunc: method is nil but Interface.DeviceSetVgpuSchedulerState was just called") } callInfo := struct { Device nvml.Device VgpuSchedulerSetState *nvml.VgpuSchedulerSetState }{ Device: device, VgpuSchedulerSetState: vgpuSchedulerSetState, } mock.lockDeviceSetVgpuSchedulerState.Lock() mock.calls.DeviceSetVgpuSchedulerState = append(mock.calls.DeviceSetVgpuSchedulerState, callInfo) mock.lockDeviceSetVgpuSchedulerState.Unlock() return mock.DeviceSetVgpuSchedulerStateFunc(device, vgpuSchedulerSetState) } // DeviceSetVgpuSchedulerStateCalls gets all the calls that were made to DeviceSetVgpuSchedulerState. // Check the length with: // // len(mockedInterface.DeviceSetVgpuSchedulerStateCalls()) func (mock *Interface) DeviceSetVgpuSchedulerStateCalls() []struct { Device nvml.Device VgpuSchedulerSetState *nvml.VgpuSchedulerSetState } { var calls []struct { Device nvml.Device VgpuSchedulerSetState *nvml.VgpuSchedulerSetState } mock.lockDeviceSetVgpuSchedulerState.RLock() calls = mock.calls.DeviceSetVgpuSchedulerState mock.lockDeviceSetVgpuSchedulerState.RUnlock() return calls } // DeviceSetVirtualizationMode calls DeviceSetVirtualizationModeFunc. func (mock *Interface) DeviceSetVirtualizationMode(device nvml.Device, gpuVirtualizationMode nvml.GpuVirtualizationMode) nvml.Return { if mock.DeviceSetVirtualizationModeFunc == nil { panic("Interface.DeviceSetVirtualizationModeFunc: method is nil but Interface.DeviceSetVirtualizationMode was just called") } callInfo := struct { Device nvml.Device GpuVirtualizationMode nvml.GpuVirtualizationMode }{ Device: device, GpuVirtualizationMode: gpuVirtualizationMode, } mock.lockDeviceSetVirtualizationMode.Lock() mock.calls.DeviceSetVirtualizationMode = append(mock.calls.DeviceSetVirtualizationMode, callInfo) mock.lockDeviceSetVirtualizationMode.Unlock() return mock.DeviceSetVirtualizationModeFunc(device, gpuVirtualizationMode) } // DeviceSetVirtualizationModeCalls gets all the calls that were made to DeviceSetVirtualizationMode. // Check the length with: // // len(mockedInterface.DeviceSetVirtualizationModeCalls()) func (mock *Interface) DeviceSetVirtualizationModeCalls() []struct { Device nvml.Device GpuVirtualizationMode nvml.GpuVirtualizationMode } { var calls []struct { Device nvml.Device GpuVirtualizationMode nvml.GpuVirtualizationMode } mock.lockDeviceSetVirtualizationMode.RLock() calls = mock.calls.DeviceSetVirtualizationMode mock.lockDeviceSetVirtualizationMode.RUnlock() return calls } // DeviceValidateInforom calls DeviceValidateInforomFunc. func (mock *Interface) DeviceValidateInforom(device nvml.Device) nvml.Return { if mock.DeviceValidateInforomFunc == nil { panic("Interface.DeviceValidateInforomFunc: method is nil but Interface.DeviceValidateInforom was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceValidateInforom.Lock() mock.calls.DeviceValidateInforom = append(mock.calls.DeviceValidateInforom, callInfo) mock.lockDeviceValidateInforom.Unlock() return mock.DeviceValidateInforomFunc(device) } // DeviceValidateInforomCalls gets all the calls that were made to DeviceValidateInforom. // Check the length with: // // len(mockedInterface.DeviceValidateInforomCalls()) func (mock *Interface) DeviceValidateInforomCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceValidateInforom.RLock() calls = mock.calls.DeviceValidateInforom mock.lockDeviceValidateInforom.RUnlock() return calls } // DeviceWorkloadPowerProfileClearRequestedProfiles calls DeviceWorkloadPowerProfileClearRequestedProfilesFunc. func (mock *Interface) DeviceWorkloadPowerProfileClearRequestedProfiles(device nvml.Device, workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { if mock.DeviceWorkloadPowerProfileClearRequestedProfilesFunc == nil { panic("Interface.DeviceWorkloadPowerProfileClearRequestedProfilesFunc: method is nil but Interface.DeviceWorkloadPowerProfileClearRequestedProfiles was just called") } callInfo := struct { Device nvml.Device WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles }{ Device: device, WorkloadPowerProfileRequestedProfiles: workloadPowerProfileRequestedProfiles, } mock.lockDeviceWorkloadPowerProfileClearRequestedProfiles.Lock() mock.calls.DeviceWorkloadPowerProfileClearRequestedProfiles = append(mock.calls.DeviceWorkloadPowerProfileClearRequestedProfiles, callInfo) mock.lockDeviceWorkloadPowerProfileClearRequestedProfiles.Unlock() return mock.DeviceWorkloadPowerProfileClearRequestedProfilesFunc(device, workloadPowerProfileRequestedProfiles) } // DeviceWorkloadPowerProfileClearRequestedProfilesCalls gets all the calls that were made to DeviceWorkloadPowerProfileClearRequestedProfiles. // Check the length with: // // len(mockedInterface.DeviceWorkloadPowerProfileClearRequestedProfilesCalls()) func (mock *Interface) DeviceWorkloadPowerProfileClearRequestedProfilesCalls() []struct { Device nvml.Device WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } { var calls []struct { Device nvml.Device WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } mock.lockDeviceWorkloadPowerProfileClearRequestedProfiles.RLock() calls = mock.calls.DeviceWorkloadPowerProfileClearRequestedProfiles mock.lockDeviceWorkloadPowerProfileClearRequestedProfiles.RUnlock() return calls } // DeviceWorkloadPowerProfileGetCurrentProfiles calls DeviceWorkloadPowerProfileGetCurrentProfilesFunc. func (mock *Interface) DeviceWorkloadPowerProfileGetCurrentProfiles(device nvml.Device) (nvml.WorkloadPowerProfileCurrentProfiles, nvml.Return) { if mock.DeviceWorkloadPowerProfileGetCurrentProfilesFunc == nil { panic("Interface.DeviceWorkloadPowerProfileGetCurrentProfilesFunc: method is nil but Interface.DeviceWorkloadPowerProfileGetCurrentProfiles was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceWorkloadPowerProfileGetCurrentProfiles.Lock() mock.calls.DeviceWorkloadPowerProfileGetCurrentProfiles = append(mock.calls.DeviceWorkloadPowerProfileGetCurrentProfiles, callInfo) mock.lockDeviceWorkloadPowerProfileGetCurrentProfiles.Unlock() return mock.DeviceWorkloadPowerProfileGetCurrentProfilesFunc(device) } // DeviceWorkloadPowerProfileGetCurrentProfilesCalls gets all the calls that were made to DeviceWorkloadPowerProfileGetCurrentProfiles. // Check the length with: // // len(mockedInterface.DeviceWorkloadPowerProfileGetCurrentProfilesCalls()) func (mock *Interface) DeviceWorkloadPowerProfileGetCurrentProfilesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceWorkloadPowerProfileGetCurrentProfiles.RLock() calls = mock.calls.DeviceWorkloadPowerProfileGetCurrentProfiles mock.lockDeviceWorkloadPowerProfileGetCurrentProfiles.RUnlock() return calls } // DeviceWorkloadPowerProfileGetProfilesInfo calls DeviceWorkloadPowerProfileGetProfilesInfoFunc. func (mock *Interface) DeviceWorkloadPowerProfileGetProfilesInfo(device nvml.Device) (nvml.WorkloadPowerProfileProfilesInfo, nvml.Return) { if mock.DeviceWorkloadPowerProfileGetProfilesInfoFunc == nil { panic("Interface.DeviceWorkloadPowerProfileGetProfilesInfoFunc: method is nil but Interface.DeviceWorkloadPowerProfileGetProfilesInfo was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockDeviceWorkloadPowerProfileGetProfilesInfo.Lock() mock.calls.DeviceWorkloadPowerProfileGetProfilesInfo = append(mock.calls.DeviceWorkloadPowerProfileGetProfilesInfo, callInfo) mock.lockDeviceWorkloadPowerProfileGetProfilesInfo.Unlock() return mock.DeviceWorkloadPowerProfileGetProfilesInfoFunc(device) } // DeviceWorkloadPowerProfileGetProfilesInfoCalls gets all the calls that were made to DeviceWorkloadPowerProfileGetProfilesInfo. // Check the length with: // // len(mockedInterface.DeviceWorkloadPowerProfileGetProfilesInfoCalls()) func (mock *Interface) DeviceWorkloadPowerProfileGetProfilesInfoCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockDeviceWorkloadPowerProfileGetProfilesInfo.RLock() calls = mock.calls.DeviceWorkloadPowerProfileGetProfilesInfo mock.lockDeviceWorkloadPowerProfileGetProfilesInfo.RUnlock() return calls } // DeviceWorkloadPowerProfileSetRequestedProfiles calls DeviceWorkloadPowerProfileSetRequestedProfilesFunc. func (mock *Interface) DeviceWorkloadPowerProfileSetRequestedProfiles(device nvml.Device, workloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles) nvml.Return { if mock.DeviceWorkloadPowerProfileSetRequestedProfilesFunc == nil { panic("Interface.DeviceWorkloadPowerProfileSetRequestedProfilesFunc: method is nil but Interface.DeviceWorkloadPowerProfileSetRequestedProfiles was just called") } callInfo := struct { Device nvml.Device WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles }{ Device: device, WorkloadPowerProfileRequestedProfiles: workloadPowerProfileRequestedProfiles, } mock.lockDeviceWorkloadPowerProfileSetRequestedProfiles.Lock() mock.calls.DeviceWorkloadPowerProfileSetRequestedProfiles = append(mock.calls.DeviceWorkloadPowerProfileSetRequestedProfiles, callInfo) mock.lockDeviceWorkloadPowerProfileSetRequestedProfiles.Unlock() return mock.DeviceWorkloadPowerProfileSetRequestedProfilesFunc(device, workloadPowerProfileRequestedProfiles) } // DeviceWorkloadPowerProfileSetRequestedProfilesCalls gets all the calls that were made to DeviceWorkloadPowerProfileSetRequestedProfiles. // Check the length with: // // len(mockedInterface.DeviceWorkloadPowerProfileSetRequestedProfilesCalls()) func (mock *Interface) DeviceWorkloadPowerProfileSetRequestedProfilesCalls() []struct { Device nvml.Device WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } { var calls []struct { Device nvml.Device WorkloadPowerProfileRequestedProfiles *nvml.WorkloadPowerProfileRequestedProfiles } mock.lockDeviceWorkloadPowerProfileSetRequestedProfiles.RLock() calls = mock.calls.DeviceWorkloadPowerProfileSetRequestedProfiles mock.lockDeviceWorkloadPowerProfileSetRequestedProfiles.RUnlock() return calls } // ErrorString calls ErrorStringFunc. func (mock *Interface) ErrorString(returnMoqParam nvml.Return) string { if mock.ErrorStringFunc == nil { panic("Interface.ErrorStringFunc: method is nil but Interface.ErrorString was just called") } callInfo := struct { ReturnMoqParam nvml.Return }{ ReturnMoqParam: returnMoqParam, } mock.lockErrorString.Lock() mock.calls.ErrorString = append(mock.calls.ErrorString, callInfo) mock.lockErrorString.Unlock() return mock.ErrorStringFunc(returnMoqParam) } // ErrorStringCalls gets all the calls that were made to ErrorString. // Check the length with: // // len(mockedInterface.ErrorStringCalls()) func (mock *Interface) ErrorStringCalls() []struct { ReturnMoqParam nvml.Return } { var calls []struct { ReturnMoqParam nvml.Return } mock.lockErrorString.RLock() calls = mock.calls.ErrorString mock.lockErrorString.RUnlock() return calls } // EventSetCreate calls EventSetCreateFunc. func (mock *Interface) EventSetCreate() (nvml.EventSet, nvml.Return) { if mock.EventSetCreateFunc == nil { panic("Interface.EventSetCreateFunc: method is nil but Interface.EventSetCreate was just called") } callInfo := struct { }{} mock.lockEventSetCreate.Lock() mock.calls.EventSetCreate = append(mock.calls.EventSetCreate, callInfo) mock.lockEventSetCreate.Unlock() return mock.EventSetCreateFunc() } // EventSetCreateCalls gets all the calls that were made to EventSetCreate. // Check the length with: // // len(mockedInterface.EventSetCreateCalls()) func (mock *Interface) EventSetCreateCalls() []struct { } { var calls []struct { } mock.lockEventSetCreate.RLock() calls = mock.calls.EventSetCreate mock.lockEventSetCreate.RUnlock() return calls } // EventSetFree calls EventSetFreeFunc. func (mock *Interface) EventSetFree(eventSet nvml.EventSet) nvml.Return { if mock.EventSetFreeFunc == nil { panic("Interface.EventSetFreeFunc: method is nil but Interface.EventSetFree was just called") } callInfo := struct { EventSet nvml.EventSet }{ EventSet: eventSet, } mock.lockEventSetFree.Lock() mock.calls.EventSetFree = append(mock.calls.EventSetFree, callInfo) mock.lockEventSetFree.Unlock() return mock.EventSetFreeFunc(eventSet) } // EventSetFreeCalls gets all the calls that were made to EventSetFree. // Check the length with: // // len(mockedInterface.EventSetFreeCalls()) func (mock *Interface) EventSetFreeCalls() []struct { EventSet nvml.EventSet } { var calls []struct { EventSet nvml.EventSet } mock.lockEventSetFree.RLock() calls = mock.calls.EventSetFree mock.lockEventSetFree.RUnlock() return calls } // EventSetWait calls EventSetWaitFunc. func (mock *Interface) EventSetWait(eventSet nvml.EventSet, v uint32) (nvml.EventData, nvml.Return) { if mock.EventSetWaitFunc == nil { panic("Interface.EventSetWaitFunc: method is nil but Interface.EventSetWait was just called") } callInfo := struct { EventSet nvml.EventSet V uint32 }{ EventSet: eventSet, V: v, } mock.lockEventSetWait.Lock() mock.calls.EventSetWait = append(mock.calls.EventSetWait, callInfo) mock.lockEventSetWait.Unlock() return mock.EventSetWaitFunc(eventSet, v) } // EventSetWaitCalls gets all the calls that were made to EventSetWait. // Check the length with: // // len(mockedInterface.EventSetWaitCalls()) func (mock *Interface) EventSetWaitCalls() []struct { EventSet nvml.EventSet V uint32 } { var calls []struct { EventSet nvml.EventSet V uint32 } mock.lockEventSetWait.RLock() calls = mock.calls.EventSetWait mock.lockEventSetWait.RUnlock() return calls } // Extensions calls ExtensionsFunc. func (mock *Interface) Extensions() nvml.ExtendedInterface { if mock.ExtensionsFunc == nil { panic("Interface.ExtensionsFunc: method is nil but Interface.Extensions was just called") } callInfo := struct { }{} mock.lockExtensions.Lock() mock.calls.Extensions = append(mock.calls.Extensions, callInfo) mock.lockExtensions.Unlock() return mock.ExtensionsFunc() } // ExtensionsCalls gets all the calls that were made to Extensions. // Check the length with: // // len(mockedInterface.ExtensionsCalls()) func (mock *Interface) ExtensionsCalls() []struct { } { var calls []struct { } mock.lockExtensions.RLock() calls = mock.calls.Extensions mock.lockExtensions.RUnlock() return calls } // GetExcludedDeviceCount calls GetExcludedDeviceCountFunc. func (mock *Interface) GetExcludedDeviceCount() (int, nvml.Return) { if mock.GetExcludedDeviceCountFunc == nil { panic("Interface.GetExcludedDeviceCountFunc: method is nil but Interface.GetExcludedDeviceCount was just called") } callInfo := struct { }{} mock.lockGetExcludedDeviceCount.Lock() mock.calls.GetExcludedDeviceCount = append(mock.calls.GetExcludedDeviceCount, callInfo) mock.lockGetExcludedDeviceCount.Unlock() return mock.GetExcludedDeviceCountFunc() } // GetExcludedDeviceCountCalls gets all the calls that were made to GetExcludedDeviceCount. // Check the length with: // // len(mockedInterface.GetExcludedDeviceCountCalls()) func (mock *Interface) GetExcludedDeviceCountCalls() []struct { } { var calls []struct { } mock.lockGetExcludedDeviceCount.RLock() calls = mock.calls.GetExcludedDeviceCount mock.lockGetExcludedDeviceCount.RUnlock() return calls } // GetExcludedDeviceInfoByIndex calls GetExcludedDeviceInfoByIndexFunc. func (mock *Interface) GetExcludedDeviceInfoByIndex(n int) (nvml.ExcludedDeviceInfo, nvml.Return) { if mock.GetExcludedDeviceInfoByIndexFunc == nil { panic("Interface.GetExcludedDeviceInfoByIndexFunc: method is nil but Interface.GetExcludedDeviceInfoByIndex was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetExcludedDeviceInfoByIndex.Lock() mock.calls.GetExcludedDeviceInfoByIndex = append(mock.calls.GetExcludedDeviceInfoByIndex, callInfo) mock.lockGetExcludedDeviceInfoByIndex.Unlock() return mock.GetExcludedDeviceInfoByIndexFunc(n) } // GetExcludedDeviceInfoByIndexCalls gets all the calls that were made to GetExcludedDeviceInfoByIndex. // Check the length with: // // len(mockedInterface.GetExcludedDeviceInfoByIndexCalls()) func (mock *Interface) GetExcludedDeviceInfoByIndexCalls() []struct { N int } { var calls []struct { N int } mock.lockGetExcludedDeviceInfoByIndex.RLock() calls = mock.calls.GetExcludedDeviceInfoByIndex mock.lockGetExcludedDeviceInfoByIndex.RUnlock() return calls } // GetVgpuCompatibility calls GetVgpuCompatibilityFunc. func (mock *Interface) GetVgpuCompatibility(vgpuMetadata *nvml.VgpuMetadata, vgpuPgpuMetadata *nvml.VgpuPgpuMetadata) (nvml.VgpuPgpuCompatibility, nvml.Return) { if mock.GetVgpuCompatibilityFunc == nil { panic("Interface.GetVgpuCompatibilityFunc: method is nil but Interface.GetVgpuCompatibility was just called") } callInfo := struct { VgpuMetadata *nvml.VgpuMetadata VgpuPgpuMetadata *nvml.VgpuPgpuMetadata }{ VgpuMetadata: vgpuMetadata, VgpuPgpuMetadata: vgpuPgpuMetadata, } mock.lockGetVgpuCompatibility.Lock() mock.calls.GetVgpuCompatibility = append(mock.calls.GetVgpuCompatibility, callInfo) mock.lockGetVgpuCompatibility.Unlock() return mock.GetVgpuCompatibilityFunc(vgpuMetadata, vgpuPgpuMetadata) } // GetVgpuCompatibilityCalls gets all the calls that were made to GetVgpuCompatibility. // Check the length with: // // len(mockedInterface.GetVgpuCompatibilityCalls()) func (mock *Interface) GetVgpuCompatibilityCalls() []struct { VgpuMetadata *nvml.VgpuMetadata VgpuPgpuMetadata *nvml.VgpuPgpuMetadata } { var calls []struct { VgpuMetadata *nvml.VgpuMetadata VgpuPgpuMetadata *nvml.VgpuPgpuMetadata } mock.lockGetVgpuCompatibility.RLock() calls = mock.calls.GetVgpuCompatibility mock.lockGetVgpuCompatibility.RUnlock() return calls } // GetVgpuDriverCapabilities calls GetVgpuDriverCapabilitiesFunc. func (mock *Interface) GetVgpuDriverCapabilities(vgpuDriverCapability nvml.VgpuDriverCapability) (bool, nvml.Return) { if mock.GetVgpuDriverCapabilitiesFunc == nil { panic("Interface.GetVgpuDriverCapabilitiesFunc: method is nil but Interface.GetVgpuDriverCapabilities was just called") } callInfo := struct { VgpuDriverCapability nvml.VgpuDriverCapability }{ VgpuDriverCapability: vgpuDriverCapability, } mock.lockGetVgpuDriverCapabilities.Lock() mock.calls.GetVgpuDriverCapabilities = append(mock.calls.GetVgpuDriverCapabilities, callInfo) mock.lockGetVgpuDriverCapabilities.Unlock() return mock.GetVgpuDriverCapabilitiesFunc(vgpuDriverCapability) } // GetVgpuDriverCapabilitiesCalls gets all the calls that were made to GetVgpuDriverCapabilities. // Check the length with: // // len(mockedInterface.GetVgpuDriverCapabilitiesCalls()) func (mock *Interface) GetVgpuDriverCapabilitiesCalls() []struct { VgpuDriverCapability nvml.VgpuDriverCapability } { var calls []struct { VgpuDriverCapability nvml.VgpuDriverCapability } mock.lockGetVgpuDriverCapabilities.RLock() calls = mock.calls.GetVgpuDriverCapabilities mock.lockGetVgpuDriverCapabilities.RUnlock() return calls } // GetVgpuVersion calls GetVgpuVersionFunc. func (mock *Interface) GetVgpuVersion() (nvml.VgpuVersion, nvml.VgpuVersion, nvml.Return) { if mock.GetVgpuVersionFunc == nil { panic("Interface.GetVgpuVersionFunc: method is nil but Interface.GetVgpuVersion was just called") } callInfo := struct { }{} mock.lockGetVgpuVersion.Lock() mock.calls.GetVgpuVersion = append(mock.calls.GetVgpuVersion, callInfo) mock.lockGetVgpuVersion.Unlock() return mock.GetVgpuVersionFunc() } // GetVgpuVersionCalls gets all the calls that were made to GetVgpuVersion. // Check the length with: // // len(mockedInterface.GetVgpuVersionCalls()) func (mock *Interface) GetVgpuVersionCalls() []struct { } { var calls []struct { } mock.lockGetVgpuVersion.RLock() calls = mock.calls.GetVgpuVersion mock.lockGetVgpuVersion.RUnlock() return calls } // GpmMetricsGet calls GpmMetricsGetFunc. func (mock *Interface) GpmMetricsGet(gpmMetricsGetType *nvml.GpmMetricsGetType) nvml.Return { if mock.GpmMetricsGetFunc == nil { panic("Interface.GpmMetricsGetFunc: method is nil but Interface.GpmMetricsGet was just called") } callInfo := struct { GpmMetricsGetType *nvml.GpmMetricsGetType }{ GpmMetricsGetType: gpmMetricsGetType, } mock.lockGpmMetricsGet.Lock() mock.calls.GpmMetricsGet = append(mock.calls.GpmMetricsGet, callInfo) mock.lockGpmMetricsGet.Unlock() return mock.GpmMetricsGetFunc(gpmMetricsGetType) } // GpmMetricsGetCalls gets all the calls that were made to GpmMetricsGet. // Check the length with: // // len(mockedInterface.GpmMetricsGetCalls()) func (mock *Interface) GpmMetricsGetCalls() []struct { GpmMetricsGetType *nvml.GpmMetricsGetType } { var calls []struct { GpmMetricsGetType *nvml.GpmMetricsGetType } mock.lockGpmMetricsGet.RLock() calls = mock.calls.GpmMetricsGet mock.lockGpmMetricsGet.RUnlock() return calls } // GpmMetricsGetV calls GpmMetricsGetVFunc. func (mock *Interface) GpmMetricsGetV(gpmMetricsGetType *nvml.GpmMetricsGetType) nvml.GpmMetricsGetVType { if mock.GpmMetricsGetVFunc == nil { panic("Interface.GpmMetricsGetVFunc: method is nil but Interface.GpmMetricsGetV was just called") } callInfo := struct { GpmMetricsGetType *nvml.GpmMetricsGetType }{ GpmMetricsGetType: gpmMetricsGetType, } mock.lockGpmMetricsGetV.Lock() mock.calls.GpmMetricsGetV = append(mock.calls.GpmMetricsGetV, callInfo) mock.lockGpmMetricsGetV.Unlock() return mock.GpmMetricsGetVFunc(gpmMetricsGetType) } // GpmMetricsGetVCalls gets all the calls that were made to GpmMetricsGetV. // Check the length with: // // len(mockedInterface.GpmMetricsGetVCalls()) func (mock *Interface) GpmMetricsGetVCalls() []struct { GpmMetricsGetType *nvml.GpmMetricsGetType } { var calls []struct { GpmMetricsGetType *nvml.GpmMetricsGetType } mock.lockGpmMetricsGetV.RLock() calls = mock.calls.GpmMetricsGetV mock.lockGpmMetricsGetV.RUnlock() return calls } // GpmMigSampleGet calls GpmMigSampleGetFunc. func (mock *Interface) GpmMigSampleGet(device nvml.Device, n int, gpmSample nvml.GpmSample) nvml.Return { if mock.GpmMigSampleGetFunc == nil { panic("Interface.GpmMigSampleGetFunc: method is nil but Interface.GpmMigSampleGet was just called") } callInfo := struct { Device nvml.Device N int GpmSample nvml.GpmSample }{ Device: device, N: n, GpmSample: gpmSample, } mock.lockGpmMigSampleGet.Lock() mock.calls.GpmMigSampleGet = append(mock.calls.GpmMigSampleGet, callInfo) mock.lockGpmMigSampleGet.Unlock() return mock.GpmMigSampleGetFunc(device, n, gpmSample) } // GpmMigSampleGetCalls gets all the calls that were made to GpmMigSampleGet. // Check the length with: // // len(mockedInterface.GpmMigSampleGetCalls()) func (mock *Interface) GpmMigSampleGetCalls() []struct { Device nvml.Device N int GpmSample nvml.GpmSample } { var calls []struct { Device nvml.Device N int GpmSample nvml.GpmSample } mock.lockGpmMigSampleGet.RLock() calls = mock.calls.GpmMigSampleGet mock.lockGpmMigSampleGet.RUnlock() return calls } // GpmQueryDeviceSupport calls GpmQueryDeviceSupportFunc. func (mock *Interface) GpmQueryDeviceSupport(device nvml.Device) (nvml.GpmSupport, nvml.Return) { if mock.GpmQueryDeviceSupportFunc == nil { panic("Interface.GpmQueryDeviceSupportFunc: method is nil but Interface.GpmQueryDeviceSupport was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGpmQueryDeviceSupport.Lock() mock.calls.GpmQueryDeviceSupport = append(mock.calls.GpmQueryDeviceSupport, callInfo) mock.lockGpmQueryDeviceSupport.Unlock() return mock.GpmQueryDeviceSupportFunc(device) } // GpmQueryDeviceSupportCalls gets all the calls that were made to GpmQueryDeviceSupport. // Check the length with: // // len(mockedInterface.GpmQueryDeviceSupportCalls()) func (mock *Interface) GpmQueryDeviceSupportCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGpmQueryDeviceSupport.RLock() calls = mock.calls.GpmQueryDeviceSupport mock.lockGpmQueryDeviceSupport.RUnlock() return calls } // GpmQueryDeviceSupportV calls GpmQueryDeviceSupportVFunc. func (mock *Interface) GpmQueryDeviceSupportV(device nvml.Device) nvml.GpmSupportV { if mock.GpmQueryDeviceSupportVFunc == nil { panic("Interface.GpmQueryDeviceSupportVFunc: method is nil but Interface.GpmQueryDeviceSupportV was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGpmQueryDeviceSupportV.Lock() mock.calls.GpmQueryDeviceSupportV = append(mock.calls.GpmQueryDeviceSupportV, callInfo) mock.lockGpmQueryDeviceSupportV.Unlock() return mock.GpmQueryDeviceSupportVFunc(device) } // GpmQueryDeviceSupportVCalls gets all the calls that were made to GpmQueryDeviceSupportV. // Check the length with: // // len(mockedInterface.GpmQueryDeviceSupportVCalls()) func (mock *Interface) GpmQueryDeviceSupportVCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGpmQueryDeviceSupportV.RLock() calls = mock.calls.GpmQueryDeviceSupportV mock.lockGpmQueryDeviceSupportV.RUnlock() return calls } // GpmQueryIfStreamingEnabled calls GpmQueryIfStreamingEnabledFunc. func (mock *Interface) GpmQueryIfStreamingEnabled(device nvml.Device) (uint32, nvml.Return) { if mock.GpmQueryIfStreamingEnabledFunc == nil { panic("Interface.GpmQueryIfStreamingEnabledFunc: method is nil but Interface.GpmQueryIfStreamingEnabled was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGpmQueryIfStreamingEnabled.Lock() mock.calls.GpmQueryIfStreamingEnabled = append(mock.calls.GpmQueryIfStreamingEnabled, callInfo) mock.lockGpmQueryIfStreamingEnabled.Unlock() return mock.GpmQueryIfStreamingEnabledFunc(device) } // GpmQueryIfStreamingEnabledCalls gets all the calls that were made to GpmQueryIfStreamingEnabled. // Check the length with: // // len(mockedInterface.GpmQueryIfStreamingEnabledCalls()) func (mock *Interface) GpmQueryIfStreamingEnabledCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGpmQueryIfStreamingEnabled.RLock() calls = mock.calls.GpmQueryIfStreamingEnabled mock.lockGpmQueryIfStreamingEnabled.RUnlock() return calls } // GpmSampleAlloc calls GpmSampleAllocFunc. func (mock *Interface) GpmSampleAlloc() (nvml.GpmSample, nvml.Return) { if mock.GpmSampleAllocFunc == nil { panic("Interface.GpmSampleAllocFunc: method is nil but Interface.GpmSampleAlloc was just called") } callInfo := struct { }{} mock.lockGpmSampleAlloc.Lock() mock.calls.GpmSampleAlloc = append(mock.calls.GpmSampleAlloc, callInfo) mock.lockGpmSampleAlloc.Unlock() return mock.GpmSampleAllocFunc() } // GpmSampleAllocCalls gets all the calls that were made to GpmSampleAlloc. // Check the length with: // // len(mockedInterface.GpmSampleAllocCalls()) func (mock *Interface) GpmSampleAllocCalls() []struct { } { var calls []struct { } mock.lockGpmSampleAlloc.RLock() calls = mock.calls.GpmSampleAlloc mock.lockGpmSampleAlloc.RUnlock() return calls } // GpmSampleFree calls GpmSampleFreeFunc. func (mock *Interface) GpmSampleFree(gpmSample nvml.GpmSample) nvml.Return { if mock.GpmSampleFreeFunc == nil { panic("Interface.GpmSampleFreeFunc: method is nil but Interface.GpmSampleFree was just called") } callInfo := struct { GpmSample nvml.GpmSample }{ GpmSample: gpmSample, } mock.lockGpmSampleFree.Lock() mock.calls.GpmSampleFree = append(mock.calls.GpmSampleFree, callInfo) mock.lockGpmSampleFree.Unlock() return mock.GpmSampleFreeFunc(gpmSample) } // GpmSampleFreeCalls gets all the calls that were made to GpmSampleFree. // Check the length with: // // len(mockedInterface.GpmSampleFreeCalls()) func (mock *Interface) GpmSampleFreeCalls() []struct { GpmSample nvml.GpmSample } { var calls []struct { GpmSample nvml.GpmSample } mock.lockGpmSampleFree.RLock() calls = mock.calls.GpmSampleFree mock.lockGpmSampleFree.RUnlock() return calls } // GpmSampleGet calls GpmSampleGetFunc. func (mock *Interface) GpmSampleGet(device nvml.Device, gpmSample nvml.GpmSample) nvml.Return { if mock.GpmSampleGetFunc == nil { panic("Interface.GpmSampleGetFunc: method is nil but Interface.GpmSampleGet was just called") } callInfo := struct { Device nvml.Device GpmSample nvml.GpmSample }{ Device: device, GpmSample: gpmSample, } mock.lockGpmSampleGet.Lock() mock.calls.GpmSampleGet = append(mock.calls.GpmSampleGet, callInfo) mock.lockGpmSampleGet.Unlock() return mock.GpmSampleGetFunc(device, gpmSample) } // GpmSampleGetCalls gets all the calls that were made to GpmSampleGet. // Check the length with: // // len(mockedInterface.GpmSampleGetCalls()) func (mock *Interface) GpmSampleGetCalls() []struct { Device nvml.Device GpmSample nvml.GpmSample } { var calls []struct { Device nvml.Device GpmSample nvml.GpmSample } mock.lockGpmSampleGet.RLock() calls = mock.calls.GpmSampleGet mock.lockGpmSampleGet.RUnlock() return calls } // GpmSetStreamingEnabled calls GpmSetStreamingEnabledFunc. func (mock *Interface) GpmSetStreamingEnabled(device nvml.Device, v uint32) nvml.Return { if mock.GpmSetStreamingEnabledFunc == nil { panic("Interface.GpmSetStreamingEnabledFunc: method is nil but Interface.GpmSetStreamingEnabled was just called") } callInfo := struct { Device nvml.Device V uint32 }{ Device: device, V: v, } mock.lockGpmSetStreamingEnabled.Lock() mock.calls.GpmSetStreamingEnabled = append(mock.calls.GpmSetStreamingEnabled, callInfo) mock.lockGpmSetStreamingEnabled.Unlock() return mock.GpmSetStreamingEnabledFunc(device, v) } // GpmSetStreamingEnabledCalls gets all the calls that were made to GpmSetStreamingEnabled. // Check the length with: // // len(mockedInterface.GpmSetStreamingEnabledCalls()) func (mock *Interface) GpmSetStreamingEnabledCalls() []struct { Device nvml.Device V uint32 } { var calls []struct { Device nvml.Device V uint32 } mock.lockGpmSetStreamingEnabled.RLock() calls = mock.calls.GpmSetStreamingEnabled mock.lockGpmSetStreamingEnabled.RUnlock() return calls } // GpuInstanceCreateComputeInstance calls GpuInstanceCreateComputeInstanceFunc. func (mock *Interface) GpuInstanceCreateComputeInstance(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (nvml.ComputeInstance, nvml.Return) { if mock.GpuInstanceCreateComputeInstanceFunc == nil { panic("Interface.GpuInstanceCreateComputeInstanceFunc: method is nil but Interface.GpuInstanceCreateComputeInstance was just called") } callInfo := struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ GpuInstance: gpuInstance, ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockGpuInstanceCreateComputeInstance.Lock() mock.calls.GpuInstanceCreateComputeInstance = append(mock.calls.GpuInstanceCreateComputeInstance, callInfo) mock.lockGpuInstanceCreateComputeInstance.Unlock() return mock.GpuInstanceCreateComputeInstanceFunc(gpuInstance, computeInstanceProfileInfo) } // GpuInstanceCreateComputeInstanceCalls gets all the calls that were made to GpuInstanceCreateComputeInstance. // Check the length with: // // len(mockedInterface.GpuInstanceCreateComputeInstanceCalls()) func (mock *Interface) GpuInstanceCreateComputeInstanceCalls() []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockGpuInstanceCreateComputeInstance.RLock() calls = mock.calls.GpuInstanceCreateComputeInstance mock.lockGpuInstanceCreateComputeInstance.RUnlock() return calls } // GpuInstanceCreateComputeInstanceWithPlacement calls GpuInstanceCreateComputeInstanceWithPlacementFunc. func (mock *Interface) GpuInstanceCreateComputeInstanceWithPlacement(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo, computeInstancePlacement *nvml.ComputeInstancePlacement) (nvml.ComputeInstance, nvml.Return) { if mock.GpuInstanceCreateComputeInstanceWithPlacementFunc == nil { panic("Interface.GpuInstanceCreateComputeInstanceWithPlacementFunc: method is nil but Interface.GpuInstanceCreateComputeInstanceWithPlacement was just called") } callInfo := struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo ComputeInstancePlacement *nvml.ComputeInstancePlacement }{ GpuInstance: gpuInstance, ComputeInstanceProfileInfo: computeInstanceProfileInfo, ComputeInstancePlacement: computeInstancePlacement, } mock.lockGpuInstanceCreateComputeInstanceWithPlacement.Lock() mock.calls.GpuInstanceCreateComputeInstanceWithPlacement = append(mock.calls.GpuInstanceCreateComputeInstanceWithPlacement, callInfo) mock.lockGpuInstanceCreateComputeInstanceWithPlacement.Unlock() return mock.GpuInstanceCreateComputeInstanceWithPlacementFunc(gpuInstance, computeInstanceProfileInfo, computeInstancePlacement) } // GpuInstanceCreateComputeInstanceWithPlacementCalls gets all the calls that were made to GpuInstanceCreateComputeInstanceWithPlacement. // Check the length with: // // len(mockedInterface.GpuInstanceCreateComputeInstanceWithPlacementCalls()) func (mock *Interface) GpuInstanceCreateComputeInstanceWithPlacementCalls() []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo ComputeInstancePlacement *nvml.ComputeInstancePlacement } { var calls []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo ComputeInstancePlacement *nvml.ComputeInstancePlacement } mock.lockGpuInstanceCreateComputeInstanceWithPlacement.RLock() calls = mock.calls.GpuInstanceCreateComputeInstanceWithPlacement mock.lockGpuInstanceCreateComputeInstanceWithPlacement.RUnlock() return calls } // GpuInstanceDestroy calls GpuInstanceDestroyFunc. func (mock *Interface) GpuInstanceDestroy(gpuInstance nvml.GpuInstance) nvml.Return { if mock.GpuInstanceDestroyFunc == nil { panic("Interface.GpuInstanceDestroyFunc: method is nil but Interface.GpuInstanceDestroy was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceDestroy.Lock() mock.calls.GpuInstanceDestroy = append(mock.calls.GpuInstanceDestroy, callInfo) mock.lockGpuInstanceDestroy.Unlock() return mock.GpuInstanceDestroyFunc(gpuInstance) } // GpuInstanceDestroyCalls gets all the calls that were made to GpuInstanceDestroy. // Check the length with: // // len(mockedInterface.GpuInstanceDestroyCalls()) func (mock *Interface) GpuInstanceDestroyCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceDestroy.RLock() calls = mock.calls.GpuInstanceDestroy mock.lockGpuInstanceDestroy.RUnlock() return calls } // GpuInstanceGetActiveVgpus calls GpuInstanceGetActiveVgpusFunc. func (mock *Interface) GpuInstanceGetActiveVgpus(gpuInstance nvml.GpuInstance) (nvml.ActiveVgpuInstanceInfo, nvml.Return) { if mock.GpuInstanceGetActiveVgpusFunc == nil { panic("Interface.GpuInstanceGetActiveVgpusFunc: method is nil but Interface.GpuInstanceGetActiveVgpus was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceGetActiveVgpus.Lock() mock.calls.GpuInstanceGetActiveVgpus = append(mock.calls.GpuInstanceGetActiveVgpus, callInfo) mock.lockGpuInstanceGetActiveVgpus.Unlock() return mock.GpuInstanceGetActiveVgpusFunc(gpuInstance) } // GpuInstanceGetActiveVgpusCalls gets all the calls that were made to GpuInstanceGetActiveVgpus. // Check the length with: // // len(mockedInterface.GpuInstanceGetActiveVgpusCalls()) func (mock *Interface) GpuInstanceGetActiveVgpusCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceGetActiveVgpus.RLock() calls = mock.calls.GpuInstanceGetActiveVgpus mock.lockGpuInstanceGetActiveVgpus.RUnlock() return calls } // GpuInstanceGetComputeInstanceById calls GpuInstanceGetComputeInstanceByIdFunc. func (mock *Interface) GpuInstanceGetComputeInstanceById(gpuInstance nvml.GpuInstance, n int) (nvml.ComputeInstance, nvml.Return) { if mock.GpuInstanceGetComputeInstanceByIdFunc == nil { panic("Interface.GpuInstanceGetComputeInstanceByIdFunc: method is nil but Interface.GpuInstanceGetComputeInstanceById was just called") } callInfo := struct { GpuInstance nvml.GpuInstance N int }{ GpuInstance: gpuInstance, N: n, } mock.lockGpuInstanceGetComputeInstanceById.Lock() mock.calls.GpuInstanceGetComputeInstanceById = append(mock.calls.GpuInstanceGetComputeInstanceById, callInfo) mock.lockGpuInstanceGetComputeInstanceById.Unlock() return mock.GpuInstanceGetComputeInstanceByIdFunc(gpuInstance, n) } // GpuInstanceGetComputeInstanceByIdCalls gets all the calls that were made to GpuInstanceGetComputeInstanceById. // Check the length with: // // len(mockedInterface.GpuInstanceGetComputeInstanceByIdCalls()) func (mock *Interface) GpuInstanceGetComputeInstanceByIdCalls() []struct { GpuInstance nvml.GpuInstance N int } { var calls []struct { GpuInstance nvml.GpuInstance N int } mock.lockGpuInstanceGetComputeInstanceById.RLock() calls = mock.calls.GpuInstanceGetComputeInstanceById mock.lockGpuInstanceGetComputeInstanceById.RUnlock() return calls } // GpuInstanceGetComputeInstancePossiblePlacements calls GpuInstanceGetComputeInstancePossiblePlacementsFunc. func (mock *Interface) GpuInstanceGetComputeInstancePossiblePlacements(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstancePlacement, nvml.Return) { if mock.GpuInstanceGetComputeInstancePossiblePlacementsFunc == nil { panic("Interface.GpuInstanceGetComputeInstancePossiblePlacementsFunc: method is nil but Interface.GpuInstanceGetComputeInstancePossiblePlacements was just called") } callInfo := struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ GpuInstance: gpuInstance, ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockGpuInstanceGetComputeInstancePossiblePlacements.Lock() mock.calls.GpuInstanceGetComputeInstancePossiblePlacements = append(mock.calls.GpuInstanceGetComputeInstancePossiblePlacements, callInfo) mock.lockGpuInstanceGetComputeInstancePossiblePlacements.Unlock() return mock.GpuInstanceGetComputeInstancePossiblePlacementsFunc(gpuInstance, computeInstanceProfileInfo) } // GpuInstanceGetComputeInstancePossiblePlacementsCalls gets all the calls that were made to GpuInstanceGetComputeInstancePossiblePlacements. // Check the length with: // // len(mockedInterface.GpuInstanceGetComputeInstancePossiblePlacementsCalls()) func (mock *Interface) GpuInstanceGetComputeInstancePossiblePlacementsCalls() []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockGpuInstanceGetComputeInstancePossiblePlacements.RLock() calls = mock.calls.GpuInstanceGetComputeInstancePossiblePlacements mock.lockGpuInstanceGetComputeInstancePossiblePlacements.RUnlock() return calls } // GpuInstanceGetComputeInstanceProfileInfo calls GpuInstanceGetComputeInstanceProfileInfoFunc. func (mock *Interface) GpuInstanceGetComputeInstanceProfileInfo(gpuInstance nvml.GpuInstance, n1 int, n2 int) (nvml.ComputeInstanceProfileInfo, nvml.Return) { if mock.GpuInstanceGetComputeInstanceProfileInfoFunc == nil { panic("Interface.GpuInstanceGetComputeInstanceProfileInfoFunc: method is nil but Interface.GpuInstanceGetComputeInstanceProfileInfo was just called") } callInfo := struct { GpuInstance nvml.GpuInstance N1 int N2 int }{ GpuInstance: gpuInstance, N1: n1, N2: n2, } mock.lockGpuInstanceGetComputeInstanceProfileInfo.Lock() mock.calls.GpuInstanceGetComputeInstanceProfileInfo = append(mock.calls.GpuInstanceGetComputeInstanceProfileInfo, callInfo) mock.lockGpuInstanceGetComputeInstanceProfileInfo.Unlock() return mock.GpuInstanceGetComputeInstanceProfileInfoFunc(gpuInstance, n1, n2) } // GpuInstanceGetComputeInstanceProfileInfoCalls gets all the calls that were made to GpuInstanceGetComputeInstanceProfileInfo. // Check the length with: // // len(mockedInterface.GpuInstanceGetComputeInstanceProfileInfoCalls()) func (mock *Interface) GpuInstanceGetComputeInstanceProfileInfoCalls() []struct { GpuInstance nvml.GpuInstance N1 int N2 int } { var calls []struct { GpuInstance nvml.GpuInstance N1 int N2 int } mock.lockGpuInstanceGetComputeInstanceProfileInfo.RLock() calls = mock.calls.GpuInstanceGetComputeInstanceProfileInfo mock.lockGpuInstanceGetComputeInstanceProfileInfo.RUnlock() return calls } // GpuInstanceGetComputeInstanceProfileInfoV calls GpuInstanceGetComputeInstanceProfileInfoVFunc. func (mock *Interface) GpuInstanceGetComputeInstanceProfileInfoV(gpuInstance nvml.GpuInstance, n1 int, n2 int) nvml.ComputeInstanceProfileInfoHandler { if mock.GpuInstanceGetComputeInstanceProfileInfoVFunc == nil { panic("Interface.GpuInstanceGetComputeInstanceProfileInfoVFunc: method is nil but Interface.GpuInstanceGetComputeInstanceProfileInfoV was just called") } callInfo := struct { GpuInstance nvml.GpuInstance N1 int N2 int }{ GpuInstance: gpuInstance, N1: n1, N2: n2, } mock.lockGpuInstanceGetComputeInstanceProfileInfoV.Lock() mock.calls.GpuInstanceGetComputeInstanceProfileInfoV = append(mock.calls.GpuInstanceGetComputeInstanceProfileInfoV, callInfo) mock.lockGpuInstanceGetComputeInstanceProfileInfoV.Unlock() return mock.GpuInstanceGetComputeInstanceProfileInfoVFunc(gpuInstance, n1, n2) } // GpuInstanceGetComputeInstanceProfileInfoVCalls gets all the calls that were made to GpuInstanceGetComputeInstanceProfileInfoV. // Check the length with: // // len(mockedInterface.GpuInstanceGetComputeInstanceProfileInfoVCalls()) func (mock *Interface) GpuInstanceGetComputeInstanceProfileInfoVCalls() []struct { GpuInstance nvml.GpuInstance N1 int N2 int } { var calls []struct { GpuInstance nvml.GpuInstance N1 int N2 int } mock.lockGpuInstanceGetComputeInstanceProfileInfoV.RLock() calls = mock.calls.GpuInstanceGetComputeInstanceProfileInfoV mock.lockGpuInstanceGetComputeInstanceProfileInfoV.RUnlock() return calls } // GpuInstanceGetComputeInstanceRemainingCapacity calls GpuInstanceGetComputeInstanceRemainingCapacityFunc. func (mock *Interface) GpuInstanceGetComputeInstanceRemainingCapacity(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) (int, nvml.Return) { if mock.GpuInstanceGetComputeInstanceRemainingCapacityFunc == nil { panic("Interface.GpuInstanceGetComputeInstanceRemainingCapacityFunc: method is nil but Interface.GpuInstanceGetComputeInstanceRemainingCapacity was just called") } callInfo := struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ GpuInstance: gpuInstance, ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockGpuInstanceGetComputeInstanceRemainingCapacity.Lock() mock.calls.GpuInstanceGetComputeInstanceRemainingCapacity = append(mock.calls.GpuInstanceGetComputeInstanceRemainingCapacity, callInfo) mock.lockGpuInstanceGetComputeInstanceRemainingCapacity.Unlock() return mock.GpuInstanceGetComputeInstanceRemainingCapacityFunc(gpuInstance, computeInstanceProfileInfo) } // GpuInstanceGetComputeInstanceRemainingCapacityCalls gets all the calls that were made to GpuInstanceGetComputeInstanceRemainingCapacity. // Check the length with: // // len(mockedInterface.GpuInstanceGetComputeInstanceRemainingCapacityCalls()) func (mock *Interface) GpuInstanceGetComputeInstanceRemainingCapacityCalls() []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockGpuInstanceGetComputeInstanceRemainingCapacity.RLock() calls = mock.calls.GpuInstanceGetComputeInstanceRemainingCapacity mock.lockGpuInstanceGetComputeInstanceRemainingCapacity.RUnlock() return calls } // GpuInstanceGetComputeInstances calls GpuInstanceGetComputeInstancesFunc. func (mock *Interface) GpuInstanceGetComputeInstances(gpuInstance nvml.GpuInstance, computeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo) ([]nvml.ComputeInstance, nvml.Return) { if mock.GpuInstanceGetComputeInstancesFunc == nil { panic("Interface.GpuInstanceGetComputeInstancesFunc: method is nil but Interface.GpuInstanceGetComputeInstances was just called") } callInfo := struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo }{ GpuInstance: gpuInstance, ComputeInstanceProfileInfo: computeInstanceProfileInfo, } mock.lockGpuInstanceGetComputeInstances.Lock() mock.calls.GpuInstanceGetComputeInstances = append(mock.calls.GpuInstanceGetComputeInstances, callInfo) mock.lockGpuInstanceGetComputeInstances.Unlock() return mock.GpuInstanceGetComputeInstancesFunc(gpuInstance, computeInstanceProfileInfo) } // GpuInstanceGetComputeInstancesCalls gets all the calls that were made to GpuInstanceGetComputeInstances. // Check the length with: // // len(mockedInterface.GpuInstanceGetComputeInstancesCalls()) func (mock *Interface) GpuInstanceGetComputeInstancesCalls() []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } { var calls []struct { GpuInstance nvml.GpuInstance ComputeInstanceProfileInfo *nvml.ComputeInstanceProfileInfo } mock.lockGpuInstanceGetComputeInstances.RLock() calls = mock.calls.GpuInstanceGetComputeInstances mock.lockGpuInstanceGetComputeInstances.RUnlock() return calls } // GpuInstanceGetCreatableVgpus calls GpuInstanceGetCreatableVgpusFunc. func (mock *Interface) GpuInstanceGetCreatableVgpus(gpuInstance nvml.GpuInstance) (nvml.VgpuTypeIdInfo, nvml.Return) { if mock.GpuInstanceGetCreatableVgpusFunc == nil { panic("Interface.GpuInstanceGetCreatableVgpusFunc: method is nil but Interface.GpuInstanceGetCreatableVgpus was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceGetCreatableVgpus.Lock() mock.calls.GpuInstanceGetCreatableVgpus = append(mock.calls.GpuInstanceGetCreatableVgpus, callInfo) mock.lockGpuInstanceGetCreatableVgpus.Unlock() return mock.GpuInstanceGetCreatableVgpusFunc(gpuInstance) } // GpuInstanceGetCreatableVgpusCalls gets all the calls that were made to GpuInstanceGetCreatableVgpus. // Check the length with: // // len(mockedInterface.GpuInstanceGetCreatableVgpusCalls()) func (mock *Interface) GpuInstanceGetCreatableVgpusCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceGetCreatableVgpus.RLock() calls = mock.calls.GpuInstanceGetCreatableVgpus mock.lockGpuInstanceGetCreatableVgpus.RUnlock() return calls } // GpuInstanceGetInfo calls GpuInstanceGetInfoFunc. func (mock *Interface) GpuInstanceGetInfo(gpuInstance nvml.GpuInstance) (nvml.GpuInstanceInfo, nvml.Return) { if mock.GpuInstanceGetInfoFunc == nil { panic("Interface.GpuInstanceGetInfoFunc: method is nil but Interface.GpuInstanceGetInfo was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceGetInfo.Lock() mock.calls.GpuInstanceGetInfo = append(mock.calls.GpuInstanceGetInfo, callInfo) mock.lockGpuInstanceGetInfo.Unlock() return mock.GpuInstanceGetInfoFunc(gpuInstance) } // GpuInstanceGetInfoCalls gets all the calls that were made to GpuInstanceGetInfo. // Check the length with: // // len(mockedInterface.GpuInstanceGetInfoCalls()) func (mock *Interface) GpuInstanceGetInfoCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceGetInfo.RLock() calls = mock.calls.GpuInstanceGetInfo mock.lockGpuInstanceGetInfo.RUnlock() return calls } // GpuInstanceGetVgpuHeterogeneousMode calls GpuInstanceGetVgpuHeterogeneousModeFunc. func (mock *Interface) GpuInstanceGetVgpuHeterogeneousMode(gpuInstance nvml.GpuInstance) (nvml.VgpuHeterogeneousMode, nvml.Return) { if mock.GpuInstanceGetVgpuHeterogeneousModeFunc == nil { panic("Interface.GpuInstanceGetVgpuHeterogeneousModeFunc: method is nil but Interface.GpuInstanceGetVgpuHeterogeneousMode was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceGetVgpuHeterogeneousMode.Lock() mock.calls.GpuInstanceGetVgpuHeterogeneousMode = append(mock.calls.GpuInstanceGetVgpuHeterogeneousMode, callInfo) mock.lockGpuInstanceGetVgpuHeterogeneousMode.Unlock() return mock.GpuInstanceGetVgpuHeterogeneousModeFunc(gpuInstance) } // GpuInstanceGetVgpuHeterogeneousModeCalls gets all the calls that were made to GpuInstanceGetVgpuHeterogeneousMode. // Check the length with: // // len(mockedInterface.GpuInstanceGetVgpuHeterogeneousModeCalls()) func (mock *Interface) GpuInstanceGetVgpuHeterogeneousModeCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceGetVgpuHeterogeneousMode.RLock() calls = mock.calls.GpuInstanceGetVgpuHeterogeneousMode mock.lockGpuInstanceGetVgpuHeterogeneousMode.RUnlock() return calls } // GpuInstanceGetVgpuSchedulerLog calls GpuInstanceGetVgpuSchedulerLogFunc. func (mock *Interface) GpuInstanceGetVgpuSchedulerLog(gpuInstance nvml.GpuInstance) (nvml.VgpuSchedulerLogInfo, nvml.Return) { if mock.GpuInstanceGetVgpuSchedulerLogFunc == nil { panic("Interface.GpuInstanceGetVgpuSchedulerLogFunc: method is nil but Interface.GpuInstanceGetVgpuSchedulerLog was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceGetVgpuSchedulerLog.Lock() mock.calls.GpuInstanceGetVgpuSchedulerLog = append(mock.calls.GpuInstanceGetVgpuSchedulerLog, callInfo) mock.lockGpuInstanceGetVgpuSchedulerLog.Unlock() return mock.GpuInstanceGetVgpuSchedulerLogFunc(gpuInstance) } // GpuInstanceGetVgpuSchedulerLogCalls gets all the calls that were made to GpuInstanceGetVgpuSchedulerLog. // Check the length with: // // len(mockedInterface.GpuInstanceGetVgpuSchedulerLogCalls()) func (mock *Interface) GpuInstanceGetVgpuSchedulerLogCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceGetVgpuSchedulerLog.RLock() calls = mock.calls.GpuInstanceGetVgpuSchedulerLog mock.lockGpuInstanceGetVgpuSchedulerLog.RUnlock() return calls } // GpuInstanceGetVgpuSchedulerState calls GpuInstanceGetVgpuSchedulerStateFunc. func (mock *Interface) GpuInstanceGetVgpuSchedulerState(gpuInstance nvml.GpuInstance) (nvml.VgpuSchedulerStateInfo, nvml.Return) { if mock.GpuInstanceGetVgpuSchedulerStateFunc == nil { panic("Interface.GpuInstanceGetVgpuSchedulerStateFunc: method is nil but Interface.GpuInstanceGetVgpuSchedulerState was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceGetVgpuSchedulerState.Lock() mock.calls.GpuInstanceGetVgpuSchedulerState = append(mock.calls.GpuInstanceGetVgpuSchedulerState, callInfo) mock.lockGpuInstanceGetVgpuSchedulerState.Unlock() return mock.GpuInstanceGetVgpuSchedulerStateFunc(gpuInstance) } // GpuInstanceGetVgpuSchedulerStateCalls gets all the calls that were made to GpuInstanceGetVgpuSchedulerState. // Check the length with: // // len(mockedInterface.GpuInstanceGetVgpuSchedulerStateCalls()) func (mock *Interface) GpuInstanceGetVgpuSchedulerStateCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceGetVgpuSchedulerState.RLock() calls = mock.calls.GpuInstanceGetVgpuSchedulerState mock.lockGpuInstanceGetVgpuSchedulerState.RUnlock() return calls } // GpuInstanceGetVgpuTypeCreatablePlacements calls GpuInstanceGetVgpuTypeCreatablePlacementsFunc. func (mock *Interface) GpuInstanceGetVgpuTypeCreatablePlacements(gpuInstance nvml.GpuInstance) (nvml.VgpuCreatablePlacementInfo, nvml.Return) { if mock.GpuInstanceGetVgpuTypeCreatablePlacementsFunc == nil { panic("Interface.GpuInstanceGetVgpuTypeCreatablePlacementsFunc: method is nil but Interface.GpuInstanceGetVgpuTypeCreatablePlacements was just called") } callInfo := struct { GpuInstance nvml.GpuInstance }{ GpuInstance: gpuInstance, } mock.lockGpuInstanceGetVgpuTypeCreatablePlacements.Lock() mock.calls.GpuInstanceGetVgpuTypeCreatablePlacements = append(mock.calls.GpuInstanceGetVgpuTypeCreatablePlacements, callInfo) mock.lockGpuInstanceGetVgpuTypeCreatablePlacements.Unlock() return mock.GpuInstanceGetVgpuTypeCreatablePlacementsFunc(gpuInstance) } // GpuInstanceGetVgpuTypeCreatablePlacementsCalls gets all the calls that were made to GpuInstanceGetVgpuTypeCreatablePlacements. // Check the length with: // // len(mockedInterface.GpuInstanceGetVgpuTypeCreatablePlacementsCalls()) func (mock *Interface) GpuInstanceGetVgpuTypeCreatablePlacementsCalls() []struct { GpuInstance nvml.GpuInstance } { var calls []struct { GpuInstance nvml.GpuInstance } mock.lockGpuInstanceGetVgpuTypeCreatablePlacements.RLock() calls = mock.calls.GpuInstanceGetVgpuTypeCreatablePlacements mock.lockGpuInstanceGetVgpuTypeCreatablePlacements.RUnlock() return calls } // GpuInstanceSetVgpuHeterogeneousMode calls GpuInstanceSetVgpuHeterogeneousModeFunc. func (mock *Interface) GpuInstanceSetVgpuHeterogeneousMode(gpuInstance nvml.GpuInstance, vgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode) nvml.Return { if mock.GpuInstanceSetVgpuHeterogeneousModeFunc == nil { panic("Interface.GpuInstanceSetVgpuHeterogeneousModeFunc: method is nil but Interface.GpuInstanceSetVgpuHeterogeneousMode was just called") } callInfo := struct { GpuInstance nvml.GpuInstance VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode }{ GpuInstance: gpuInstance, VgpuHeterogeneousMode: vgpuHeterogeneousMode, } mock.lockGpuInstanceSetVgpuHeterogeneousMode.Lock() mock.calls.GpuInstanceSetVgpuHeterogeneousMode = append(mock.calls.GpuInstanceSetVgpuHeterogeneousMode, callInfo) mock.lockGpuInstanceSetVgpuHeterogeneousMode.Unlock() return mock.GpuInstanceSetVgpuHeterogeneousModeFunc(gpuInstance, vgpuHeterogeneousMode) } // GpuInstanceSetVgpuHeterogeneousModeCalls gets all the calls that were made to GpuInstanceSetVgpuHeterogeneousMode. // Check the length with: // // len(mockedInterface.GpuInstanceSetVgpuHeterogeneousModeCalls()) func (mock *Interface) GpuInstanceSetVgpuHeterogeneousModeCalls() []struct { GpuInstance nvml.GpuInstance VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode } { var calls []struct { GpuInstance nvml.GpuInstance VgpuHeterogeneousMode *nvml.VgpuHeterogeneousMode } mock.lockGpuInstanceSetVgpuHeterogeneousMode.RLock() calls = mock.calls.GpuInstanceSetVgpuHeterogeneousMode mock.lockGpuInstanceSetVgpuHeterogeneousMode.RUnlock() return calls } // GpuInstanceSetVgpuSchedulerState calls GpuInstanceSetVgpuSchedulerStateFunc. func (mock *Interface) GpuInstanceSetVgpuSchedulerState(gpuInstance nvml.GpuInstance, vgpuSchedulerState *nvml.VgpuSchedulerState) nvml.Return { if mock.GpuInstanceSetVgpuSchedulerStateFunc == nil { panic("Interface.GpuInstanceSetVgpuSchedulerStateFunc: method is nil but Interface.GpuInstanceSetVgpuSchedulerState was just called") } callInfo := struct { GpuInstance nvml.GpuInstance VgpuSchedulerState *nvml.VgpuSchedulerState }{ GpuInstance: gpuInstance, VgpuSchedulerState: vgpuSchedulerState, } mock.lockGpuInstanceSetVgpuSchedulerState.Lock() mock.calls.GpuInstanceSetVgpuSchedulerState = append(mock.calls.GpuInstanceSetVgpuSchedulerState, callInfo) mock.lockGpuInstanceSetVgpuSchedulerState.Unlock() return mock.GpuInstanceSetVgpuSchedulerStateFunc(gpuInstance, vgpuSchedulerState) } // GpuInstanceSetVgpuSchedulerStateCalls gets all the calls that were made to GpuInstanceSetVgpuSchedulerState. // Check the length with: // // len(mockedInterface.GpuInstanceSetVgpuSchedulerStateCalls()) func (mock *Interface) GpuInstanceSetVgpuSchedulerStateCalls() []struct { GpuInstance nvml.GpuInstance VgpuSchedulerState *nvml.VgpuSchedulerState } { var calls []struct { GpuInstance nvml.GpuInstance VgpuSchedulerState *nvml.VgpuSchedulerState } mock.lockGpuInstanceSetVgpuSchedulerState.RLock() calls = mock.calls.GpuInstanceSetVgpuSchedulerState mock.lockGpuInstanceSetVgpuSchedulerState.RUnlock() return calls } // Init calls InitFunc. func (mock *Interface) Init() nvml.Return { if mock.InitFunc == nil { panic("Interface.InitFunc: method is nil but Interface.Init was just called") } callInfo := struct { }{} mock.lockInit.Lock() mock.calls.Init = append(mock.calls.Init, callInfo) mock.lockInit.Unlock() return mock.InitFunc() } // InitCalls gets all the calls that were made to Init. // Check the length with: // // len(mockedInterface.InitCalls()) func (mock *Interface) InitCalls() []struct { } { var calls []struct { } mock.lockInit.RLock() calls = mock.calls.Init mock.lockInit.RUnlock() return calls } // InitWithFlags calls InitWithFlagsFunc. func (mock *Interface) InitWithFlags(v uint32) nvml.Return { if mock.InitWithFlagsFunc == nil { panic("Interface.InitWithFlagsFunc: method is nil but Interface.InitWithFlags was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockInitWithFlags.Lock() mock.calls.InitWithFlags = append(mock.calls.InitWithFlags, callInfo) mock.lockInitWithFlags.Unlock() return mock.InitWithFlagsFunc(v) } // InitWithFlagsCalls gets all the calls that were made to InitWithFlags. // Check the length with: // // len(mockedInterface.InitWithFlagsCalls()) func (mock *Interface) InitWithFlagsCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockInitWithFlags.RLock() calls = mock.calls.InitWithFlags mock.lockInitWithFlags.RUnlock() return calls } // SetVgpuVersion calls SetVgpuVersionFunc. func (mock *Interface) SetVgpuVersion(vgpuVersion *nvml.VgpuVersion) nvml.Return { if mock.SetVgpuVersionFunc == nil { panic("Interface.SetVgpuVersionFunc: method is nil but Interface.SetVgpuVersion was just called") } callInfo := struct { VgpuVersion *nvml.VgpuVersion }{ VgpuVersion: vgpuVersion, } mock.lockSetVgpuVersion.Lock() mock.calls.SetVgpuVersion = append(mock.calls.SetVgpuVersion, callInfo) mock.lockSetVgpuVersion.Unlock() return mock.SetVgpuVersionFunc(vgpuVersion) } // SetVgpuVersionCalls gets all the calls that were made to SetVgpuVersion. // Check the length with: // // len(mockedInterface.SetVgpuVersionCalls()) func (mock *Interface) SetVgpuVersionCalls() []struct { VgpuVersion *nvml.VgpuVersion } { var calls []struct { VgpuVersion *nvml.VgpuVersion } mock.lockSetVgpuVersion.RLock() calls = mock.calls.SetVgpuVersion mock.lockSetVgpuVersion.RUnlock() return calls } // Shutdown calls ShutdownFunc. func (mock *Interface) Shutdown() nvml.Return { if mock.ShutdownFunc == nil { panic("Interface.ShutdownFunc: method is nil but Interface.Shutdown was just called") } callInfo := struct { }{} mock.lockShutdown.Lock() mock.calls.Shutdown = append(mock.calls.Shutdown, callInfo) mock.lockShutdown.Unlock() return mock.ShutdownFunc() } // ShutdownCalls gets all the calls that were made to Shutdown. // Check the length with: // // len(mockedInterface.ShutdownCalls()) func (mock *Interface) ShutdownCalls() []struct { } { var calls []struct { } mock.lockShutdown.RLock() calls = mock.calls.Shutdown mock.lockShutdown.RUnlock() return calls } // SystemEventSetCreate calls SystemEventSetCreateFunc. func (mock *Interface) SystemEventSetCreate(systemEventSetCreateRequest *nvml.SystemEventSetCreateRequest) nvml.Return { if mock.SystemEventSetCreateFunc == nil { panic("Interface.SystemEventSetCreateFunc: method is nil but Interface.SystemEventSetCreate was just called") } callInfo := struct { SystemEventSetCreateRequest *nvml.SystemEventSetCreateRequest }{ SystemEventSetCreateRequest: systemEventSetCreateRequest, } mock.lockSystemEventSetCreate.Lock() mock.calls.SystemEventSetCreate = append(mock.calls.SystemEventSetCreate, callInfo) mock.lockSystemEventSetCreate.Unlock() return mock.SystemEventSetCreateFunc(systemEventSetCreateRequest) } // SystemEventSetCreateCalls gets all the calls that were made to SystemEventSetCreate. // Check the length with: // // len(mockedInterface.SystemEventSetCreateCalls()) func (mock *Interface) SystemEventSetCreateCalls() []struct { SystemEventSetCreateRequest *nvml.SystemEventSetCreateRequest } { var calls []struct { SystemEventSetCreateRequest *nvml.SystemEventSetCreateRequest } mock.lockSystemEventSetCreate.RLock() calls = mock.calls.SystemEventSetCreate mock.lockSystemEventSetCreate.RUnlock() return calls } // SystemEventSetFree calls SystemEventSetFreeFunc. func (mock *Interface) SystemEventSetFree(systemEventSetFreeRequest *nvml.SystemEventSetFreeRequest) nvml.Return { if mock.SystemEventSetFreeFunc == nil { panic("Interface.SystemEventSetFreeFunc: method is nil but Interface.SystemEventSetFree was just called") } callInfo := struct { SystemEventSetFreeRequest *nvml.SystemEventSetFreeRequest }{ SystemEventSetFreeRequest: systemEventSetFreeRequest, } mock.lockSystemEventSetFree.Lock() mock.calls.SystemEventSetFree = append(mock.calls.SystemEventSetFree, callInfo) mock.lockSystemEventSetFree.Unlock() return mock.SystemEventSetFreeFunc(systemEventSetFreeRequest) } // SystemEventSetFreeCalls gets all the calls that were made to SystemEventSetFree. // Check the length with: // // len(mockedInterface.SystemEventSetFreeCalls()) func (mock *Interface) SystemEventSetFreeCalls() []struct { SystemEventSetFreeRequest *nvml.SystemEventSetFreeRequest } { var calls []struct { SystemEventSetFreeRequest *nvml.SystemEventSetFreeRequest } mock.lockSystemEventSetFree.RLock() calls = mock.calls.SystemEventSetFree mock.lockSystemEventSetFree.RUnlock() return calls } // SystemEventSetWait calls SystemEventSetWaitFunc. func (mock *Interface) SystemEventSetWait(systemEventSetWaitRequest *nvml.SystemEventSetWaitRequest) nvml.Return { if mock.SystemEventSetWaitFunc == nil { panic("Interface.SystemEventSetWaitFunc: method is nil but Interface.SystemEventSetWait was just called") } callInfo := struct { SystemEventSetWaitRequest *nvml.SystemEventSetWaitRequest }{ SystemEventSetWaitRequest: systemEventSetWaitRequest, } mock.lockSystemEventSetWait.Lock() mock.calls.SystemEventSetWait = append(mock.calls.SystemEventSetWait, callInfo) mock.lockSystemEventSetWait.Unlock() return mock.SystemEventSetWaitFunc(systemEventSetWaitRequest) } // SystemEventSetWaitCalls gets all the calls that were made to SystemEventSetWait. // Check the length with: // // len(mockedInterface.SystemEventSetWaitCalls()) func (mock *Interface) SystemEventSetWaitCalls() []struct { SystemEventSetWaitRequest *nvml.SystemEventSetWaitRequest } { var calls []struct { SystemEventSetWaitRequest *nvml.SystemEventSetWaitRequest } mock.lockSystemEventSetWait.RLock() calls = mock.calls.SystemEventSetWait mock.lockSystemEventSetWait.RUnlock() return calls } // SystemGetConfComputeCapabilities calls SystemGetConfComputeCapabilitiesFunc. func (mock *Interface) SystemGetConfComputeCapabilities() (nvml.ConfComputeSystemCaps, nvml.Return) { if mock.SystemGetConfComputeCapabilitiesFunc == nil { panic("Interface.SystemGetConfComputeCapabilitiesFunc: method is nil but Interface.SystemGetConfComputeCapabilities was just called") } callInfo := struct { }{} mock.lockSystemGetConfComputeCapabilities.Lock() mock.calls.SystemGetConfComputeCapabilities = append(mock.calls.SystemGetConfComputeCapabilities, callInfo) mock.lockSystemGetConfComputeCapabilities.Unlock() return mock.SystemGetConfComputeCapabilitiesFunc() } // SystemGetConfComputeCapabilitiesCalls gets all the calls that were made to SystemGetConfComputeCapabilities. // Check the length with: // // len(mockedInterface.SystemGetConfComputeCapabilitiesCalls()) func (mock *Interface) SystemGetConfComputeCapabilitiesCalls() []struct { } { var calls []struct { } mock.lockSystemGetConfComputeCapabilities.RLock() calls = mock.calls.SystemGetConfComputeCapabilities mock.lockSystemGetConfComputeCapabilities.RUnlock() return calls } // SystemGetConfComputeGpusReadyState calls SystemGetConfComputeGpusReadyStateFunc. func (mock *Interface) SystemGetConfComputeGpusReadyState() (uint32, nvml.Return) { if mock.SystemGetConfComputeGpusReadyStateFunc == nil { panic("Interface.SystemGetConfComputeGpusReadyStateFunc: method is nil but Interface.SystemGetConfComputeGpusReadyState was just called") } callInfo := struct { }{} mock.lockSystemGetConfComputeGpusReadyState.Lock() mock.calls.SystemGetConfComputeGpusReadyState = append(mock.calls.SystemGetConfComputeGpusReadyState, callInfo) mock.lockSystemGetConfComputeGpusReadyState.Unlock() return mock.SystemGetConfComputeGpusReadyStateFunc() } // SystemGetConfComputeGpusReadyStateCalls gets all the calls that were made to SystemGetConfComputeGpusReadyState. // Check the length with: // // len(mockedInterface.SystemGetConfComputeGpusReadyStateCalls()) func (mock *Interface) SystemGetConfComputeGpusReadyStateCalls() []struct { } { var calls []struct { } mock.lockSystemGetConfComputeGpusReadyState.RLock() calls = mock.calls.SystemGetConfComputeGpusReadyState mock.lockSystemGetConfComputeGpusReadyState.RUnlock() return calls } // SystemGetConfComputeKeyRotationThresholdInfo calls SystemGetConfComputeKeyRotationThresholdInfoFunc. func (mock *Interface) SystemGetConfComputeKeyRotationThresholdInfo() (nvml.ConfComputeGetKeyRotationThresholdInfo, nvml.Return) { if mock.SystemGetConfComputeKeyRotationThresholdInfoFunc == nil { panic("Interface.SystemGetConfComputeKeyRotationThresholdInfoFunc: method is nil but Interface.SystemGetConfComputeKeyRotationThresholdInfo was just called") } callInfo := struct { }{} mock.lockSystemGetConfComputeKeyRotationThresholdInfo.Lock() mock.calls.SystemGetConfComputeKeyRotationThresholdInfo = append(mock.calls.SystemGetConfComputeKeyRotationThresholdInfo, callInfo) mock.lockSystemGetConfComputeKeyRotationThresholdInfo.Unlock() return mock.SystemGetConfComputeKeyRotationThresholdInfoFunc() } // SystemGetConfComputeKeyRotationThresholdInfoCalls gets all the calls that were made to SystemGetConfComputeKeyRotationThresholdInfo. // Check the length with: // // len(mockedInterface.SystemGetConfComputeKeyRotationThresholdInfoCalls()) func (mock *Interface) SystemGetConfComputeKeyRotationThresholdInfoCalls() []struct { } { var calls []struct { } mock.lockSystemGetConfComputeKeyRotationThresholdInfo.RLock() calls = mock.calls.SystemGetConfComputeKeyRotationThresholdInfo mock.lockSystemGetConfComputeKeyRotationThresholdInfo.RUnlock() return calls } // SystemGetConfComputeSettings calls SystemGetConfComputeSettingsFunc. func (mock *Interface) SystemGetConfComputeSettings() (nvml.SystemConfComputeSettings, nvml.Return) { if mock.SystemGetConfComputeSettingsFunc == nil { panic("Interface.SystemGetConfComputeSettingsFunc: method is nil but Interface.SystemGetConfComputeSettings was just called") } callInfo := struct { }{} mock.lockSystemGetConfComputeSettings.Lock() mock.calls.SystemGetConfComputeSettings = append(mock.calls.SystemGetConfComputeSettings, callInfo) mock.lockSystemGetConfComputeSettings.Unlock() return mock.SystemGetConfComputeSettingsFunc() } // SystemGetConfComputeSettingsCalls gets all the calls that were made to SystemGetConfComputeSettings. // Check the length with: // // len(mockedInterface.SystemGetConfComputeSettingsCalls()) func (mock *Interface) SystemGetConfComputeSettingsCalls() []struct { } { var calls []struct { } mock.lockSystemGetConfComputeSettings.RLock() calls = mock.calls.SystemGetConfComputeSettings mock.lockSystemGetConfComputeSettings.RUnlock() return calls } // SystemGetConfComputeState calls SystemGetConfComputeStateFunc. func (mock *Interface) SystemGetConfComputeState() (nvml.ConfComputeSystemState, nvml.Return) { if mock.SystemGetConfComputeStateFunc == nil { panic("Interface.SystemGetConfComputeStateFunc: method is nil but Interface.SystemGetConfComputeState was just called") } callInfo := struct { }{} mock.lockSystemGetConfComputeState.Lock() mock.calls.SystemGetConfComputeState = append(mock.calls.SystemGetConfComputeState, callInfo) mock.lockSystemGetConfComputeState.Unlock() return mock.SystemGetConfComputeStateFunc() } // SystemGetConfComputeStateCalls gets all the calls that were made to SystemGetConfComputeState. // Check the length with: // // len(mockedInterface.SystemGetConfComputeStateCalls()) func (mock *Interface) SystemGetConfComputeStateCalls() []struct { } { var calls []struct { } mock.lockSystemGetConfComputeState.RLock() calls = mock.calls.SystemGetConfComputeState mock.lockSystemGetConfComputeState.RUnlock() return calls } // SystemGetCudaDriverVersion calls SystemGetCudaDriverVersionFunc. func (mock *Interface) SystemGetCudaDriverVersion() (int, nvml.Return) { if mock.SystemGetCudaDriverVersionFunc == nil { panic("Interface.SystemGetCudaDriverVersionFunc: method is nil but Interface.SystemGetCudaDriverVersion was just called") } callInfo := struct { }{} mock.lockSystemGetCudaDriverVersion.Lock() mock.calls.SystemGetCudaDriverVersion = append(mock.calls.SystemGetCudaDriverVersion, callInfo) mock.lockSystemGetCudaDriverVersion.Unlock() return mock.SystemGetCudaDriverVersionFunc() } // SystemGetCudaDriverVersionCalls gets all the calls that were made to SystemGetCudaDriverVersion. // Check the length with: // // len(mockedInterface.SystemGetCudaDriverVersionCalls()) func (mock *Interface) SystemGetCudaDriverVersionCalls() []struct { } { var calls []struct { } mock.lockSystemGetCudaDriverVersion.RLock() calls = mock.calls.SystemGetCudaDriverVersion mock.lockSystemGetCudaDriverVersion.RUnlock() return calls } // SystemGetCudaDriverVersion_v2 calls SystemGetCudaDriverVersion_v2Func. func (mock *Interface) SystemGetCudaDriverVersion_v2() (int, nvml.Return) { if mock.SystemGetCudaDriverVersion_v2Func == nil { panic("Interface.SystemGetCudaDriverVersion_v2Func: method is nil but Interface.SystemGetCudaDriverVersion_v2 was just called") } callInfo := struct { }{} mock.lockSystemGetCudaDriverVersion_v2.Lock() mock.calls.SystemGetCudaDriverVersion_v2 = append(mock.calls.SystemGetCudaDriverVersion_v2, callInfo) mock.lockSystemGetCudaDriverVersion_v2.Unlock() return mock.SystemGetCudaDriverVersion_v2Func() } // SystemGetCudaDriverVersion_v2Calls gets all the calls that were made to SystemGetCudaDriverVersion_v2. // Check the length with: // // len(mockedInterface.SystemGetCudaDriverVersion_v2Calls()) func (mock *Interface) SystemGetCudaDriverVersion_v2Calls() []struct { } { var calls []struct { } mock.lockSystemGetCudaDriverVersion_v2.RLock() calls = mock.calls.SystemGetCudaDriverVersion_v2 mock.lockSystemGetCudaDriverVersion_v2.RUnlock() return calls } // SystemGetDriverBranch calls SystemGetDriverBranchFunc. func (mock *Interface) SystemGetDriverBranch() (nvml.SystemDriverBranchInfo, nvml.Return) { if mock.SystemGetDriverBranchFunc == nil { panic("Interface.SystemGetDriverBranchFunc: method is nil but Interface.SystemGetDriverBranch was just called") } callInfo := struct { }{} mock.lockSystemGetDriverBranch.Lock() mock.calls.SystemGetDriverBranch = append(mock.calls.SystemGetDriverBranch, callInfo) mock.lockSystemGetDriverBranch.Unlock() return mock.SystemGetDriverBranchFunc() } // SystemGetDriverBranchCalls gets all the calls that were made to SystemGetDriverBranch. // Check the length with: // // len(mockedInterface.SystemGetDriverBranchCalls()) func (mock *Interface) SystemGetDriverBranchCalls() []struct { } { var calls []struct { } mock.lockSystemGetDriverBranch.RLock() calls = mock.calls.SystemGetDriverBranch mock.lockSystemGetDriverBranch.RUnlock() return calls } // SystemGetDriverVersion calls SystemGetDriverVersionFunc. func (mock *Interface) SystemGetDriverVersion() (string, nvml.Return) { if mock.SystemGetDriverVersionFunc == nil { panic("Interface.SystemGetDriverVersionFunc: method is nil but Interface.SystemGetDriverVersion was just called") } callInfo := struct { }{} mock.lockSystemGetDriverVersion.Lock() mock.calls.SystemGetDriverVersion = append(mock.calls.SystemGetDriverVersion, callInfo) mock.lockSystemGetDriverVersion.Unlock() return mock.SystemGetDriverVersionFunc() } // SystemGetDriverVersionCalls gets all the calls that were made to SystemGetDriverVersion. // Check the length with: // // len(mockedInterface.SystemGetDriverVersionCalls()) func (mock *Interface) SystemGetDriverVersionCalls() []struct { } { var calls []struct { } mock.lockSystemGetDriverVersion.RLock() calls = mock.calls.SystemGetDriverVersion mock.lockSystemGetDriverVersion.RUnlock() return calls } // SystemGetHicVersion calls SystemGetHicVersionFunc. func (mock *Interface) SystemGetHicVersion() ([]nvml.HwbcEntry, nvml.Return) { if mock.SystemGetHicVersionFunc == nil { panic("Interface.SystemGetHicVersionFunc: method is nil but Interface.SystemGetHicVersion was just called") } callInfo := struct { }{} mock.lockSystemGetHicVersion.Lock() mock.calls.SystemGetHicVersion = append(mock.calls.SystemGetHicVersion, callInfo) mock.lockSystemGetHicVersion.Unlock() return mock.SystemGetHicVersionFunc() } // SystemGetHicVersionCalls gets all the calls that were made to SystemGetHicVersion. // Check the length with: // // len(mockedInterface.SystemGetHicVersionCalls()) func (mock *Interface) SystemGetHicVersionCalls() []struct { } { var calls []struct { } mock.lockSystemGetHicVersion.RLock() calls = mock.calls.SystemGetHicVersion mock.lockSystemGetHicVersion.RUnlock() return calls } // SystemGetNVMLVersion calls SystemGetNVMLVersionFunc. func (mock *Interface) SystemGetNVMLVersion() (string, nvml.Return) { if mock.SystemGetNVMLVersionFunc == nil { panic("Interface.SystemGetNVMLVersionFunc: method is nil but Interface.SystemGetNVMLVersion was just called") } callInfo := struct { }{} mock.lockSystemGetNVMLVersion.Lock() mock.calls.SystemGetNVMLVersion = append(mock.calls.SystemGetNVMLVersion, callInfo) mock.lockSystemGetNVMLVersion.Unlock() return mock.SystemGetNVMLVersionFunc() } // SystemGetNVMLVersionCalls gets all the calls that were made to SystemGetNVMLVersion. // Check the length with: // // len(mockedInterface.SystemGetNVMLVersionCalls()) func (mock *Interface) SystemGetNVMLVersionCalls() []struct { } { var calls []struct { } mock.lockSystemGetNVMLVersion.RLock() calls = mock.calls.SystemGetNVMLVersion mock.lockSystemGetNVMLVersion.RUnlock() return calls } // SystemGetNvlinkBwMode calls SystemGetNvlinkBwModeFunc. func (mock *Interface) SystemGetNvlinkBwMode() (uint32, nvml.Return) { if mock.SystemGetNvlinkBwModeFunc == nil { panic("Interface.SystemGetNvlinkBwModeFunc: method is nil but Interface.SystemGetNvlinkBwMode was just called") } callInfo := struct { }{} mock.lockSystemGetNvlinkBwMode.Lock() mock.calls.SystemGetNvlinkBwMode = append(mock.calls.SystemGetNvlinkBwMode, callInfo) mock.lockSystemGetNvlinkBwMode.Unlock() return mock.SystemGetNvlinkBwModeFunc() } // SystemGetNvlinkBwModeCalls gets all the calls that were made to SystemGetNvlinkBwMode. // Check the length with: // // len(mockedInterface.SystemGetNvlinkBwModeCalls()) func (mock *Interface) SystemGetNvlinkBwModeCalls() []struct { } { var calls []struct { } mock.lockSystemGetNvlinkBwMode.RLock() calls = mock.calls.SystemGetNvlinkBwMode mock.lockSystemGetNvlinkBwMode.RUnlock() return calls } // SystemGetProcessName calls SystemGetProcessNameFunc. func (mock *Interface) SystemGetProcessName(n int) (string, nvml.Return) { if mock.SystemGetProcessNameFunc == nil { panic("Interface.SystemGetProcessNameFunc: method is nil but Interface.SystemGetProcessName was just called") } callInfo := struct { N int }{ N: n, } mock.lockSystemGetProcessName.Lock() mock.calls.SystemGetProcessName = append(mock.calls.SystemGetProcessName, callInfo) mock.lockSystemGetProcessName.Unlock() return mock.SystemGetProcessNameFunc(n) } // SystemGetProcessNameCalls gets all the calls that were made to SystemGetProcessName. // Check the length with: // // len(mockedInterface.SystemGetProcessNameCalls()) func (mock *Interface) SystemGetProcessNameCalls() []struct { N int } { var calls []struct { N int } mock.lockSystemGetProcessName.RLock() calls = mock.calls.SystemGetProcessName mock.lockSystemGetProcessName.RUnlock() return calls } // SystemGetTopologyGpuSet calls SystemGetTopologyGpuSetFunc. func (mock *Interface) SystemGetTopologyGpuSet(n int) ([]nvml.Device, nvml.Return) { if mock.SystemGetTopologyGpuSetFunc == nil { panic("Interface.SystemGetTopologyGpuSetFunc: method is nil but Interface.SystemGetTopologyGpuSet was just called") } callInfo := struct { N int }{ N: n, } mock.lockSystemGetTopologyGpuSet.Lock() mock.calls.SystemGetTopologyGpuSet = append(mock.calls.SystemGetTopologyGpuSet, callInfo) mock.lockSystemGetTopologyGpuSet.Unlock() return mock.SystemGetTopologyGpuSetFunc(n) } // SystemGetTopologyGpuSetCalls gets all the calls that were made to SystemGetTopologyGpuSet. // Check the length with: // // len(mockedInterface.SystemGetTopologyGpuSetCalls()) func (mock *Interface) SystemGetTopologyGpuSetCalls() []struct { N int } { var calls []struct { N int } mock.lockSystemGetTopologyGpuSet.RLock() calls = mock.calls.SystemGetTopologyGpuSet mock.lockSystemGetTopologyGpuSet.RUnlock() return calls } // SystemRegisterEvents calls SystemRegisterEventsFunc. func (mock *Interface) SystemRegisterEvents(systemRegisterEventRequest *nvml.SystemRegisterEventRequest) nvml.Return { if mock.SystemRegisterEventsFunc == nil { panic("Interface.SystemRegisterEventsFunc: method is nil but Interface.SystemRegisterEvents was just called") } callInfo := struct { SystemRegisterEventRequest *nvml.SystemRegisterEventRequest }{ SystemRegisterEventRequest: systemRegisterEventRequest, } mock.lockSystemRegisterEvents.Lock() mock.calls.SystemRegisterEvents = append(mock.calls.SystemRegisterEvents, callInfo) mock.lockSystemRegisterEvents.Unlock() return mock.SystemRegisterEventsFunc(systemRegisterEventRequest) } // SystemRegisterEventsCalls gets all the calls that were made to SystemRegisterEvents. // Check the length with: // // len(mockedInterface.SystemRegisterEventsCalls()) func (mock *Interface) SystemRegisterEventsCalls() []struct { SystemRegisterEventRequest *nvml.SystemRegisterEventRequest } { var calls []struct { SystemRegisterEventRequest *nvml.SystemRegisterEventRequest } mock.lockSystemRegisterEvents.RLock() calls = mock.calls.SystemRegisterEvents mock.lockSystemRegisterEvents.RUnlock() return calls } // SystemSetConfComputeGpusReadyState calls SystemSetConfComputeGpusReadyStateFunc. func (mock *Interface) SystemSetConfComputeGpusReadyState(v uint32) nvml.Return { if mock.SystemSetConfComputeGpusReadyStateFunc == nil { panic("Interface.SystemSetConfComputeGpusReadyStateFunc: method is nil but Interface.SystemSetConfComputeGpusReadyState was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockSystemSetConfComputeGpusReadyState.Lock() mock.calls.SystemSetConfComputeGpusReadyState = append(mock.calls.SystemSetConfComputeGpusReadyState, callInfo) mock.lockSystemSetConfComputeGpusReadyState.Unlock() return mock.SystemSetConfComputeGpusReadyStateFunc(v) } // SystemSetConfComputeGpusReadyStateCalls gets all the calls that were made to SystemSetConfComputeGpusReadyState. // Check the length with: // // len(mockedInterface.SystemSetConfComputeGpusReadyStateCalls()) func (mock *Interface) SystemSetConfComputeGpusReadyStateCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockSystemSetConfComputeGpusReadyState.RLock() calls = mock.calls.SystemSetConfComputeGpusReadyState mock.lockSystemSetConfComputeGpusReadyState.RUnlock() return calls } // SystemSetConfComputeKeyRotationThresholdInfo calls SystemSetConfComputeKeyRotationThresholdInfoFunc. func (mock *Interface) SystemSetConfComputeKeyRotationThresholdInfo(confComputeSetKeyRotationThresholdInfo nvml.ConfComputeSetKeyRotationThresholdInfo) nvml.Return { if mock.SystemSetConfComputeKeyRotationThresholdInfoFunc == nil { panic("Interface.SystemSetConfComputeKeyRotationThresholdInfoFunc: method is nil but Interface.SystemSetConfComputeKeyRotationThresholdInfo was just called") } callInfo := struct { ConfComputeSetKeyRotationThresholdInfo nvml.ConfComputeSetKeyRotationThresholdInfo }{ ConfComputeSetKeyRotationThresholdInfo: confComputeSetKeyRotationThresholdInfo, } mock.lockSystemSetConfComputeKeyRotationThresholdInfo.Lock() mock.calls.SystemSetConfComputeKeyRotationThresholdInfo = append(mock.calls.SystemSetConfComputeKeyRotationThresholdInfo, callInfo) mock.lockSystemSetConfComputeKeyRotationThresholdInfo.Unlock() return mock.SystemSetConfComputeKeyRotationThresholdInfoFunc(confComputeSetKeyRotationThresholdInfo) } // SystemSetConfComputeKeyRotationThresholdInfoCalls gets all the calls that were made to SystemSetConfComputeKeyRotationThresholdInfo. // Check the length with: // // len(mockedInterface.SystemSetConfComputeKeyRotationThresholdInfoCalls()) func (mock *Interface) SystemSetConfComputeKeyRotationThresholdInfoCalls() []struct { ConfComputeSetKeyRotationThresholdInfo nvml.ConfComputeSetKeyRotationThresholdInfo } { var calls []struct { ConfComputeSetKeyRotationThresholdInfo nvml.ConfComputeSetKeyRotationThresholdInfo } mock.lockSystemSetConfComputeKeyRotationThresholdInfo.RLock() calls = mock.calls.SystemSetConfComputeKeyRotationThresholdInfo mock.lockSystemSetConfComputeKeyRotationThresholdInfo.RUnlock() return calls } // SystemSetNvlinkBwMode calls SystemSetNvlinkBwModeFunc. func (mock *Interface) SystemSetNvlinkBwMode(v uint32) nvml.Return { if mock.SystemSetNvlinkBwModeFunc == nil { panic("Interface.SystemSetNvlinkBwModeFunc: method is nil but Interface.SystemSetNvlinkBwMode was just called") } callInfo := struct { V uint32 }{ V: v, } mock.lockSystemSetNvlinkBwMode.Lock() mock.calls.SystemSetNvlinkBwMode = append(mock.calls.SystemSetNvlinkBwMode, callInfo) mock.lockSystemSetNvlinkBwMode.Unlock() return mock.SystemSetNvlinkBwModeFunc(v) } // SystemSetNvlinkBwModeCalls gets all the calls that were made to SystemSetNvlinkBwMode. // Check the length with: // // len(mockedInterface.SystemSetNvlinkBwModeCalls()) func (mock *Interface) SystemSetNvlinkBwModeCalls() []struct { V uint32 } { var calls []struct { V uint32 } mock.lockSystemSetNvlinkBwMode.RLock() calls = mock.calls.SystemSetNvlinkBwMode mock.lockSystemSetNvlinkBwMode.RUnlock() return calls } // UnitGetCount calls UnitGetCountFunc. func (mock *Interface) UnitGetCount() (int, nvml.Return) { if mock.UnitGetCountFunc == nil { panic("Interface.UnitGetCountFunc: method is nil but Interface.UnitGetCount was just called") } callInfo := struct { }{} mock.lockUnitGetCount.Lock() mock.calls.UnitGetCount = append(mock.calls.UnitGetCount, callInfo) mock.lockUnitGetCount.Unlock() return mock.UnitGetCountFunc() } // UnitGetCountCalls gets all the calls that were made to UnitGetCount. // Check the length with: // // len(mockedInterface.UnitGetCountCalls()) func (mock *Interface) UnitGetCountCalls() []struct { } { var calls []struct { } mock.lockUnitGetCount.RLock() calls = mock.calls.UnitGetCount mock.lockUnitGetCount.RUnlock() return calls } // UnitGetDevices calls UnitGetDevicesFunc. func (mock *Interface) UnitGetDevices(unit nvml.Unit) ([]nvml.Device, nvml.Return) { if mock.UnitGetDevicesFunc == nil { panic("Interface.UnitGetDevicesFunc: method is nil but Interface.UnitGetDevices was just called") } callInfo := struct { Unit nvml.Unit }{ Unit: unit, } mock.lockUnitGetDevices.Lock() mock.calls.UnitGetDevices = append(mock.calls.UnitGetDevices, callInfo) mock.lockUnitGetDevices.Unlock() return mock.UnitGetDevicesFunc(unit) } // UnitGetDevicesCalls gets all the calls that were made to UnitGetDevices. // Check the length with: // // len(mockedInterface.UnitGetDevicesCalls()) func (mock *Interface) UnitGetDevicesCalls() []struct { Unit nvml.Unit } { var calls []struct { Unit nvml.Unit } mock.lockUnitGetDevices.RLock() calls = mock.calls.UnitGetDevices mock.lockUnitGetDevices.RUnlock() return calls } // UnitGetFanSpeedInfo calls UnitGetFanSpeedInfoFunc. func (mock *Interface) UnitGetFanSpeedInfo(unit nvml.Unit) (nvml.UnitFanSpeeds, nvml.Return) { if mock.UnitGetFanSpeedInfoFunc == nil { panic("Interface.UnitGetFanSpeedInfoFunc: method is nil but Interface.UnitGetFanSpeedInfo was just called") } callInfo := struct { Unit nvml.Unit }{ Unit: unit, } mock.lockUnitGetFanSpeedInfo.Lock() mock.calls.UnitGetFanSpeedInfo = append(mock.calls.UnitGetFanSpeedInfo, callInfo) mock.lockUnitGetFanSpeedInfo.Unlock() return mock.UnitGetFanSpeedInfoFunc(unit) } // UnitGetFanSpeedInfoCalls gets all the calls that were made to UnitGetFanSpeedInfo. // Check the length with: // // len(mockedInterface.UnitGetFanSpeedInfoCalls()) func (mock *Interface) UnitGetFanSpeedInfoCalls() []struct { Unit nvml.Unit } { var calls []struct { Unit nvml.Unit } mock.lockUnitGetFanSpeedInfo.RLock() calls = mock.calls.UnitGetFanSpeedInfo mock.lockUnitGetFanSpeedInfo.RUnlock() return calls } // UnitGetHandleByIndex calls UnitGetHandleByIndexFunc. func (mock *Interface) UnitGetHandleByIndex(n int) (nvml.Unit, nvml.Return) { if mock.UnitGetHandleByIndexFunc == nil { panic("Interface.UnitGetHandleByIndexFunc: method is nil but Interface.UnitGetHandleByIndex was just called") } callInfo := struct { N int }{ N: n, } mock.lockUnitGetHandleByIndex.Lock() mock.calls.UnitGetHandleByIndex = append(mock.calls.UnitGetHandleByIndex, callInfo) mock.lockUnitGetHandleByIndex.Unlock() return mock.UnitGetHandleByIndexFunc(n) } // UnitGetHandleByIndexCalls gets all the calls that were made to UnitGetHandleByIndex. // Check the length with: // // len(mockedInterface.UnitGetHandleByIndexCalls()) func (mock *Interface) UnitGetHandleByIndexCalls() []struct { N int } { var calls []struct { N int } mock.lockUnitGetHandleByIndex.RLock() calls = mock.calls.UnitGetHandleByIndex mock.lockUnitGetHandleByIndex.RUnlock() return calls } // UnitGetLedState calls UnitGetLedStateFunc. func (mock *Interface) UnitGetLedState(unit nvml.Unit) (nvml.LedState, nvml.Return) { if mock.UnitGetLedStateFunc == nil { panic("Interface.UnitGetLedStateFunc: method is nil but Interface.UnitGetLedState was just called") } callInfo := struct { Unit nvml.Unit }{ Unit: unit, } mock.lockUnitGetLedState.Lock() mock.calls.UnitGetLedState = append(mock.calls.UnitGetLedState, callInfo) mock.lockUnitGetLedState.Unlock() return mock.UnitGetLedStateFunc(unit) } // UnitGetLedStateCalls gets all the calls that were made to UnitGetLedState. // Check the length with: // // len(mockedInterface.UnitGetLedStateCalls()) func (mock *Interface) UnitGetLedStateCalls() []struct { Unit nvml.Unit } { var calls []struct { Unit nvml.Unit } mock.lockUnitGetLedState.RLock() calls = mock.calls.UnitGetLedState mock.lockUnitGetLedState.RUnlock() return calls } // UnitGetPsuInfo calls UnitGetPsuInfoFunc. func (mock *Interface) UnitGetPsuInfo(unit nvml.Unit) (nvml.PSUInfo, nvml.Return) { if mock.UnitGetPsuInfoFunc == nil { panic("Interface.UnitGetPsuInfoFunc: method is nil but Interface.UnitGetPsuInfo was just called") } callInfo := struct { Unit nvml.Unit }{ Unit: unit, } mock.lockUnitGetPsuInfo.Lock() mock.calls.UnitGetPsuInfo = append(mock.calls.UnitGetPsuInfo, callInfo) mock.lockUnitGetPsuInfo.Unlock() return mock.UnitGetPsuInfoFunc(unit) } // UnitGetPsuInfoCalls gets all the calls that were made to UnitGetPsuInfo. // Check the length with: // // len(mockedInterface.UnitGetPsuInfoCalls()) func (mock *Interface) UnitGetPsuInfoCalls() []struct { Unit nvml.Unit } { var calls []struct { Unit nvml.Unit } mock.lockUnitGetPsuInfo.RLock() calls = mock.calls.UnitGetPsuInfo mock.lockUnitGetPsuInfo.RUnlock() return calls } // UnitGetTemperature calls UnitGetTemperatureFunc. func (mock *Interface) UnitGetTemperature(unit nvml.Unit, n int) (uint32, nvml.Return) { if mock.UnitGetTemperatureFunc == nil { panic("Interface.UnitGetTemperatureFunc: method is nil but Interface.UnitGetTemperature was just called") } callInfo := struct { Unit nvml.Unit N int }{ Unit: unit, N: n, } mock.lockUnitGetTemperature.Lock() mock.calls.UnitGetTemperature = append(mock.calls.UnitGetTemperature, callInfo) mock.lockUnitGetTemperature.Unlock() return mock.UnitGetTemperatureFunc(unit, n) } // UnitGetTemperatureCalls gets all the calls that were made to UnitGetTemperature. // Check the length with: // // len(mockedInterface.UnitGetTemperatureCalls()) func (mock *Interface) UnitGetTemperatureCalls() []struct { Unit nvml.Unit N int } { var calls []struct { Unit nvml.Unit N int } mock.lockUnitGetTemperature.RLock() calls = mock.calls.UnitGetTemperature mock.lockUnitGetTemperature.RUnlock() return calls } // UnitGetUnitInfo calls UnitGetUnitInfoFunc. func (mock *Interface) UnitGetUnitInfo(unit nvml.Unit) (nvml.UnitInfo, nvml.Return) { if mock.UnitGetUnitInfoFunc == nil { panic("Interface.UnitGetUnitInfoFunc: method is nil but Interface.UnitGetUnitInfo was just called") } callInfo := struct { Unit nvml.Unit }{ Unit: unit, } mock.lockUnitGetUnitInfo.Lock() mock.calls.UnitGetUnitInfo = append(mock.calls.UnitGetUnitInfo, callInfo) mock.lockUnitGetUnitInfo.Unlock() return mock.UnitGetUnitInfoFunc(unit) } // UnitGetUnitInfoCalls gets all the calls that were made to UnitGetUnitInfo. // Check the length with: // // len(mockedInterface.UnitGetUnitInfoCalls()) func (mock *Interface) UnitGetUnitInfoCalls() []struct { Unit nvml.Unit } { var calls []struct { Unit nvml.Unit } mock.lockUnitGetUnitInfo.RLock() calls = mock.calls.UnitGetUnitInfo mock.lockUnitGetUnitInfo.RUnlock() return calls } // UnitSetLedState calls UnitSetLedStateFunc. func (mock *Interface) UnitSetLedState(unit nvml.Unit, ledColor nvml.LedColor) nvml.Return { if mock.UnitSetLedStateFunc == nil { panic("Interface.UnitSetLedStateFunc: method is nil but Interface.UnitSetLedState was just called") } callInfo := struct { Unit nvml.Unit LedColor nvml.LedColor }{ Unit: unit, LedColor: ledColor, } mock.lockUnitSetLedState.Lock() mock.calls.UnitSetLedState = append(mock.calls.UnitSetLedState, callInfo) mock.lockUnitSetLedState.Unlock() return mock.UnitSetLedStateFunc(unit, ledColor) } // UnitSetLedStateCalls gets all the calls that were made to UnitSetLedState. // Check the length with: // // len(mockedInterface.UnitSetLedStateCalls()) func (mock *Interface) UnitSetLedStateCalls() []struct { Unit nvml.Unit LedColor nvml.LedColor } { var calls []struct { Unit nvml.Unit LedColor nvml.LedColor } mock.lockUnitSetLedState.RLock() calls = mock.calls.UnitSetLedState mock.lockUnitSetLedState.RUnlock() return calls } // VgpuInstanceClearAccountingPids calls VgpuInstanceClearAccountingPidsFunc. func (mock *Interface) VgpuInstanceClearAccountingPids(vgpuInstance nvml.VgpuInstance) nvml.Return { if mock.VgpuInstanceClearAccountingPidsFunc == nil { panic("Interface.VgpuInstanceClearAccountingPidsFunc: method is nil but Interface.VgpuInstanceClearAccountingPids was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceClearAccountingPids.Lock() mock.calls.VgpuInstanceClearAccountingPids = append(mock.calls.VgpuInstanceClearAccountingPids, callInfo) mock.lockVgpuInstanceClearAccountingPids.Unlock() return mock.VgpuInstanceClearAccountingPidsFunc(vgpuInstance) } // VgpuInstanceClearAccountingPidsCalls gets all the calls that were made to VgpuInstanceClearAccountingPids. // Check the length with: // // len(mockedInterface.VgpuInstanceClearAccountingPidsCalls()) func (mock *Interface) VgpuInstanceClearAccountingPidsCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceClearAccountingPids.RLock() calls = mock.calls.VgpuInstanceClearAccountingPids mock.lockVgpuInstanceClearAccountingPids.RUnlock() return calls } // VgpuInstanceGetAccountingMode calls VgpuInstanceGetAccountingModeFunc. func (mock *Interface) VgpuInstanceGetAccountingMode(vgpuInstance nvml.VgpuInstance) (nvml.EnableState, nvml.Return) { if mock.VgpuInstanceGetAccountingModeFunc == nil { panic("Interface.VgpuInstanceGetAccountingModeFunc: method is nil but Interface.VgpuInstanceGetAccountingMode was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetAccountingMode.Lock() mock.calls.VgpuInstanceGetAccountingMode = append(mock.calls.VgpuInstanceGetAccountingMode, callInfo) mock.lockVgpuInstanceGetAccountingMode.Unlock() return mock.VgpuInstanceGetAccountingModeFunc(vgpuInstance) } // VgpuInstanceGetAccountingModeCalls gets all the calls that were made to VgpuInstanceGetAccountingMode. // Check the length with: // // len(mockedInterface.VgpuInstanceGetAccountingModeCalls()) func (mock *Interface) VgpuInstanceGetAccountingModeCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetAccountingMode.RLock() calls = mock.calls.VgpuInstanceGetAccountingMode mock.lockVgpuInstanceGetAccountingMode.RUnlock() return calls } // VgpuInstanceGetAccountingPids calls VgpuInstanceGetAccountingPidsFunc. func (mock *Interface) VgpuInstanceGetAccountingPids(vgpuInstance nvml.VgpuInstance) ([]int, nvml.Return) { if mock.VgpuInstanceGetAccountingPidsFunc == nil { panic("Interface.VgpuInstanceGetAccountingPidsFunc: method is nil but Interface.VgpuInstanceGetAccountingPids was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetAccountingPids.Lock() mock.calls.VgpuInstanceGetAccountingPids = append(mock.calls.VgpuInstanceGetAccountingPids, callInfo) mock.lockVgpuInstanceGetAccountingPids.Unlock() return mock.VgpuInstanceGetAccountingPidsFunc(vgpuInstance) } // VgpuInstanceGetAccountingPidsCalls gets all the calls that were made to VgpuInstanceGetAccountingPids. // Check the length with: // // len(mockedInterface.VgpuInstanceGetAccountingPidsCalls()) func (mock *Interface) VgpuInstanceGetAccountingPidsCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetAccountingPids.RLock() calls = mock.calls.VgpuInstanceGetAccountingPids mock.lockVgpuInstanceGetAccountingPids.RUnlock() return calls } // VgpuInstanceGetAccountingStats calls VgpuInstanceGetAccountingStatsFunc. func (mock *Interface) VgpuInstanceGetAccountingStats(vgpuInstance nvml.VgpuInstance, n int) (nvml.AccountingStats, nvml.Return) { if mock.VgpuInstanceGetAccountingStatsFunc == nil { panic("Interface.VgpuInstanceGetAccountingStatsFunc: method is nil but Interface.VgpuInstanceGetAccountingStats was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance N int }{ VgpuInstance: vgpuInstance, N: n, } mock.lockVgpuInstanceGetAccountingStats.Lock() mock.calls.VgpuInstanceGetAccountingStats = append(mock.calls.VgpuInstanceGetAccountingStats, callInfo) mock.lockVgpuInstanceGetAccountingStats.Unlock() return mock.VgpuInstanceGetAccountingStatsFunc(vgpuInstance, n) } // VgpuInstanceGetAccountingStatsCalls gets all the calls that were made to VgpuInstanceGetAccountingStats. // Check the length with: // // len(mockedInterface.VgpuInstanceGetAccountingStatsCalls()) func (mock *Interface) VgpuInstanceGetAccountingStatsCalls() []struct { VgpuInstance nvml.VgpuInstance N int } { var calls []struct { VgpuInstance nvml.VgpuInstance N int } mock.lockVgpuInstanceGetAccountingStats.RLock() calls = mock.calls.VgpuInstanceGetAccountingStats mock.lockVgpuInstanceGetAccountingStats.RUnlock() return calls } // VgpuInstanceGetEccMode calls VgpuInstanceGetEccModeFunc. func (mock *Interface) VgpuInstanceGetEccMode(vgpuInstance nvml.VgpuInstance) (nvml.EnableState, nvml.Return) { if mock.VgpuInstanceGetEccModeFunc == nil { panic("Interface.VgpuInstanceGetEccModeFunc: method is nil but Interface.VgpuInstanceGetEccMode was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetEccMode.Lock() mock.calls.VgpuInstanceGetEccMode = append(mock.calls.VgpuInstanceGetEccMode, callInfo) mock.lockVgpuInstanceGetEccMode.Unlock() return mock.VgpuInstanceGetEccModeFunc(vgpuInstance) } // VgpuInstanceGetEccModeCalls gets all the calls that were made to VgpuInstanceGetEccMode. // Check the length with: // // len(mockedInterface.VgpuInstanceGetEccModeCalls()) func (mock *Interface) VgpuInstanceGetEccModeCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetEccMode.RLock() calls = mock.calls.VgpuInstanceGetEccMode mock.lockVgpuInstanceGetEccMode.RUnlock() return calls } // VgpuInstanceGetEncoderCapacity calls VgpuInstanceGetEncoderCapacityFunc. func (mock *Interface) VgpuInstanceGetEncoderCapacity(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) { if mock.VgpuInstanceGetEncoderCapacityFunc == nil { panic("Interface.VgpuInstanceGetEncoderCapacityFunc: method is nil but Interface.VgpuInstanceGetEncoderCapacity was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetEncoderCapacity.Lock() mock.calls.VgpuInstanceGetEncoderCapacity = append(mock.calls.VgpuInstanceGetEncoderCapacity, callInfo) mock.lockVgpuInstanceGetEncoderCapacity.Unlock() return mock.VgpuInstanceGetEncoderCapacityFunc(vgpuInstance) } // VgpuInstanceGetEncoderCapacityCalls gets all the calls that were made to VgpuInstanceGetEncoderCapacity. // Check the length with: // // len(mockedInterface.VgpuInstanceGetEncoderCapacityCalls()) func (mock *Interface) VgpuInstanceGetEncoderCapacityCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetEncoderCapacity.RLock() calls = mock.calls.VgpuInstanceGetEncoderCapacity mock.lockVgpuInstanceGetEncoderCapacity.RUnlock() return calls } // VgpuInstanceGetEncoderSessions calls VgpuInstanceGetEncoderSessionsFunc. func (mock *Interface) VgpuInstanceGetEncoderSessions(vgpuInstance nvml.VgpuInstance) (int, nvml.EncoderSessionInfo, nvml.Return) { if mock.VgpuInstanceGetEncoderSessionsFunc == nil { panic("Interface.VgpuInstanceGetEncoderSessionsFunc: method is nil but Interface.VgpuInstanceGetEncoderSessions was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetEncoderSessions.Lock() mock.calls.VgpuInstanceGetEncoderSessions = append(mock.calls.VgpuInstanceGetEncoderSessions, callInfo) mock.lockVgpuInstanceGetEncoderSessions.Unlock() return mock.VgpuInstanceGetEncoderSessionsFunc(vgpuInstance) } // VgpuInstanceGetEncoderSessionsCalls gets all the calls that were made to VgpuInstanceGetEncoderSessions. // Check the length with: // // len(mockedInterface.VgpuInstanceGetEncoderSessionsCalls()) func (mock *Interface) VgpuInstanceGetEncoderSessionsCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetEncoderSessions.RLock() calls = mock.calls.VgpuInstanceGetEncoderSessions mock.lockVgpuInstanceGetEncoderSessions.RUnlock() return calls } // VgpuInstanceGetEncoderStats calls VgpuInstanceGetEncoderStatsFunc. func (mock *Interface) VgpuInstanceGetEncoderStats(vgpuInstance nvml.VgpuInstance) (int, uint32, uint32, nvml.Return) { if mock.VgpuInstanceGetEncoderStatsFunc == nil { panic("Interface.VgpuInstanceGetEncoderStatsFunc: method is nil but Interface.VgpuInstanceGetEncoderStats was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetEncoderStats.Lock() mock.calls.VgpuInstanceGetEncoderStats = append(mock.calls.VgpuInstanceGetEncoderStats, callInfo) mock.lockVgpuInstanceGetEncoderStats.Unlock() return mock.VgpuInstanceGetEncoderStatsFunc(vgpuInstance) } // VgpuInstanceGetEncoderStatsCalls gets all the calls that were made to VgpuInstanceGetEncoderStats. // Check the length with: // // len(mockedInterface.VgpuInstanceGetEncoderStatsCalls()) func (mock *Interface) VgpuInstanceGetEncoderStatsCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetEncoderStats.RLock() calls = mock.calls.VgpuInstanceGetEncoderStats mock.lockVgpuInstanceGetEncoderStats.RUnlock() return calls } // VgpuInstanceGetFBCSessions calls VgpuInstanceGetFBCSessionsFunc. func (mock *Interface) VgpuInstanceGetFBCSessions(vgpuInstance nvml.VgpuInstance) (int, nvml.FBCSessionInfo, nvml.Return) { if mock.VgpuInstanceGetFBCSessionsFunc == nil { panic("Interface.VgpuInstanceGetFBCSessionsFunc: method is nil but Interface.VgpuInstanceGetFBCSessions was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetFBCSessions.Lock() mock.calls.VgpuInstanceGetFBCSessions = append(mock.calls.VgpuInstanceGetFBCSessions, callInfo) mock.lockVgpuInstanceGetFBCSessions.Unlock() return mock.VgpuInstanceGetFBCSessionsFunc(vgpuInstance) } // VgpuInstanceGetFBCSessionsCalls gets all the calls that were made to VgpuInstanceGetFBCSessions. // Check the length with: // // len(mockedInterface.VgpuInstanceGetFBCSessionsCalls()) func (mock *Interface) VgpuInstanceGetFBCSessionsCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetFBCSessions.RLock() calls = mock.calls.VgpuInstanceGetFBCSessions mock.lockVgpuInstanceGetFBCSessions.RUnlock() return calls } // VgpuInstanceGetFBCStats calls VgpuInstanceGetFBCStatsFunc. func (mock *Interface) VgpuInstanceGetFBCStats(vgpuInstance nvml.VgpuInstance) (nvml.FBCStats, nvml.Return) { if mock.VgpuInstanceGetFBCStatsFunc == nil { panic("Interface.VgpuInstanceGetFBCStatsFunc: method is nil but Interface.VgpuInstanceGetFBCStats was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetFBCStats.Lock() mock.calls.VgpuInstanceGetFBCStats = append(mock.calls.VgpuInstanceGetFBCStats, callInfo) mock.lockVgpuInstanceGetFBCStats.Unlock() return mock.VgpuInstanceGetFBCStatsFunc(vgpuInstance) } // VgpuInstanceGetFBCStatsCalls gets all the calls that were made to VgpuInstanceGetFBCStats. // Check the length with: // // len(mockedInterface.VgpuInstanceGetFBCStatsCalls()) func (mock *Interface) VgpuInstanceGetFBCStatsCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetFBCStats.RLock() calls = mock.calls.VgpuInstanceGetFBCStats mock.lockVgpuInstanceGetFBCStats.RUnlock() return calls } // VgpuInstanceGetFbUsage calls VgpuInstanceGetFbUsageFunc. func (mock *Interface) VgpuInstanceGetFbUsage(vgpuInstance nvml.VgpuInstance) (uint64, nvml.Return) { if mock.VgpuInstanceGetFbUsageFunc == nil { panic("Interface.VgpuInstanceGetFbUsageFunc: method is nil but Interface.VgpuInstanceGetFbUsage was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetFbUsage.Lock() mock.calls.VgpuInstanceGetFbUsage = append(mock.calls.VgpuInstanceGetFbUsage, callInfo) mock.lockVgpuInstanceGetFbUsage.Unlock() return mock.VgpuInstanceGetFbUsageFunc(vgpuInstance) } // VgpuInstanceGetFbUsageCalls gets all the calls that were made to VgpuInstanceGetFbUsage. // Check the length with: // // len(mockedInterface.VgpuInstanceGetFbUsageCalls()) func (mock *Interface) VgpuInstanceGetFbUsageCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetFbUsage.RLock() calls = mock.calls.VgpuInstanceGetFbUsage mock.lockVgpuInstanceGetFbUsage.RUnlock() return calls } // VgpuInstanceGetFrameRateLimit calls VgpuInstanceGetFrameRateLimitFunc. func (mock *Interface) VgpuInstanceGetFrameRateLimit(vgpuInstance nvml.VgpuInstance) (uint32, nvml.Return) { if mock.VgpuInstanceGetFrameRateLimitFunc == nil { panic("Interface.VgpuInstanceGetFrameRateLimitFunc: method is nil but Interface.VgpuInstanceGetFrameRateLimit was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetFrameRateLimit.Lock() mock.calls.VgpuInstanceGetFrameRateLimit = append(mock.calls.VgpuInstanceGetFrameRateLimit, callInfo) mock.lockVgpuInstanceGetFrameRateLimit.Unlock() return mock.VgpuInstanceGetFrameRateLimitFunc(vgpuInstance) } // VgpuInstanceGetFrameRateLimitCalls gets all the calls that were made to VgpuInstanceGetFrameRateLimit. // Check the length with: // // len(mockedInterface.VgpuInstanceGetFrameRateLimitCalls()) func (mock *Interface) VgpuInstanceGetFrameRateLimitCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetFrameRateLimit.RLock() calls = mock.calls.VgpuInstanceGetFrameRateLimit mock.lockVgpuInstanceGetFrameRateLimit.RUnlock() return calls } // VgpuInstanceGetGpuInstanceId calls VgpuInstanceGetGpuInstanceIdFunc. func (mock *Interface) VgpuInstanceGetGpuInstanceId(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) { if mock.VgpuInstanceGetGpuInstanceIdFunc == nil { panic("Interface.VgpuInstanceGetGpuInstanceIdFunc: method is nil but Interface.VgpuInstanceGetGpuInstanceId was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetGpuInstanceId.Lock() mock.calls.VgpuInstanceGetGpuInstanceId = append(mock.calls.VgpuInstanceGetGpuInstanceId, callInfo) mock.lockVgpuInstanceGetGpuInstanceId.Unlock() return mock.VgpuInstanceGetGpuInstanceIdFunc(vgpuInstance) } // VgpuInstanceGetGpuInstanceIdCalls gets all the calls that were made to VgpuInstanceGetGpuInstanceId. // Check the length with: // // len(mockedInterface.VgpuInstanceGetGpuInstanceIdCalls()) func (mock *Interface) VgpuInstanceGetGpuInstanceIdCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetGpuInstanceId.RLock() calls = mock.calls.VgpuInstanceGetGpuInstanceId mock.lockVgpuInstanceGetGpuInstanceId.RUnlock() return calls } // VgpuInstanceGetGpuPciId calls VgpuInstanceGetGpuPciIdFunc. func (mock *Interface) VgpuInstanceGetGpuPciId(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { if mock.VgpuInstanceGetGpuPciIdFunc == nil { panic("Interface.VgpuInstanceGetGpuPciIdFunc: method is nil but Interface.VgpuInstanceGetGpuPciId was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetGpuPciId.Lock() mock.calls.VgpuInstanceGetGpuPciId = append(mock.calls.VgpuInstanceGetGpuPciId, callInfo) mock.lockVgpuInstanceGetGpuPciId.Unlock() return mock.VgpuInstanceGetGpuPciIdFunc(vgpuInstance) } // VgpuInstanceGetGpuPciIdCalls gets all the calls that were made to VgpuInstanceGetGpuPciId. // Check the length with: // // len(mockedInterface.VgpuInstanceGetGpuPciIdCalls()) func (mock *Interface) VgpuInstanceGetGpuPciIdCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetGpuPciId.RLock() calls = mock.calls.VgpuInstanceGetGpuPciId mock.lockVgpuInstanceGetGpuPciId.RUnlock() return calls } // VgpuInstanceGetLicenseInfo calls VgpuInstanceGetLicenseInfoFunc. func (mock *Interface) VgpuInstanceGetLicenseInfo(vgpuInstance nvml.VgpuInstance) (nvml.VgpuLicenseInfo, nvml.Return) { if mock.VgpuInstanceGetLicenseInfoFunc == nil { panic("Interface.VgpuInstanceGetLicenseInfoFunc: method is nil but Interface.VgpuInstanceGetLicenseInfo was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetLicenseInfo.Lock() mock.calls.VgpuInstanceGetLicenseInfo = append(mock.calls.VgpuInstanceGetLicenseInfo, callInfo) mock.lockVgpuInstanceGetLicenseInfo.Unlock() return mock.VgpuInstanceGetLicenseInfoFunc(vgpuInstance) } // VgpuInstanceGetLicenseInfoCalls gets all the calls that were made to VgpuInstanceGetLicenseInfo. // Check the length with: // // len(mockedInterface.VgpuInstanceGetLicenseInfoCalls()) func (mock *Interface) VgpuInstanceGetLicenseInfoCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetLicenseInfo.RLock() calls = mock.calls.VgpuInstanceGetLicenseInfo mock.lockVgpuInstanceGetLicenseInfo.RUnlock() return calls } // VgpuInstanceGetLicenseStatus calls VgpuInstanceGetLicenseStatusFunc. func (mock *Interface) VgpuInstanceGetLicenseStatus(vgpuInstance nvml.VgpuInstance) (int, nvml.Return) { if mock.VgpuInstanceGetLicenseStatusFunc == nil { panic("Interface.VgpuInstanceGetLicenseStatusFunc: method is nil but Interface.VgpuInstanceGetLicenseStatus was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetLicenseStatus.Lock() mock.calls.VgpuInstanceGetLicenseStatus = append(mock.calls.VgpuInstanceGetLicenseStatus, callInfo) mock.lockVgpuInstanceGetLicenseStatus.Unlock() return mock.VgpuInstanceGetLicenseStatusFunc(vgpuInstance) } // VgpuInstanceGetLicenseStatusCalls gets all the calls that were made to VgpuInstanceGetLicenseStatus. // Check the length with: // // len(mockedInterface.VgpuInstanceGetLicenseStatusCalls()) func (mock *Interface) VgpuInstanceGetLicenseStatusCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetLicenseStatus.RLock() calls = mock.calls.VgpuInstanceGetLicenseStatus mock.lockVgpuInstanceGetLicenseStatus.RUnlock() return calls } // VgpuInstanceGetMdevUUID calls VgpuInstanceGetMdevUUIDFunc. func (mock *Interface) VgpuInstanceGetMdevUUID(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { if mock.VgpuInstanceGetMdevUUIDFunc == nil { panic("Interface.VgpuInstanceGetMdevUUIDFunc: method is nil but Interface.VgpuInstanceGetMdevUUID was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetMdevUUID.Lock() mock.calls.VgpuInstanceGetMdevUUID = append(mock.calls.VgpuInstanceGetMdevUUID, callInfo) mock.lockVgpuInstanceGetMdevUUID.Unlock() return mock.VgpuInstanceGetMdevUUIDFunc(vgpuInstance) } // VgpuInstanceGetMdevUUIDCalls gets all the calls that were made to VgpuInstanceGetMdevUUID. // Check the length with: // // len(mockedInterface.VgpuInstanceGetMdevUUIDCalls()) func (mock *Interface) VgpuInstanceGetMdevUUIDCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetMdevUUID.RLock() calls = mock.calls.VgpuInstanceGetMdevUUID mock.lockVgpuInstanceGetMdevUUID.RUnlock() return calls } // VgpuInstanceGetMetadata calls VgpuInstanceGetMetadataFunc. func (mock *Interface) VgpuInstanceGetMetadata(vgpuInstance nvml.VgpuInstance) (nvml.VgpuMetadata, nvml.Return) { if mock.VgpuInstanceGetMetadataFunc == nil { panic("Interface.VgpuInstanceGetMetadataFunc: method is nil but Interface.VgpuInstanceGetMetadata was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetMetadata.Lock() mock.calls.VgpuInstanceGetMetadata = append(mock.calls.VgpuInstanceGetMetadata, callInfo) mock.lockVgpuInstanceGetMetadata.Unlock() return mock.VgpuInstanceGetMetadataFunc(vgpuInstance) } // VgpuInstanceGetMetadataCalls gets all the calls that were made to VgpuInstanceGetMetadata. // Check the length with: // // len(mockedInterface.VgpuInstanceGetMetadataCalls()) func (mock *Interface) VgpuInstanceGetMetadataCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetMetadata.RLock() calls = mock.calls.VgpuInstanceGetMetadata mock.lockVgpuInstanceGetMetadata.RUnlock() return calls } // VgpuInstanceGetRuntimeStateSize calls VgpuInstanceGetRuntimeStateSizeFunc. func (mock *Interface) VgpuInstanceGetRuntimeStateSize(vgpuInstance nvml.VgpuInstance) (nvml.VgpuRuntimeState, nvml.Return) { if mock.VgpuInstanceGetRuntimeStateSizeFunc == nil { panic("Interface.VgpuInstanceGetRuntimeStateSizeFunc: method is nil but Interface.VgpuInstanceGetRuntimeStateSize was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetRuntimeStateSize.Lock() mock.calls.VgpuInstanceGetRuntimeStateSize = append(mock.calls.VgpuInstanceGetRuntimeStateSize, callInfo) mock.lockVgpuInstanceGetRuntimeStateSize.Unlock() return mock.VgpuInstanceGetRuntimeStateSizeFunc(vgpuInstance) } // VgpuInstanceGetRuntimeStateSizeCalls gets all the calls that were made to VgpuInstanceGetRuntimeStateSize. // Check the length with: // // len(mockedInterface.VgpuInstanceGetRuntimeStateSizeCalls()) func (mock *Interface) VgpuInstanceGetRuntimeStateSizeCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetRuntimeStateSize.RLock() calls = mock.calls.VgpuInstanceGetRuntimeStateSize mock.lockVgpuInstanceGetRuntimeStateSize.RUnlock() return calls } // VgpuInstanceGetType calls VgpuInstanceGetTypeFunc. func (mock *Interface) VgpuInstanceGetType(vgpuInstance nvml.VgpuInstance) (nvml.VgpuTypeId, nvml.Return) { if mock.VgpuInstanceGetTypeFunc == nil { panic("Interface.VgpuInstanceGetTypeFunc: method is nil but Interface.VgpuInstanceGetType was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetType.Lock() mock.calls.VgpuInstanceGetType = append(mock.calls.VgpuInstanceGetType, callInfo) mock.lockVgpuInstanceGetType.Unlock() return mock.VgpuInstanceGetTypeFunc(vgpuInstance) } // VgpuInstanceGetTypeCalls gets all the calls that were made to VgpuInstanceGetType. // Check the length with: // // len(mockedInterface.VgpuInstanceGetTypeCalls()) func (mock *Interface) VgpuInstanceGetTypeCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetType.RLock() calls = mock.calls.VgpuInstanceGetType mock.lockVgpuInstanceGetType.RUnlock() return calls } // VgpuInstanceGetUUID calls VgpuInstanceGetUUIDFunc. func (mock *Interface) VgpuInstanceGetUUID(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { if mock.VgpuInstanceGetUUIDFunc == nil { panic("Interface.VgpuInstanceGetUUIDFunc: method is nil but Interface.VgpuInstanceGetUUID was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetUUID.Lock() mock.calls.VgpuInstanceGetUUID = append(mock.calls.VgpuInstanceGetUUID, callInfo) mock.lockVgpuInstanceGetUUID.Unlock() return mock.VgpuInstanceGetUUIDFunc(vgpuInstance) } // VgpuInstanceGetUUIDCalls gets all the calls that were made to VgpuInstanceGetUUID. // Check the length with: // // len(mockedInterface.VgpuInstanceGetUUIDCalls()) func (mock *Interface) VgpuInstanceGetUUIDCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetUUID.RLock() calls = mock.calls.VgpuInstanceGetUUID mock.lockVgpuInstanceGetUUID.RUnlock() return calls } // VgpuInstanceGetVmDriverVersion calls VgpuInstanceGetVmDriverVersionFunc. func (mock *Interface) VgpuInstanceGetVmDriverVersion(vgpuInstance nvml.VgpuInstance) (string, nvml.Return) { if mock.VgpuInstanceGetVmDriverVersionFunc == nil { panic("Interface.VgpuInstanceGetVmDriverVersionFunc: method is nil but Interface.VgpuInstanceGetVmDriverVersion was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetVmDriverVersion.Lock() mock.calls.VgpuInstanceGetVmDriverVersion = append(mock.calls.VgpuInstanceGetVmDriverVersion, callInfo) mock.lockVgpuInstanceGetVmDriverVersion.Unlock() return mock.VgpuInstanceGetVmDriverVersionFunc(vgpuInstance) } // VgpuInstanceGetVmDriverVersionCalls gets all the calls that were made to VgpuInstanceGetVmDriverVersion. // Check the length with: // // len(mockedInterface.VgpuInstanceGetVmDriverVersionCalls()) func (mock *Interface) VgpuInstanceGetVmDriverVersionCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetVmDriverVersion.RLock() calls = mock.calls.VgpuInstanceGetVmDriverVersion mock.lockVgpuInstanceGetVmDriverVersion.RUnlock() return calls } // VgpuInstanceGetVmID calls VgpuInstanceGetVmIDFunc. func (mock *Interface) VgpuInstanceGetVmID(vgpuInstance nvml.VgpuInstance) (string, nvml.VgpuVmIdType, nvml.Return) { if mock.VgpuInstanceGetVmIDFunc == nil { panic("Interface.VgpuInstanceGetVmIDFunc: method is nil but Interface.VgpuInstanceGetVmID was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance }{ VgpuInstance: vgpuInstance, } mock.lockVgpuInstanceGetVmID.Lock() mock.calls.VgpuInstanceGetVmID = append(mock.calls.VgpuInstanceGetVmID, callInfo) mock.lockVgpuInstanceGetVmID.Unlock() return mock.VgpuInstanceGetVmIDFunc(vgpuInstance) } // VgpuInstanceGetVmIDCalls gets all the calls that were made to VgpuInstanceGetVmID. // Check the length with: // // len(mockedInterface.VgpuInstanceGetVmIDCalls()) func (mock *Interface) VgpuInstanceGetVmIDCalls() []struct { VgpuInstance nvml.VgpuInstance } { var calls []struct { VgpuInstance nvml.VgpuInstance } mock.lockVgpuInstanceGetVmID.RLock() calls = mock.calls.VgpuInstanceGetVmID mock.lockVgpuInstanceGetVmID.RUnlock() return calls } // VgpuInstanceSetEncoderCapacity calls VgpuInstanceSetEncoderCapacityFunc. func (mock *Interface) VgpuInstanceSetEncoderCapacity(vgpuInstance nvml.VgpuInstance, n int) nvml.Return { if mock.VgpuInstanceSetEncoderCapacityFunc == nil { panic("Interface.VgpuInstanceSetEncoderCapacityFunc: method is nil but Interface.VgpuInstanceSetEncoderCapacity was just called") } callInfo := struct { VgpuInstance nvml.VgpuInstance N int }{ VgpuInstance: vgpuInstance, N: n, } mock.lockVgpuInstanceSetEncoderCapacity.Lock() mock.calls.VgpuInstanceSetEncoderCapacity = append(mock.calls.VgpuInstanceSetEncoderCapacity, callInfo) mock.lockVgpuInstanceSetEncoderCapacity.Unlock() return mock.VgpuInstanceSetEncoderCapacityFunc(vgpuInstance, n) } // VgpuInstanceSetEncoderCapacityCalls gets all the calls that were made to VgpuInstanceSetEncoderCapacity. // Check the length with: // // len(mockedInterface.VgpuInstanceSetEncoderCapacityCalls()) func (mock *Interface) VgpuInstanceSetEncoderCapacityCalls() []struct { VgpuInstance nvml.VgpuInstance N int } { var calls []struct { VgpuInstance nvml.VgpuInstance N int } mock.lockVgpuInstanceSetEncoderCapacity.RLock() calls = mock.calls.VgpuInstanceSetEncoderCapacity mock.lockVgpuInstanceSetEncoderCapacity.RUnlock() return calls } // VgpuTypeGetBAR1Info calls VgpuTypeGetBAR1InfoFunc. func (mock *Interface) VgpuTypeGetBAR1Info(vgpuTypeId nvml.VgpuTypeId) (nvml.VgpuTypeBar1Info, nvml.Return) { if mock.VgpuTypeGetBAR1InfoFunc == nil { panic("Interface.VgpuTypeGetBAR1InfoFunc: method is nil but Interface.VgpuTypeGetBAR1Info was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetBAR1Info.Lock() mock.calls.VgpuTypeGetBAR1Info = append(mock.calls.VgpuTypeGetBAR1Info, callInfo) mock.lockVgpuTypeGetBAR1Info.Unlock() return mock.VgpuTypeGetBAR1InfoFunc(vgpuTypeId) } // VgpuTypeGetBAR1InfoCalls gets all the calls that were made to VgpuTypeGetBAR1Info. // Check the length with: // // len(mockedInterface.VgpuTypeGetBAR1InfoCalls()) func (mock *Interface) VgpuTypeGetBAR1InfoCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetBAR1Info.RLock() calls = mock.calls.VgpuTypeGetBAR1Info mock.lockVgpuTypeGetBAR1Info.RUnlock() return calls } // VgpuTypeGetCapabilities calls VgpuTypeGetCapabilitiesFunc. func (mock *Interface) VgpuTypeGetCapabilities(vgpuTypeId nvml.VgpuTypeId, vgpuCapability nvml.VgpuCapability) (bool, nvml.Return) { if mock.VgpuTypeGetCapabilitiesFunc == nil { panic("Interface.VgpuTypeGetCapabilitiesFunc: method is nil but Interface.VgpuTypeGetCapabilities was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId VgpuCapability nvml.VgpuCapability }{ VgpuTypeId: vgpuTypeId, VgpuCapability: vgpuCapability, } mock.lockVgpuTypeGetCapabilities.Lock() mock.calls.VgpuTypeGetCapabilities = append(mock.calls.VgpuTypeGetCapabilities, callInfo) mock.lockVgpuTypeGetCapabilities.Unlock() return mock.VgpuTypeGetCapabilitiesFunc(vgpuTypeId, vgpuCapability) } // VgpuTypeGetCapabilitiesCalls gets all the calls that were made to VgpuTypeGetCapabilities. // Check the length with: // // len(mockedInterface.VgpuTypeGetCapabilitiesCalls()) func (mock *Interface) VgpuTypeGetCapabilitiesCalls() []struct { VgpuTypeId nvml.VgpuTypeId VgpuCapability nvml.VgpuCapability } { var calls []struct { VgpuTypeId nvml.VgpuTypeId VgpuCapability nvml.VgpuCapability } mock.lockVgpuTypeGetCapabilities.RLock() calls = mock.calls.VgpuTypeGetCapabilities mock.lockVgpuTypeGetCapabilities.RUnlock() return calls } // VgpuTypeGetClass calls VgpuTypeGetClassFunc. func (mock *Interface) VgpuTypeGetClass(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) { if mock.VgpuTypeGetClassFunc == nil { panic("Interface.VgpuTypeGetClassFunc: method is nil but Interface.VgpuTypeGetClass was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetClass.Lock() mock.calls.VgpuTypeGetClass = append(mock.calls.VgpuTypeGetClass, callInfo) mock.lockVgpuTypeGetClass.Unlock() return mock.VgpuTypeGetClassFunc(vgpuTypeId) } // VgpuTypeGetClassCalls gets all the calls that were made to VgpuTypeGetClass. // Check the length with: // // len(mockedInterface.VgpuTypeGetClassCalls()) func (mock *Interface) VgpuTypeGetClassCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetClass.RLock() calls = mock.calls.VgpuTypeGetClass mock.lockVgpuTypeGetClass.RUnlock() return calls } // VgpuTypeGetDeviceID calls VgpuTypeGetDeviceIDFunc. func (mock *Interface) VgpuTypeGetDeviceID(vgpuTypeId nvml.VgpuTypeId) (uint64, uint64, nvml.Return) { if mock.VgpuTypeGetDeviceIDFunc == nil { panic("Interface.VgpuTypeGetDeviceIDFunc: method is nil but Interface.VgpuTypeGetDeviceID was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetDeviceID.Lock() mock.calls.VgpuTypeGetDeviceID = append(mock.calls.VgpuTypeGetDeviceID, callInfo) mock.lockVgpuTypeGetDeviceID.Unlock() return mock.VgpuTypeGetDeviceIDFunc(vgpuTypeId) } // VgpuTypeGetDeviceIDCalls gets all the calls that were made to VgpuTypeGetDeviceID. // Check the length with: // // len(mockedInterface.VgpuTypeGetDeviceIDCalls()) func (mock *Interface) VgpuTypeGetDeviceIDCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetDeviceID.RLock() calls = mock.calls.VgpuTypeGetDeviceID mock.lockVgpuTypeGetDeviceID.RUnlock() return calls } // VgpuTypeGetFrameRateLimit calls VgpuTypeGetFrameRateLimitFunc. func (mock *Interface) VgpuTypeGetFrameRateLimit(vgpuTypeId nvml.VgpuTypeId) (uint32, nvml.Return) { if mock.VgpuTypeGetFrameRateLimitFunc == nil { panic("Interface.VgpuTypeGetFrameRateLimitFunc: method is nil but Interface.VgpuTypeGetFrameRateLimit was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetFrameRateLimit.Lock() mock.calls.VgpuTypeGetFrameRateLimit = append(mock.calls.VgpuTypeGetFrameRateLimit, callInfo) mock.lockVgpuTypeGetFrameRateLimit.Unlock() return mock.VgpuTypeGetFrameRateLimitFunc(vgpuTypeId) } // VgpuTypeGetFrameRateLimitCalls gets all the calls that were made to VgpuTypeGetFrameRateLimit. // Check the length with: // // len(mockedInterface.VgpuTypeGetFrameRateLimitCalls()) func (mock *Interface) VgpuTypeGetFrameRateLimitCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetFrameRateLimit.RLock() calls = mock.calls.VgpuTypeGetFrameRateLimit mock.lockVgpuTypeGetFrameRateLimit.RUnlock() return calls } // VgpuTypeGetFramebufferSize calls VgpuTypeGetFramebufferSizeFunc. func (mock *Interface) VgpuTypeGetFramebufferSize(vgpuTypeId nvml.VgpuTypeId) (uint64, nvml.Return) { if mock.VgpuTypeGetFramebufferSizeFunc == nil { panic("Interface.VgpuTypeGetFramebufferSizeFunc: method is nil but Interface.VgpuTypeGetFramebufferSize was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetFramebufferSize.Lock() mock.calls.VgpuTypeGetFramebufferSize = append(mock.calls.VgpuTypeGetFramebufferSize, callInfo) mock.lockVgpuTypeGetFramebufferSize.Unlock() return mock.VgpuTypeGetFramebufferSizeFunc(vgpuTypeId) } // VgpuTypeGetFramebufferSizeCalls gets all the calls that were made to VgpuTypeGetFramebufferSize. // Check the length with: // // len(mockedInterface.VgpuTypeGetFramebufferSizeCalls()) func (mock *Interface) VgpuTypeGetFramebufferSizeCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetFramebufferSize.RLock() calls = mock.calls.VgpuTypeGetFramebufferSize mock.lockVgpuTypeGetFramebufferSize.RUnlock() return calls } // VgpuTypeGetGpuInstanceProfileId calls VgpuTypeGetGpuInstanceProfileIdFunc. func (mock *Interface) VgpuTypeGetGpuInstanceProfileId(vgpuTypeId nvml.VgpuTypeId) (uint32, nvml.Return) { if mock.VgpuTypeGetGpuInstanceProfileIdFunc == nil { panic("Interface.VgpuTypeGetGpuInstanceProfileIdFunc: method is nil but Interface.VgpuTypeGetGpuInstanceProfileId was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetGpuInstanceProfileId.Lock() mock.calls.VgpuTypeGetGpuInstanceProfileId = append(mock.calls.VgpuTypeGetGpuInstanceProfileId, callInfo) mock.lockVgpuTypeGetGpuInstanceProfileId.Unlock() return mock.VgpuTypeGetGpuInstanceProfileIdFunc(vgpuTypeId) } // VgpuTypeGetGpuInstanceProfileIdCalls gets all the calls that were made to VgpuTypeGetGpuInstanceProfileId. // Check the length with: // // len(mockedInterface.VgpuTypeGetGpuInstanceProfileIdCalls()) func (mock *Interface) VgpuTypeGetGpuInstanceProfileIdCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetGpuInstanceProfileId.RLock() calls = mock.calls.VgpuTypeGetGpuInstanceProfileId mock.lockVgpuTypeGetGpuInstanceProfileId.RUnlock() return calls } // VgpuTypeGetLicense calls VgpuTypeGetLicenseFunc. func (mock *Interface) VgpuTypeGetLicense(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) { if mock.VgpuTypeGetLicenseFunc == nil { panic("Interface.VgpuTypeGetLicenseFunc: method is nil but Interface.VgpuTypeGetLicense was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetLicense.Lock() mock.calls.VgpuTypeGetLicense = append(mock.calls.VgpuTypeGetLicense, callInfo) mock.lockVgpuTypeGetLicense.Unlock() return mock.VgpuTypeGetLicenseFunc(vgpuTypeId) } // VgpuTypeGetLicenseCalls gets all the calls that were made to VgpuTypeGetLicense. // Check the length with: // // len(mockedInterface.VgpuTypeGetLicenseCalls()) func (mock *Interface) VgpuTypeGetLicenseCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetLicense.RLock() calls = mock.calls.VgpuTypeGetLicense mock.lockVgpuTypeGetLicense.RUnlock() return calls } // VgpuTypeGetMaxInstances calls VgpuTypeGetMaxInstancesFunc. func (mock *Interface) VgpuTypeGetMaxInstances(device nvml.Device, vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { if mock.VgpuTypeGetMaxInstancesFunc == nil { panic("Interface.VgpuTypeGetMaxInstancesFunc: method is nil but Interface.VgpuTypeGetMaxInstances was just called") } callInfo := struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId }{ Device: device, VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetMaxInstances.Lock() mock.calls.VgpuTypeGetMaxInstances = append(mock.calls.VgpuTypeGetMaxInstances, callInfo) mock.lockVgpuTypeGetMaxInstances.Unlock() return mock.VgpuTypeGetMaxInstancesFunc(device, vgpuTypeId) } // VgpuTypeGetMaxInstancesCalls gets all the calls that were made to VgpuTypeGetMaxInstances. // Check the length with: // // len(mockedInterface.VgpuTypeGetMaxInstancesCalls()) func (mock *Interface) VgpuTypeGetMaxInstancesCalls() []struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId } { var calls []struct { Device nvml.Device VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetMaxInstances.RLock() calls = mock.calls.VgpuTypeGetMaxInstances mock.lockVgpuTypeGetMaxInstances.RUnlock() return calls } // VgpuTypeGetMaxInstancesPerGpuInstance calls VgpuTypeGetMaxInstancesPerGpuInstanceFunc. func (mock *Interface) VgpuTypeGetMaxInstancesPerGpuInstance(vgpuTypeMaxInstance *nvml.VgpuTypeMaxInstance) nvml.Return { if mock.VgpuTypeGetMaxInstancesPerGpuInstanceFunc == nil { panic("Interface.VgpuTypeGetMaxInstancesPerGpuInstanceFunc: method is nil but Interface.VgpuTypeGetMaxInstancesPerGpuInstance was just called") } callInfo := struct { VgpuTypeMaxInstance *nvml.VgpuTypeMaxInstance }{ VgpuTypeMaxInstance: vgpuTypeMaxInstance, } mock.lockVgpuTypeGetMaxInstancesPerGpuInstance.Lock() mock.calls.VgpuTypeGetMaxInstancesPerGpuInstance = append(mock.calls.VgpuTypeGetMaxInstancesPerGpuInstance, callInfo) mock.lockVgpuTypeGetMaxInstancesPerGpuInstance.Unlock() return mock.VgpuTypeGetMaxInstancesPerGpuInstanceFunc(vgpuTypeMaxInstance) } // VgpuTypeGetMaxInstancesPerGpuInstanceCalls gets all the calls that were made to VgpuTypeGetMaxInstancesPerGpuInstance. // Check the length with: // // len(mockedInterface.VgpuTypeGetMaxInstancesPerGpuInstanceCalls()) func (mock *Interface) VgpuTypeGetMaxInstancesPerGpuInstanceCalls() []struct { VgpuTypeMaxInstance *nvml.VgpuTypeMaxInstance } { var calls []struct { VgpuTypeMaxInstance *nvml.VgpuTypeMaxInstance } mock.lockVgpuTypeGetMaxInstancesPerGpuInstance.RLock() calls = mock.calls.VgpuTypeGetMaxInstancesPerGpuInstance mock.lockVgpuTypeGetMaxInstancesPerGpuInstance.RUnlock() return calls } // VgpuTypeGetMaxInstancesPerVm calls VgpuTypeGetMaxInstancesPerVmFunc. func (mock *Interface) VgpuTypeGetMaxInstancesPerVm(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { if mock.VgpuTypeGetMaxInstancesPerVmFunc == nil { panic("Interface.VgpuTypeGetMaxInstancesPerVmFunc: method is nil but Interface.VgpuTypeGetMaxInstancesPerVm was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetMaxInstancesPerVm.Lock() mock.calls.VgpuTypeGetMaxInstancesPerVm = append(mock.calls.VgpuTypeGetMaxInstancesPerVm, callInfo) mock.lockVgpuTypeGetMaxInstancesPerVm.Unlock() return mock.VgpuTypeGetMaxInstancesPerVmFunc(vgpuTypeId) } // VgpuTypeGetMaxInstancesPerVmCalls gets all the calls that were made to VgpuTypeGetMaxInstancesPerVm. // Check the length with: // // len(mockedInterface.VgpuTypeGetMaxInstancesPerVmCalls()) func (mock *Interface) VgpuTypeGetMaxInstancesPerVmCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetMaxInstancesPerVm.RLock() calls = mock.calls.VgpuTypeGetMaxInstancesPerVm mock.lockVgpuTypeGetMaxInstancesPerVm.RUnlock() return calls } // VgpuTypeGetName calls VgpuTypeGetNameFunc. func (mock *Interface) VgpuTypeGetName(vgpuTypeId nvml.VgpuTypeId) (string, nvml.Return) { if mock.VgpuTypeGetNameFunc == nil { panic("Interface.VgpuTypeGetNameFunc: method is nil but Interface.VgpuTypeGetName was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetName.Lock() mock.calls.VgpuTypeGetName = append(mock.calls.VgpuTypeGetName, callInfo) mock.lockVgpuTypeGetName.Unlock() return mock.VgpuTypeGetNameFunc(vgpuTypeId) } // VgpuTypeGetNameCalls gets all the calls that were made to VgpuTypeGetName. // Check the length with: // // len(mockedInterface.VgpuTypeGetNameCalls()) func (mock *Interface) VgpuTypeGetNameCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetName.RLock() calls = mock.calls.VgpuTypeGetName mock.lockVgpuTypeGetName.RUnlock() return calls } // VgpuTypeGetNumDisplayHeads calls VgpuTypeGetNumDisplayHeadsFunc. func (mock *Interface) VgpuTypeGetNumDisplayHeads(vgpuTypeId nvml.VgpuTypeId) (int, nvml.Return) { if mock.VgpuTypeGetNumDisplayHeadsFunc == nil { panic("Interface.VgpuTypeGetNumDisplayHeadsFunc: method is nil but Interface.VgpuTypeGetNumDisplayHeads was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId }{ VgpuTypeId: vgpuTypeId, } mock.lockVgpuTypeGetNumDisplayHeads.Lock() mock.calls.VgpuTypeGetNumDisplayHeads = append(mock.calls.VgpuTypeGetNumDisplayHeads, callInfo) mock.lockVgpuTypeGetNumDisplayHeads.Unlock() return mock.VgpuTypeGetNumDisplayHeadsFunc(vgpuTypeId) } // VgpuTypeGetNumDisplayHeadsCalls gets all the calls that were made to VgpuTypeGetNumDisplayHeads. // Check the length with: // // len(mockedInterface.VgpuTypeGetNumDisplayHeadsCalls()) func (mock *Interface) VgpuTypeGetNumDisplayHeadsCalls() []struct { VgpuTypeId nvml.VgpuTypeId } { var calls []struct { VgpuTypeId nvml.VgpuTypeId } mock.lockVgpuTypeGetNumDisplayHeads.RLock() calls = mock.calls.VgpuTypeGetNumDisplayHeads mock.lockVgpuTypeGetNumDisplayHeads.RUnlock() return calls } // VgpuTypeGetResolution calls VgpuTypeGetResolutionFunc. func (mock *Interface) VgpuTypeGetResolution(vgpuTypeId nvml.VgpuTypeId, n int) (uint32, uint32, nvml.Return) { if mock.VgpuTypeGetResolutionFunc == nil { panic("Interface.VgpuTypeGetResolutionFunc: method is nil but Interface.VgpuTypeGetResolution was just called") } callInfo := struct { VgpuTypeId nvml.VgpuTypeId N int }{ VgpuTypeId: vgpuTypeId, N: n, } mock.lockVgpuTypeGetResolution.Lock() mock.calls.VgpuTypeGetResolution = append(mock.calls.VgpuTypeGetResolution, callInfo) mock.lockVgpuTypeGetResolution.Unlock() return mock.VgpuTypeGetResolutionFunc(vgpuTypeId, n) } // VgpuTypeGetResolutionCalls gets all the calls that were made to VgpuTypeGetResolution. // Check the length with: // // len(mockedInterface.VgpuTypeGetResolutionCalls()) func (mock *Interface) VgpuTypeGetResolutionCalls() []struct { VgpuTypeId nvml.VgpuTypeId N int } { var calls []struct { VgpuTypeId nvml.VgpuTypeId N int } mock.lockVgpuTypeGetResolution.RLock() calls = mock.calls.VgpuTypeGetResolution mock.lockVgpuTypeGetResolution.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/unit.go000066400000000000000000000207021520540370700267450ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that Unit does implement nvml.Unit. // If this is not the case, regenerate this file with moq. var _ nvml.Unit = &Unit{} // Unit is a mock implementation of nvml.Unit. // // func TestSomethingThatUsesUnit(t *testing.T) { // // // make and configure a mocked nvml.Unit // mockedUnit := &Unit{ // GetDevicesFunc: func() ([]nvml.Device, nvml.Return) { // panic("mock out the GetDevices method") // }, // GetFanSpeedInfoFunc: func() (nvml.UnitFanSpeeds, nvml.Return) { // panic("mock out the GetFanSpeedInfo method") // }, // GetLedStateFunc: func() (nvml.LedState, nvml.Return) { // panic("mock out the GetLedState method") // }, // GetPsuInfoFunc: func() (nvml.PSUInfo, nvml.Return) { // panic("mock out the GetPsuInfo method") // }, // GetTemperatureFunc: func(n int) (uint32, nvml.Return) { // panic("mock out the GetTemperature method") // }, // GetUnitInfoFunc: func() (nvml.UnitInfo, nvml.Return) { // panic("mock out the GetUnitInfo method") // }, // SetLedStateFunc: func(ledColor nvml.LedColor) nvml.Return { // panic("mock out the SetLedState method") // }, // } // // // use mockedUnit in code that requires nvml.Unit // // and then make assertions. // // } type Unit struct { // GetDevicesFunc mocks the GetDevices method. GetDevicesFunc func() ([]nvml.Device, nvml.Return) // GetFanSpeedInfoFunc mocks the GetFanSpeedInfo method. GetFanSpeedInfoFunc func() (nvml.UnitFanSpeeds, nvml.Return) // GetLedStateFunc mocks the GetLedState method. GetLedStateFunc func() (nvml.LedState, nvml.Return) // GetPsuInfoFunc mocks the GetPsuInfo method. GetPsuInfoFunc func() (nvml.PSUInfo, nvml.Return) // GetTemperatureFunc mocks the GetTemperature method. GetTemperatureFunc func(n int) (uint32, nvml.Return) // GetUnitInfoFunc mocks the GetUnitInfo method. GetUnitInfoFunc func() (nvml.UnitInfo, nvml.Return) // SetLedStateFunc mocks the SetLedState method. SetLedStateFunc func(ledColor nvml.LedColor) nvml.Return // calls tracks calls to the methods. calls struct { // GetDevices holds details about calls to the GetDevices method. GetDevices []struct { } // GetFanSpeedInfo holds details about calls to the GetFanSpeedInfo method. GetFanSpeedInfo []struct { } // GetLedState holds details about calls to the GetLedState method. GetLedState []struct { } // GetPsuInfo holds details about calls to the GetPsuInfo method. GetPsuInfo []struct { } // GetTemperature holds details about calls to the GetTemperature method. GetTemperature []struct { // N is the n argument value. N int } // GetUnitInfo holds details about calls to the GetUnitInfo method. GetUnitInfo []struct { } // SetLedState holds details about calls to the SetLedState method. SetLedState []struct { // LedColor is the ledColor argument value. LedColor nvml.LedColor } } lockGetDevices sync.RWMutex lockGetFanSpeedInfo sync.RWMutex lockGetLedState sync.RWMutex lockGetPsuInfo sync.RWMutex lockGetTemperature sync.RWMutex lockGetUnitInfo sync.RWMutex lockSetLedState sync.RWMutex } // GetDevices calls GetDevicesFunc. func (mock *Unit) GetDevices() ([]nvml.Device, nvml.Return) { if mock.GetDevicesFunc == nil { panic("Unit.GetDevicesFunc: method is nil but Unit.GetDevices was just called") } callInfo := struct { }{} mock.lockGetDevices.Lock() mock.calls.GetDevices = append(mock.calls.GetDevices, callInfo) mock.lockGetDevices.Unlock() return mock.GetDevicesFunc() } // GetDevicesCalls gets all the calls that were made to GetDevices. // Check the length with: // // len(mockedUnit.GetDevicesCalls()) func (mock *Unit) GetDevicesCalls() []struct { } { var calls []struct { } mock.lockGetDevices.RLock() calls = mock.calls.GetDevices mock.lockGetDevices.RUnlock() return calls } // GetFanSpeedInfo calls GetFanSpeedInfoFunc. func (mock *Unit) GetFanSpeedInfo() (nvml.UnitFanSpeeds, nvml.Return) { if mock.GetFanSpeedInfoFunc == nil { panic("Unit.GetFanSpeedInfoFunc: method is nil but Unit.GetFanSpeedInfo was just called") } callInfo := struct { }{} mock.lockGetFanSpeedInfo.Lock() mock.calls.GetFanSpeedInfo = append(mock.calls.GetFanSpeedInfo, callInfo) mock.lockGetFanSpeedInfo.Unlock() return mock.GetFanSpeedInfoFunc() } // GetFanSpeedInfoCalls gets all the calls that were made to GetFanSpeedInfo. // Check the length with: // // len(mockedUnit.GetFanSpeedInfoCalls()) func (mock *Unit) GetFanSpeedInfoCalls() []struct { } { var calls []struct { } mock.lockGetFanSpeedInfo.RLock() calls = mock.calls.GetFanSpeedInfo mock.lockGetFanSpeedInfo.RUnlock() return calls } // GetLedState calls GetLedStateFunc. func (mock *Unit) GetLedState() (nvml.LedState, nvml.Return) { if mock.GetLedStateFunc == nil { panic("Unit.GetLedStateFunc: method is nil but Unit.GetLedState was just called") } callInfo := struct { }{} mock.lockGetLedState.Lock() mock.calls.GetLedState = append(mock.calls.GetLedState, callInfo) mock.lockGetLedState.Unlock() return mock.GetLedStateFunc() } // GetLedStateCalls gets all the calls that were made to GetLedState. // Check the length with: // // len(mockedUnit.GetLedStateCalls()) func (mock *Unit) GetLedStateCalls() []struct { } { var calls []struct { } mock.lockGetLedState.RLock() calls = mock.calls.GetLedState mock.lockGetLedState.RUnlock() return calls } // GetPsuInfo calls GetPsuInfoFunc. func (mock *Unit) GetPsuInfo() (nvml.PSUInfo, nvml.Return) { if mock.GetPsuInfoFunc == nil { panic("Unit.GetPsuInfoFunc: method is nil but Unit.GetPsuInfo was just called") } callInfo := struct { }{} mock.lockGetPsuInfo.Lock() mock.calls.GetPsuInfo = append(mock.calls.GetPsuInfo, callInfo) mock.lockGetPsuInfo.Unlock() return mock.GetPsuInfoFunc() } // GetPsuInfoCalls gets all the calls that were made to GetPsuInfo. // Check the length with: // // len(mockedUnit.GetPsuInfoCalls()) func (mock *Unit) GetPsuInfoCalls() []struct { } { var calls []struct { } mock.lockGetPsuInfo.RLock() calls = mock.calls.GetPsuInfo mock.lockGetPsuInfo.RUnlock() return calls } // GetTemperature calls GetTemperatureFunc. func (mock *Unit) GetTemperature(n int) (uint32, nvml.Return) { if mock.GetTemperatureFunc == nil { panic("Unit.GetTemperatureFunc: method is nil but Unit.GetTemperature was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetTemperature.Lock() mock.calls.GetTemperature = append(mock.calls.GetTemperature, callInfo) mock.lockGetTemperature.Unlock() return mock.GetTemperatureFunc(n) } // GetTemperatureCalls gets all the calls that were made to GetTemperature. // Check the length with: // // len(mockedUnit.GetTemperatureCalls()) func (mock *Unit) GetTemperatureCalls() []struct { N int } { var calls []struct { N int } mock.lockGetTemperature.RLock() calls = mock.calls.GetTemperature mock.lockGetTemperature.RUnlock() return calls } // GetUnitInfo calls GetUnitInfoFunc. func (mock *Unit) GetUnitInfo() (nvml.UnitInfo, nvml.Return) { if mock.GetUnitInfoFunc == nil { panic("Unit.GetUnitInfoFunc: method is nil but Unit.GetUnitInfo was just called") } callInfo := struct { }{} mock.lockGetUnitInfo.Lock() mock.calls.GetUnitInfo = append(mock.calls.GetUnitInfo, callInfo) mock.lockGetUnitInfo.Unlock() return mock.GetUnitInfoFunc() } // GetUnitInfoCalls gets all the calls that were made to GetUnitInfo. // Check the length with: // // len(mockedUnit.GetUnitInfoCalls()) func (mock *Unit) GetUnitInfoCalls() []struct { } { var calls []struct { } mock.lockGetUnitInfo.RLock() calls = mock.calls.GetUnitInfo mock.lockGetUnitInfo.RUnlock() return calls } // SetLedState calls SetLedStateFunc. func (mock *Unit) SetLedState(ledColor nvml.LedColor) nvml.Return { if mock.SetLedStateFunc == nil { panic("Unit.SetLedStateFunc: method is nil but Unit.SetLedState was just called") } callInfo := struct { LedColor nvml.LedColor }{ LedColor: ledColor, } mock.lockSetLedState.Lock() mock.calls.SetLedState = append(mock.calls.SetLedState, callInfo) mock.lockSetLedState.Unlock() return mock.SetLedStateFunc(ledColor) } // SetLedStateCalls gets all the calls that were made to SetLedState. // Check the length with: // // len(mockedUnit.SetLedStateCalls()) func (mock *Unit) SetLedStateCalls() []struct { LedColor nvml.LedColor } { var calls []struct { LedColor nvml.LedColor } mock.lockSetLedState.RLock() calls = mock.calls.SetLedState mock.lockSetLedState.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/vgpuinstance.go000066400000000000000000000723131520540370700305010ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that VgpuInstance does implement nvml.VgpuInstance. // If this is not the case, regenerate this file with moq. var _ nvml.VgpuInstance = &VgpuInstance{} // VgpuInstance is a mock implementation of nvml.VgpuInstance. // // func TestSomethingThatUsesVgpuInstance(t *testing.T) { // // // make and configure a mocked nvml.VgpuInstance // mockedVgpuInstance := &VgpuInstance{ // ClearAccountingPidsFunc: func() nvml.Return { // panic("mock out the ClearAccountingPids method") // }, // GetAccountingModeFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetAccountingMode method") // }, // GetAccountingPidsFunc: func() ([]int, nvml.Return) { // panic("mock out the GetAccountingPids method") // }, // GetAccountingStatsFunc: func(n int) (nvml.AccountingStats, nvml.Return) { // panic("mock out the GetAccountingStats method") // }, // GetEccModeFunc: func() (nvml.EnableState, nvml.Return) { // panic("mock out the GetEccMode method") // }, // GetEncoderCapacityFunc: func() (int, nvml.Return) { // panic("mock out the GetEncoderCapacity method") // }, // GetEncoderSessionsFunc: func() (int, nvml.EncoderSessionInfo, nvml.Return) { // panic("mock out the GetEncoderSessions method") // }, // GetEncoderStatsFunc: func() (int, uint32, uint32, nvml.Return) { // panic("mock out the GetEncoderStats method") // }, // GetFBCSessionsFunc: func() (int, nvml.FBCSessionInfo, nvml.Return) { // panic("mock out the GetFBCSessions method") // }, // GetFBCStatsFunc: func() (nvml.FBCStats, nvml.Return) { // panic("mock out the GetFBCStats method") // }, // GetFbUsageFunc: func() (uint64, nvml.Return) { // panic("mock out the GetFbUsage method") // }, // GetFrameRateLimitFunc: func() (uint32, nvml.Return) { // panic("mock out the GetFrameRateLimit method") // }, // GetGpuInstanceIdFunc: func() (int, nvml.Return) { // panic("mock out the GetGpuInstanceId method") // }, // GetGpuPciIdFunc: func() (string, nvml.Return) { // panic("mock out the GetGpuPciId method") // }, // GetLicenseInfoFunc: func() (nvml.VgpuLicenseInfo, nvml.Return) { // panic("mock out the GetLicenseInfo method") // }, // GetLicenseStatusFunc: func() (int, nvml.Return) { // panic("mock out the GetLicenseStatus method") // }, // GetMdevUUIDFunc: func() (string, nvml.Return) { // panic("mock out the GetMdevUUID method") // }, // GetMetadataFunc: func() (nvml.VgpuMetadata, nvml.Return) { // panic("mock out the GetMetadata method") // }, // GetRuntimeStateSizeFunc: func() (nvml.VgpuRuntimeState, nvml.Return) { // panic("mock out the GetRuntimeStateSize method") // }, // GetTypeFunc: func() (nvml.VgpuTypeId, nvml.Return) { // panic("mock out the GetType method") // }, // GetUUIDFunc: func() (string, nvml.Return) { // panic("mock out the GetUUID method") // }, // GetVmDriverVersionFunc: func() (string, nvml.Return) { // panic("mock out the GetVmDriverVersion method") // }, // GetVmIDFunc: func() (string, nvml.VgpuVmIdType, nvml.Return) { // panic("mock out the GetVmID method") // }, // SetEncoderCapacityFunc: func(n int) nvml.Return { // panic("mock out the SetEncoderCapacity method") // }, // } // // // use mockedVgpuInstance in code that requires nvml.VgpuInstance // // and then make assertions. // // } type VgpuInstance struct { // ClearAccountingPidsFunc mocks the ClearAccountingPids method. ClearAccountingPidsFunc func() nvml.Return // GetAccountingModeFunc mocks the GetAccountingMode method. GetAccountingModeFunc func() (nvml.EnableState, nvml.Return) // GetAccountingPidsFunc mocks the GetAccountingPids method. GetAccountingPidsFunc func() ([]int, nvml.Return) // GetAccountingStatsFunc mocks the GetAccountingStats method. GetAccountingStatsFunc func(n int) (nvml.AccountingStats, nvml.Return) // GetEccModeFunc mocks the GetEccMode method. GetEccModeFunc func() (nvml.EnableState, nvml.Return) // GetEncoderCapacityFunc mocks the GetEncoderCapacity method. GetEncoderCapacityFunc func() (int, nvml.Return) // GetEncoderSessionsFunc mocks the GetEncoderSessions method. GetEncoderSessionsFunc func() (int, nvml.EncoderSessionInfo, nvml.Return) // GetEncoderStatsFunc mocks the GetEncoderStats method. GetEncoderStatsFunc func() (int, uint32, uint32, nvml.Return) // GetFBCSessionsFunc mocks the GetFBCSessions method. GetFBCSessionsFunc func() (int, nvml.FBCSessionInfo, nvml.Return) // GetFBCStatsFunc mocks the GetFBCStats method. GetFBCStatsFunc func() (nvml.FBCStats, nvml.Return) // GetFbUsageFunc mocks the GetFbUsage method. GetFbUsageFunc func() (uint64, nvml.Return) // GetFrameRateLimitFunc mocks the GetFrameRateLimit method. GetFrameRateLimitFunc func() (uint32, nvml.Return) // GetGpuInstanceIdFunc mocks the GetGpuInstanceId method. GetGpuInstanceIdFunc func() (int, nvml.Return) // GetGpuPciIdFunc mocks the GetGpuPciId method. GetGpuPciIdFunc func() (string, nvml.Return) // GetLicenseInfoFunc mocks the GetLicenseInfo method. GetLicenseInfoFunc func() (nvml.VgpuLicenseInfo, nvml.Return) // GetLicenseStatusFunc mocks the GetLicenseStatus method. GetLicenseStatusFunc func() (int, nvml.Return) // GetMdevUUIDFunc mocks the GetMdevUUID method. GetMdevUUIDFunc func() (string, nvml.Return) // GetMetadataFunc mocks the GetMetadata method. GetMetadataFunc func() (nvml.VgpuMetadata, nvml.Return) // GetRuntimeStateSizeFunc mocks the GetRuntimeStateSize method. GetRuntimeStateSizeFunc func() (nvml.VgpuRuntimeState, nvml.Return) // GetTypeFunc mocks the GetType method. GetTypeFunc func() (nvml.VgpuTypeId, nvml.Return) // GetUUIDFunc mocks the GetUUID method. GetUUIDFunc func() (string, nvml.Return) // GetVmDriverVersionFunc mocks the GetVmDriverVersion method. GetVmDriverVersionFunc func() (string, nvml.Return) // GetVmIDFunc mocks the GetVmID method. GetVmIDFunc func() (string, nvml.VgpuVmIdType, nvml.Return) // SetEncoderCapacityFunc mocks the SetEncoderCapacity method. SetEncoderCapacityFunc func(n int) nvml.Return // calls tracks calls to the methods. calls struct { // ClearAccountingPids holds details about calls to the ClearAccountingPids method. ClearAccountingPids []struct { } // GetAccountingMode holds details about calls to the GetAccountingMode method. GetAccountingMode []struct { } // GetAccountingPids holds details about calls to the GetAccountingPids method. GetAccountingPids []struct { } // GetAccountingStats holds details about calls to the GetAccountingStats method. GetAccountingStats []struct { // N is the n argument value. N int } // GetEccMode holds details about calls to the GetEccMode method. GetEccMode []struct { } // GetEncoderCapacity holds details about calls to the GetEncoderCapacity method. GetEncoderCapacity []struct { } // GetEncoderSessions holds details about calls to the GetEncoderSessions method. GetEncoderSessions []struct { } // GetEncoderStats holds details about calls to the GetEncoderStats method. GetEncoderStats []struct { } // GetFBCSessions holds details about calls to the GetFBCSessions method. GetFBCSessions []struct { } // GetFBCStats holds details about calls to the GetFBCStats method. GetFBCStats []struct { } // GetFbUsage holds details about calls to the GetFbUsage method. GetFbUsage []struct { } // GetFrameRateLimit holds details about calls to the GetFrameRateLimit method. GetFrameRateLimit []struct { } // GetGpuInstanceId holds details about calls to the GetGpuInstanceId method. GetGpuInstanceId []struct { } // GetGpuPciId holds details about calls to the GetGpuPciId method. GetGpuPciId []struct { } // GetLicenseInfo holds details about calls to the GetLicenseInfo method. GetLicenseInfo []struct { } // GetLicenseStatus holds details about calls to the GetLicenseStatus method. GetLicenseStatus []struct { } // GetMdevUUID holds details about calls to the GetMdevUUID method. GetMdevUUID []struct { } // GetMetadata holds details about calls to the GetMetadata method. GetMetadata []struct { } // GetRuntimeStateSize holds details about calls to the GetRuntimeStateSize method. GetRuntimeStateSize []struct { } // GetType holds details about calls to the GetType method. GetType []struct { } // GetUUID holds details about calls to the GetUUID method. GetUUID []struct { } // GetVmDriverVersion holds details about calls to the GetVmDriverVersion method. GetVmDriverVersion []struct { } // GetVmID holds details about calls to the GetVmID method. GetVmID []struct { } // SetEncoderCapacity holds details about calls to the SetEncoderCapacity method. SetEncoderCapacity []struct { // N is the n argument value. N int } } lockClearAccountingPids sync.RWMutex lockGetAccountingMode sync.RWMutex lockGetAccountingPids sync.RWMutex lockGetAccountingStats sync.RWMutex lockGetEccMode sync.RWMutex lockGetEncoderCapacity sync.RWMutex lockGetEncoderSessions sync.RWMutex lockGetEncoderStats sync.RWMutex lockGetFBCSessions sync.RWMutex lockGetFBCStats sync.RWMutex lockGetFbUsage sync.RWMutex lockGetFrameRateLimit sync.RWMutex lockGetGpuInstanceId sync.RWMutex lockGetGpuPciId sync.RWMutex lockGetLicenseInfo sync.RWMutex lockGetLicenseStatus sync.RWMutex lockGetMdevUUID sync.RWMutex lockGetMetadata sync.RWMutex lockGetRuntimeStateSize sync.RWMutex lockGetType sync.RWMutex lockGetUUID sync.RWMutex lockGetVmDriverVersion sync.RWMutex lockGetVmID sync.RWMutex lockSetEncoderCapacity sync.RWMutex } // ClearAccountingPids calls ClearAccountingPidsFunc. func (mock *VgpuInstance) ClearAccountingPids() nvml.Return { if mock.ClearAccountingPidsFunc == nil { panic("VgpuInstance.ClearAccountingPidsFunc: method is nil but VgpuInstance.ClearAccountingPids was just called") } callInfo := struct { }{} mock.lockClearAccountingPids.Lock() mock.calls.ClearAccountingPids = append(mock.calls.ClearAccountingPids, callInfo) mock.lockClearAccountingPids.Unlock() return mock.ClearAccountingPidsFunc() } // ClearAccountingPidsCalls gets all the calls that were made to ClearAccountingPids. // Check the length with: // // len(mockedVgpuInstance.ClearAccountingPidsCalls()) func (mock *VgpuInstance) ClearAccountingPidsCalls() []struct { } { var calls []struct { } mock.lockClearAccountingPids.RLock() calls = mock.calls.ClearAccountingPids mock.lockClearAccountingPids.RUnlock() return calls } // GetAccountingMode calls GetAccountingModeFunc. func (mock *VgpuInstance) GetAccountingMode() (nvml.EnableState, nvml.Return) { if mock.GetAccountingModeFunc == nil { panic("VgpuInstance.GetAccountingModeFunc: method is nil but VgpuInstance.GetAccountingMode was just called") } callInfo := struct { }{} mock.lockGetAccountingMode.Lock() mock.calls.GetAccountingMode = append(mock.calls.GetAccountingMode, callInfo) mock.lockGetAccountingMode.Unlock() return mock.GetAccountingModeFunc() } // GetAccountingModeCalls gets all the calls that were made to GetAccountingMode. // Check the length with: // // len(mockedVgpuInstance.GetAccountingModeCalls()) func (mock *VgpuInstance) GetAccountingModeCalls() []struct { } { var calls []struct { } mock.lockGetAccountingMode.RLock() calls = mock.calls.GetAccountingMode mock.lockGetAccountingMode.RUnlock() return calls } // GetAccountingPids calls GetAccountingPidsFunc. func (mock *VgpuInstance) GetAccountingPids() ([]int, nvml.Return) { if mock.GetAccountingPidsFunc == nil { panic("VgpuInstance.GetAccountingPidsFunc: method is nil but VgpuInstance.GetAccountingPids was just called") } callInfo := struct { }{} mock.lockGetAccountingPids.Lock() mock.calls.GetAccountingPids = append(mock.calls.GetAccountingPids, callInfo) mock.lockGetAccountingPids.Unlock() return mock.GetAccountingPidsFunc() } // GetAccountingPidsCalls gets all the calls that were made to GetAccountingPids. // Check the length with: // // len(mockedVgpuInstance.GetAccountingPidsCalls()) func (mock *VgpuInstance) GetAccountingPidsCalls() []struct { } { var calls []struct { } mock.lockGetAccountingPids.RLock() calls = mock.calls.GetAccountingPids mock.lockGetAccountingPids.RUnlock() return calls } // GetAccountingStats calls GetAccountingStatsFunc. func (mock *VgpuInstance) GetAccountingStats(n int) (nvml.AccountingStats, nvml.Return) { if mock.GetAccountingStatsFunc == nil { panic("VgpuInstance.GetAccountingStatsFunc: method is nil but VgpuInstance.GetAccountingStats was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetAccountingStats.Lock() mock.calls.GetAccountingStats = append(mock.calls.GetAccountingStats, callInfo) mock.lockGetAccountingStats.Unlock() return mock.GetAccountingStatsFunc(n) } // GetAccountingStatsCalls gets all the calls that were made to GetAccountingStats. // Check the length with: // // len(mockedVgpuInstance.GetAccountingStatsCalls()) func (mock *VgpuInstance) GetAccountingStatsCalls() []struct { N int } { var calls []struct { N int } mock.lockGetAccountingStats.RLock() calls = mock.calls.GetAccountingStats mock.lockGetAccountingStats.RUnlock() return calls } // GetEccMode calls GetEccModeFunc. func (mock *VgpuInstance) GetEccMode() (nvml.EnableState, nvml.Return) { if mock.GetEccModeFunc == nil { panic("VgpuInstance.GetEccModeFunc: method is nil but VgpuInstance.GetEccMode was just called") } callInfo := struct { }{} mock.lockGetEccMode.Lock() mock.calls.GetEccMode = append(mock.calls.GetEccMode, callInfo) mock.lockGetEccMode.Unlock() return mock.GetEccModeFunc() } // GetEccModeCalls gets all the calls that were made to GetEccMode. // Check the length with: // // len(mockedVgpuInstance.GetEccModeCalls()) func (mock *VgpuInstance) GetEccModeCalls() []struct { } { var calls []struct { } mock.lockGetEccMode.RLock() calls = mock.calls.GetEccMode mock.lockGetEccMode.RUnlock() return calls } // GetEncoderCapacity calls GetEncoderCapacityFunc. func (mock *VgpuInstance) GetEncoderCapacity() (int, nvml.Return) { if mock.GetEncoderCapacityFunc == nil { panic("VgpuInstance.GetEncoderCapacityFunc: method is nil but VgpuInstance.GetEncoderCapacity was just called") } callInfo := struct { }{} mock.lockGetEncoderCapacity.Lock() mock.calls.GetEncoderCapacity = append(mock.calls.GetEncoderCapacity, callInfo) mock.lockGetEncoderCapacity.Unlock() return mock.GetEncoderCapacityFunc() } // GetEncoderCapacityCalls gets all the calls that were made to GetEncoderCapacity. // Check the length with: // // len(mockedVgpuInstance.GetEncoderCapacityCalls()) func (mock *VgpuInstance) GetEncoderCapacityCalls() []struct { } { var calls []struct { } mock.lockGetEncoderCapacity.RLock() calls = mock.calls.GetEncoderCapacity mock.lockGetEncoderCapacity.RUnlock() return calls } // GetEncoderSessions calls GetEncoderSessionsFunc. func (mock *VgpuInstance) GetEncoderSessions() (int, nvml.EncoderSessionInfo, nvml.Return) { if mock.GetEncoderSessionsFunc == nil { panic("VgpuInstance.GetEncoderSessionsFunc: method is nil but VgpuInstance.GetEncoderSessions was just called") } callInfo := struct { }{} mock.lockGetEncoderSessions.Lock() mock.calls.GetEncoderSessions = append(mock.calls.GetEncoderSessions, callInfo) mock.lockGetEncoderSessions.Unlock() return mock.GetEncoderSessionsFunc() } // GetEncoderSessionsCalls gets all the calls that were made to GetEncoderSessions. // Check the length with: // // len(mockedVgpuInstance.GetEncoderSessionsCalls()) func (mock *VgpuInstance) GetEncoderSessionsCalls() []struct { } { var calls []struct { } mock.lockGetEncoderSessions.RLock() calls = mock.calls.GetEncoderSessions mock.lockGetEncoderSessions.RUnlock() return calls } // GetEncoderStats calls GetEncoderStatsFunc. func (mock *VgpuInstance) GetEncoderStats() (int, uint32, uint32, nvml.Return) { if mock.GetEncoderStatsFunc == nil { panic("VgpuInstance.GetEncoderStatsFunc: method is nil but VgpuInstance.GetEncoderStats was just called") } callInfo := struct { }{} mock.lockGetEncoderStats.Lock() mock.calls.GetEncoderStats = append(mock.calls.GetEncoderStats, callInfo) mock.lockGetEncoderStats.Unlock() return mock.GetEncoderStatsFunc() } // GetEncoderStatsCalls gets all the calls that were made to GetEncoderStats. // Check the length with: // // len(mockedVgpuInstance.GetEncoderStatsCalls()) func (mock *VgpuInstance) GetEncoderStatsCalls() []struct { } { var calls []struct { } mock.lockGetEncoderStats.RLock() calls = mock.calls.GetEncoderStats mock.lockGetEncoderStats.RUnlock() return calls } // GetFBCSessions calls GetFBCSessionsFunc. func (mock *VgpuInstance) GetFBCSessions() (int, nvml.FBCSessionInfo, nvml.Return) { if mock.GetFBCSessionsFunc == nil { panic("VgpuInstance.GetFBCSessionsFunc: method is nil but VgpuInstance.GetFBCSessions was just called") } callInfo := struct { }{} mock.lockGetFBCSessions.Lock() mock.calls.GetFBCSessions = append(mock.calls.GetFBCSessions, callInfo) mock.lockGetFBCSessions.Unlock() return mock.GetFBCSessionsFunc() } // GetFBCSessionsCalls gets all the calls that were made to GetFBCSessions. // Check the length with: // // len(mockedVgpuInstance.GetFBCSessionsCalls()) func (mock *VgpuInstance) GetFBCSessionsCalls() []struct { } { var calls []struct { } mock.lockGetFBCSessions.RLock() calls = mock.calls.GetFBCSessions mock.lockGetFBCSessions.RUnlock() return calls } // GetFBCStats calls GetFBCStatsFunc. func (mock *VgpuInstance) GetFBCStats() (nvml.FBCStats, nvml.Return) { if mock.GetFBCStatsFunc == nil { panic("VgpuInstance.GetFBCStatsFunc: method is nil but VgpuInstance.GetFBCStats was just called") } callInfo := struct { }{} mock.lockGetFBCStats.Lock() mock.calls.GetFBCStats = append(mock.calls.GetFBCStats, callInfo) mock.lockGetFBCStats.Unlock() return mock.GetFBCStatsFunc() } // GetFBCStatsCalls gets all the calls that were made to GetFBCStats. // Check the length with: // // len(mockedVgpuInstance.GetFBCStatsCalls()) func (mock *VgpuInstance) GetFBCStatsCalls() []struct { } { var calls []struct { } mock.lockGetFBCStats.RLock() calls = mock.calls.GetFBCStats mock.lockGetFBCStats.RUnlock() return calls } // GetFbUsage calls GetFbUsageFunc. func (mock *VgpuInstance) GetFbUsage() (uint64, nvml.Return) { if mock.GetFbUsageFunc == nil { panic("VgpuInstance.GetFbUsageFunc: method is nil but VgpuInstance.GetFbUsage was just called") } callInfo := struct { }{} mock.lockGetFbUsage.Lock() mock.calls.GetFbUsage = append(mock.calls.GetFbUsage, callInfo) mock.lockGetFbUsage.Unlock() return mock.GetFbUsageFunc() } // GetFbUsageCalls gets all the calls that were made to GetFbUsage. // Check the length with: // // len(mockedVgpuInstance.GetFbUsageCalls()) func (mock *VgpuInstance) GetFbUsageCalls() []struct { } { var calls []struct { } mock.lockGetFbUsage.RLock() calls = mock.calls.GetFbUsage mock.lockGetFbUsage.RUnlock() return calls } // GetFrameRateLimit calls GetFrameRateLimitFunc. func (mock *VgpuInstance) GetFrameRateLimit() (uint32, nvml.Return) { if mock.GetFrameRateLimitFunc == nil { panic("VgpuInstance.GetFrameRateLimitFunc: method is nil but VgpuInstance.GetFrameRateLimit was just called") } callInfo := struct { }{} mock.lockGetFrameRateLimit.Lock() mock.calls.GetFrameRateLimit = append(mock.calls.GetFrameRateLimit, callInfo) mock.lockGetFrameRateLimit.Unlock() return mock.GetFrameRateLimitFunc() } // GetFrameRateLimitCalls gets all the calls that were made to GetFrameRateLimit. // Check the length with: // // len(mockedVgpuInstance.GetFrameRateLimitCalls()) func (mock *VgpuInstance) GetFrameRateLimitCalls() []struct { } { var calls []struct { } mock.lockGetFrameRateLimit.RLock() calls = mock.calls.GetFrameRateLimit mock.lockGetFrameRateLimit.RUnlock() return calls } // GetGpuInstanceId calls GetGpuInstanceIdFunc. func (mock *VgpuInstance) GetGpuInstanceId() (int, nvml.Return) { if mock.GetGpuInstanceIdFunc == nil { panic("VgpuInstance.GetGpuInstanceIdFunc: method is nil but VgpuInstance.GetGpuInstanceId was just called") } callInfo := struct { }{} mock.lockGetGpuInstanceId.Lock() mock.calls.GetGpuInstanceId = append(mock.calls.GetGpuInstanceId, callInfo) mock.lockGetGpuInstanceId.Unlock() return mock.GetGpuInstanceIdFunc() } // GetGpuInstanceIdCalls gets all the calls that were made to GetGpuInstanceId. // Check the length with: // // len(mockedVgpuInstance.GetGpuInstanceIdCalls()) func (mock *VgpuInstance) GetGpuInstanceIdCalls() []struct { } { var calls []struct { } mock.lockGetGpuInstanceId.RLock() calls = mock.calls.GetGpuInstanceId mock.lockGetGpuInstanceId.RUnlock() return calls } // GetGpuPciId calls GetGpuPciIdFunc. func (mock *VgpuInstance) GetGpuPciId() (string, nvml.Return) { if mock.GetGpuPciIdFunc == nil { panic("VgpuInstance.GetGpuPciIdFunc: method is nil but VgpuInstance.GetGpuPciId was just called") } callInfo := struct { }{} mock.lockGetGpuPciId.Lock() mock.calls.GetGpuPciId = append(mock.calls.GetGpuPciId, callInfo) mock.lockGetGpuPciId.Unlock() return mock.GetGpuPciIdFunc() } // GetGpuPciIdCalls gets all the calls that were made to GetGpuPciId. // Check the length with: // // len(mockedVgpuInstance.GetGpuPciIdCalls()) func (mock *VgpuInstance) GetGpuPciIdCalls() []struct { } { var calls []struct { } mock.lockGetGpuPciId.RLock() calls = mock.calls.GetGpuPciId mock.lockGetGpuPciId.RUnlock() return calls } // GetLicenseInfo calls GetLicenseInfoFunc. func (mock *VgpuInstance) GetLicenseInfo() (nvml.VgpuLicenseInfo, nvml.Return) { if mock.GetLicenseInfoFunc == nil { panic("VgpuInstance.GetLicenseInfoFunc: method is nil but VgpuInstance.GetLicenseInfo was just called") } callInfo := struct { }{} mock.lockGetLicenseInfo.Lock() mock.calls.GetLicenseInfo = append(mock.calls.GetLicenseInfo, callInfo) mock.lockGetLicenseInfo.Unlock() return mock.GetLicenseInfoFunc() } // GetLicenseInfoCalls gets all the calls that were made to GetLicenseInfo. // Check the length with: // // len(mockedVgpuInstance.GetLicenseInfoCalls()) func (mock *VgpuInstance) GetLicenseInfoCalls() []struct { } { var calls []struct { } mock.lockGetLicenseInfo.RLock() calls = mock.calls.GetLicenseInfo mock.lockGetLicenseInfo.RUnlock() return calls } // GetLicenseStatus calls GetLicenseStatusFunc. func (mock *VgpuInstance) GetLicenseStatus() (int, nvml.Return) { if mock.GetLicenseStatusFunc == nil { panic("VgpuInstance.GetLicenseStatusFunc: method is nil but VgpuInstance.GetLicenseStatus was just called") } callInfo := struct { }{} mock.lockGetLicenseStatus.Lock() mock.calls.GetLicenseStatus = append(mock.calls.GetLicenseStatus, callInfo) mock.lockGetLicenseStatus.Unlock() return mock.GetLicenseStatusFunc() } // GetLicenseStatusCalls gets all the calls that were made to GetLicenseStatus. // Check the length with: // // len(mockedVgpuInstance.GetLicenseStatusCalls()) func (mock *VgpuInstance) GetLicenseStatusCalls() []struct { } { var calls []struct { } mock.lockGetLicenseStatus.RLock() calls = mock.calls.GetLicenseStatus mock.lockGetLicenseStatus.RUnlock() return calls } // GetMdevUUID calls GetMdevUUIDFunc. func (mock *VgpuInstance) GetMdevUUID() (string, nvml.Return) { if mock.GetMdevUUIDFunc == nil { panic("VgpuInstance.GetMdevUUIDFunc: method is nil but VgpuInstance.GetMdevUUID was just called") } callInfo := struct { }{} mock.lockGetMdevUUID.Lock() mock.calls.GetMdevUUID = append(mock.calls.GetMdevUUID, callInfo) mock.lockGetMdevUUID.Unlock() return mock.GetMdevUUIDFunc() } // GetMdevUUIDCalls gets all the calls that were made to GetMdevUUID. // Check the length with: // // len(mockedVgpuInstance.GetMdevUUIDCalls()) func (mock *VgpuInstance) GetMdevUUIDCalls() []struct { } { var calls []struct { } mock.lockGetMdevUUID.RLock() calls = mock.calls.GetMdevUUID mock.lockGetMdevUUID.RUnlock() return calls } // GetMetadata calls GetMetadataFunc. func (mock *VgpuInstance) GetMetadata() (nvml.VgpuMetadata, nvml.Return) { if mock.GetMetadataFunc == nil { panic("VgpuInstance.GetMetadataFunc: method is nil but VgpuInstance.GetMetadata was just called") } callInfo := struct { }{} mock.lockGetMetadata.Lock() mock.calls.GetMetadata = append(mock.calls.GetMetadata, callInfo) mock.lockGetMetadata.Unlock() return mock.GetMetadataFunc() } // GetMetadataCalls gets all the calls that were made to GetMetadata. // Check the length with: // // len(mockedVgpuInstance.GetMetadataCalls()) func (mock *VgpuInstance) GetMetadataCalls() []struct { } { var calls []struct { } mock.lockGetMetadata.RLock() calls = mock.calls.GetMetadata mock.lockGetMetadata.RUnlock() return calls } // GetRuntimeStateSize calls GetRuntimeStateSizeFunc. func (mock *VgpuInstance) GetRuntimeStateSize() (nvml.VgpuRuntimeState, nvml.Return) { if mock.GetRuntimeStateSizeFunc == nil { panic("VgpuInstance.GetRuntimeStateSizeFunc: method is nil but VgpuInstance.GetRuntimeStateSize was just called") } callInfo := struct { }{} mock.lockGetRuntimeStateSize.Lock() mock.calls.GetRuntimeStateSize = append(mock.calls.GetRuntimeStateSize, callInfo) mock.lockGetRuntimeStateSize.Unlock() return mock.GetRuntimeStateSizeFunc() } // GetRuntimeStateSizeCalls gets all the calls that were made to GetRuntimeStateSize. // Check the length with: // // len(mockedVgpuInstance.GetRuntimeStateSizeCalls()) func (mock *VgpuInstance) GetRuntimeStateSizeCalls() []struct { } { var calls []struct { } mock.lockGetRuntimeStateSize.RLock() calls = mock.calls.GetRuntimeStateSize mock.lockGetRuntimeStateSize.RUnlock() return calls } // GetType calls GetTypeFunc. func (mock *VgpuInstance) GetType() (nvml.VgpuTypeId, nvml.Return) { if mock.GetTypeFunc == nil { panic("VgpuInstance.GetTypeFunc: method is nil but VgpuInstance.GetType was just called") } callInfo := struct { }{} mock.lockGetType.Lock() mock.calls.GetType = append(mock.calls.GetType, callInfo) mock.lockGetType.Unlock() return mock.GetTypeFunc() } // GetTypeCalls gets all the calls that were made to GetType. // Check the length with: // // len(mockedVgpuInstance.GetTypeCalls()) func (mock *VgpuInstance) GetTypeCalls() []struct { } { var calls []struct { } mock.lockGetType.RLock() calls = mock.calls.GetType mock.lockGetType.RUnlock() return calls } // GetUUID calls GetUUIDFunc. func (mock *VgpuInstance) GetUUID() (string, nvml.Return) { if mock.GetUUIDFunc == nil { panic("VgpuInstance.GetUUIDFunc: method is nil but VgpuInstance.GetUUID was just called") } callInfo := struct { }{} mock.lockGetUUID.Lock() mock.calls.GetUUID = append(mock.calls.GetUUID, callInfo) mock.lockGetUUID.Unlock() return mock.GetUUIDFunc() } // GetUUIDCalls gets all the calls that were made to GetUUID. // Check the length with: // // len(mockedVgpuInstance.GetUUIDCalls()) func (mock *VgpuInstance) GetUUIDCalls() []struct { } { var calls []struct { } mock.lockGetUUID.RLock() calls = mock.calls.GetUUID mock.lockGetUUID.RUnlock() return calls } // GetVmDriverVersion calls GetVmDriverVersionFunc. func (mock *VgpuInstance) GetVmDriverVersion() (string, nvml.Return) { if mock.GetVmDriverVersionFunc == nil { panic("VgpuInstance.GetVmDriverVersionFunc: method is nil but VgpuInstance.GetVmDriverVersion was just called") } callInfo := struct { }{} mock.lockGetVmDriverVersion.Lock() mock.calls.GetVmDriverVersion = append(mock.calls.GetVmDriverVersion, callInfo) mock.lockGetVmDriverVersion.Unlock() return mock.GetVmDriverVersionFunc() } // GetVmDriverVersionCalls gets all the calls that were made to GetVmDriverVersion. // Check the length with: // // len(mockedVgpuInstance.GetVmDriverVersionCalls()) func (mock *VgpuInstance) GetVmDriverVersionCalls() []struct { } { var calls []struct { } mock.lockGetVmDriverVersion.RLock() calls = mock.calls.GetVmDriverVersion mock.lockGetVmDriverVersion.RUnlock() return calls } // GetVmID calls GetVmIDFunc. func (mock *VgpuInstance) GetVmID() (string, nvml.VgpuVmIdType, nvml.Return) { if mock.GetVmIDFunc == nil { panic("VgpuInstance.GetVmIDFunc: method is nil but VgpuInstance.GetVmID was just called") } callInfo := struct { }{} mock.lockGetVmID.Lock() mock.calls.GetVmID = append(mock.calls.GetVmID, callInfo) mock.lockGetVmID.Unlock() return mock.GetVmIDFunc() } // GetVmIDCalls gets all the calls that were made to GetVmID. // Check the length with: // // len(mockedVgpuInstance.GetVmIDCalls()) func (mock *VgpuInstance) GetVmIDCalls() []struct { } { var calls []struct { } mock.lockGetVmID.RLock() calls = mock.calls.GetVmID mock.lockGetVmID.RUnlock() return calls } // SetEncoderCapacity calls SetEncoderCapacityFunc. func (mock *VgpuInstance) SetEncoderCapacity(n int) nvml.Return { if mock.SetEncoderCapacityFunc == nil { panic("VgpuInstance.SetEncoderCapacityFunc: method is nil but VgpuInstance.SetEncoderCapacity was just called") } callInfo := struct { N int }{ N: n, } mock.lockSetEncoderCapacity.Lock() mock.calls.SetEncoderCapacity = append(mock.calls.SetEncoderCapacity, callInfo) mock.lockSetEncoderCapacity.Unlock() return mock.SetEncoderCapacityFunc(n) } // SetEncoderCapacityCalls gets all the calls that were made to SetEncoderCapacity. // Check the length with: // // len(mockedVgpuInstance.SetEncoderCapacityCalls()) func (mock *VgpuInstance) SetEncoderCapacityCalls() []struct { N int } { var calls []struct { N int } mock.lockSetEncoderCapacity.RLock() calls = mock.calls.SetEncoderCapacity mock.lockSetEncoderCapacity.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/mock/vgputypeid.go000066400000000000000000000473261520540370700302010ustar00rootroot00000000000000// Code generated by moq; DO NOT EDIT. // github.com/matryer/moq package mock import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "sync" ) // Ensure, that VgpuTypeId does implement nvml.VgpuTypeId. // If this is not the case, regenerate this file with moq. var _ nvml.VgpuTypeId = &VgpuTypeId{} // VgpuTypeId is a mock implementation of nvml.VgpuTypeId. // // func TestSomethingThatUsesVgpuTypeId(t *testing.T) { // // // make and configure a mocked nvml.VgpuTypeId // mockedVgpuTypeId := &VgpuTypeId{ // GetBAR1InfoFunc: func() (nvml.VgpuTypeBar1Info, nvml.Return) { // panic("mock out the GetBAR1Info method") // }, // GetCapabilitiesFunc: func(vgpuCapability nvml.VgpuCapability) (bool, nvml.Return) { // panic("mock out the GetCapabilities method") // }, // GetClassFunc: func() (string, nvml.Return) { // panic("mock out the GetClass method") // }, // GetCreatablePlacementsFunc: func(device nvml.Device) (nvml.VgpuPlacementList, nvml.Return) { // panic("mock out the GetCreatablePlacements method") // }, // GetDeviceIDFunc: func() (uint64, uint64, nvml.Return) { // panic("mock out the GetDeviceID method") // }, // GetFrameRateLimitFunc: func() (uint32, nvml.Return) { // panic("mock out the GetFrameRateLimit method") // }, // GetFramebufferSizeFunc: func() (uint64, nvml.Return) { // panic("mock out the GetFramebufferSize method") // }, // GetGpuInstanceProfileIdFunc: func() (uint32, nvml.Return) { // panic("mock out the GetGpuInstanceProfileId method") // }, // GetLicenseFunc: func() (string, nvml.Return) { // panic("mock out the GetLicense method") // }, // GetMaxInstancesFunc: func(device nvml.Device) (int, nvml.Return) { // panic("mock out the GetMaxInstances method") // }, // GetMaxInstancesPerVmFunc: func() (int, nvml.Return) { // panic("mock out the GetMaxInstancesPerVm method") // }, // GetNameFunc: func() (string, nvml.Return) { // panic("mock out the GetName method") // }, // GetNumDisplayHeadsFunc: func() (int, nvml.Return) { // panic("mock out the GetNumDisplayHeads method") // }, // GetResolutionFunc: func(n int) (uint32, uint32, nvml.Return) { // panic("mock out the GetResolution method") // }, // GetSupportedPlacementsFunc: func(device nvml.Device) (nvml.VgpuPlacementList, nvml.Return) { // panic("mock out the GetSupportedPlacements method") // }, // } // // // use mockedVgpuTypeId in code that requires nvml.VgpuTypeId // // and then make assertions. // // } type VgpuTypeId struct { // GetBAR1InfoFunc mocks the GetBAR1Info method. GetBAR1InfoFunc func() (nvml.VgpuTypeBar1Info, nvml.Return) // GetCapabilitiesFunc mocks the GetCapabilities method. GetCapabilitiesFunc func(vgpuCapability nvml.VgpuCapability) (bool, nvml.Return) // GetClassFunc mocks the GetClass method. GetClassFunc func() (string, nvml.Return) // GetCreatablePlacementsFunc mocks the GetCreatablePlacements method. GetCreatablePlacementsFunc func(device nvml.Device) (nvml.VgpuPlacementList, nvml.Return) // GetDeviceIDFunc mocks the GetDeviceID method. GetDeviceIDFunc func() (uint64, uint64, nvml.Return) // GetFrameRateLimitFunc mocks the GetFrameRateLimit method. GetFrameRateLimitFunc func() (uint32, nvml.Return) // GetFramebufferSizeFunc mocks the GetFramebufferSize method. GetFramebufferSizeFunc func() (uint64, nvml.Return) // GetGpuInstanceProfileIdFunc mocks the GetGpuInstanceProfileId method. GetGpuInstanceProfileIdFunc func() (uint32, nvml.Return) // GetLicenseFunc mocks the GetLicense method. GetLicenseFunc func() (string, nvml.Return) // GetMaxInstancesFunc mocks the GetMaxInstances method. GetMaxInstancesFunc func(device nvml.Device) (int, nvml.Return) // GetMaxInstancesPerVmFunc mocks the GetMaxInstancesPerVm method. GetMaxInstancesPerVmFunc func() (int, nvml.Return) // GetNameFunc mocks the GetName method. GetNameFunc func() (string, nvml.Return) // GetNumDisplayHeadsFunc mocks the GetNumDisplayHeads method. GetNumDisplayHeadsFunc func() (int, nvml.Return) // GetResolutionFunc mocks the GetResolution method. GetResolutionFunc func(n int) (uint32, uint32, nvml.Return) // GetSupportedPlacementsFunc mocks the GetSupportedPlacements method. GetSupportedPlacementsFunc func(device nvml.Device) (nvml.VgpuPlacementList, nvml.Return) // calls tracks calls to the methods. calls struct { // GetBAR1Info holds details about calls to the GetBAR1Info method. GetBAR1Info []struct { } // GetCapabilities holds details about calls to the GetCapabilities method. GetCapabilities []struct { // VgpuCapability is the vgpuCapability argument value. VgpuCapability nvml.VgpuCapability } // GetClass holds details about calls to the GetClass method. GetClass []struct { } // GetCreatablePlacements holds details about calls to the GetCreatablePlacements method. GetCreatablePlacements []struct { // Device is the device argument value. Device nvml.Device } // GetDeviceID holds details about calls to the GetDeviceID method. GetDeviceID []struct { } // GetFrameRateLimit holds details about calls to the GetFrameRateLimit method. GetFrameRateLimit []struct { } // GetFramebufferSize holds details about calls to the GetFramebufferSize method. GetFramebufferSize []struct { } // GetGpuInstanceProfileId holds details about calls to the GetGpuInstanceProfileId method. GetGpuInstanceProfileId []struct { } // GetLicense holds details about calls to the GetLicense method. GetLicense []struct { } // GetMaxInstances holds details about calls to the GetMaxInstances method. GetMaxInstances []struct { // Device is the device argument value. Device nvml.Device } // GetMaxInstancesPerVm holds details about calls to the GetMaxInstancesPerVm method. GetMaxInstancesPerVm []struct { } // GetName holds details about calls to the GetName method. GetName []struct { } // GetNumDisplayHeads holds details about calls to the GetNumDisplayHeads method. GetNumDisplayHeads []struct { } // GetResolution holds details about calls to the GetResolution method. GetResolution []struct { // N is the n argument value. N int } // GetSupportedPlacements holds details about calls to the GetSupportedPlacements method. GetSupportedPlacements []struct { // Device is the device argument value. Device nvml.Device } } lockGetBAR1Info sync.RWMutex lockGetCapabilities sync.RWMutex lockGetClass sync.RWMutex lockGetCreatablePlacements sync.RWMutex lockGetDeviceID sync.RWMutex lockGetFrameRateLimit sync.RWMutex lockGetFramebufferSize sync.RWMutex lockGetGpuInstanceProfileId sync.RWMutex lockGetLicense sync.RWMutex lockGetMaxInstances sync.RWMutex lockGetMaxInstancesPerVm sync.RWMutex lockGetName sync.RWMutex lockGetNumDisplayHeads sync.RWMutex lockGetResolution sync.RWMutex lockGetSupportedPlacements sync.RWMutex } // GetBAR1Info calls GetBAR1InfoFunc. func (mock *VgpuTypeId) GetBAR1Info() (nvml.VgpuTypeBar1Info, nvml.Return) { if mock.GetBAR1InfoFunc == nil { panic("VgpuTypeId.GetBAR1InfoFunc: method is nil but VgpuTypeId.GetBAR1Info was just called") } callInfo := struct { }{} mock.lockGetBAR1Info.Lock() mock.calls.GetBAR1Info = append(mock.calls.GetBAR1Info, callInfo) mock.lockGetBAR1Info.Unlock() return mock.GetBAR1InfoFunc() } // GetBAR1InfoCalls gets all the calls that were made to GetBAR1Info. // Check the length with: // // len(mockedVgpuTypeId.GetBAR1InfoCalls()) func (mock *VgpuTypeId) GetBAR1InfoCalls() []struct { } { var calls []struct { } mock.lockGetBAR1Info.RLock() calls = mock.calls.GetBAR1Info mock.lockGetBAR1Info.RUnlock() return calls } // GetCapabilities calls GetCapabilitiesFunc. func (mock *VgpuTypeId) GetCapabilities(vgpuCapability nvml.VgpuCapability) (bool, nvml.Return) { if mock.GetCapabilitiesFunc == nil { panic("VgpuTypeId.GetCapabilitiesFunc: method is nil but VgpuTypeId.GetCapabilities was just called") } callInfo := struct { VgpuCapability nvml.VgpuCapability }{ VgpuCapability: vgpuCapability, } mock.lockGetCapabilities.Lock() mock.calls.GetCapabilities = append(mock.calls.GetCapabilities, callInfo) mock.lockGetCapabilities.Unlock() return mock.GetCapabilitiesFunc(vgpuCapability) } // GetCapabilitiesCalls gets all the calls that were made to GetCapabilities. // Check the length with: // // len(mockedVgpuTypeId.GetCapabilitiesCalls()) func (mock *VgpuTypeId) GetCapabilitiesCalls() []struct { VgpuCapability nvml.VgpuCapability } { var calls []struct { VgpuCapability nvml.VgpuCapability } mock.lockGetCapabilities.RLock() calls = mock.calls.GetCapabilities mock.lockGetCapabilities.RUnlock() return calls } // GetClass calls GetClassFunc. func (mock *VgpuTypeId) GetClass() (string, nvml.Return) { if mock.GetClassFunc == nil { panic("VgpuTypeId.GetClassFunc: method is nil but VgpuTypeId.GetClass was just called") } callInfo := struct { }{} mock.lockGetClass.Lock() mock.calls.GetClass = append(mock.calls.GetClass, callInfo) mock.lockGetClass.Unlock() return mock.GetClassFunc() } // GetClassCalls gets all the calls that were made to GetClass. // Check the length with: // // len(mockedVgpuTypeId.GetClassCalls()) func (mock *VgpuTypeId) GetClassCalls() []struct { } { var calls []struct { } mock.lockGetClass.RLock() calls = mock.calls.GetClass mock.lockGetClass.RUnlock() return calls } // GetCreatablePlacements calls GetCreatablePlacementsFunc. func (mock *VgpuTypeId) GetCreatablePlacements(device nvml.Device) (nvml.VgpuPlacementList, nvml.Return) { if mock.GetCreatablePlacementsFunc == nil { panic("VgpuTypeId.GetCreatablePlacementsFunc: method is nil but VgpuTypeId.GetCreatablePlacements was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGetCreatablePlacements.Lock() mock.calls.GetCreatablePlacements = append(mock.calls.GetCreatablePlacements, callInfo) mock.lockGetCreatablePlacements.Unlock() return mock.GetCreatablePlacementsFunc(device) } // GetCreatablePlacementsCalls gets all the calls that were made to GetCreatablePlacements. // Check the length with: // // len(mockedVgpuTypeId.GetCreatablePlacementsCalls()) func (mock *VgpuTypeId) GetCreatablePlacementsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGetCreatablePlacements.RLock() calls = mock.calls.GetCreatablePlacements mock.lockGetCreatablePlacements.RUnlock() return calls } // GetDeviceID calls GetDeviceIDFunc. func (mock *VgpuTypeId) GetDeviceID() (uint64, uint64, nvml.Return) { if mock.GetDeviceIDFunc == nil { panic("VgpuTypeId.GetDeviceIDFunc: method is nil but VgpuTypeId.GetDeviceID was just called") } callInfo := struct { }{} mock.lockGetDeviceID.Lock() mock.calls.GetDeviceID = append(mock.calls.GetDeviceID, callInfo) mock.lockGetDeviceID.Unlock() return mock.GetDeviceIDFunc() } // GetDeviceIDCalls gets all the calls that were made to GetDeviceID. // Check the length with: // // len(mockedVgpuTypeId.GetDeviceIDCalls()) func (mock *VgpuTypeId) GetDeviceIDCalls() []struct { } { var calls []struct { } mock.lockGetDeviceID.RLock() calls = mock.calls.GetDeviceID mock.lockGetDeviceID.RUnlock() return calls } // GetFrameRateLimit calls GetFrameRateLimitFunc. func (mock *VgpuTypeId) GetFrameRateLimit() (uint32, nvml.Return) { if mock.GetFrameRateLimitFunc == nil { panic("VgpuTypeId.GetFrameRateLimitFunc: method is nil but VgpuTypeId.GetFrameRateLimit was just called") } callInfo := struct { }{} mock.lockGetFrameRateLimit.Lock() mock.calls.GetFrameRateLimit = append(mock.calls.GetFrameRateLimit, callInfo) mock.lockGetFrameRateLimit.Unlock() return mock.GetFrameRateLimitFunc() } // GetFrameRateLimitCalls gets all the calls that were made to GetFrameRateLimit. // Check the length with: // // len(mockedVgpuTypeId.GetFrameRateLimitCalls()) func (mock *VgpuTypeId) GetFrameRateLimitCalls() []struct { } { var calls []struct { } mock.lockGetFrameRateLimit.RLock() calls = mock.calls.GetFrameRateLimit mock.lockGetFrameRateLimit.RUnlock() return calls } // GetFramebufferSize calls GetFramebufferSizeFunc. func (mock *VgpuTypeId) GetFramebufferSize() (uint64, nvml.Return) { if mock.GetFramebufferSizeFunc == nil { panic("VgpuTypeId.GetFramebufferSizeFunc: method is nil but VgpuTypeId.GetFramebufferSize was just called") } callInfo := struct { }{} mock.lockGetFramebufferSize.Lock() mock.calls.GetFramebufferSize = append(mock.calls.GetFramebufferSize, callInfo) mock.lockGetFramebufferSize.Unlock() return mock.GetFramebufferSizeFunc() } // GetFramebufferSizeCalls gets all the calls that were made to GetFramebufferSize. // Check the length with: // // len(mockedVgpuTypeId.GetFramebufferSizeCalls()) func (mock *VgpuTypeId) GetFramebufferSizeCalls() []struct { } { var calls []struct { } mock.lockGetFramebufferSize.RLock() calls = mock.calls.GetFramebufferSize mock.lockGetFramebufferSize.RUnlock() return calls } // GetGpuInstanceProfileId calls GetGpuInstanceProfileIdFunc. func (mock *VgpuTypeId) GetGpuInstanceProfileId() (uint32, nvml.Return) { if mock.GetGpuInstanceProfileIdFunc == nil { panic("VgpuTypeId.GetGpuInstanceProfileIdFunc: method is nil but VgpuTypeId.GetGpuInstanceProfileId was just called") } callInfo := struct { }{} mock.lockGetGpuInstanceProfileId.Lock() mock.calls.GetGpuInstanceProfileId = append(mock.calls.GetGpuInstanceProfileId, callInfo) mock.lockGetGpuInstanceProfileId.Unlock() return mock.GetGpuInstanceProfileIdFunc() } // GetGpuInstanceProfileIdCalls gets all the calls that were made to GetGpuInstanceProfileId. // Check the length with: // // len(mockedVgpuTypeId.GetGpuInstanceProfileIdCalls()) func (mock *VgpuTypeId) GetGpuInstanceProfileIdCalls() []struct { } { var calls []struct { } mock.lockGetGpuInstanceProfileId.RLock() calls = mock.calls.GetGpuInstanceProfileId mock.lockGetGpuInstanceProfileId.RUnlock() return calls } // GetLicense calls GetLicenseFunc. func (mock *VgpuTypeId) GetLicense() (string, nvml.Return) { if mock.GetLicenseFunc == nil { panic("VgpuTypeId.GetLicenseFunc: method is nil but VgpuTypeId.GetLicense was just called") } callInfo := struct { }{} mock.lockGetLicense.Lock() mock.calls.GetLicense = append(mock.calls.GetLicense, callInfo) mock.lockGetLicense.Unlock() return mock.GetLicenseFunc() } // GetLicenseCalls gets all the calls that were made to GetLicense. // Check the length with: // // len(mockedVgpuTypeId.GetLicenseCalls()) func (mock *VgpuTypeId) GetLicenseCalls() []struct { } { var calls []struct { } mock.lockGetLicense.RLock() calls = mock.calls.GetLicense mock.lockGetLicense.RUnlock() return calls } // GetMaxInstances calls GetMaxInstancesFunc. func (mock *VgpuTypeId) GetMaxInstances(device nvml.Device) (int, nvml.Return) { if mock.GetMaxInstancesFunc == nil { panic("VgpuTypeId.GetMaxInstancesFunc: method is nil but VgpuTypeId.GetMaxInstances was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGetMaxInstances.Lock() mock.calls.GetMaxInstances = append(mock.calls.GetMaxInstances, callInfo) mock.lockGetMaxInstances.Unlock() return mock.GetMaxInstancesFunc(device) } // GetMaxInstancesCalls gets all the calls that were made to GetMaxInstances. // Check the length with: // // len(mockedVgpuTypeId.GetMaxInstancesCalls()) func (mock *VgpuTypeId) GetMaxInstancesCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGetMaxInstances.RLock() calls = mock.calls.GetMaxInstances mock.lockGetMaxInstances.RUnlock() return calls } // GetMaxInstancesPerVm calls GetMaxInstancesPerVmFunc. func (mock *VgpuTypeId) GetMaxInstancesPerVm() (int, nvml.Return) { if mock.GetMaxInstancesPerVmFunc == nil { panic("VgpuTypeId.GetMaxInstancesPerVmFunc: method is nil but VgpuTypeId.GetMaxInstancesPerVm was just called") } callInfo := struct { }{} mock.lockGetMaxInstancesPerVm.Lock() mock.calls.GetMaxInstancesPerVm = append(mock.calls.GetMaxInstancesPerVm, callInfo) mock.lockGetMaxInstancesPerVm.Unlock() return mock.GetMaxInstancesPerVmFunc() } // GetMaxInstancesPerVmCalls gets all the calls that were made to GetMaxInstancesPerVm. // Check the length with: // // len(mockedVgpuTypeId.GetMaxInstancesPerVmCalls()) func (mock *VgpuTypeId) GetMaxInstancesPerVmCalls() []struct { } { var calls []struct { } mock.lockGetMaxInstancesPerVm.RLock() calls = mock.calls.GetMaxInstancesPerVm mock.lockGetMaxInstancesPerVm.RUnlock() return calls } // GetName calls GetNameFunc. func (mock *VgpuTypeId) GetName() (string, nvml.Return) { if mock.GetNameFunc == nil { panic("VgpuTypeId.GetNameFunc: method is nil but VgpuTypeId.GetName was just called") } callInfo := struct { }{} mock.lockGetName.Lock() mock.calls.GetName = append(mock.calls.GetName, callInfo) mock.lockGetName.Unlock() return mock.GetNameFunc() } // GetNameCalls gets all the calls that were made to GetName. // Check the length with: // // len(mockedVgpuTypeId.GetNameCalls()) func (mock *VgpuTypeId) GetNameCalls() []struct { } { var calls []struct { } mock.lockGetName.RLock() calls = mock.calls.GetName mock.lockGetName.RUnlock() return calls } // GetNumDisplayHeads calls GetNumDisplayHeadsFunc. func (mock *VgpuTypeId) GetNumDisplayHeads() (int, nvml.Return) { if mock.GetNumDisplayHeadsFunc == nil { panic("VgpuTypeId.GetNumDisplayHeadsFunc: method is nil but VgpuTypeId.GetNumDisplayHeads was just called") } callInfo := struct { }{} mock.lockGetNumDisplayHeads.Lock() mock.calls.GetNumDisplayHeads = append(mock.calls.GetNumDisplayHeads, callInfo) mock.lockGetNumDisplayHeads.Unlock() return mock.GetNumDisplayHeadsFunc() } // GetNumDisplayHeadsCalls gets all the calls that were made to GetNumDisplayHeads. // Check the length with: // // len(mockedVgpuTypeId.GetNumDisplayHeadsCalls()) func (mock *VgpuTypeId) GetNumDisplayHeadsCalls() []struct { } { var calls []struct { } mock.lockGetNumDisplayHeads.RLock() calls = mock.calls.GetNumDisplayHeads mock.lockGetNumDisplayHeads.RUnlock() return calls } // GetResolution calls GetResolutionFunc. func (mock *VgpuTypeId) GetResolution(n int) (uint32, uint32, nvml.Return) { if mock.GetResolutionFunc == nil { panic("VgpuTypeId.GetResolutionFunc: method is nil but VgpuTypeId.GetResolution was just called") } callInfo := struct { N int }{ N: n, } mock.lockGetResolution.Lock() mock.calls.GetResolution = append(mock.calls.GetResolution, callInfo) mock.lockGetResolution.Unlock() return mock.GetResolutionFunc(n) } // GetResolutionCalls gets all the calls that were made to GetResolution. // Check the length with: // // len(mockedVgpuTypeId.GetResolutionCalls()) func (mock *VgpuTypeId) GetResolutionCalls() []struct { N int } { var calls []struct { N int } mock.lockGetResolution.RLock() calls = mock.calls.GetResolution mock.lockGetResolution.RUnlock() return calls } // GetSupportedPlacements calls GetSupportedPlacementsFunc. func (mock *VgpuTypeId) GetSupportedPlacements(device nvml.Device) (nvml.VgpuPlacementList, nvml.Return) { if mock.GetSupportedPlacementsFunc == nil { panic("VgpuTypeId.GetSupportedPlacementsFunc: method is nil but VgpuTypeId.GetSupportedPlacements was just called") } callInfo := struct { Device nvml.Device }{ Device: device, } mock.lockGetSupportedPlacements.Lock() mock.calls.GetSupportedPlacements = append(mock.calls.GetSupportedPlacements, callInfo) mock.lockGetSupportedPlacements.Unlock() return mock.GetSupportedPlacementsFunc(device) } // GetSupportedPlacementsCalls gets all the calls that were made to GetSupportedPlacements. // Check the length with: // // len(mockedVgpuTypeId.GetSupportedPlacementsCalls()) func (mock *VgpuTypeId) GetSupportedPlacementsCalls() []struct { Device nvml.Device } { var calls []struct { Device nvml.Device } mock.lockGetSupportedPlacements.RLock() calls = mock.calls.GetSupportedPlacements mock.lockGetSupportedPlacements.RUnlock() return calls } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/nvml.go000066400000000000000000005602731520540370700260250ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // WARNING: THIS FILE WAS AUTOMATICALLY GENERATED. // Code generated by https://git.io/c-for-go. DO NOT EDIT. package nvml /* #cgo linux LDFLAGS: -Wl,--export-dynamic -Wl,--unresolved-symbols=ignore-in-object-files #cgo darwin LDFLAGS: -Wl,-undefined,dynamic_lookup #cgo CFLAGS: -DNVML_NO_UNVERSIONED_FUNC_DEFS=1 #include "nvml.h" #include #include "cgo_helpers.h" */ import "C" import "unsafe" // nvmlInit_v2 function as declared in nvml/nvml.h func nvmlInit_v2() Return { __ret := C.nvmlInit_v2() __v := (Return)(__ret) return __v } // nvmlInitWithFlags function as declared in nvml/nvml.h func nvmlInitWithFlags(Flags uint32) Return { cFlags, _ := (C.uint)(Flags), cgoAllocsUnknown __ret := C.nvmlInitWithFlags(cFlags) __v := (Return)(__ret) return __v } // nvmlShutdown function as declared in nvml/nvml.h func nvmlShutdown() Return { __ret := C.nvmlShutdown() __v := (Return)(__ret) return __v } // nvmlErrorString function as declared in nvml/nvml.h func nvmlErrorString(Result Return) string { cResult, _ := (C.nvmlReturn_t)(Result), cgoAllocsUnknown __ret := C.nvmlErrorString(cResult) __v := packPCharString(__ret) return __v } // nvmlSystemGetDriverVersion function as declared in nvml/nvml.h func nvmlSystemGetDriverVersion(Version *byte, Length uint32) Return { cVersion, _ := (*C.char)(unsafe.Pointer(Version)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlSystemGetDriverVersion(cVersion, cLength) __v := (Return)(__ret) return __v } // nvmlSystemGetNVMLVersion function as declared in nvml/nvml.h func nvmlSystemGetNVMLVersion(Version *byte, Length uint32) Return { cVersion, _ := (*C.char)(unsafe.Pointer(Version)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlSystemGetNVMLVersion(cVersion, cLength) __v := (Return)(__ret) return __v } // nvmlSystemGetCudaDriverVersion function as declared in nvml/nvml.h func nvmlSystemGetCudaDriverVersion(CudaDriverVersion *int32) Return { cCudaDriverVersion, _ := (*C.int)(unsafe.Pointer(CudaDriverVersion)), cgoAllocsUnknown __ret := C.nvmlSystemGetCudaDriverVersion(cCudaDriverVersion) __v := (Return)(__ret) return __v } // nvmlSystemGetCudaDriverVersion_v2 function as declared in nvml/nvml.h func nvmlSystemGetCudaDriverVersion_v2(CudaDriverVersion *int32) Return { cCudaDriverVersion, _ := (*C.int)(unsafe.Pointer(CudaDriverVersion)), cgoAllocsUnknown __ret := C.nvmlSystemGetCudaDriverVersion_v2(cCudaDriverVersion) __v := (Return)(__ret) return __v } // nvmlSystemGetProcessName function as declared in nvml/nvml.h func nvmlSystemGetProcessName(Pid uint32, Name *byte, Length uint32) Return { cPid, _ := (C.uint)(Pid), cgoAllocsUnknown cName, _ := (*C.char)(unsafe.Pointer(Name)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlSystemGetProcessName(cPid, cName, cLength) __v := (Return)(__ret) return __v } // nvmlSystemGetHicVersion function as declared in nvml/nvml.h func nvmlSystemGetHicVersion(HwbcCount *uint32, HwbcEntries *HwbcEntry) Return { cHwbcCount, _ := (*C.uint)(unsafe.Pointer(HwbcCount)), cgoAllocsUnknown cHwbcEntries, _ := (*C.nvmlHwbcEntry_t)(unsafe.Pointer(HwbcEntries)), cgoAllocsUnknown __ret := C.nvmlSystemGetHicVersion(cHwbcCount, cHwbcEntries) __v := (Return)(__ret) return __v } // nvmlSystemGetTopologyGpuSet function as declared in nvml/nvml.h func nvmlSystemGetTopologyGpuSet(CpuNumber uint32, Count *uint32, DeviceArray *nvmlDevice) Return { cCpuNumber, _ := (C.uint)(CpuNumber), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown cDeviceArray, _ := (*C.nvmlDevice_t)(unsafe.Pointer(DeviceArray)), cgoAllocsUnknown __ret := C.nvmlSystemGetTopologyGpuSet(cCpuNumber, cCount, cDeviceArray) __v := (Return)(__ret) return __v } // nvmlSystemGetDriverBranch function as declared in nvml/nvml.h func nvmlSystemGetDriverBranch(BranchInfo *SystemDriverBranchInfo, Length uint32) Return { cBranchInfo, _ := (*C.nvmlSystemDriverBranchInfo_t)(unsafe.Pointer(BranchInfo)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlSystemGetDriverBranch(cBranchInfo, cLength) __v := (Return)(__ret) return __v } // nvmlUnitGetCount function as declared in nvml/nvml.h func nvmlUnitGetCount(UnitCount *uint32) Return { cUnitCount, _ := (*C.uint)(unsafe.Pointer(UnitCount)), cgoAllocsUnknown __ret := C.nvmlUnitGetCount(cUnitCount) __v := (Return)(__ret) return __v } // nvmlUnitGetHandleByIndex function as declared in nvml/nvml.h func nvmlUnitGetHandleByIndex(Index uint32, nvmlUnit *nvmlUnit) Return { cIndex, _ := (C.uint)(Index), cgoAllocsUnknown cnvmlUnit, _ := (*C.nvmlUnit_t)(unsafe.Pointer(nvmlUnit)), cgoAllocsUnknown __ret := C.nvmlUnitGetHandleByIndex(cIndex, cnvmlUnit) __v := (Return)(__ret) return __v } // nvmlUnitGetUnitInfo function as declared in nvml/nvml.h func nvmlUnitGetUnitInfo(nvmlUnit nvmlUnit, Info *UnitInfo) Return { cnvmlUnit, _ := *(*C.nvmlUnit_t)(unsafe.Pointer(&nvmlUnit)), cgoAllocsUnknown cInfo, _ := (*C.nvmlUnitInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlUnitGetUnitInfo(cnvmlUnit, cInfo) __v := (Return)(__ret) return __v } // nvmlUnitGetLedState function as declared in nvml/nvml.h func nvmlUnitGetLedState(nvmlUnit nvmlUnit, State *LedState) Return { cnvmlUnit, _ := *(*C.nvmlUnit_t)(unsafe.Pointer(&nvmlUnit)), cgoAllocsUnknown cState, _ := (*C.nvmlLedState_t)(unsafe.Pointer(State)), cgoAllocsUnknown __ret := C.nvmlUnitGetLedState(cnvmlUnit, cState) __v := (Return)(__ret) return __v } // nvmlUnitGetPsuInfo function as declared in nvml/nvml.h func nvmlUnitGetPsuInfo(nvmlUnit nvmlUnit, Psu *PSUInfo) Return { cnvmlUnit, _ := *(*C.nvmlUnit_t)(unsafe.Pointer(&nvmlUnit)), cgoAllocsUnknown cPsu, _ := (*C.nvmlPSUInfo_t)(unsafe.Pointer(Psu)), cgoAllocsUnknown __ret := C.nvmlUnitGetPsuInfo(cnvmlUnit, cPsu) __v := (Return)(__ret) return __v } // nvmlUnitGetTemperature function as declared in nvml/nvml.h func nvmlUnitGetTemperature(nvmlUnit nvmlUnit, _type uint32, Temp *uint32) Return { cnvmlUnit, _ := *(*C.nvmlUnit_t)(unsafe.Pointer(&nvmlUnit)), cgoAllocsUnknown c_type, _ := (C.uint)(_type), cgoAllocsUnknown cTemp, _ := (*C.uint)(unsafe.Pointer(Temp)), cgoAllocsUnknown __ret := C.nvmlUnitGetTemperature(cnvmlUnit, c_type, cTemp) __v := (Return)(__ret) return __v } // nvmlUnitGetFanSpeedInfo function as declared in nvml/nvml.h func nvmlUnitGetFanSpeedInfo(nvmlUnit nvmlUnit, FanSpeeds *UnitFanSpeeds) Return { cnvmlUnit, _ := *(*C.nvmlUnit_t)(unsafe.Pointer(&nvmlUnit)), cgoAllocsUnknown cFanSpeeds, _ := (*C.nvmlUnitFanSpeeds_t)(unsafe.Pointer(FanSpeeds)), cgoAllocsUnknown __ret := C.nvmlUnitGetFanSpeedInfo(cnvmlUnit, cFanSpeeds) __v := (Return)(__ret) return __v } // nvmlUnitGetDevices function as declared in nvml/nvml.h func nvmlUnitGetDevices(nvmlUnit nvmlUnit, DeviceCount *uint32, Devices *nvmlDevice) Return { cnvmlUnit, _ := *(*C.nvmlUnit_t)(unsafe.Pointer(&nvmlUnit)), cgoAllocsUnknown cDeviceCount, _ := (*C.uint)(unsafe.Pointer(DeviceCount)), cgoAllocsUnknown cDevices, _ := (*C.nvmlDevice_t)(unsafe.Pointer(Devices)), cgoAllocsUnknown __ret := C.nvmlUnitGetDevices(cnvmlUnit, cDeviceCount, cDevices) __v := (Return)(__ret) return __v } // nvmlDeviceGetCount_v2 function as declared in nvml/nvml.h func nvmlDeviceGetCount_v2(DeviceCount *uint32) Return { cDeviceCount, _ := (*C.uint)(unsafe.Pointer(DeviceCount)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCount_v2(cDeviceCount) __v := (Return)(__ret) return __v } // nvmlDeviceGetAttributes_v2 function as declared in nvml/nvml.h func nvmlDeviceGetAttributes_v2(nvmlDevice nvmlDevice, Attributes *DeviceAttributes) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cAttributes, _ := (*C.nvmlDeviceAttributes_t)(unsafe.Pointer(Attributes)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAttributes_v2(cnvmlDevice, cAttributes) __v := (Return)(__ret) return __v } // nvmlDeviceGetHandleByIndex_v2 function as declared in nvml/nvml.h func nvmlDeviceGetHandleByIndex_v2(Index uint32, nvmlDevice *nvmlDevice) Return { cIndex, _ := (C.uint)(Index), cgoAllocsUnknown cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHandleByIndex_v2(cIndex, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetHandleBySerial function as declared in nvml/nvml.h func nvmlDeviceGetHandleBySerial(Serial string, nvmlDevice *nvmlDevice) Return { cSerial, _ := unpackPCharString(Serial) cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHandleBySerial(cSerial, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetHandleByUUID function as declared in nvml/nvml.h func nvmlDeviceGetHandleByUUID(Uuid string, nvmlDevice *nvmlDevice) Return { cUuid, _ := unpackPCharString(Uuid) cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHandleByUUID(cUuid, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetHandleByUUIDV function as declared in nvml/nvml.h func nvmlDeviceGetHandleByUUIDV(Uuid *UUID, nvmlDevice *nvmlDevice) Return { cUuid, _ := (*C.nvmlUUID_t)(unsafe.Pointer(Uuid)), cgoAllocsUnknown cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHandleByUUIDV(cUuid, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetHandleByPciBusId_v2 function as declared in nvml/nvml.h func nvmlDeviceGetHandleByPciBusId_v2(PciBusId string, nvmlDevice *nvmlDevice) Return { cPciBusId, _ := unpackPCharString(PciBusId) cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHandleByPciBusId_v2(cPciBusId, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetName function as declared in nvml/nvml.h func nvmlDeviceGetName(nvmlDevice nvmlDevice, Name *byte, Length uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cName, _ := (*C.char)(unsafe.Pointer(Name)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlDeviceGetName(cnvmlDevice, cName, cLength) __v := (Return)(__ret) return __v } // nvmlDeviceGetBrand function as declared in nvml/nvml.h func nvmlDeviceGetBrand(nvmlDevice nvmlDevice, _type *BrandType) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown c_type, _ := (*C.nvmlBrandType_t)(unsafe.Pointer(_type)), cgoAllocsUnknown __ret := C.nvmlDeviceGetBrand(cnvmlDevice, c_type) __v := (Return)(__ret) return __v } // nvmlDeviceGetIndex function as declared in nvml/nvml.h func nvmlDeviceGetIndex(nvmlDevice nvmlDevice, Index *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIndex, _ := (*C.uint)(unsafe.Pointer(Index)), cgoAllocsUnknown __ret := C.nvmlDeviceGetIndex(cnvmlDevice, cIndex) __v := (Return)(__ret) return __v } // nvmlDeviceGetSerial function as declared in nvml/nvml.h func nvmlDeviceGetSerial(nvmlDevice nvmlDevice, Serial *byte, Length uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSerial, _ := (*C.char)(unsafe.Pointer(Serial)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlDeviceGetSerial(cnvmlDevice, cSerial, cLength) __v := (Return)(__ret) return __v } // nvmlDeviceGetModuleId function as declared in nvml/nvml.h func nvmlDeviceGetModuleId(nvmlDevice nvmlDevice, ModuleId *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cModuleId, _ := (*C.uint)(unsafe.Pointer(ModuleId)), cgoAllocsUnknown __ret := C.nvmlDeviceGetModuleId(cnvmlDevice, cModuleId) __v := (Return)(__ret) return __v } // nvmlDeviceGetC2cModeInfoV function as declared in nvml/nvml.h func nvmlDeviceGetC2cModeInfoV(nvmlDevice nvmlDevice, C2cModeInfo *C2cModeInfo_v1) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cC2cModeInfo, _ := (*C.nvmlC2cModeInfo_v1_t)(unsafe.Pointer(C2cModeInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetC2cModeInfoV(cnvmlDevice, cC2cModeInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetMemoryAffinity function as declared in nvml/nvml.h func nvmlDeviceGetMemoryAffinity(nvmlDevice nvmlDevice, NodeSetSize uint32, NodeSet *uint, Scope AffinityScope) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cNodeSetSize, _ := (C.uint)(NodeSetSize), cgoAllocsUnknown cNodeSet, _ := (*C.ulong)(unsafe.Pointer(NodeSet)), cgoAllocsUnknown cScope, _ := (C.nvmlAffinityScope_t)(Scope), cgoAllocsUnknown __ret := C.nvmlDeviceGetMemoryAffinity(cnvmlDevice, cNodeSetSize, cNodeSet, cScope) __v := (Return)(__ret) return __v } // nvmlDeviceGetCpuAffinityWithinScope function as declared in nvml/nvml.h func nvmlDeviceGetCpuAffinityWithinScope(nvmlDevice nvmlDevice, CpuSetSize uint32, CpuSet *uint, Scope AffinityScope) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCpuSetSize, _ := (C.uint)(CpuSetSize), cgoAllocsUnknown cCpuSet, _ := (*C.ulong)(unsafe.Pointer(CpuSet)), cgoAllocsUnknown cScope, _ := (C.nvmlAffinityScope_t)(Scope), cgoAllocsUnknown __ret := C.nvmlDeviceGetCpuAffinityWithinScope(cnvmlDevice, cCpuSetSize, cCpuSet, cScope) __v := (Return)(__ret) return __v } // nvmlDeviceGetCpuAffinity function as declared in nvml/nvml.h func nvmlDeviceGetCpuAffinity(nvmlDevice nvmlDevice, CpuSetSize uint32, CpuSet *uint) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCpuSetSize, _ := (C.uint)(CpuSetSize), cgoAllocsUnknown cCpuSet, _ := (*C.ulong)(unsafe.Pointer(CpuSet)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCpuAffinity(cnvmlDevice, cCpuSetSize, cCpuSet) __v := (Return)(__ret) return __v } // nvmlDeviceSetCpuAffinity function as declared in nvml/nvml.h func nvmlDeviceSetCpuAffinity(nvmlDevice nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceSetCpuAffinity(cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceClearCpuAffinity function as declared in nvml/nvml.h func nvmlDeviceClearCpuAffinity(nvmlDevice nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceClearCpuAffinity(cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetNumaNodeId function as declared in nvml/nvml.h func nvmlDeviceGetNumaNodeId(nvmlDevice nvmlDevice, Node *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cNode, _ := (*C.uint)(unsafe.Pointer(Node)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNumaNodeId(cnvmlDevice, cNode) __v := (Return)(__ret) return __v } // nvmlDeviceGetAddressingMode function as declared in nvml/nvml.h func nvmlDeviceGetAddressingMode(nvmlDevice nvmlDevice, Mode *DeviceAddressingMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (*C.nvmlDeviceAddressingMode_t)(unsafe.Pointer(Mode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAddressingMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetRepairStatus function as declared in nvml/nvml.h func nvmlDeviceGetRepairStatus(nvmlDevice nvmlDevice, RepairStatus *RepairStatus) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cRepairStatus, _ := (*C.nvmlRepairStatus_t)(unsafe.Pointer(RepairStatus)), cgoAllocsUnknown __ret := C.nvmlDeviceGetRepairStatus(cnvmlDevice, cRepairStatus) __v := (Return)(__ret) return __v } // nvmlDeviceGetTopologyCommonAncestor function as declared in nvml/nvml.h func nvmlDeviceGetTopologyCommonAncestor(Device1 nvmlDevice, Device2 nvmlDevice, PathInfo *GpuTopologyLevel) Return { cDevice1, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&Device1)), cgoAllocsUnknown cDevice2, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&Device2)), cgoAllocsUnknown cPathInfo, _ := (*C.nvmlGpuTopologyLevel_t)(unsafe.Pointer(PathInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTopologyCommonAncestor(cDevice1, cDevice2, cPathInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetTopologyNearestGpus function as declared in nvml/nvml.h func nvmlDeviceGetTopologyNearestGpus(nvmlDevice nvmlDevice, Level GpuTopologyLevel, Count *uint32, DeviceArray *nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLevel, _ := (C.nvmlGpuTopologyLevel_t)(Level), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown cDeviceArray, _ := (*C.nvmlDevice_t)(unsafe.Pointer(DeviceArray)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTopologyNearestGpus(cnvmlDevice, cLevel, cCount, cDeviceArray) __v := (Return)(__ret) return __v } // nvmlDeviceGetP2PStatus function as declared in nvml/nvml.h func nvmlDeviceGetP2PStatus(Device1 nvmlDevice, Device2 nvmlDevice, P2pIndex GpuP2PCapsIndex, P2pStatus *GpuP2PStatus) Return { cDevice1, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&Device1)), cgoAllocsUnknown cDevice2, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&Device2)), cgoAllocsUnknown cP2pIndex, _ := (C.nvmlGpuP2PCapsIndex_t)(P2pIndex), cgoAllocsUnknown cP2pStatus, _ := (*C.nvmlGpuP2PStatus_t)(unsafe.Pointer(P2pStatus)), cgoAllocsUnknown __ret := C.nvmlDeviceGetP2PStatus(cDevice1, cDevice2, cP2pIndex, cP2pStatus) __v := (Return)(__ret) return __v } // nvmlDeviceGetUUID function as declared in nvml/nvml.h func nvmlDeviceGetUUID(nvmlDevice nvmlDevice, Uuid *byte, Length uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cUuid, _ := (*C.char)(unsafe.Pointer(Uuid)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlDeviceGetUUID(cnvmlDevice, cUuid, cLength) __v := (Return)(__ret) return __v } // nvmlDeviceGetMinorNumber function as declared in nvml/nvml.h func nvmlDeviceGetMinorNumber(nvmlDevice nvmlDevice, MinorNumber *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMinorNumber, _ := (*C.uint)(unsafe.Pointer(MinorNumber)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMinorNumber(cnvmlDevice, cMinorNumber) __v := (Return)(__ret) return __v } // nvmlDeviceGetBoardPartNumber function as declared in nvml/nvml.h func nvmlDeviceGetBoardPartNumber(nvmlDevice nvmlDevice, PartNumber *byte, Length uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPartNumber, _ := (*C.char)(unsafe.Pointer(PartNumber)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlDeviceGetBoardPartNumber(cnvmlDevice, cPartNumber, cLength) __v := (Return)(__ret) return __v } // nvmlDeviceGetInforomVersion function as declared in nvml/nvml.h func nvmlDeviceGetInforomVersion(nvmlDevice nvmlDevice, Object InforomObject, Version *byte, Length uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cObject, _ := (C.nvmlInforomObject_t)(Object), cgoAllocsUnknown cVersion, _ := (*C.char)(unsafe.Pointer(Version)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlDeviceGetInforomVersion(cnvmlDevice, cObject, cVersion, cLength) __v := (Return)(__ret) return __v } // nvmlDeviceGetInforomImageVersion function as declared in nvml/nvml.h func nvmlDeviceGetInforomImageVersion(nvmlDevice nvmlDevice, Version *byte, Length uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVersion, _ := (*C.char)(unsafe.Pointer(Version)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlDeviceGetInforomImageVersion(cnvmlDevice, cVersion, cLength) __v := (Return)(__ret) return __v } // nvmlDeviceGetInforomConfigurationChecksum function as declared in nvml/nvml.h func nvmlDeviceGetInforomConfigurationChecksum(nvmlDevice nvmlDevice, Checksum *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cChecksum, _ := (*C.uint)(unsafe.Pointer(Checksum)), cgoAllocsUnknown __ret := C.nvmlDeviceGetInforomConfigurationChecksum(cnvmlDevice, cChecksum) __v := (Return)(__ret) return __v } // nvmlDeviceValidateInforom function as declared in nvml/nvml.h func nvmlDeviceValidateInforom(nvmlDevice nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceValidateInforom(cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetLastBBXFlushTime function as declared in nvml/nvml.h func nvmlDeviceGetLastBBXFlushTime(nvmlDevice nvmlDevice, Timestamp *uint64, DurationUs *uint) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cTimestamp, _ := (*C.ulonglong)(unsafe.Pointer(Timestamp)), cgoAllocsUnknown cDurationUs, _ := (*C.ulong)(unsafe.Pointer(DurationUs)), cgoAllocsUnknown __ret := C.nvmlDeviceGetLastBBXFlushTime(cnvmlDevice, cTimestamp, cDurationUs) __v := (Return)(__ret) return __v } // nvmlDeviceGetDisplayMode function as declared in nvml/nvml.h func nvmlDeviceGetDisplayMode(nvmlDevice nvmlDevice, Display *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cDisplay, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(Display)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDisplayMode(cnvmlDevice, cDisplay) __v := (Return)(__ret) return __v } // nvmlDeviceGetDisplayActive function as declared in nvml/nvml.h func nvmlDeviceGetDisplayActive(nvmlDevice nvmlDevice, IsActive *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIsActive, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(IsActive)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDisplayActive(cnvmlDevice, cIsActive) __v := (Return)(__ret) return __v } // nvmlDeviceGetPersistenceMode function as declared in nvml/nvml.h func nvmlDeviceGetPersistenceMode(nvmlDevice nvmlDevice, Mode *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(Mode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPersistenceMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetPciInfoExt function as declared in nvml/nvml.h func nvmlDeviceGetPciInfoExt(nvmlDevice nvmlDevice, Pci *PciInfoExt) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPci, _ := (*C.nvmlPciInfoExt_t)(unsafe.Pointer(Pci)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPciInfoExt(cnvmlDevice, cPci) __v := (Return)(__ret) return __v } // nvmlDeviceGetPciInfo_v3 function as declared in nvml/nvml.h func nvmlDeviceGetPciInfo_v3(nvmlDevice nvmlDevice, Pci *PciInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPci, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(Pci)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPciInfo_v3(cnvmlDevice, cPci) __v := (Return)(__ret) return __v } // nvmlDeviceGetMaxPcieLinkGeneration function as declared in nvml/nvml.h func nvmlDeviceGetMaxPcieLinkGeneration(nvmlDevice nvmlDevice, MaxLinkGen *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMaxLinkGen, _ := (*C.uint)(unsafe.Pointer(MaxLinkGen)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMaxPcieLinkGeneration(cnvmlDevice, cMaxLinkGen) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuMaxPcieLinkGeneration function as declared in nvml/nvml.h func nvmlDeviceGetGpuMaxPcieLinkGeneration(nvmlDevice nvmlDevice, MaxLinkGenDevice *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMaxLinkGenDevice, _ := (*C.uint)(unsafe.Pointer(MaxLinkGenDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuMaxPcieLinkGeneration(cnvmlDevice, cMaxLinkGenDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetMaxPcieLinkWidth function as declared in nvml/nvml.h func nvmlDeviceGetMaxPcieLinkWidth(nvmlDevice nvmlDevice, MaxLinkWidth *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMaxLinkWidth, _ := (*C.uint)(unsafe.Pointer(MaxLinkWidth)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMaxPcieLinkWidth(cnvmlDevice, cMaxLinkWidth) __v := (Return)(__ret) return __v } // nvmlDeviceGetCurrPcieLinkGeneration function as declared in nvml/nvml.h func nvmlDeviceGetCurrPcieLinkGeneration(nvmlDevice nvmlDevice, CurrLinkGen *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrLinkGen, _ := (*C.uint)(unsafe.Pointer(CurrLinkGen)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCurrPcieLinkGeneration(cnvmlDevice, cCurrLinkGen) __v := (Return)(__ret) return __v } // nvmlDeviceGetCurrPcieLinkWidth function as declared in nvml/nvml.h func nvmlDeviceGetCurrPcieLinkWidth(nvmlDevice nvmlDevice, CurrLinkWidth *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrLinkWidth, _ := (*C.uint)(unsafe.Pointer(CurrLinkWidth)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCurrPcieLinkWidth(cnvmlDevice, cCurrLinkWidth) __v := (Return)(__ret) return __v } // nvmlDeviceGetPcieThroughput function as declared in nvml/nvml.h func nvmlDeviceGetPcieThroughput(nvmlDevice nvmlDevice, Counter PcieUtilCounter, Value *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCounter, _ := (C.nvmlPcieUtilCounter_t)(Counter), cgoAllocsUnknown cValue, _ := (*C.uint)(unsafe.Pointer(Value)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPcieThroughput(cnvmlDevice, cCounter, cValue) __v := (Return)(__ret) return __v } // nvmlDeviceGetPcieReplayCounter function as declared in nvml/nvml.h func nvmlDeviceGetPcieReplayCounter(nvmlDevice nvmlDevice, Value *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cValue, _ := (*C.uint)(unsafe.Pointer(Value)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPcieReplayCounter(cnvmlDevice, cValue) __v := (Return)(__ret) return __v } // nvmlDeviceGetClockInfo function as declared in nvml/nvml.h func nvmlDeviceGetClockInfo(nvmlDevice nvmlDevice, _type ClockType, Clock *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown c_type, _ := (C.nvmlClockType_t)(_type), cgoAllocsUnknown cClock, _ := (*C.uint)(unsafe.Pointer(Clock)), cgoAllocsUnknown __ret := C.nvmlDeviceGetClockInfo(cnvmlDevice, c_type, cClock) __v := (Return)(__ret) return __v } // nvmlDeviceGetMaxClockInfo function as declared in nvml/nvml.h func nvmlDeviceGetMaxClockInfo(nvmlDevice nvmlDevice, _type ClockType, Clock *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown c_type, _ := (C.nvmlClockType_t)(_type), cgoAllocsUnknown cClock, _ := (*C.uint)(unsafe.Pointer(Clock)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMaxClockInfo(cnvmlDevice, c_type, cClock) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpcClkVfOffset function as declared in nvml/nvml.h func nvmlDeviceGetGpcClkVfOffset(nvmlDevice nvmlDevice, Offset *int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cOffset, _ := (*C.int)(unsafe.Pointer(Offset)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpcClkVfOffset(cnvmlDevice, cOffset) __v := (Return)(__ret) return __v } // nvmlDeviceGetApplicationsClock function as declared in nvml/nvml.h func nvmlDeviceGetApplicationsClock(nvmlDevice nvmlDevice, ClockType ClockType, ClockMHz *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cClockType, _ := (C.nvmlClockType_t)(ClockType), cgoAllocsUnknown cClockMHz, _ := (*C.uint)(unsafe.Pointer(ClockMHz)), cgoAllocsUnknown __ret := C.nvmlDeviceGetApplicationsClock(cnvmlDevice, cClockType, cClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceGetDefaultApplicationsClock function as declared in nvml/nvml.h func nvmlDeviceGetDefaultApplicationsClock(nvmlDevice nvmlDevice, ClockType ClockType, ClockMHz *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cClockType, _ := (C.nvmlClockType_t)(ClockType), cgoAllocsUnknown cClockMHz, _ := (*C.uint)(unsafe.Pointer(ClockMHz)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDefaultApplicationsClock(cnvmlDevice, cClockType, cClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceGetClock function as declared in nvml/nvml.h func nvmlDeviceGetClock(nvmlDevice nvmlDevice, ClockType ClockType, ClockId ClockId, ClockMHz *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cClockType, _ := (C.nvmlClockType_t)(ClockType), cgoAllocsUnknown cClockId, _ := (C.nvmlClockId_t)(ClockId), cgoAllocsUnknown cClockMHz, _ := (*C.uint)(unsafe.Pointer(ClockMHz)), cgoAllocsUnknown __ret := C.nvmlDeviceGetClock(cnvmlDevice, cClockType, cClockId, cClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceGetMaxCustomerBoostClock function as declared in nvml/nvml.h func nvmlDeviceGetMaxCustomerBoostClock(nvmlDevice nvmlDevice, ClockType ClockType, ClockMHz *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cClockType, _ := (C.nvmlClockType_t)(ClockType), cgoAllocsUnknown cClockMHz, _ := (*C.uint)(unsafe.Pointer(ClockMHz)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMaxCustomerBoostClock(cnvmlDevice, cClockType, cClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceGetSupportedMemoryClocks function as declared in nvml/nvml.h func nvmlDeviceGetSupportedMemoryClocks(nvmlDevice nvmlDevice, Count *uint32, ClocksMHz *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown cClocksMHz, _ := (*C.uint)(unsafe.Pointer(ClocksMHz)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSupportedMemoryClocks(cnvmlDevice, cCount, cClocksMHz) __v := (Return)(__ret) return __v } // nvmlDeviceGetSupportedGraphicsClocks function as declared in nvml/nvml.h func nvmlDeviceGetSupportedGraphicsClocks(nvmlDevice nvmlDevice, MemoryClockMHz uint32, Count *uint32, ClocksMHz *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMemoryClockMHz, _ := (C.uint)(MemoryClockMHz), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown cClocksMHz, _ := (*C.uint)(unsafe.Pointer(ClocksMHz)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSupportedGraphicsClocks(cnvmlDevice, cMemoryClockMHz, cCount, cClocksMHz) __v := (Return)(__ret) return __v } // nvmlDeviceGetAutoBoostedClocksEnabled function as declared in nvml/nvml.h func nvmlDeviceGetAutoBoostedClocksEnabled(nvmlDevice nvmlDevice, IsEnabled *EnableState, DefaultIsEnabled *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIsEnabled, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(IsEnabled)), cgoAllocsUnknown cDefaultIsEnabled, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(DefaultIsEnabled)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAutoBoostedClocksEnabled(cnvmlDevice, cIsEnabled, cDefaultIsEnabled) __v := (Return)(__ret) return __v } // nvmlDeviceGetFanSpeed function as declared in nvml/nvml.h func nvmlDeviceGetFanSpeed(nvmlDevice nvmlDevice, Speed *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSpeed, _ := (*C.uint)(unsafe.Pointer(Speed)), cgoAllocsUnknown __ret := C.nvmlDeviceGetFanSpeed(cnvmlDevice, cSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceGetFanSpeed_v2 function as declared in nvml/nvml.h func nvmlDeviceGetFanSpeed_v2(nvmlDevice nvmlDevice, Fan uint32, Speed *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFan, _ := (C.uint)(Fan), cgoAllocsUnknown cSpeed, _ := (*C.uint)(unsafe.Pointer(Speed)), cgoAllocsUnknown __ret := C.nvmlDeviceGetFanSpeed_v2(cnvmlDevice, cFan, cSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceGetFanSpeedRPM function as declared in nvml/nvml.h func nvmlDeviceGetFanSpeedRPM(nvmlDevice nvmlDevice, FanSpeed *FanSpeedInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFanSpeed, _ := (*C.nvmlFanSpeedInfo_t)(unsafe.Pointer(FanSpeed)), cgoAllocsUnknown __ret := C.nvmlDeviceGetFanSpeedRPM(cnvmlDevice, cFanSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceGetTargetFanSpeed function as declared in nvml/nvml.h func nvmlDeviceGetTargetFanSpeed(nvmlDevice nvmlDevice, Fan uint32, TargetSpeed *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFan, _ := (C.uint)(Fan), cgoAllocsUnknown cTargetSpeed, _ := (*C.uint)(unsafe.Pointer(TargetSpeed)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTargetFanSpeed(cnvmlDevice, cFan, cTargetSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceGetMinMaxFanSpeed function as declared in nvml/nvml.h func nvmlDeviceGetMinMaxFanSpeed(nvmlDevice nvmlDevice, MinSpeed *uint32, MaxSpeed *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMinSpeed, _ := (*C.uint)(unsafe.Pointer(MinSpeed)), cgoAllocsUnknown cMaxSpeed, _ := (*C.uint)(unsafe.Pointer(MaxSpeed)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMinMaxFanSpeed(cnvmlDevice, cMinSpeed, cMaxSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceGetFanControlPolicy_v2 function as declared in nvml/nvml.h func nvmlDeviceGetFanControlPolicy_v2(nvmlDevice nvmlDevice, Fan uint32, Policy *FanControlPolicy) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFan, _ := (C.uint)(Fan), cgoAllocsUnknown cPolicy, _ := (*C.nvmlFanControlPolicy_t)(unsafe.Pointer(Policy)), cgoAllocsUnknown __ret := C.nvmlDeviceGetFanControlPolicy_v2(cnvmlDevice, cFan, cPolicy) __v := (Return)(__ret) return __v } // nvmlDeviceGetNumFans function as declared in nvml/nvml.h func nvmlDeviceGetNumFans(nvmlDevice nvmlDevice, NumFans *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cNumFans, _ := (*C.uint)(unsafe.Pointer(NumFans)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNumFans(cnvmlDevice, cNumFans) __v := (Return)(__ret) return __v } // nvmlDeviceGetTemperature function as declared in nvml/nvml.h func nvmlDeviceGetTemperature(nvmlDevice nvmlDevice, SensorType TemperatureSensors, Temp *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSensorType, _ := (C.nvmlTemperatureSensors_t)(SensorType), cgoAllocsUnknown cTemp, _ := (*C.uint)(unsafe.Pointer(Temp)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTemperature(cnvmlDevice, cSensorType, cTemp) __v := (Return)(__ret) return __v } // nvmlDeviceGetCoolerInfo function as declared in nvml/nvml.h func nvmlDeviceGetCoolerInfo(nvmlDevice nvmlDevice, CoolerInfo *CoolerInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCoolerInfo, _ := (*C.nvmlCoolerInfo_t)(unsafe.Pointer(CoolerInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCoolerInfo(cnvmlDevice, cCoolerInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetTemperatureV function as declared in nvml/nvml.h func nvmlDeviceGetTemperatureV(nvmlDevice nvmlDevice, Temperature *Temperature) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cTemperature, _ := (*C.nvmlTemperature_t)(unsafe.Pointer(Temperature)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTemperatureV(cnvmlDevice, cTemperature) __v := (Return)(__ret) return __v } // nvmlDeviceGetTemperatureThreshold function as declared in nvml/nvml.h func nvmlDeviceGetTemperatureThreshold(nvmlDevice nvmlDevice, ThresholdType TemperatureThresholds, Temp *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cThresholdType, _ := (C.nvmlTemperatureThresholds_t)(ThresholdType), cgoAllocsUnknown cTemp, _ := (*C.uint)(unsafe.Pointer(Temp)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTemperatureThreshold(cnvmlDevice, cThresholdType, cTemp) __v := (Return)(__ret) return __v } // nvmlDeviceGetMarginTemperature function as declared in nvml/nvml.h func nvmlDeviceGetMarginTemperature(nvmlDevice nvmlDevice, MarginTempInfo *MarginTemperature) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMarginTempInfo, _ := (*C.nvmlMarginTemperature_t)(unsafe.Pointer(MarginTempInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMarginTemperature(cnvmlDevice, cMarginTempInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetThermalSettings function as declared in nvml/nvml.h func nvmlDeviceGetThermalSettings(nvmlDevice nvmlDevice, SensorIndex uint32, PThermalSettings *GpuThermalSettings) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSensorIndex, _ := (C.uint)(SensorIndex), cgoAllocsUnknown cPThermalSettings, _ := (*C.nvmlGpuThermalSettings_t)(unsafe.Pointer(PThermalSettings)), cgoAllocsUnknown __ret := C.nvmlDeviceGetThermalSettings(cnvmlDevice, cSensorIndex, cPThermalSettings) __v := (Return)(__ret) return __v } // nvmlDeviceGetPerformanceState function as declared in nvml/nvml.h func nvmlDeviceGetPerformanceState(nvmlDevice nvmlDevice, PState *Pstates) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPState, _ := (*C.nvmlPstates_t)(unsafe.Pointer(PState)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPerformanceState(cnvmlDevice, cPState) __v := (Return)(__ret) return __v } // nvmlDeviceGetCurrentClocksEventReasons function as declared in nvml/nvml.h func nvmlDeviceGetCurrentClocksEventReasons(nvmlDevice nvmlDevice, ClocksEventReasons *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cClocksEventReasons, _ := (*C.ulonglong)(unsafe.Pointer(ClocksEventReasons)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCurrentClocksEventReasons(cnvmlDevice, cClocksEventReasons) __v := (Return)(__ret) return __v } // nvmlDeviceGetCurrentClocksThrottleReasons function as declared in nvml/nvml.h func nvmlDeviceGetCurrentClocksThrottleReasons(nvmlDevice nvmlDevice, ClocksThrottleReasons *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cClocksThrottleReasons, _ := (*C.ulonglong)(unsafe.Pointer(ClocksThrottleReasons)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCurrentClocksThrottleReasons(cnvmlDevice, cClocksThrottleReasons) __v := (Return)(__ret) return __v } // nvmlDeviceGetSupportedClocksEventReasons function as declared in nvml/nvml.h func nvmlDeviceGetSupportedClocksEventReasons(nvmlDevice nvmlDevice, SupportedClocksEventReasons *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSupportedClocksEventReasons, _ := (*C.ulonglong)(unsafe.Pointer(SupportedClocksEventReasons)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSupportedClocksEventReasons(cnvmlDevice, cSupportedClocksEventReasons) __v := (Return)(__ret) return __v } // nvmlDeviceGetSupportedClocksThrottleReasons function as declared in nvml/nvml.h func nvmlDeviceGetSupportedClocksThrottleReasons(nvmlDevice nvmlDevice, SupportedClocksThrottleReasons *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSupportedClocksThrottleReasons, _ := (*C.ulonglong)(unsafe.Pointer(SupportedClocksThrottleReasons)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSupportedClocksThrottleReasons(cnvmlDevice, cSupportedClocksThrottleReasons) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerState function as declared in nvml/nvml.h func nvmlDeviceGetPowerState(nvmlDevice nvmlDevice, PState *Pstates) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPState, _ := (*C.nvmlPstates_t)(unsafe.Pointer(PState)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerState(cnvmlDevice, cPState) __v := (Return)(__ret) return __v } // nvmlDeviceGetDynamicPstatesInfo function as declared in nvml/nvml.h func nvmlDeviceGetDynamicPstatesInfo(nvmlDevice nvmlDevice, PDynamicPstatesInfo *GpuDynamicPstatesInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPDynamicPstatesInfo, _ := (*C.nvmlGpuDynamicPstatesInfo_t)(unsafe.Pointer(PDynamicPstatesInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDynamicPstatesInfo(cnvmlDevice, cPDynamicPstatesInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetMemClkVfOffset function as declared in nvml/nvml.h func nvmlDeviceGetMemClkVfOffset(nvmlDevice nvmlDevice, Offset *int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cOffset, _ := (*C.int)(unsafe.Pointer(Offset)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMemClkVfOffset(cnvmlDevice, cOffset) __v := (Return)(__ret) return __v } // nvmlDeviceGetMinMaxClockOfPState function as declared in nvml/nvml.h func nvmlDeviceGetMinMaxClockOfPState(nvmlDevice nvmlDevice, _type ClockType, Pstate Pstates, MinClockMHz *uint32, MaxClockMHz *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown c_type, _ := (C.nvmlClockType_t)(_type), cgoAllocsUnknown cPstate, _ := (C.nvmlPstates_t)(Pstate), cgoAllocsUnknown cMinClockMHz, _ := (*C.uint)(unsafe.Pointer(MinClockMHz)), cgoAllocsUnknown cMaxClockMHz, _ := (*C.uint)(unsafe.Pointer(MaxClockMHz)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMinMaxClockOfPState(cnvmlDevice, c_type, cPstate, cMinClockMHz, cMaxClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceGetSupportedPerformanceStates function as declared in nvml/nvml.h func nvmlDeviceGetSupportedPerformanceStates(nvmlDevice nvmlDevice, Pstates *Pstates, Size uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPstates, _ := (*C.nvmlPstates_t)(unsafe.Pointer(Pstates)), cgoAllocsUnknown cSize, _ := (C.uint)(Size), cgoAllocsUnknown __ret := C.nvmlDeviceGetSupportedPerformanceStates(cnvmlDevice, cPstates, cSize) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpcClkMinMaxVfOffset function as declared in nvml/nvml.h func nvmlDeviceGetGpcClkMinMaxVfOffset(nvmlDevice nvmlDevice, MinOffset *int32, MaxOffset *int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMinOffset, _ := (*C.int)(unsafe.Pointer(MinOffset)), cgoAllocsUnknown cMaxOffset, _ := (*C.int)(unsafe.Pointer(MaxOffset)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpcClkMinMaxVfOffset(cnvmlDevice, cMinOffset, cMaxOffset) __v := (Return)(__ret) return __v } // nvmlDeviceGetMemClkMinMaxVfOffset function as declared in nvml/nvml.h func nvmlDeviceGetMemClkMinMaxVfOffset(nvmlDevice nvmlDevice, MinOffset *int32, MaxOffset *int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMinOffset, _ := (*C.int)(unsafe.Pointer(MinOffset)), cgoAllocsUnknown cMaxOffset, _ := (*C.int)(unsafe.Pointer(MaxOffset)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMemClkMinMaxVfOffset(cnvmlDevice, cMinOffset, cMaxOffset) __v := (Return)(__ret) return __v } // nvmlDeviceGetClockOffsets function as declared in nvml/nvml.h func nvmlDeviceGetClockOffsets(nvmlDevice nvmlDevice, Info *ClockOffset) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfo, _ := (*C.nvmlClockOffset_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlDeviceGetClockOffsets(cnvmlDevice, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceSetClockOffsets function as declared in nvml/nvml.h func nvmlDeviceSetClockOffsets(nvmlDevice nvmlDevice, Info *ClockOffset) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfo, _ := (*C.nvmlClockOffset_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlDeviceSetClockOffsets(cnvmlDevice, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetPerformanceModes function as declared in nvml/nvml.h func nvmlDeviceGetPerformanceModes(nvmlDevice nvmlDevice, PerfModes *DevicePerfModes) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPerfModes, _ := (*C.nvmlDevicePerfModes_t)(unsafe.Pointer(PerfModes)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPerformanceModes(cnvmlDevice, cPerfModes) __v := (Return)(__ret) return __v } // nvmlDeviceGetCurrentClockFreqs function as declared in nvml/nvml.h func nvmlDeviceGetCurrentClockFreqs(nvmlDevice nvmlDevice, CurrentClockFreqs *DeviceCurrentClockFreqs) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrentClockFreqs, _ := (*C.nvmlDeviceCurrentClockFreqs_t)(unsafe.Pointer(CurrentClockFreqs)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCurrentClockFreqs(cnvmlDevice, cCurrentClockFreqs) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerManagementMode function as declared in nvml/nvml.h func nvmlDeviceGetPowerManagementMode(nvmlDevice nvmlDevice, Mode *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(Mode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerManagementMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerManagementLimit function as declared in nvml/nvml.h func nvmlDeviceGetPowerManagementLimit(nvmlDevice nvmlDevice, Limit *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLimit, _ := (*C.uint)(unsafe.Pointer(Limit)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerManagementLimit(cnvmlDevice, cLimit) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerManagementLimitConstraints function as declared in nvml/nvml.h func nvmlDeviceGetPowerManagementLimitConstraints(nvmlDevice nvmlDevice, MinLimit *uint32, MaxLimit *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMinLimit, _ := (*C.uint)(unsafe.Pointer(MinLimit)), cgoAllocsUnknown cMaxLimit, _ := (*C.uint)(unsafe.Pointer(MaxLimit)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerManagementLimitConstraints(cnvmlDevice, cMinLimit, cMaxLimit) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerManagementDefaultLimit function as declared in nvml/nvml.h func nvmlDeviceGetPowerManagementDefaultLimit(nvmlDevice nvmlDevice, DefaultLimit *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cDefaultLimit, _ := (*C.uint)(unsafe.Pointer(DefaultLimit)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerManagementDefaultLimit(cnvmlDevice, cDefaultLimit) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerUsage function as declared in nvml/nvml.h func nvmlDeviceGetPowerUsage(nvmlDevice nvmlDevice, Power *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPower, _ := (*C.uint)(unsafe.Pointer(Power)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerUsage(cnvmlDevice, cPower) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerMizerMode_v1 function as declared in nvml/nvml.h func nvmlDeviceGetPowerMizerMode_v1(nvmlDevice nvmlDevice, PowerMizerMode *DevicePowerMizerModes_v1) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPowerMizerMode, _ := (*C.nvmlDevicePowerMizerModes_v1_t)(unsafe.Pointer(PowerMizerMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerMizerMode_v1(cnvmlDevice, cPowerMizerMode) __v := (Return)(__ret) return __v } // nvmlDeviceSetPowerMizerMode_v1 function as declared in nvml/nvml.h func nvmlDeviceSetPowerMizerMode_v1(nvmlDevice nvmlDevice, PowerMizerMode *DevicePowerMizerModes_v1) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPowerMizerMode, _ := (*C.nvmlDevicePowerMizerModes_v1_t)(unsafe.Pointer(PowerMizerMode)), cgoAllocsUnknown __ret := C.nvmlDeviceSetPowerMizerMode_v1(cnvmlDevice, cPowerMizerMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetTotalEnergyConsumption function as declared in nvml/nvml.h func nvmlDeviceGetTotalEnergyConsumption(nvmlDevice nvmlDevice, Energy *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cEnergy, _ := (*C.ulonglong)(unsafe.Pointer(Energy)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTotalEnergyConsumption(cnvmlDevice, cEnergy) __v := (Return)(__ret) return __v } // nvmlDeviceGetEnforcedPowerLimit function as declared in nvml/nvml.h func nvmlDeviceGetEnforcedPowerLimit(nvmlDevice nvmlDevice, Limit *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLimit, _ := (*C.uint)(unsafe.Pointer(Limit)), cgoAllocsUnknown __ret := C.nvmlDeviceGetEnforcedPowerLimit(cnvmlDevice, cLimit) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuOperationMode function as declared in nvml/nvml.h func nvmlDeviceGetGpuOperationMode(nvmlDevice nvmlDevice, Current *GpuOperationMode, Pending *GpuOperationMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrent, _ := (*C.nvmlGpuOperationMode_t)(unsafe.Pointer(Current)), cgoAllocsUnknown cPending, _ := (*C.nvmlGpuOperationMode_t)(unsafe.Pointer(Pending)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuOperationMode(cnvmlDevice, cCurrent, cPending) __v := (Return)(__ret) return __v } // nvmlDeviceGetMemoryInfo function as declared in nvml/nvml.h func nvmlDeviceGetMemoryInfo(nvmlDevice nvmlDevice, Memory *Memory) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMemory, _ := (*C.nvmlMemory_t)(unsafe.Pointer(Memory)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMemoryInfo(cnvmlDevice, cMemory) __v := (Return)(__ret) return __v } // nvmlDeviceGetMemoryInfo_v2 function as declared in nvml/nvml.h func nvmlDeviceGetMemoryInfo_v2(nvmlDevice nvmlDevice, Memory *Memory_v2) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMemory, _ := (*C.nvmlMemory_v2_t)(unsafe.Pointer(Memory)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMemoryInfo_v2(cnvmlDevice, cMemory) __v := (Return)(__ret) return __v } // nvmlDeviceGetComputeMode function as declared in nvml/nvml.h func nvmlDeviceGetComputeMode(nvmlDevice nvmlDevice, Mode *ComputeMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (*C.nvmlComputeMode_t)(unsafe.Pointer(Mode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetComputeMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetCudaComputeCapability function as declared in nvml/nvml.h func nvmlDeviceGetCudaComputeCapability(nvmlDevice nvmlDevice, Major *int32, Minor *int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMajor, _ := (*C.int)(unsafe.Pointer(Major)), cgoAllocsUnknown cMinor, _ := (*C.int)(unsafe.Pointer(Minor)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCudaComputeCapability(cnvmlDevice, cMajor, cMinor) __v := (Return)(__ret) return __v } // nvmlDeviceGetDramEncryptionMode function as declared in nvml/nvml.h func nvmlDeviceGetDramEncryptionMode(nvmlDevice nvmlDevice, Current *DramEncryptionInfo, Pending *DramEncryptionInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrent, _ := (*C.nvmlDramEncryptionInfo_t)(unsafe.Pointer(Current)), cgoAllocsUnknown cPending, _ := (*C.nvmlDramEncryptionInfo_t)(unsafe.Pointer(Pending)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDramEncryptionMode(cnvmlDevice, cCurrent, cPending) __v := (Return)(__ret) return __v } // nvmlDeviceSetDramEncryptionMode function as declared in nvml/nvml.h func nvmlDeviceSetDramEncryptionMode(nvmlDevice nvmlDevice, DramEncryption *DramEncryptionInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cDramEncryption, _ := (*C.nvmlDramEncryptionInfo_t)(unsafe.Pointer(DramEncryption)), cgoAllocsUnknown __ret := C.nvmlDeviceSetDramEncryptionMode(cnvmlDevice, cDramEncryption) __v := (Return)(__ret) return __v } // nvmlDeviceGetEccMode function as declared in nvml/nvml.h func nvmlDeviceGetEccMode(nvmlDevice nvmlDevice, Current *EnableState, Pending *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrent, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(Current)), cgoAllocsUnknown cPending, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(Pending)), cgoAllocsUnknown __ret := C.nvmlDeviceGetEccMode(cnvmlDevice, cCurrent, cPending) __v := (Return)(__ret) return __v } // nvmlDeviceGetDefaultEccMode function as declared in nvml/nvml.h func nvmlDeviceGetDefaultEccMode(nvmlDevice nvmlDevice, DefaultMode *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cDefaultMode, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(DefaultMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDefaultEccMode(cnvmlDevice, cDefaultMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetBoardId function as declared in nvml/nvml.h func nvmlDeviceGetBoardId(nvmlDevice nvmlDevice, BoardId *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cBoardId, _ := (*C.uint)(unsafe.Pointer(BoardId)), cgoAllocsUnknown __ret := C.nvmlDeviceGetBoardId(cnvmlDevice, cBoardId) __v := (Return)(__ret) return __v } // nvmlDeviceGetMultiGpuBoard function as declared in nvml/nvml.h func nvmlDeviceGetMultiGpuBoard(nvmlDevice nvmlDevice, MultiGpuBool *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMultiGpuBool, _ := (*C.uint)(unsafe.Pointer(MultiGpuBool)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMultiGpuBoard(cnvmlDevice, cMultiGpuBool) __v := (Return)(__ret) return __v } // nvmlDeviceGetTotalEccErrors function as declared in nvml/nvml.h func nvmlDeviceGetTotalEccErrors(nvmlDevice nvmlDevice, ErrorType MemoryErrorType, CounterType EccCounterType, EccCounts *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cErrorType, _ := (C.nvmlMemoryErrorType_t)(ErrorType), cgoAllocsUnknown cCounterType, _ := (C.nvmlEccCounterType_t)(CounterType), cgoAllocsUnknown cEccCounts, _ := (*C.ulonglong)(unsafe.Pointer(EccCounts)), cgoAllocsUnknown __ret := C.nvmlDeviceGetTotalEccErrors(cnvmlDevice, cErrorType, cCounterType, cEccCounts) __v := (Return)(__ret) return __v } // nvmlDeviceGetDetailedEccErrors function as declared in nvml/nvml.h func nvmlDeviceGetDetailedEccErrors(nvmlDevice nvmlDevice, ErrorType MemoryErrorType, CounterType EccCounterType, EccCounts *EccErrorCounts) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cErrorType, _ := (C.nvmlMemoryErrorType_t)(ErrorType), cgoAllocsUnknown cCounterType, _ := (C.nvmlEccCounterType_t)(CounterType), cgoAllocsUnknown cEccCounts, _ := (*C.nvmlEccErrorCounts_t)(unsafe.Pointer(EccCounts)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDetailedEccErrors(cnvmlDevice, cErrorType, cCounterType, cEccCounts) __v := (Return)(__ret) return __v } // nvmlDeviceGetMemoryErrorCounter function as declared in nvml/nvml.h func nvmlDeviceGetMemoryErrorCounter(nvmlDevice nvmlDevice, ErrorType MemoryErrorType, CounterType EccCounterType, LocationType MemoryLocation, Count *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cErrorType, _ := (C.nvmlMemoryErrorType_t)(ErrorType), cgoAllocsUnknown cCounterType, _ := (C.nvmlEccCounterType_t)(CounterType), cgoAllocsUnknown cLocationType, _ := (C.nvmlMemoryLocation_t)(LocationType), cgoAllocsUnknown cCount, _ := (*C.ulonglong)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMemoryErrorCounter(cnvmlDevice, cErrorType, cCounterType, cLocationType, cCount) __v := (Return)(__ret) return __v } // nvmlDeviceGetUtilizationRates function as declared in nvml/nvml.h func nvmlDeviceGetUtilizationRates(nvmlDevice nvmlDevice, Utilization *Utilization) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cUtilization, _ := (*C.nvmlUtilization_t)(unsafe.Pointer(Utilization)), cgoAllocsUnknown __ret := C.nvmlDeviceGetUtilizationRates(cnvmlDevice, cUtilization) __v := (Return)(__ret) return __v } // nvmlDeviceGetEncoderUtilization function as declared in nvml/nvml.h func nvmlDeviceGetEncoderUtilization(nvmlDevice nvmlDevice, Utilization *uint32, SamplingPeriodUs *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cUtilization, _ := (*C.uint)(unsafe.Pointer(Utilization)), cgoAllocsUnknown cSamplingPeriodUs, _ := (*C.uint)(unsafe.Pointer(SamplingPeriodUs)), cgoAllocsUnknown __ret := C.nvmlDeviceGetEncoderUtilization(cnvmlDevice, cUtilization, cSamplingPeriodUs) __v := (Return)(__ret) return __v } // nvmlDeviceGetEncoderCapacity function as declared in nvml/nvml.h func nvmlDeviceGetEncoderCapacity(nvmlDevice nvmlDevice, EncoderQueryType EncoderType, EncoderCapacity *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cEncoderQueryType, _ := (C.nvmlEncoderType_t)(EncoderQueryType), cgoAllocsUnknown cEncoderCapacity, _ := (*C.uint)(unsafe.Pointer(EncoderCapacity)), cgoAllocsUnknown __ret := C.nvmlDeviceGetEncoderCapacity(cnvmlDevice, cEncoderQueryType, cEncoderCapacity) __v := (Return)(__ret) return __v } // nvmlDeviceGetEncoderStats function as declared in nvml/nvml.h func nvmlDeviceGetEncoderStats(nvmlDevice nvmlDevice, SessionCount *uint32, AverageFps *uint32, AverageLatency *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSessionCount, _ := (*C.uint)(unsafe.Pointer(SessionCount)), cgoAllocsUnknown cAverageFps, _ := (*C.uint)(unsafe.Pointer(AverageFps)), cgoAllocsUnknown cAverageLatency, _ := (*C.uint)(unsafe.Pointer(AverageLatency)), cgoAllocsUnknown __ret := C.nvmlDeviceGetEncoderStats(cnvmlDevice, cSessionCount, cAverageFps, cAverageLatency) __v := (Return)(__ret) return __v } // nvmlDeviceGetEncoderSessions function as declared in nvml/nvml.h func nvmlDeviceGetEncoderSessions(nvmlDevice nvmlDevice, SessionCount *uint32, SessionInfos *EncoderSessionInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSessionCount, _ := (*C.uint)(unsafe.Pointer(SessionCount)), cgoAllocsUnknown cSessionInfos, _ := (*C.nvmlEncoderSessionInfo_t)(unsafe.Pointer(SessionInfos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetEncoderSessions(cnvmlDevice, cSessionCount, cSessionInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetDecoderUtilization function as declared in nvml/nvml.h func nvmlDeviceGetDecoderUtilization(nvmlDevice nvmlDevice, Utilization *uint32, SamplingPeriodUs *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cUtilization, _ := (*C.uint)(unsafe.Pointer(Utilization)), cgoAllocsUnknown cSamplingPeriodUs, _ := (*C.uint)(unsafe.Pointer(SamplingPeriodUs)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDecoderUtilization(cnvmlDevice, cUtilization, cSamplingPeriodUs) __v := (Return)(__ret) return __v } // nvmlDeviceGetJpgUtilization function as declared in nvml/nvml.h func nvmlDeviceGetJpgUtilization(nvmlDevice nvmlDevice, Utilization *uint32, SamplingPeriodUs *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cUtilization, _ := (*C.uint)(unsafe.Pointer(Utilization)), cgoAllocsUnknown cSamplingPeriodUs, _ := (*C.uint)(unsafe.Pointer(SamplingPeriodUs)), cgoAllocsUnknown __ret := C.nvmlDeviceGetJpgUtilization(cnvmlDevice, cUtilization, cSamplingPeriodUs) __v := (Return)(__ret) return __v } // nvmlDeviceGetOfaUtilization function as declared in nvml/nvml.h func nvmlDeviceGetOfaUtilization(nvmlDevice nvmlDevice, Utilization *uint32, SamplingPeriodUs *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cUtilization, _ := (*C.uint)(unsafe.Pointer(Utilization)), cgoAllocsUnknown cSamplingPeriodUs, _ := (*C.uint)(unsafe.Pointer(SamplingPeriodUs)), cgoAllocsUnknown __ret := C.nvmlDeviceGetOfaUtilization(cnvmlDevice, cUtilization, cSamplingPeriodUs) __v := (Return)(__ret) return __v } // nvmlDeviceGetFBCStats function as declared in nvml/nvml.h func nvmlDeviceGetFBCStats(nvmlDevice nvmlDevice, FbcStats *FBCStats) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFbcStats, _ := (*C.nvmlFBCStats_t)(unsafe.Pointer(FbcStats)), cgoAllocsUnknown __ret := C.nvmlDeviceGetFBCStats(cnvmlDevice, cFbcStats) __v := (Return)(__ret) return __v } // nvmlDeviceGetFBCSessions function as declared in nvml/nvml.h func nvmlDeviceGetFBCSessions(nvmlDevice nvmlDevice, SessionCount *uint32, SessionInfo *FBCSessionInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSessionCount, _ := (*C.uint)(unsafe.Pointer(SessionCount)), cgoAllocsUnknown cSessionInfo, _ := (*C.nvmlFBCSessionInfo_t)(unsafe.Pointer(SessionInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetFBCSessions(cnvmlDevice, cSessionCount, cSessionInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetDriverModel_v2 function as declared in nvml/nvml.h func nvmlDeviceGetDriverModel_v2(nvmlDevice nvmlDevice, Current *DriverModel, Pending *DriverModel) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrent, _ := (*C.nvmlDriverModel_t)(unsafe.Pointer(Current)), cgoAllocsUnknown cPending, _ := (*C.nvmlDriverModel_t)(unsafe.Pointer(Pending)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDriverModel_v2(cnvmlDevice, cCurrent, cPending) __v := (Return)(__ret) return __v } // nvmlDeviceGetVbiosVersion function as declared in nvml/nvml.h func nvmlDeviceGetVbiosVersion(nvmlDevice nvmlDevice, Version *byte, Length uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVersion, _ := (*C.char)(unsafe.Pointer(Version)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlDeviceGetVbiosVersion(cnvmlDevice, cVersion, cLength) __v := (Return)(__ret) return __v } // nvmlDeviceGetBridgeChipInfo function as declared in nvml/nvml.h func nvmlDeviceGetBridgeChipInfo(nvmlDevice nvmlDevice, BridgeHierarchy *BridgeChipHierarchy) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cBridgeHierarchy, _ := (*C.nvmlBridgeChipHierarchy_t)(unsafe.Pointer(BridgeHierarchy)), cgoAllocsUnknown __ret := C.nvmlDeviceGetBridgeChipInfo(cnvmlDevice, cBridgeHierarchy) __v := (Return)(__ret) return __v } // nvmlDeviceGetComputeRunningProcesses_v3 function as declared in nvml/nvml.h func nvmlDeviceGetComputeRunningProcesses_v3(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetComputeRunningProcesses_v3(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetGraphicsRunningProcesses_v3 function as declared in nvml/nvml.h func nvmlDeviceGetGraphicsRunningProcesses_v3(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGraphicsRunningProcesses_v3(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetMPSComputeRunningProcesses_v3 function as declared in nvml/nvml.h func nvmlDeviceGetMPSComputeRunningProcesses_v3(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMPSComputeRunningProcesses_v3(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetRunningProcessDetailList function as declared in nvml/nvml.h func nvmlDeviceGetRunningProcessDetailList(nvmlDevice nvmlDevice, Plist *ProcessDetailList) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPlist, _ := (*C.nvmlProcessDetailList_t)(unsafe.Pointer(Plist)), cgoAllocsUnknown __ret := C.nvmlDeviceGetRunningProcessDetailList(cnvmlDevice, cPlist) __v := (Return)(__ret) return __v } // nvmlDeviceOnSameBoard function as declared in nvml/nvml.h func nvmlDeviceOnSameBoard(Device1 nvmlDevice, Device2 nvmlDevice, OnSameBoard *int32) Return { cDevice1, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&Device1)), cgoAllocsUnknown cDevice2, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&Device2)), cgoAllocsUnknown cOnSameBoard, _ := (*C.int)(unsafe.Pointer(OnSameBoard)), cgoAllocsUnknown __ret := C.nvmlDeviceOnSameBoard(cDevice1, cDevice2, cOnSameBoard) __v := (Return)(__ret) return __v } // nvmlDeviceGetAPIRestriction function as declared in nvml/nvml.h func nvmlDeviceGetAPIRestriction(nvmlDevice nvmlDevice, ApiType RestrictedAPI, IsRestricted *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cApiType, _ := (C.nvmlRestrictedAPI_t)(ApiType), cgoAllocsUnknown cIsRestricted, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(IsRestricted)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAPIRestriction(cnvmlDevice, cApiType, cIsRestricted) __v := (Return)(__ret) return __v } // nvmlDeviceGetSamples function as declared in nvml/nvml.h func nvmlDeviceGetSamples(nvmlDevice nvmlDevice, _type SamplingType, LastSeenTimeStamp uint64, SampleValType *ValueType, SampleCount *uint32, Samples *Sample) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown c_type, _ := (C.nvmlSamplingType_t)(_type), cgoAllocsUnknown cLastSeenTimeStamp, _ := (C.ulonglong)(LastSeenTimeStamp), cgoAllocsUnknown cSampleValType, _ := (*C.nvmlValueType_t)(unsafe.Pointer(SampleValType)), cgoAllocsUnknown cSampleCount, _ := (*C.uint)(unsafe.Pointer(SampleCount)), cgoAllocsUnknown cSamples, _ := (*C.nvmlSample_t)(unsafe.Pointer(Samples)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSamples(cnvmlDevice, c_type, cLastSeenTimeStamp, cSampleValType, cSampleCount, cSamples) __v := (Return)(__ret) return __v } // nvmlDeviceGetBAR1MemoryInfo function as declared in nvml/nvml.h func nvmlDeviceGetBAR1MemoryInfo(nvmlDevice nvmlDevice, Bar1Memory *BAR1Memory) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cBar1Memory, _ := (*C.nvmlBAR1Memory_t)(unsafe.Pointer(Bar1Memory)), cgoAllocsUnknown __ret := C.nvmlDeviceGetBAR1MemoryInfo(cnvmlDevice, cBar1Memory) __v := (Return)(__ret) return __v } // nvmlDeviceGetViolationStatus function as declared in nvml/nvml.h func nvmlDeviceGetViolationStatus(nvmlDevice nvmlDevice, PerfPolicyType PerfPolicyType, ViolTime *ViolationTime) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPerfPolicyType, _ := (C.nvmlPerfPolicyType_t)(PerfPolicyType), cgoAllocsUnknown cViolTime, _ := (*C.nvmlViolationTime_t)(unsafe.Pointer(ViolTime)), cgoAllocsUnknown __ret := C.nvmlDeviceGetViolationStatus(cnvmlDevice, cPerfPolicyType, cViolTime) __v := (Return)(__ret) return __v } // nvmlDeviceGetIrqNum function as declared in nvml/nvml.h func nvmlDeviceGetIrqNum(nvmlDevice nvmlDevice, IrqNum *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIrqNum, _ := (*C.uint)(unsafe.Pointer(IrqNum)), cgoAllocsUnknown __ret := C.nvmlDeviceGetIrqNum(cnvmlDevice, cIrqNum) __v := (Return)(__ret) return __v } // nvmlDeviceGetNumGpuCores function as declared in nvml/nvml.h func nvmlDeviceGetNumGpuCores(nvmlDevice nvmlDevice, NumCores *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cNumCores, _ := (*C.uint)(unsafe.Pointer(NumCores)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNumGpuCores(cnvmlDevice, cNumCores) __v := (Return)(__ret) return __v } // nvmlDeviceGetPowerSource function as declared in nvml/nvml.h func nvmlDeviceGetPowerSource(nvmlDevice nvmlDevice, PowerSource *PowerSource) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPowerSource, _ := (*C.nvmlPowerSource_t)(unsafe.Pointer(PowerSource)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPowerSource(cnvmlDevice, cPowerSource) __v := (Return)(__ret) return __v } // nvmlDeviceGetMemoryBusWidth function as declared in nvml/nvml.h func nvmlDeviceGetMemoryBusWidth(nvmlDevice nvmlDevice, BusWidth *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cBusWidth, _ := (*C.uint)(unsafe.Pointer(BusWidth)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMemoryBusWidth(cnvmlDevice, cBusWidth) __v := (Return)(__ret) return __v } // nvmlDeviceGetPcieLinkMaxSpeed function as declared in nvml/nvml.h func nvmlDeviceGetPcieLinkMaxSpeed(nvmlDevice nvmlDevice, MaxSpeed *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMaxSpeed, _ := (*C.uint)(unsafe.Pointer(MaxSpeed)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPcieLinkMaxSpeed(cnvmlDevice, cMaxSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceGetPcieSpeed function as declared in nvml/nvml.h func nvmlDeviceGetPcieSpeed(nvmlDevice nvmlDevice, PcieSpeed *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPcieSpeed, _ := (*C.uint)(unsafe.Pointer(PcieSpeed)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPcieSpeed(cnvmlDevice, cPcieSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceGetAdaptiveClockInfoStatus function as declared in nvml/nvml.h func nvmlDeviceGetAdaptiveClockInfoStatus(nvmlDevice nvmlDevice, AdaptiveClockStatus *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cAdaptiveClockStatus, _ := (*C.uint)(unsafe.Pointer(AdaptiveClockStatus)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAdaptiveClockInfoStatus(cnvmlDevice, cAdaptiveClockStatus) __v := (Return)(__ret) return __v } // nvmlDeviceGetBusType function as declared in nvml/nvml.h func nvmlDeviceGetBusType(nvmlDevice nvmlDevice, _type *BusType) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown c_type, _ := (*C.nvmlBusType_t)(unsafe.Pointer(_type)), cgoAllocsUnknown __ret := C.nvmlDeviceGetBusType(cnvmlDevice, c_type) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuFabricInfo function as declared in nvml/nvml.h func nvmlDeviceGetGpuFabricInfo(nvmlDevice nvmlDevice, GpuFabricInfo *GpuFabricInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cGpuFabricInfo, _ := (*C.nvmlGpuFabricInfo_t)(unsafe.Pointer(GpuFabricInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuFabricInfo(cnvmlDevice, cGpuFabricInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuFabricInfoV function as declared in nvml/nvml.h func nvmlDeviceGetGpuFabricInfoV(nvmlDevice nvmlDevice, GpuFabricInfo *GpuFabricInfoV) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cGpuFabricInfo, _ := (*C.nvmlGpuFabricInfoV_t)(unsafe.Pointer(GpuFabricInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuFabricInfoV(cnvmlDevice, cGpuFabricInfo) __v := (Return)(__ret) return __v } // nvmlSystemGetConfComputeCapabilities function as declared in nvml/nvml.h func nvmlSystemGetConfComputeCapabilities(Capabilities *ConfComputeSystemCaps) Return { cCapabilities, _ := (*C.nvmlConfComputeSystemCaps_t)(unsafe.Pointer(Capabilities)), cgoAllocsUnknown __ret := C.nvmlSystemGetConfComputeCapabilities(cCapabilities) __v := (Return)(__ret) return __v } // nvmlSystemGetConfComputeState function as declared in nvml/nvml.h func nvmlSystemGetConfComputeState(State *ConfComputeSystemState) Return { cState, _ := (*C.nvmlConfComputeSystemState_t)(unsafe.Pointer(State)), cgoAllocsUnknown __ret := C.nvmlSystemGetConfComputeState(cState) __v := (Return)(__ret) return __v } // nvmlDeviceGetConfComputeMemSizeInfo function as declared in nvml/nvml.h func nvmlDeviceGetConfComputeMemSizeInfo(nvmlDevice nvmlDevice, MemInfo *ConfComputeMemSizeInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMemInfo, _ := (*C.nvmlConfComputeMemSizeInfo_t)(unsafe.Pointer(MemInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetConfComputeMemSizeInfo(cnvmlDevice, cMemInfo) __v := (Return)(__ret) return __v } // nvmlSystemGetConfComputeGpusReadyState function as declared in nvml/nvml.h func nvmlSystemGetConfComputeGpusReadyState(IsAcceptingWork *uint32) Return { cIsAcceptingWork, _ := (*C.uint)(unsafe.Pointer(IsAcceptingWork)), cgoAllocsUnknown __ret := C.nvmlSystemGetConfComputeGpusReadyState(cIsAcceptingWork) __v := (Return)(__ret) return __v } // nvmlDeviceGetConfComputeProtectedMemoryUsage function as declared in nvml/nvml.h func nvmlDeviceGetConfComputeProtectedMemoryUsage(nvmlDevice nvmlDevice, Memory *Memory) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMemory, _ := (*C.nvmlMemory_t)(unsafe.Pointer(Memory)), cgoAllocsUnknown __ret := C.nvmlDeviceGetConfComputeProtectedMemoryUsage(cnvmlDevice, cMemory) __v := (Return)(__ret) return __v } // nvmlDeviceGetConfComputeGpuCertificate function as declared in nvml/nvml.h func nvmlDeviceGetConfComputeGpuCertificate(nvmlDevice nvmlDevice, GpuCert *ConfComputeGpuCertificate) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cGpuCert, _ := (*C.nvmlConfComputeGpuCertificate_t)(unsafe.Pointer(GpuCert)), cgoAllocsUnknown __ret := C.nvmlDeviceGetConfComputeGpuCertificate(cnvmlDevice, cGpuCert) __v := (Return)(__ret) return __v } // nvmlDeviceGetConfComputeGpuAttestationReport function as declared in nvml/nvml.h func nvmlDeviceGetConfComputeGpuAttestationReport(nvmlDevice nvmlDevice, GpuAtstReport *ConfComputeGpuAttestationReport) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cGpuAtstReport, _ := (*C.nvmlConfComputeGpuAttestationReport_t)(unsafe.Pointer(GpuAtstReport)), cgoAllocsUnknown __ret := C.nvmlDeviceGetConfComputeGpuAttestationReport(cnvmlDevice, cGpuAtstReport) __v := (Return)(__ret) return __v } // nvmlSystemGetConfComputeKeyRotationThresholdInfo function as declared in nvml/nvml.h func nvmlSystemGetConfComputeKeyRotationThresholdInfo(PKeyRotationThrInfo *ConfComputeGetKeyRotationThresholdInfo) Return { cPKeyRotationThrInfo, _ := (*C.nvmlConfComputeGetKeyRotationThresholdInfo_t)(unsafe.Pointer(PKeyRotationThrInfo)), cgoAllocsUnknown __ret := C.nvmlSystemGetConfComputeKeyRotationThresholdInfo(cPKeyRotationThrInfo) __v := (Return)(__ret) return __v } // nvmlDeviceSetConfComputeUnprotectedMemSize function as declared in nvml/nvml.h func nvmlDeviceSetConfComputeUnprotectedMemSize(nvmlDevice nvmlDevice, SizeKiB uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSizeKiB, _ := (C.ulonglong)(SizeKiB), cgoAllocsUnknown __ret := C.nvmlDeviceSetConfComputeUnprotectedMemSize(cnvmlDevice, cSizeKiB) __v := (Return)(__ret) return __v } // nvmlSystemSetConfComputeGpusReadyState function as declared in nvml/nvml.h func nvmlSystemSetConfComputeGpusReadyState(IsAcceptingWork uint32) Return { cIsAcceptingWork, _ := (C.uint)(IsAcceptingWork), cgoAllocsUnknown __ret := C.nvmlSystemSetConfComputeGpusReadyState(cIsAcceptingWork) __v := (Return)(__ret) return __v } // nvmlSystemSetConfComputeKeyRotationThresholdInfo function as declared in nvml/nvml.h func nvmlSystemSetConfComputeKeyRotationThresholdInfo(PKeyRotationThrInfo *ConfComputeSetKeyRotationThresholdInfo) Return { cPKeyRotationThrInfo, _ := (*C.nvmlConfComputeSetKeyRotationThresholdInfo_t)(unsafe.Pointer(PKeyRotationThrInfo)), cgoAllocsUnknown __ret := C.nvmlSystemSetConfComputeKeyRotationThresholdInfo(cPKeyRotationThrInfo) __v := (Return)(__ret) return __v } // nvmlSystemGetConfComputeSettings function as declared in nvml/nvml.h func nvmlSystemGetConfComputeSettings(Settings *SystemConfComputeSettings) Return { cSettings, _ := (*C.nvmlSystemConfComputeSettings_t)(unsafe.Pointer(Settings)), cgoAllocsUnknown __ret := C.nvmlSystemGetConfComputeSettings(cSettings) __v := (Return)(__ret) return __v } // nvmlDeviceGetGspFirmwareVersion function as declared in nvml/nvml.h func nvmlDeviceGetGspFirmwareVersion(nvmlDevice nvmlDevice, Version *byte) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVersion, _ := (*C.char)(unsafe.Pointer(Version)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGspFirmwareVersion(cnvmlDevice, cVersion) __v := (Return)(__ret) return __v } // nvmlDeviceGetGspFirmwareMode function as declared in nvml/nvml.h func nvmlDeviceGetGspFirmwareMode(nvmlDevice nvmlDevice, IsEnabled *uint32, DefaultMode *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIsEnabled, _ := (*C.uint)(unsafe.Pointer(IsEnabled)), cgoAllocsUnknown cDefaultMode, _ := (*C.uint)(unsafe.Pointer(DefaultMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGspFirmwareMode(cnvmlDevice, cIsEnabled, cDefaultMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetSramEccErrorStatus function as declared in nvml/nvml.h func nvmlDeviceGetSramEccErrorStatus(nvmlDevice nvmlDevice, Status *EccSramErrorStatus) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cStatus, _ := (*C.nvmlEccSramErrorStatus_t)(unsafe.Pointer(Status)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSramEccErrorStatus(cnvmlDevice, cStatus) __v := (Return)(__ret) return __v } // nvmlDeviceSetPowerManagementLimit_v2 function as declared in nvml/nvml.h func nvmlDeviceSetPowerManagementLimit_v2(nvmlDevice nvmlDevice, PowerValue *PowerValue_v2) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPowerValue, _ := (*C.nvmlPowerValue_v2_t)(unsafe.Pointer(PowerValue)), cgoAllocsUnknown __ret := C.nvmlDeviceSetPowerManagementLimit_v2(cnvmlDevice, cPowerValue) __v := (Return)(__ret) return __v } // nvmlDeviceGetAccountingMode function as declared in nvml/nvml.h func nvmlDeviceGetAccountingMode(nvmlDevice nvmlDevice, Mode *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(Mode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAccountingMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetAccountingStats function as declared in nvml/nvml.h func nvmlDeviceGetAccountingStats(nvmlDevice nvmlDevice, Pid uint32, Stats *AccountingStats) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPid, _ := (C.uint)(Pid), cgoAllocsUnknown cStats, _ := (*C.nvmlAccountingStats_t)(unsafe.Pointer(Stats)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAccountingStats(cnvmlDevice, cPid, cStats) __v := (Return)(__ret) return __v } // nvmlDeviceGetAccountingPids function as declared in nvml/nvml.h func nvmlDeviceGetAccountingPids(nvmlDevice nvmlDevice, Count *uint32, Pids *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown cPids, _ := (*C.uint)(unsafe.Pointer(Pids)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAccountingPids(cnvmlDevice, cCount, cPids) __v := (Return)(__ret) return __v } // nvmlDeviceGetAccountingBufferSize function as declared in nvml/nvml.h func nvmlDeviceGetAccountingBufferSize(nvmlDevice nvmlDevice, BufferSize *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cBufferSize, _ := (*C.uint)(unsafe.Pointer(BufferSize)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAccountingBufferSize(cnvmlDevice, cBufferSize) __v := (Return)(__ret) return __v } // nvmlDeviceGetRetiredPages function as declared in nvml/nvml.h func nvmlDeviceGetRetiredPages(nvmlDevice nvmlDevice, Cause PageRetirementCause, PageCount *uint32, Addresses *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCause, _ := (C.nvmlPageRetirementCause_t)(Cause), cgoAllocsUnknown cPageCount, _ := (*C.uint)(unsafe.Pointer(PageCount)), cgoAllocsUnknown cAddresses, _ := (*C.ulonglong)(unsafe.Pointer(Addresses)), cgoAllocsUnknown __ret := C.nvmlDeviceGetRetiredPages(cnvmlDevice, cCause, cPageCount, cAddresses) __v := (Return)(__ret) return __v } // nvmlDeviceGetRetiredPages_v2 function as declared in nvml/nvml.h func nvmlDeviceGetRetiredPages_v2(nvmlDevice nvmlDevice, Cause PageRetirementCause, PageCount *uint32, Addresses *uint64, Timestamps *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCause, _ := (C.nvmlPageRetirementCause_t)(Cause), cgoAllocsUnknown cPageCount, _ := (*C.uint)(unsafe.Pointer(PageCount)), cgoAllocsUnknown cAddresses, _ := (*C.ulonglong)(unsafe.Pointer(Addresses)), cgoAllocsUnknown cTimestamps, _ := (*C.ulonglong)(unsafe.Pointer(Timestamps)), cgoAllocsUnknown __ret := C.nvmlDeviceGetRetiredPages_v2(cnvmlDevice, cCause, cPageCount, cAddresses, cTimestamps) __v := (Return)(__ret) return __v } // nvmlDeviceGetRetiredPagesPendingStatus function as declared in nvml/nvml.h func nvmlDeviceGetRetiredPagesPendingStatus(nvmlDevice nvmlDevice, IsPending *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIsPending, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(IsPending)), cgoAllocsUnknown __ret := C.nvmlDeviceGetRetiredPagesPendingStatus(cnvmlDevice, cIsPending) __v := (Return)(__ret) return __v } // nvmlDeviceGetRemappedRows function as declared in nvml/nvml.h func nvmlDeviceGetRemappedRows(nvmlDevice nvmlDevice, CorrRows *uint32, UncRows *uint32, IsPending *uint32, FailureOccurred *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCorrRows, _ := (*C.uint)(unsafe.Pointer(CorrRows)), cgoAllocsUnknown cUncRows, _ := (*C.uint)(unsafe.Pointer(UncRows)), cgoAllocsUnknown cIsPending, _ := (*C.uint)(unsafe.Pointer(IsPending)), cgoAllocsUnknown cFailureOccurred, _ := (*C.uint)(unsafe.Pointer(FailureOccurred)), cgoAllocsUnknown __ret := C.nvmlDeviceGetRemappedRows(cnvmlDevice, cCorrRows, cUncRows, cIsPending, cFailureOccurred) __v := (Return)(__ret) return __v } // nvmlDeviceGetRowRemapperHistogram function as declared in nvml/nvml.h func nvmlDeviceGetRowRemapperHistogram(nvmlDevice nvmlDevice, Values *RowRemapperHistogramValues) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cValues, _ := (*C.nvmlRowRemapperHistogramValues_t)(unsafe.Pointer(Values)), cgoAllocsUnknown __ret := C.nvmlDeviceGetRowRemapperHistogram(cnvmlDevice, cValues) __v := (Return)(__ret) return __v } // nvmlDeviceGetArchitecture function as declared in nvml/nvml.h func nvmlDeviceGetArchitecture(nvmlDevice nvmlDevice, Arch *DeviceArchitecture) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cArch, _ := (*C.nvmlDeviceArchitecture_t)(unsafe.Pointer(Arch)), cgoAllocsUnknown __ret := C.nvmlDeviceGetArchitecture(cnvmlDevice, cArch) __v := (Return)(__ret) return __v } // nvmlDeviceGetClkMonStatus function as declared in nvml/nvml.h func nvmlDeviceGetClkMonStatus(nvmlDevice nvmlDevice, Status *ClkMonStatus) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cStatus, _ := (*C.nvmlClkMonStatus_t)(unsafe.Pointer(Status)), cgoAllocsUnknown __ret := C.nvmlDeviceGetClkMonStatus(cnvmlDevice, cStatus) __v := (Return)(__ret) return __v } // nvmlDeviceGetProcessUtilization function as declared in nvml/nvml.h func nvmlDeviceGetProcessUtilization(nvmlDevice nvmlDevice, Utilization *ProcessUtilizationSample, ProcessSamplesCount *uint32, LastSeenTimeStamp uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cUtilization, _ := (*C.nvmlProcessUtilizationSample_t)(unsafe.Pointer(Utilization)), cgoAllocsUnknown cProcessSamplesCount, _ := (*C.uint)(unsafe.Pointer(ProcessSamplesCount)), cgoAllocsUnknown cLastSeenTimeStamp, _ := (C.ulonglong)(LastSeenTimeStamp), cgoAllocsUnknown __ret := C.nvmlDeviceGetProcessUtilization(cnvmlDevice, cUtilization, cProcessSamplesCount, cLastSeenTimeStamp) __v := (Return)(__ret) return __v } // nvmlDeviceGetProcessesUtilizationInfo function as declared in nvml/nvml.h func nvmlDeviceGetProcessesUtilizationInfo(nvmlDevice nvmlDevice, ProcesesUtilInfo *ProcessesUtilizationInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProcesesUtilInfo, _ := (*C.nvmlProcessesUtilizationInfo_t)(unsafe.Pointer(ProcesesUtilInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetProcessesUtilizationInfo(cnvmlDevice, cProcesesUtilInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetPlatformInfo function as declared in nvml/nvml.h func nvmlDeviceGetPlatformInfo(nvmlDevice nvmlDevice, PlatformInfo *PlatformInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPlatformInfo, _ := (*C.nvmlPlatformInfo_t)(unsafe.Pointer(PlatformInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPlatformInfo(cnvmlDevice, cPlatformInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetPdi function as declared in nvml/nvml.h func nvmlDeviceGetPdi(nvmlDevice nvmlDevice, Pdi *Pdi) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPdi, _ := (*C.nvmlPdi_t)(unsafe.Pointer(Pdi)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPdi(cnvmlDevice, cPdi) __v := (Return)(__ret) return __v } // nvmlUnitSetLedState function as declared in nvml/nvml.h func nvmlUnitSetLedState(nvmlUnit nvmlUnit, Color LedColor) Return { cnvmlUnit, _ := *(*C.nvmlUnit_t)(unsafe.Pointer(&nvmlUnit)), cgoAllocsUnknown cColor, _ := (C.nvmlLedColor_t)(Color), cgoAllocsUnknown __ret := C.nvmlUnitSetLedState(cnvmlUnit, cColor) __v := (Return)(__ret) return __v } // nvmlDeviceSetPersistenceMode function as declared in nvml/nvml.h func nvmlDeviceSetPersistenceMode(nvmlDevice nvmlDevice, Mode EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (C.nvmlEnableState_t)(Mode), cgoAllocsUnknown __ret := C.nvmlDeviceSetPersistenceMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceSetComputeMode function as declared in nvml/nvml.h func nvmlDeviceSetComputeMode(nvmlDevice nvmlDevice, Mode ComputeMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (C.nvmlComputeMode_t)(Mode), cgoAllocsUnknown __ret := C.nvmlDeviceSetComputeMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceSetEccMode function as declared in nvml/nvml.h func nvmlDeviceSetEccMode(nvmlDevice nvmlDevice, Ecc EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cEcc, _ := (C.nvmlEnableState_t)(Ecc), cgoAllocsUnknown __ret := C.nvmlDeviceSetEccMode(cnvmlDevice, cEcc) __v := (Return)(__ret) return __v } // nvmlDeviceClearEccErrorCounts function as declared in nvml/nvml.h func nvmlDeviceClearEccErrorCounts(nvmlDevice nvmlDevice, CounterType EccCounterType) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCounterType, _ := (C.nvmlEccCounterType_t)(CounterType), cgoAllocsUnknown __ret := C.nvmlDeviceClearEccErrorCounts(cnvmlDevice, cCounterType) __v := (Return)(__ret) return __v } // nvmlDeviceSetDriverModel function as declared in nvml/nvml.h func nvmlDeviceSetDriverModel(nvmlDevice nvmlDevice, DriverModel DriverModel, Flags uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cDriverModel, _ := (C.nvmlDriverModel_t)(DriverModel), cgoAllocsUnknown cFlags, _ := (C.uint)(Flags), cgoAllocsUnknown __ret := C.nvmlDeviceSetDriverModel(cnvmlDevice, cDriverModel, cFlags) __v := (Return)(__ret) return __v } // nvmlDeviceSetGpuLockedClocks function as declared in nvml/nvml.h func nvmlDeviceSetGpuLockedClocks(nvmlDevice nvmlDevice, MinGpuClockMHz uint32, MaxGpuClockMHz uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMinGpuClockMHz, _ := (C.uint)(MinGpuClockMHz), cgoAllocsUnknown cMaxGpuClockMHz, _ := (C.uint)(MaxGpuClockMHz), cgoAllocsUnknown __ret := C.nvmlDeviceSetGpuLockedClocks(cnvmlDevice, cMinGpuClockMHz, cMaxGpuClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceResetGpuLockedClocks function as declared in nvml/nvml.h func nvmlDeviceResetGpuLockedClocks(nvmlDevice nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceResetGpuLockedClocks(cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceSetMemoryLockedClocks function as declared in nvml/nvml.h func nvmlDeviceSetMemoryLockedClocks(nvmlDevice nvmlDevice, MinMemClockMHz uint32, MaxMemClockMHz uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMinMemClockMHz, _ := (C.uint)(MinMemClockMHz), cgoAllocsUnknown cMaxMemClockMHz, _ := (C.uint)(MaxMemClockMHz), cgoAllocsUnknown __ret := C.nvmlDeviceSetMemoryLockedClocks(cnvmlDevice, cMinMemClockMHz, cMaxMemClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceResetMemoryLockedClocks function as declared in nvml/nvml.h func nvmlDeviceResetMemoryLockedClocks(nvmlDevice nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceResetMemoryLockedClocks(cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceSetApplicationsClocks function as declared in nvml/nvml.h func nvmlDeviceSetApplicationsClocks(nvmlDevice nvmlDevice, MemClockMHz uint32, GraphicsClockMHz uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMemClockMHz, _ := (C.uint)(MemClockMHz), cgoAllocsUnknown cGraphicsClockMHz, _ := (C.uint)(GraphicsClockMHz), cgoAllocsUnknown __ret := C.nvmlDeviceSetApplicationsClocks(cnvmlDevice, cMemClockMHz, cGraphicsClockMHz) __v := (Return)(__ret) return __v } // nvmlDeviceResetApplicationsClocks function as declared in nvml/nvml.h func nvmlDeviceResetApplicationsClocks(nvmlDevice nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceResetApplicationsClocks(cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceSetAutoBoostedClocksEnabled function as declared in nvml/nvml.h func nvmlDeviceSetAutoBoostedClocksEnabled(nvmlDevice nvmlDevice, Enabled EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cEnabled, _ := (C.nvmlEnableState_t)(Enabled), cgoAllocsUnknown __ret := C.nvmlDeviceSetAutoBoostedClocksEnabled(cnvmlDevice, cEnabled) __v := (Return)(__ret) return __v } // nvmlDeviceSetDefaultAutoBoostedClocksEnabled function as declared in nvml/nvml.h func nvmlDeviceSetDefaultAutoBoostedClocksEnabled(nvmlDevice nvmlDevice, Enabled EnableState, Flags uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cEnabled, _ := (C.nvmlEnableState_t)(Enabled), cgoAllocsUnknown cFlags, _ := (C.uint)(Flags), cgoAllocsUnknown __ret := C.nvmlDeviceSetDefaultAutoBoostedClocksEnabled(cnvmlDevice, cEnabled, cFlags) __v := (Return)(__ret) return __v } // nvmlDeviceSetDefaultFanSpeed_v2 function as declared in nvml/nvml.h func nvmlDeviceSetDefaultFanSpeed_v2(nvmlDevice nvmlDevice, Fan uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFan, _ := (C.uint)(Fan), cgoAllocsUnknown __ret := C.nvmlDeviceSetDefaultFanSpeed_v2(cnvmlDevice, cFan) __v := (Return)(__ret) return __v } // nvmlDeviceSetFanControlPolicy function as declared in nvml/nvml.h func nvmlDeviceSetFanControlPolicy(nvmlDevice nvmlDevice, Fan uint32, Policy FanControlPolicy) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFan, _ := (C.uint)(Fan), cgoAllocsUnknown cPolicy, _ := (C.nvmlFanControlPolicy_t)(Policy), cgoAllocsUnknown __ret := C.nvmlDeviceSetFanControlPolicy(cnvmlDevice, cFan, cPolicy) __v := (Return)(__ret) return __v } // nvmlDeviceSetTemperatureThreshold function as declared in nvml/nvml.h func nvmlDeviceSetTemperatureThreshold(nvmlDevice nvmlDevice, ThresholdType TemperatureThresholds, Temp *int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cThresholdType, _ := (C.nvmlTemperatureThresholds_t)(ThresholdType), cgoAllocsUnknown cTemp, _ := (*C.int)(unsafe.Pointer(Temp)), cgoAllocsUnknown __ret := C.nvmlDeviceSetTemperatureThreshold(cnvmlDevice, cThresholdType, cTemp) __v := (Return)(__ret) return __v } // nvmlDeviceSetPowerManagementLimit function as declared in nvml/nvml.h func nvmlDeviceSetPowerManagementLimit(nvmlDevice nvmlDevice, Limit uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLimit, _ := (C.uint)(Limit), cgoAllocsUnknown __ret := C.nvmlDeviceSetPowerManagementLimit(cnvmlDevice, cLimit) __v := (Return)(__ret) return __v } // nvmlDeviceSetGpuOperationMode function as declared in nvml/nvml.h func nvmlDeviceSetGpuOperationMode(nvmlDevice nvmlDevice, Mode GpuOperationMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (C.nvmlGpuOperationMode_t)(Mode), cgoAllocsUnknown __ret := C.nvmlDeviceSetGpuOperationMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceSetAPIRestriction function as declared in nvml/nvml.h func nvmlDeviceSetAPIRestriction(nvmlDevice nvmlDevice, ApiType RestrictedAPI, IsRestricted EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cApiType, _ := (C.nvmlRestrictedAPI_t)(ApiType), cgoAllocsUnknown cIsRestricted, _ := (C.nvmlEnableState_t)(IsRestricted), cgoAllocsUnknown __ret := C.nvmlDeviceSetAPIRestriction(cnvmlDevice, cApiType, cIsRestricted) __v := (Return)(__ret) return __v } // nvmlDeviceSetFanSpeed_v2 function as declared in nvml/nvml.h func nvmlDeviceSetFanSpeed_v2(nvmlDevice nvmlDevice, Fan uint32, Speed uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cFan, _ := (C.uint)(Fan), cgoAllocsUnknown cSpeed, _ := (C.uint)(Speed), cgoAllocsUnknown __ret := C.nvmlDeviceSetFanSpeed_v2(cnvmlDevice, cFan, cSpeed) __v := (Return)(__ret) return __v } // nvmlDeviceSetGpcClkVfOffset function as declared in nvml/nvml.h func nvmlDeviceSetGpcClkVfOffset(nvmlDevice nvmlDevice, Offset int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cOffset, _ := (C.int)(Offset), cgoAllocsUnknown __ret := C.nvmlDeviceSetGpcClkVfOffset(cnvmlDevice, cOffset) __v := (Return)(__ret) return __v } // nvmlDeviceSetMemClkVfOffset function as declared in nvml/nvml.h func nvmlDeviceSetMemClkVfOffset(nvmlDevice nvmlDevice, Offset int32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cOffset, _ := (C.int)(Offset), cgoAllocsUnknown __ret := C.nvmlDeviceSetMemClkVfOffset(cnvmlDevice, cOffset) __v := (Return)(__ret) return __v } // nvmlDeviceSetAccountingMode function as declared in nvml/nvml.h func nvmlDeviceSetAccountingMode(nvmlDevice nvmlDevice, Mode EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (C.nvmlEnableState_t)(Mode), cgoAllocsUnknown __ret := C.nvmlDeviceSetAccountingMode(cnvmlDevice, cMode) __v := (Return)(__ret) return __v } // nvmlDeviceClearAccountingPids function as declared in nvml/nvml.h func nvmlDeviceClearAccountingPids(nvmlDevice nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceClearAccountingPids(cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkState function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkState(nvmlDevice nvmlDevice, Link uint32, IsActive *EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cIsActive, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(IsActive)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkState(cnvmlDevice, cLink, cIsActive) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkVersion function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkVersion(nvmlDevice nvmlDevice, Link uint32, Version *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cVersion, _ := (*C.uint)(unsafe.Pointer(Version)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkVersion(cnvmlDevice, cLink, cVersion) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkCapability function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkCapability(nvmlDevice nvmlDevice, Link uint32, Capability NvLinkCapability, CapResult *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cCapability, _ := (C.nvmlNvLinkCapability_t)(Capability), cgoAllocsUnknown cCapResult, _ := (*C.uint)(unsafe.Pointer(CapResult)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkCapability(cnvmlDevice, cLink, cCapability, cCapResult) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkRemotePciInfo_v2 function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkRemotePciInfo_v2(nvmlDevice nvmlDevice, Link uint32, Pci *PciInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cPci, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(Pci)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkRemotePciInfo_v2(cnvmlDevice, cLink, cPci) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkErrorCounter function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkErrorCounter(nvmlDevice nvmlDevice, Link uint32, Counter NvLinkErrorCounter, CounterValue *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cCounter, _ := (C.nvmlNvLinkErrorCounter_t)(Counter), cgoAllocsUnknown cCounterValue, _ := (*C.ulonglong)(unsafe.Pointer(CounterValue)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkErrorCounter(cnvmlDevice, cLink, cCounter, cCounterValue) __v := (Return)(__ret) return __v } // nvmlDeviceResetNvLinkErrorCounters function as declared in nvml/nvml.h func nvmlDeviceResetNvLinkErrorCounters(nvmlDevice nvmlDevice, Link uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown __ret := C.nvmlDeviceResetNvLinkErrorCounters(cnvmlDevice, cLink) __v := (Return)(__ret) return __v } // nvmlDeviceSetNvLinkUtilizationControl function as declared in nvml/nvml.h func nvmlDeviceSetNvLinkUtilizationControl(nvmlDevice nvmlDevice, Link uint32, Counter uint32, Control *NvLinkUtilizationControl, Reset uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cCounter, _ := (C.uint)(Counter), cgoAllocsUnknown cControl, _ := (*C.nvmlNvLinkUtilizationControl_t)(unsafe.Pointer(Control)), cgoAllocsUnknown cReset, _ := (C.uint)(Reset), cgoAllocsUnknown __ret := C.nvmlDeviceSetNvLinkUtilizationControl(cnvmlDevice, cLink, cCounter, cControl, cReset) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkUtilizationControl function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkUtilizationControl(nvmlDevice nvmlDevice, Link uint32, Counter uint32, Control *NvLinkUtilizationControl) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cCounter, _ := (C.uint)(Counter), cgoAllocsUnknown cControl, _ := (*C.nvmlNvLinkUtilizationControl_t)(unsafe.Pointer(Control)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkUtilizationControl(cnvmlDevice, cLink, cCounter, cControl) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkUtilizationCounter function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkUtilizationCounter(nvmlDevice nvmlDevice, Link uint32, Counter uint32, Rxcounter *uint64, Txcounter *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cCounter, _ := (C.uint)(Counter), cgoAllocsUnknown cRxcounter, _ := (*C.ulonglong)(unsafe.Pointer(Rxcounter)), cgoAllocsUnknown cTxcounter, _ := (*C.ulonglong)(unsafe.Pointer(Txcounter)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkUtilizationCounter(cnvmlDevice, cLink, cCounter, cRxcounter, cTxcounter) __v := (Return)(__ret) return __v } // nvmlDeviceFreezeNvLinkUtilizationCounter function as declared in nvml/nvml.h func nvmlDeviceFreezeNvLinkUtilizationCounter(nvmlDevice nvmlDevice, Link uint32, Counter uint32, Freeze EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cCounter, _ := (C.uint)(Counter), cgoAllocsUnknown cFreeze, _ := (C.nvmlEnableState_t)(Freeze), cgoAllocsUnknown __ret := C.nvmlDeviceFreezeNvLinkUtilizationCounter(cnvmlDevice, cLink, cCounter, cFreeze) __v := (Return)(__ret) return __v } // nvmlDeviceResetNvLinkUtilizationCounter function as declared in nvml/nvml.h func nvmlDeviceResetNvLinkUtilizationCounter(nvmlDevice nvmlDevice, Link uint32, Counter uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cCounter, _ := (C.uint)(Counter), cgoAllocsUnknown __ret := C.nvmlDeviceResetNvLinkUtilizationCounter(cnvmlDevice, cLink, cCounter) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkRemoteDeviceType function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkRemoteDeviceType(nvmlDevice nvmlDevice, Link uint32, PNvLinkDeviceType *IntNvLinkDeviceType) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cPNvLinkDeviceType, _ := (*C.nvmlIntNvLinkDeviceType_t)(unsafe.Pointer(PNvLinkDeviceType)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkRemoteDeviceType(cnvmlDevice, cLink, cPNvLinkDeviceType) __v := (Return)(__ret) return __v } // nvmlDeviceSetNvLinkDeviceLowPowerThreshold function as declared in nvml/nvml.h func nvmlDeviceSetNvLinkDeviceLowPowerThreshold(nvmlDevice nvmlDevice, Info *NvLinkPowerThres) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfo, _ := (*C.nvmlNvLinkPowerThres_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlDeviceSetNvLinkDeviceLowPowerThreshold(cnvmlDevice, cInfo) __v := (Return)(__ret) return __v } // nvmlSystemSetNvlinkBwMode function as declared in nvml/nvml.h func nvmlSystemSetNvlinkBwMode(NvlinkBwMode uint32) Return { cNvlinkBwMode, _ := (C.uint)(NvlinkBwMode), cgoAllocsUnknown __ret := C.nvmlSystemSetNvlinkBwMode(cNvlinkBwMode) __v := (Return)(__ret) return __v } // nvmlSystemGetNvlinkBwMode function as declared in nvml/nvml.h func nvmlSystemGetNvlinkBwMode(NvlinkBwMode *uint32) Return { cNvlinkBwMode, _ := (*C.uint)(unsafe.Pointer(NvlinkBwMode)), cgoAllocsUnknown __ret := C.nvmlSystemGetNvlinkBwMode(cNvlinkBwMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvlinkSupportedBwModes function as declared in nvml/nvml.h func nvmlDeviceGetNvlinkSupportedBwModes(nvmlDevice nvmlDevice, SupportedBwMode *NvlinkSupportedBwModes) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSupportedBwMode, _ := (*C.nvmlNvlinkSupportedBwModes_t)(unsafe.Pointer(SupportedBwMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvlinkSupportedBwModes(cnvmlDevice, cSupportedBwMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvlinkBwMode function as declared in nvml/nvml.h func nvmlDeviceGetNvlinkBwMode(nvmlDevice nvmlDevice, GetBwMode *NvlinkGetBwMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cGetBwMode, _ := (*C.nvmlNvlinkGetBwMode_t)(unsafe.Pointer(GetBwMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvlinkBwMode(cnvmlDevice, cGetBwMode) __v := (Return)(__ret) return __v } // nvmlDeviceSetNvlinkBwMode function as declared in nvml/nvml.h func nvmlDeviceSetNvlinkBwMode(nvmlDevice nvmlDevice, SetBwMode *NvlinkSetBwMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cSetBwMode, _ := (*C.nvmlNvlinkSetBwMode_t)(unsafe.Pointer(SetBwMode)), cgoAllocsUnknown __ret := C.nvmlDeviceSetNvlinkBwMode(cnvmlDevice, cSetBwMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkInfo function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkInfo(nvmlDevice nvmlDevice, Info *NvLinkInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfo, _ := (*C.nvmlNvLinkInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkInfo(cnvmlDevice, cInfo) __v := (Return)(__ret) return __v } // nvmlEventSetCreate function as declared in nvml/nvml.h func nvmlEventSetCreate(Set *nvmlEventSet) Return { cSet, _ := (*C.nvmlEventSet_t)(unsafe.Pointer(Set)), cgoAllocsUnknown __ret := C.nvmlEventSetCreate(cSet) __v := (Return)(__ret) return __v } // nvmlDeviceRegisterEvents function as declared in nvml/nvml.h func nvmlDeviceRegisterEvents(nvmlDevice nvmlDevice, EventTypes uint64, Set nvmlEventSet) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cEventTypes, _ := (C.ulonglong)(EventTypes), cgoAllocsUnknown cSet, _ := *(*C.nvmlEventSet_t)(unsafe.Pointer(&Set)), cgoAllocsUnknown __ret := C.nvmlDeviceRegisterEvents(cnvmlDevice, cEventTypes, cSet) __v := (Return)(__ret) return __v } // nvmlDeviceGetSupportedEventTypes function as declared in nvml/nvml.h func nvmlDeviceGetSupportedEventTypes(nvmlDevice nvmlDevice, EventTypes *uint64) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cEventTypes, _ := (*C.ulonglong)(unsafe.Pointer(EventTypes)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSupportedEventTypes(cnvmlDevice, cEventTypes) __v := (Return)(__ret) return __v } // nvmlEventSetWait_v2 function as declared in nvml/nvml.h func nvmlEventSetWait_v2(Set nvmlEventSet, Data *nvmlEventData, Timeoutms uint32) Return { cSet, _ := *(*C.nvmlEventSet_t)(unsafe.Pointer(&Set)), cgoAllocsUnknown cData, _ := (*C.nvmlEventData_t)(unsafe.Pointer(Data)), cgoAllocsUnknown cTimeoutms, _ := (C.uint)(Timeoutms), cgoAllocsUnknown __ret := C.nvmlEventSetWait_v2(cSet, cData, cTimeoutms) __v := (Return)(__ret) return __v } // nvmlEventSetFree function as declared in nvml/nvml.h func nvmlEventSetFree(Set nvmlEventSet) Return { cSet, _ := *(*C.nvmlEventSet_t)(unsafe.Pointer(&Set)), cgoAllocsUnknown __ret := C.nvmlEventSetFree(cSet) __v := (Return)(__ret) return __v } // nvmlSystemEventSetCreate function as declared in nvml/nvml.h func nvmlSystemEventSetCreate(Request *SystemEventSetCreateRequest) Return { cRequest, _ := (*C.nvmlSystemEventSetCreateRequest_t)(unsafe.Pointer(Request)), cgoAllocsUnknown __ret := C.nvmlSystemEventSetCreate(cRequest) __v := (Return)(__ret) return __v } // nvmlSystemEventSetFree function as declared in nvml/nvml.h func nvmlSystemEventSetFree(Request *SystemEventSetFreeRequest) Return { cRequest, _ := (*C.nvmlSystemEventSetFreeRequest_t)(unsafe.Pointer(Request)), cgoAllocsUnknown __ret := C.nvmlSystemEventSetFree(cRequest) __v := (Return)(__ret) return __v } // nvmlSystemRegisterEvents function as declared in nvml/nvml.h func nvmlSystemRegisterEvents(Request *SystemRegisterEventRequest) Return { cRequest, _ := (*C.nvmlSystemRegisterEventRequest_t)(unsafe.Pointer(Request)), cgoAllocsUnknown __ret := C.nvmlSystemRegisterEvents(cRequest) __v := (Return)(__ret) return __v } // nvmlSystemEventSetWait function as declared in nvml/nvml.h func nvmlSystemEventSetWait(Request *SystemEventSetWaitRequest) Return { cRequest, _ := (*C.nvmlSystemEventSetWaitRequest_t)(unsafe.Pointer(Request)), cgoAllocsUnknown __ret := C.nvmlSystemEventSetWait(cRequest) __v := (Return)(__ret) return __v } // nvmlDeviceModifyDrainState function as declared in nvml/nvml.h func nvmlDeviceModifyDrainState(PciInfo *PciInfo, NewState EnableState) Return { cPciInfo, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(PciInfo)), cgoAllocsUnknown cNewState, _ := (C.nvmlEnableState_t)(NewState), cgoAllocsUnknown __ret := C.nvmlDeviceModifyDrainState(cPciInfo, cNewState) __v := (Return)(__ret) return __v } // nvmlDeviceQueryDrainState function as declared in nvml/nvml.h func nvmlDeviceQueryDrainState(PciInfo *PciInfo, CurrentState *EnableState) Return { cPciInfo, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(PciInfo)), cgoAllocsUnknown cCurrentState, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(CurrentState)), cgoAllocsUnknown __ret := C.nvmlDeviceQueryDrainState(cPciInfo, cCurrentState) __v := (Return)(__ret) return __v } // nvmlDeviceRemoveGpu_v2 function as declared in nvml/nvml.h func nvmlDeviceRemoveGpu_v2(PciInfo *PciInfo, GpuState DetachGpuState, LinkState PcieLinkState) Return { cPciInfo, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(PciInfo)), cgoAllocsUnknown cGpuState, _ := (C.nvmlDetachGpuState_t)(GpuState), cgoAllocsUnknown cLinkState, _ := (C.nvmlPcieLinkState_t)(LinkState), cgoAllocsUnknown __ret := C.nvmlDeviceRemoveGpu_v2(cPciInfo, cGpuState, cLinkState) __v := (Return)(__ret) return __v } // nvmlDeviceDiscoverGpus function as declared in nvml/nvml.h func nvmlDeviceDiscoverGpus(PciInfo *PciInfo) Return { cPciInfo, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(PciInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceDiscoverGpus(cPciInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetFieldValues function as declared in nvml/nvml.h func nvmlDeviceGetFieldValues(nvmlDevice nvmlDevice, ValuesCount int32, Values *FieldValue) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cValuesCount, _ := (C.int)(ValuesCount), cgoAllocsUnknown cValues, _ := (*C.nvmlFieldValue_t)(unsafe.Pointer(Values)), cgoAllocsUnknown __ret := C.nvmlDeviceGetFieldValues(cnvmlDevice, cValuesCount, cValues) __v := (Return)(__ret) return __v } // nvmlDeviceClearFieldValues function as declared in nvml/nvml.h func nvmlDeviceClearFieldValues(nvmlDevice nvmlDevice, ValuesCount int32, Values *FieldValue) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cValuesCount, _ := (C.int)(ValuesCount), cgoAllocsUnknown cValues, _ := (*C.nvmlFieldValue_t)(unsafe.Pointer(Values)), cgoAllocsUnknown __ret := C.nvmlDeviceClearFieldValues(cnvmlDevice, cValuesCount, cValues) __v := (Return)(__ret) return __v } // nvmlDeviceGetVirtualizationMode function as declared in nvml/nvml.h func nvmlDeviceGetVirtualizationMode(nvmlDevice nvmlDevice, PVirtualMode *GpuVirtualizationMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPVirtualMode, _ := (*C.nvmlGpuVirtualizationMode_t)(unsafe.Pointer(PVirtualMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVirtualizationMode(cnvmlDevice, cPVirtualMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetHostVgpuMode function as declared in nvml/nvml.h func nvmlDeviceGetHostVgpuMode(nvmlDevice nvmlDevice, PHostVgpuMode *HostVgpuMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPHostVgpuMode, _ := (*C.nvmlHostVgpuMode_t)(unsafe.Pointer(PHostVgpuMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHostVgpuMode(cnvmlDevice, cPHostVgpuMode) __v := (Return)(__ret) return __v } // nvmlDeviceSetVirtualizationMode function as declared in nvml/nvml.h func nvmlDeviceSetVirtualizationMode(nvmlDevice nvmlDevice, VirtualMode GpuVirtualizationMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVirtualMode, _ := (C.nvmlGpuVirtualizationMode_t)(VirtualMode), cgoAllocsUnknown __ret := C.nvmlDeviceSetVirtualizationMode(cnvmlDevice, cVirtualMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuHeterogeneousMode function as declared in nvml/nvml.h func nvmlDeviceGetVgpuHeterogeneousMode(nvmlDevice nvmlDevice, PHeterogeneousMode *VgpuHeterogeneousMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPHeterogeneousMode, _ := (*C.nvmlVgpuHeterogeneousMode_t)(unsafe.Pointer(PHeterogeneousMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuHeterogeneousMode(cnvmlDevice, cPHeterogeneousMode) __v := (Return)(__ret) return __v } // nvmlDeviceSetVgpuHeterogeneousMode function as declared in nvml/nvml.h func nvmlDeviceSetVgpuHeterogeneousMode(nvmlDevice nvmlDevice, PHeterogeneousMode *VgpuHeterogeneousMode) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPHeterogeneousMode, _ := (*C.nvmlVgpuHeterogeneousMode_t)(unsafe.Pointer(PHeterogeneousMode)), cgoAllocsUnknown __ret := C.nvmlDeviceSetVgpuHeterogeneousMode(cnvmlDevice, cPHeterogeneousMode) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetPlacementId function as declared in nvml/nvml.h func nvmlVgpuInstanceGetPlacementId(nvmlVgpuInstance nvmlVgpuInstance, PPlacement *VgpuPlacementId) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cPPlacement, _ := (*C.nvmlVgpuPlacementId_t)(unsafe.Pointer(PPlacement)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetPlacementId(cnvmlVgpuInstance, cPPlacement) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuTypeSupportedPlacements function as declared in nvml/nvml.h func nvmlDeviceGetVgpuTypeSupportedPlacements(nvmlDevice nvmlDevice, nvmlVgpuTypeId nvmlVgpuTypeId, PPlacementList *VgpuPlacementList) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cPPlacementList, _ := (*C.nvmlVgpuPlacementList_t)(unsafe.Pointer(PPlacementList)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuTypeSupportedPlacements(cnvmlDevice, cnvmlVgpuTypeId, cPPlacementList) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuTypeCreatablePlacements function as declared in nvml/nvml.h func nvmlDeviceGetVgpuTypeCreatablePlacements(nvmlDevice nvmlDevice, nvmlVgpuTypeId nvmlVgpuTypeId, PPlacementList *VgpuPlacementList) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cPPlacementList, _ := (*C.nvmlVgpuPlacementList_t)(unsafe.Pointer(PPlacementList)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuTypeCreatablePlacements(cnvmlDevice, cnvmlVgpuTypeId, cPPlacementList) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetGspHeapSize function as declared in nvml/nvml.h func nvmlVgpuTypeGetGspHeapSize(nvmlVgpuTypeId nvmlVgpuTypeId, GspHeapSize *uint64) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cGspHeapSize, _ := (*C.ulonglong)(unsafe.Pointer(GspHeapSize)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetGspHeapSize(cnvmlVgpuTypeId, cGspHeapSize) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetFbReservation function as declared in nvml/nvml.h func nvmlVgpuTypeGetFbReservation(nvmlVgpuTypeId nvmlVgpuTypeId, FbReservation *uint64) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cFbReservation, _ := (*C.ulonglong)(unsafe.Pointer(FbReservation)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetFbReservation(cnvmlVgpuTypeId, cFbReservation) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetRuntimeStateSize function as declared in nvml/nvml.h func nvmlVgpuInstanceGetRuntimeStateSize(nvmlVgpuInstance nvmlVgpuInstance, PState *VgpuRuntimeState) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cPState, _ := (*C.nvmlVgpuRuntimeState_t)(unsafe.Pointer(PState)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetRuntimeStateSize(cnvmlVgpuInstance, cPState) __v := (Return)(__ret) return __v } // nvmlDeviceSetVgpuCapabilities function as declared in nvml/nvml.h func nvmlDeviceSetVgpuCapabilities(nvmlDevice nvmlDevice, Capability DeviceVgpuCapability, State EnableState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCapability, _ := (C.nvmlDeviceVgpuCapability_t)(Capability), cgoAllocsUnknown cState, _ := (C.nvmlEnableState_t)(State), cgoAllocsUnknown __ret := C.nvmlDeviceSetVgpuCapabilities(cnvmlDevice, cCapability, cState) __v := (Return)(__ret) return __v } // nvmlDeviceGetGridLicensableFeatures_v4 function as declared in nvml/nvml.h func nvmlDeviceGetGridLicensableFeatures_v4(nvmlDevice nvmlDevice, PGridLicensableFeatures *GridLicensableFeatures) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPGridLicensableFeatures, _ := (*C.nvmlGridLicensableFeatures_t)(unsafe.Pointer(PGridLicensableFeatures)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGridLicensableFeatures_v4(cnvmlDevice, cPGridLicensableFeatures) __v := (Return)(__ret) return __v } // nvmlGetVgpuDriverCapabilities function as declared in nvml/nvml.h func nvmlGetVgpuDriverCapabilities(Capability VgpuDriverCapability, CapResult *uint32) Return { cCapability, _ := (C.nvmlVgpuDriverCapability_t)(Capability), cgoAllocsUnknown cCapResult, _ := (*C.uint)(unsafe.Pointer(CapResult)), cgoAllocsUnknown __ret := C.nvmlGetVgpuDriverCapabilities(cCapability, cCapResult) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuCapabilities function as declared in nvml/nvml.h func nvmlDeviceGetVgpuCapabilities(nvmlDevice nvmlDevice, Capability DeviceVgpuCapability, CapResult *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCapability, _ := (C.nvmlDeviceVgpuCapability_t)(Capability), cgoAllocsUnknown cCapResult, _ := (*C.uint)(unsafe.Pointer(CapResult)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuCapabilities(cnvmlDevice, cCapability, cCapResult) __v := (Return)(__ret) return __v } // nvmlDeviceGetSupportedVgpus function as declared in nvml/nvml.h func nvmlDeviceGetSupportedVgpus(nvmlDevice nvmlDevice, VgpuCount *uint32, VgpuTypeIds *nvmlVgpuTypeId) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVgpuCount, _ := (*C.uint)(unsafe.Pointer(VgpuCount)), cgoAllocsUnknown cVgpuTypeIds, _ := (*C.nvmlVgpuTypeId_t)(unsafe.Pointer(VgpuTypeIds)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSupportedVgpus(cnvmlDevice, cVgpuCount, cVgpuTypeIds) __v := (Return)(__ret) return __v } // nvmlDeviceGetCreatableVgpus function as declared in nvml/nvml.h func nvmlDeviceGetCreatableVgpus(nvmlDevice nvmlDevice, VgpuCount *uint32, VgpuTypeIds *nvmlVgpuTypeId) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVgpuCount, _ := (*C.uint)(unsafe.Pointer(VgpuCount)), cgoAllocsUnknown cVgpuTypeIds, _ := (*C.nvmlVgpuTypeId_t)(unsafe.Pointer(VgpuTypeIds)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCreatableVgpus(cnvmlDevice, cVgpuCount, cVgpuTypeIds) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetClass function as declared in nvml/nvml.h func nvmlVgpuTypeGetClass(nvmlVgpuTypeId nvmlVgpuTypeId, VgpuTypeClass *byte, Size *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cVgpuTypeClass, _ := (*C.char)(unsafe.Pointer(VgpuTypeClass)), cgoAllocsUnknown cSize, _ := (*C.uint)(unsafe.Pointer(Size)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetClass(cnvmlVgpuTypeId, cVgpuTypeClass, cSize) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetName function as declared in nvml/nvml.h func nvmlVgpuTypeGetName(nvmlVgpuTypeId nvmlVgpuTypeId, VgpuTypeName *byte, Size *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cVgpuTypeName, _ := (*C.char)(unsafe.Pointer(VgpuTypeName)), cgoAllocsUnknown cSize, _ := (*C.uint)(unsafe.Pointer(Size)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetName(cnvmlVgpuTypeId, cVgpuTypeName, cSize) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetGpuInstanceProfileId function as declared in nvml/nvml.h func nvmlVgpuTypeGetGpuInstanceProfileId(nvmlVgpuTypeId nvmlVgpuTypeId, GpuInstanceProfileId *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cGpuInstanceProfileId, _ := (*C.uint)(unsafe.Pointer(GpuInstanceProfileId)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetGpuInstanceProfileId(cnvmlVgpuTypeId, cGpuInstanceProfileId) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetDeviceID function as declared in nvml/nvml.h func nvmlVgpuTypeGetDeviceID(nvmlVgpuTypeId nvmlVgpuTypeId, DeviceID *uint64, SubsystemID *uint64) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cDeviceID, _ := (*C.ulonglong)(unsafe.Pointer(DeviceID)), cgoAllocsUnknown cSubsystemID, _ := (*C.ulonglong)(unsafe.Pointer(SubsystemID)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetDeviceID(cnvmlVgpuTypeId, cDeviceID, cSubsystemID) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetFramebufferSize function as declared in nvml/nvml.h func nvmlVgpuTypeGetFramebufferSize(nvmlVgpuTypeId nvmlVgpuTypeId, FbSize *uint64) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cFbSize, _ := (*C.ulonglong)(unsafe.Pointer(FbSize)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetFramebufferSize(cnvmlVgpuTypeId, cFbSize) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetNumDisplayHeads function as declared in nvml/nvml.h func nvmlVgpuTypeGetNumDisplayHeads(nvmlVgpuTypeId nvmlVgpuTypeId, NumDisplayHeads *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cNumDisplayHeads, _ := (*C.uint)(unsafe.Pointer(NumDisplayHeads)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetNumDisplayHeads(cnvmlVgpuTypeId, cNumDisplayHeads) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetResolution function as declared in nvml/nvml.h func nvmlVgpuTypeGetResolution(nvmlVgpuTypeId nvmlVgpuTypeId, DisplayIndex uint32, Xdim *uint32, Ydim *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cDisplayIndex, _ := (C.uint)(DisplayIndex), cgoAllocsUnknown cXdim, _ := (*C.uint)(unsafe.Pointer(Xdim)), cgoAllocsUnknown cYdim, _ := (*C.uint)(unsafe.Pointer(Ydim)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetResolution(cnvmlVgpuTypeId, cDisplayIndex, cXdim, cYdim) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetLicense function as declared in nvml/nvml.h func nvmlVgpuTypeGetLicense(nvmlVgpuTypeId nvmlVgpuTypeId, VgpuTypeLicenseString *byte, Size uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cVgpuTypeLicenseString, _ := (*C.char)(unsafe.Pointer(VgpuTypeLicenseString)), cgoAllocsUnknown cSize, _ := (C.uint)(Size), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetLicense(cnvmlVgpuTypeId, cVgpuTypeLicenseString, cSize) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetFrameRateLimit function as declared in nvml/nvml.h func nvmlVgpuTypeGetFrameRateLimit(nvmlVgpuTypeId nvmlVgpuTypeId, FrameRateLimit *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cFrameRateLimit, _ := (*C.uint)(unsafe.Pointer(FrameRateLimit)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetFrameRateLimit(cnvmlVgpuTypeId, cFrameRateLimit) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetMaxInstances function as declared in nvml/nvml.h func nvmlVgpuTypeGetMaxInstances(nvmlDevice nvmlDevice, nvmlVgpuTypeId nvmlVgpuTypeId, VgpuInstanceCount *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cVgpuInstanceCount, _ := (*C.uint)(unsafe.Pointer(VgpuInstanceCount)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetMaxInstances(cnvmlDevice, cnvmlVgpuTypeId, cVgpuInstanceCount) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetMaxInstancesPerVm function as declared in nvml/nvml.h func nvmlVgpuTypeGetMaxInstancesPerVm(nvmlVgpuTypeId nvmlVgpuTypeId, VgpuInstanceCountPerVm *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cVgpuInstanceCountPerVm, _ := (*C.uint)(unsafe.Pointer(VgpuInstanceCountPerVm)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetMaxInstancesPerVm(cnvmlVgpuTypeId, cVgpuInstanceCountPerVm) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetBAR1Info function as declared in nvml/nvml.h func nvmlVgpuTypeGetBAR1Info(nvmlVgpuTypeId nvmlVgpuTypeId, Bar1Info *VgpuTypeBar1Info) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cBar1Info, _ := (*C.nvmlVgpuTypeBar1Info_t)(unsafe.Pointer(Bar1Info)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetBAR1Info(cnvmlVgpuTypeId, cBar1Info) __v := (Return)(__ret) return __v } // nvmlDeviceGetActiveVgpus function as declared in nvml/nvml.h func nvmlDeviceGetActiveVgpus(nvmlDevice nvmlDevice, VgpuCount *uint32, VgpuInstances *nvmlVgpuInstance) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVgpuCount, _ := (*C.uint)(unsafe.Pointer(VgpuCount)), cgoAllocsUnknown cVgpuInstances, _ := (*C.nvmlVgpuInstance_t)(unsafe.Pointer(VgpuInstances)), cgoAllocsUnknown __ret := C.nvmlDeviceGetActiveVgpus(cnvmlDevice, cVgpuCount, cVgpuInstances) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetVmID function as declared in nvml/nvml.h func nvmlVgpuInstanceGetVmID(nvmlVgpuInstance nvmlVgpuInstance, VmId *byte, Size uint32, VmIdType *VgpuVmIdType) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cVmId, _ := (*C.char)(unsafe.Pointer(VmId)), cgoAllocsUnknown cSize, _ := (C.uint)(Size), cgoAllocsUnknown cVmIdType, _ := (*C.nvmlVgpuVmIdType_t)(unsafe.Pointer(VmIdType)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetVmID(cnvmlVgpuInstance, cVmId, cSize, cVmIdType) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetUUID function as declared in nvml/nvml.h func nvmlVgpuInstanceGetUUID(nvmlVgpuInstance nvmlVgpuInstance, Uuid *byte, Size uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cUuid, _ := (*C.char)(unsafe.Pointer(Uuid)), cgoAllocsUnknown cSize, _ := (C.uint)(Size), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetUUID(cnvmlVgpuInstance, cUuid, cSize) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetVmDriverVersion function as declared in nvml/nvml.h func nvmlVgpuInstanceGetVmDriverVersion(nvmlVgpuInstance nvmlVgpuInstance, Version *byte, Length uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cVersion, _ := (*C.char)(unsafe.Pointer(Version)), cgoAllocsUnknown cLength, _ := (C.uint)(Length), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetVmDriverVersion(cnvmlVgpuInstance, cVersion, cLength) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetFbUsage function as declared in nvml/nvml.h func nvmlVgpuInstanceGetFbUsage(nvmlVgpuInstance nvmlVgpuInstance, FbUsage *uint64) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cFbUsage, _ := (*C.ulonglong)(unsafe.Pointer(FbUsage)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetFbUsage(cnvmlVgpuInstance, cFbUsage) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetLicenseStatus function as declared in nvml/nvml.h func nvmlVgpuInstanceGetLicenseStatus(nvmlVgpuInstance nvmlVgpuInstance, Licensed *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cLicensed, _ := (*C.uint)(unsafe.Pointer(Licensed)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetLicenseStatus(cnvmlVgpuInstance, cLicensed) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetType function as declared in nvml/nvml.h func nvmlVgpuInstanceGetType(nvmlVgpuInstance nvmlVgpuInstance, nvmlVgpuTypeId *nvmlVgpuTypeId) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cnvmlVgpuTypeId, _ := (*C.nvmlVgpuTypeId_t)(unsafe.Pointer(nvmlVgpuTypeId)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetType(cnvmlVgpuInstance, cnvmlVgpuTypeId) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetFrameRateLimit function as declared in nvml/nvml.h func nvmlVgpuInstanceGetFrameRateLimit(nvmlVgpuInstance nvmlVgpuInstance, FrameRateLimit *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cFrameRateLimit, _ := (*C.uint)(unsafe.Pointer(FrameRateLimit)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetFrameRateLimit(cnvmlVgpuInstance, cFrameRateLimit) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetEccMode function as declared in nvml/nvml.h func nvmlVgpuInstanceGetEccMode(nvmlVgpuInstance nvmlVgpuInstance, EccMode *EnableState) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cEccMode, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(EccMode)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetEccMode(cnvmlVgpuInstance, cEccMode) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetEncoderCapacity function as declared in nvml/nvml.h func nvmlVgpuInstanceGetEncoderCapacity(nvmlVgpuInstance nvmlVgpuInstance, EncoderCapacity *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cEncoderCapacity, _ := (*C.uint)(unsafe.Pointer(EncoderCapacity)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetEncoderCapacity(cnvmlVgpuInstance, cEncoderCapacity) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceSetEncoderCapacity function as declared in nvml/nvml.h func nvmlVgpuInstanceSetEncoderCapacity(nvmlVgpuInstance nvmlVgpuInstance, EncoderCapacity uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cEncoderCapacity, _ := (C.uint)(EncoderCapacity), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceSetEncoderCapacity(cnvmlVgpuInstance, cEncoderCapacity) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetEncoderStats function as declared in nvml/nvml.h func nvmlVgpuInstanceGetEncoderStats(nvmlVgpuInstance nvmlVgpuInstance, SessionCount *uint32, AverageFps *uint32, AverageLatency *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cSessionCount, _ := (*C.uint)(unsafe.Pointer(SessionCount)), cgoAllocsUnknown cAverageFps, _ := (*C.uint)(unsafe.Pointer(AverageFps)), cgoAllocsUnknown cAverageLatency, _ := (*C.uint)(unsafe.Pointer(AverageLatency)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetEncoderStats(cnvmlVgpuInstance, cSessionCount, cAverageFps, cAverageLatency) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetEncoderSessions function as declared in nvml/nvml.h func nvmlVgpuInstanceGetEncoderSessions(nvmlVgpuInstance nvmlVgpuInstance, SessionCount *uint32, SessionInfo *EncoderSessionInfo) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cSessionCount, _ := (*C.uint)(unsafe.Pointer(SessionCount)), cgoAllocsUnknown cSessionInfo, _ := (*C.nvmlEncoderSessionInfo_t)(unsafe.Pointer(SessionInfo)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetEncoderSessions(cnvmlVgpuInstance, cSessionCount, cSessionInfo) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetFBCStats function as declared in nvml/nvml.h func nvmlVgpuInstanceGetFBCStats(nvmlVgpuInstance nvmlVgpuInstance, FbcStats *FBCStats) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cFbcStats, _ := (*C.nvmlFBCStats_t)(unsafe.Pointer(FbcStats)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetFBCStats(cnvmlVgpuInstance, cFbcStats) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetFBCSessions function as declared in nvml/nvml.h func nvmlVgpuInstanceGetFBCSessions(nvmlVgpuInstance nvmlVgpuInstance, SessionCount *uint32, SessionInfo *FBCSessionInfo) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cSessionCount, _ := (*C.uint)(unsafe.Pointer(SessionCount)), cgoAllocsUnknown cSessionInfo, _ := (*C.nvmlFBCSessionInfo_t)(unsafe.Pointer(SessionInfo)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetFBCSessions(cnvmlVgpuInstance, cSessionCount, cSessionInfo) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetGpuInstanceId function as declared in nvml/nvml.h func nvmlVgpuInstanceGetGpuInstanceId(nvmlVgpuInstance nvmlVgpuInstance, GpuInstanceId *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cGpuInstanceId, _ := (*C.uint)(unsafe.Pointer(GpuInstanceId)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetGpuInstanceId(cnvmlVgpuInstance, cGpuInstanceId) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetGpuPciId function as declared in nvml/nvml.h func nvmlVgpuInstanceGetGpuPciId(nvmlVgpuInstance nvmlVgpuInstance, VgpuPciId *byte, Length *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cVgpuPciId, _ := (*C.char)(unsafe.Pointer(VgpuPciId)), cgoAllocsUnknown cLength, _ := (*C.uint)(unsafe.Pointer(Length)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetGpuPciId(cnvmlVgpuInstance, cVgpuPciId, cLength) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetCapabilities function as declared in nvml/nvml.h func nvmlVgpuTypeGetCapabilities(nvmlVgpuTypeId nvmlVgpuTypeId, Capability VgpuCapability, CapResult *uint32) Return { cnvmlVgpuTypeId, _ := (C.nvmlVgpuTypeId_t)(nvmlVgpuTypeId), cgoAllocsUnknown cCapability, _ := (C.nvmlVgpuCapability_t)(Capability), cgoAllocsUnknown cCapResult, _ := (*C.uint)(unsafe.Pointer(CapResult)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetCapabilities(cnvmlVgpuTypeId, cCapability, cCapResult) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetMdevUUID function as declared in nvml/nvml.h func nvmlVgpuInstanceGetMdevUUID(nvmlVgpuInstance nvmlVgpuInstance, MdevUuid *byte, Size uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cMdevUuid, _ := (*C.char)(unsafe.Pointer(MdevUuid)), cgoAllocsUnknown cSize, _ := (C.uint)(Size), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetMdevUUID(cnvmlVgpuInstance, cMdevUuid, cSize) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetCreatableVgpus function as declared in nvml/nvml.h func nvmlGpuInstanceGetCreatableVgpus(nvmlGpuInstance nvmlGpuInstance, PVgpus *VgpuTypeIdInfo) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPVgpus, _ := (*C.nvmlVgpuTypeIdInfo_t)(unsafe.Pointer(PVgpus)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetCreatableVgpus(cnvmlGpuInstance, cPVgpus) __v := (Return)(__ret) return __v } // nvmlVgpuTypeGetMaxInstancesPerGpuInstance function as declared in nvml/nvml.h func nvmlVgpuTypeGetMaxInstancesPerGpuInstance(PMaxInstance *VgpuTypeMaxInstance) Return { cPMaxInstance, _ := (*C.nvmlVgpuTypeMaxInstance_t)(unsafe.Pointer(PMaxInstance)), cgoAllocsUnknown __ret := C.nvmlVgpuTypeGetMaxInstancesPerGpuInstance(cPMaxInstance) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetActiveVgpus function as declared in nvml/nvml.h func nvmlGpuInstanceGetActiveVgpus(nvmlGpuInstance nvmlGpuInstance, PVgpuInstanceInfo *ActiveVgpuInstanceInfo) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPVgpuInstanceInfo, _ := (*C.nvmlActiveVgpuInstanceInfo_t)(unsafe.Pointer(PVgpuInstanceInfo)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetActiveVgpus(cnvmlGpuInstance, cPVgpuInstanceInfo) __v := (Return)(__ret) return __v } // nvmlGpuInstanceSetVgpuSchedulerState function as declared in nvml/nvml.h func nvmlGpuInstanceSetVgpuSchedulerState(nvmlGpuInstance nvmlGpuInstance, PScheduler *VgpuSchedulerState) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPScheduler, _ := (*C.nvmlVgpuSchedulerState_t)(unsafe.Pointer(PScheduler)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceSetVgpuSchedulerState(cnvmlGpuInstance, cPScheduler) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetVgpuSchedulerState function as declared in nvml/nvml.h func nvmlGpuInstanceGetVgpuSchedulerState(nvmlGpuInstance nvmlGpuInstance, PSchedulerStateInfo *VgpuSchedulerStateInfo) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPSchedulerStateInfo, _ := (*C.nvmlVgpuSchedulerStateInfo_t)(unsafe.Pointer(PSchedulerStateInfo)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetVgpuSchedulerState(cnvmlGpuInstance, cPSchedulerStateInfo) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetVgpuSchedulerLog function as declared in nvml/nvml.h func nvmlGpuInstanceGetVgpuSchedulerLog(nvmlGpuInstance nvmlGpuInstance, PSchedulerLogInfo *VgpuSchedulerLogInfo) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPSchedulerLogInfo, _ := (*C.nvmlVgpuSchedulerLogInfo_t)(unsafe.Pointer(PSchedulerLogInfo)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetVgpuSchedulerLog(cnvmlGpuInstance, cPSchedulerLogInfo) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetVgpuTypeCreatablePlacements function as declared in nvml/nvml.h func nvmlGpuInstanceGetVgpuTypeCreatablePlacements(nvmlGpuInstance nvmlGpuInstance, PCreatablePlacementInfo *VgpuCreatablePlacementInfo) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPCreatablePlacementInfo, _ := (*C.nvmlVgpuCreatablePlacementInfo_t)(unsafe.Pointer(PCreatablePlacementInfo)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetVgpuTypeCreatablePlacements(cnvmlGpuInstance, cPCreatablePlacementInfo) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetVgpuHeterogeneousMode function as declared in nvml/nvml.h func nvmlGpuInstanceGetVgpuHeterogeneousMode(nvmlGpuInstance nvmlGpuInstance, PHeterogeneousMode *VgpuHeterogeneousMode) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPHeterogeneousMode, _ := (*C.nvmlVgpuHeterogeneousMode_t)(unsafe.Pointer(PHeterogeneousMode)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetVgpuHeterogeneousMode(cnvmlGpuInstance, cPHeterogeneousMode) __v := (Return)(__ret) return __v } // nvmlGpuInstanceSetVgpuHeterogeneousMode function as declared in nvml/nvml.h func nvmlGpuInstanceSetVgpuHeterogeneousMode(nvmlGpuInstance nvmlGpuInstance, PHeterogeneousMode *VgpuHeterogeneousMode) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cPHeterogeneousMode, _ := (*C.nvmlVgpuHeterogeneousMode_t)(unsafe.Pointer(PHeterogeneousMode)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceSetVgpuHeterogeneousMode(cnvmlGpuInstance, cPHeterogeneousMode) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetMetadata function as declared in nvml/nvml.h func nvmlVgpuInstanceGetMetadata(nvmlVgpuInstance nvmlVgpuInstance, nvmlVgpuMetadata *nvmlVgpuMetadata, BufferSize *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cnvmlVgpuMetadata, _ := (*C.nvmlVgpuMetadata_t)(unsafe.Pointer(nvmlVgpuMetadata)), cgoAllocsUnknown cBufferSize, _ := (*C.uint)(unsafe.Pointer(BufferSize)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetMetadata(cnvmlVgpuInstance, cnvmlVgpuMetadata, cBufferSize) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuMetadata function as declared in nvml/nvml.h func nvmlDeviceGetVgpuMetadata(nvmlDevice nvmlDevice, PgpuMetadata *nvmlVgpuPgpuMetadata, BufferSize *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPgpuMetadata, _ := (*C.nvmlVgpuPgpuMetadata_t)(unsafe.Pointer(PgpuMetadata)), cgoAllocsUnknown cBufferSize, _ := (*C.uint)(unsafe.Pointer(BufferSize)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuMetadata(cnvmlDevice, cPgpuMetadata, cBufferSize) __v := (Return)(__ret) return __v } // nvmlGetVgpuCompatibility function as declared in nvml/nvml.h func nvmlGetVgpuCompatibility(nvmlVgpuMetadata *nvmlVgpuMetadata, PgpuMetadata *nvmlVgpuPgpuMetadata, CompatibilityInfo *VgpuPgpuCompatibility) Return { cnvmlVgpuMetadata, _ := (*C.nvmlVgpuMetadata_t)(unsafe.Pointer(nvmlVgpuMetadata)), cgoAllocsUnknown cPgpuMetadata, _ := (*C.nvmlVgpuPgpuMetadata_t)(unsafe.Pointer(PgpuMetadata)), cgoAllocsUnknown cCompatibilityInfo, _ := (*C.nvmlVgpuPgpuCompatibility_t)(unsafe.Pointer(CompatibilityInfo)), cgoAllocsUnknown __ret := C.nvmlGetVgpuCompatibility(cnvmlVgpuMetadata, cPgpuMetadata, cCompatibilityInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetPgpuMetadataString function as declared in nvml/nvml.h func nvmlDeviceGetPgpuMetadataString(nvmlDevice nvmlDevice, PgpuMetadata *byte, BufferSize *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPgpuMetadata, _ := (*C.char)(unsafe.Pointer(PgpuMetadata)), cgoAllocsUnknown cBufferSize, _ := (*C.uint)(unsafe.Pointer(BufferSize)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPgpuMetadataString(cnvmlDevice, cPgpuMetadata, cBufferSize) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuSchedulerLog function as declared in nvml/nvml.h func nvmlDeviceGetVgpuSchedulerLog(nvmlDevice nvmlDevice, PSchedulerLog *VgpuSchedulerLog) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPSchedulerLog, _ := (*C.nvmlVgpuSchedulerLog_t)(unsafe.Pointer(PSchedulerLog)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuSchedulerLog(cnvmlDevice, cPSchedulerLog) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuSchedulerState function as declared in nvml/nvml.h func nvmlDeviceGetVgpuSchedulerState(nvmlDevice nvmlDevice, PSchedulerState *VgpuSchedulerGetState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPSchedulerState, _ := (*C.nvmlVgpuSchedulerGetState_t)(unsafe.Pointer(PSchedulerState)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuSchedulerState(cnvmlDevice, cPSchedulerState) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuSchedulerCapabilities function as declared in nvml/nvml.h func nvmlDeviceGetVgpuSchedulerCapabilities(nvmlDevice nvmlDevice, PCapabilities *VgpuSchedulerCapabilities) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPCapabilities, _ := (*C.nvmlVgpuSchedulerCapabilities_t)(unsafe.Pointer(PCapabilities)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuSchedulerCapabilities(cnvmlDevice, cPCapabilities) __v := (Return)(__ret) return __v } // nvmlDeviceSetVgpuSchedulerState function as declared in nvml/nvml.h func nvmlDeviceSetVgpuSchedulerState(nvmlDevice nvmlDevice, PSchedulerState *VgpuSchedulerSetState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPSchedulerState, _ := (*C.nvmlVgpuSchedulerSetState_t)(unsafe.Pointer(PSchedulerState)), cgoAllocsUnknown __ret := C.nvmlDeviceSetVgpuSchedulerState(cnvmlDevice, cPSchedulerState) __v := (Return)(__ret) return __v } // nvmlGetVgpuVersion function as declared in nvml/nvml.h func nvmlGetVgpuVersion(Supported *VgpuVersion, Current *VgpuVersion) Return { cSupported, _ := (*C.nvmlVgpuVersion_t)(unsafe.Pointer(Supported)), cgoAllocsUnknown cCurrent, _ := (*C.nvmlVgpuVersion_t)(unsafe.Pointer(Current)), cgoAllocsUnknown __ret := C.nvmlGetVgpuVersion(cSupported, cCurrent) __v := (Return)(__ret) return __v } // nvmlSetVgpuVersion function as declared in nvml/nvml.h func nvmlSetVgpuVersion(VgpuVersion *VgpuVersion) Return { cVgpuVersion, _ := (*C.nvmlVgpuVersion_t)(unsafe.Pointer(VgpuVersion)), cgoAllocsUnknown __ret := C.nvmlSetVgpuVersion(cVgpuVersion) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuUtilization function as declared in nvml/nvml.h func nvmlDeviceGetVgpuUtilization(nvmlDevice nvmlDevice, LastSeenTimeStamp uint64, SampleValType *ValueType, VgpuInstanceSamplesCount *uint32, UtilizationSamples *VgpuInstanceUtilizationSample) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLastSeenTimeStamp, _ := (C.ulonglong)(LastSeenTimeStamp), cgoAllocsUnknown cSampleValType, _ := (*C.nvmlValueType_t)(unsafe.Pointer(SampleValType)), cgoAllocsUnknown cVgpuInstanceSamplesCount, _ := (*C.uint)(unsafe.Pointer(VgpuInstanceSamplesCount)), cgoAllocsUnknown cUtilizationSamples, _ := (*C.nvmlVgpuInstanceUtilizationSample_t)(unsafe.Pointer(UtilizationSamples)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuUtilization(cnvmlDevice, cLastSeenTimeStamp, cSampleValType, cVgpuInstanceSamplesCount, cUtilizationSamples) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuInstancesUtilizationInfo function as declared in nvml/nvml.h func nvmlDeviceGetVgpuInstancesUtilizationInfo(nvmlDevice nvmlDevice, VgpuUtilInfo *VgpuInstancesUtilizationInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVgpuUtilInfo, _ := (*C.nvmlVgpuInstancesUtilizationInfo_t)(unsafe.Pointer(VgpuUtilInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuInstancesUtilizationInfo(cnvmlDevice, cVgpuUtilInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuProcessUtilization function as declared in nvml/nvml.h func nvmlDeviceGetVgpuProcessUtilization(nvmlDevice nvmlDevice, LastSeenTimeStamp uint64, VgpuProcessSamplesCount *uint32, UtilizationSamples *VgpuProcessUtilizationSample) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLastSeenTimeStamp, _ := (C.ulonglong)(LastSeenTimeStamp), cgoAllocsUnknown cVgpuProcessSamplesCount, _ := (*C.uint)(unsafe.Pointer(VgpuProcessSamplesCount)), cgoAllocsUnknown cUtilizationSamples, _ := (*C.nvmlVgpuProcessUtilizationSample_t)(unsafe.Pointer(UtilizationSamples)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuProcessUtilization(cnvmlDevice, cLastSeenTimeStamp, cVgpuProcessSamplesCount, cUtilizationSamples) __v := (Return)(__ret) return __v } // nvmlDeviceGetVgpuProcessesUtilizationInfo function as declared in nvml/nvml.h func nvmlDeviceGetVgpuProcessesUtilizationInfo(nvmlDevice nvmlDevice, VgpuProcUtilInfo *VgpuProcessesUtilizationInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cVgpuProcUtilInfo, _ := (*C.nvmlVgpuProcessesUtilizationInfo_t)(unsafe.Pointer(VgpuProcUtilInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceGetVgpuProcessesUtilizationInfo(cnvmlDevice, cVgpuProcUtilInfo) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetAccountingMode function as declared in nvml/nvml.h func nvmlVgpuInstanceGetAccountingMode(nvmlVgpuInstance nvmlVgpuInstance, Mode *EnableState) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cMode, _ := (*C.nvmlEnableState_t)(unsafe.Pointer(Mode)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetAccountingMode(cnvmlVgpuInstance, cMode) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetAccountingPids function as declared in nvml/nvml.h func nvmlVgpuInstanceGetAccountingPids(nvmlVgpuInstance nvmlVgpuInstance, Count *uint32, Pids *uint32) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown cPids, _ := (*C.uint)(unsafe.Pointer(Pids)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetAccountingPids(cnvmlVgpuInstance, cCount, cPids) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetAccountingStats function as declared in nvml/nvml.h func nvmlVgpuInstanceGetAccountingStats(nvmlVgpuInstance nvmlVgpuInstance, Pid uint32, Stats *AccountingStats) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cPid, _ := (C.uint)(Pid), cgoAllocsUnknown cStats, _ := (*C.nvmlAccountingStats_t)(unsafe.Pointer(Stats)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetAccountingStats(cnvmlVgpuInstance, cPid, cStats) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceClearAccountingPids function as declared in nvml/nvml.h func nvmlVgpuInstanceClearAccountingPids(nvmlVgpuInstance nvmlVgpuInstance) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceClearAccountingPids(cnvmlVgpuInstance) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetLicenseInfo_v2 function as declared in nvml/nvml.h func nvmlVgpuInstanceGetLicenseInfo_v2(nvmlVgpuInstance nvmlVgpuInstance, LicenseInfo *VgpuLicenseInfo) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cLicenseInfo, _ := (*C.nvmlVgpuLicenseInfo_t)(unsafe.Pointer(LicenseInfo)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetLicenseInfo_v2(cnvmlVgpuInstance, cLicenseInfo) __v := (Return)(__ret) return __v } // nvmlGetExcludedDeviceCount function as declared in nvml/nvml.h func nvmlGetExcludedDeviceCount(DeviceCount *uint32) Return { cDeviceCount, _ := (*C.uint)(unsafe.Pointer(DeviceCount)), cgoAllocsUnknown __ret := C.nvmlGetExcludedDeviceCount(cDeviceCount) __v := (Return)(__ret) return __v } // nvmlGetExcludedDeviceInfoByIndex function as declared in nvml/nvml.h func nvmlGetExcludedDeviceInfoByIndex(Index uint32, Info *ExcludedDeviceInfo) Return { cIndex, _ := (C.uint)(Index), cgoAllocsUnknown cInfo, _ := (*C.nvmlExcludedDeviceInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlGetExcludedDeviceInfoByIndex(cIndex, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceReadWritePRM_v1 function as declared in nvml/nvml.h func nvmlDeviceReadWritePRM_v1(nvmlDevice nvmlDevice, Buffer *PRMTLV_v1) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cBuffer, _ := (*C.nvmlPRMTLV_v1_t)(unsafe.Pointer(Buffer)), cgoAllocsUnknown __ret := C.nvmlDeviceReadWritePRM_v1(cnvmlDevice, cBuffer) __v := (Return)(__ret) return __v } // nvmlDeviceSetMigMode function as declared in nvml/nvml.h func nvmlDeviceSetMigMode(nvmlDevice nvmlDevice, Mode uint32, ActivationStatus *Return) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cMode, _ := (C.uint)(Mode), cgoAllocsUnknown cActivationStatus, _ := (*C.nvmlReturn_t)(unsafe.Pointer(ActivationStatus)), cgoAllocsUnknown __ret := C.nvmlDeviceSetMigMode(cnvmlDevice, cMode, cActivationStatus) __v := (Return)(__ret) return __v } // nvmlDeviceGetMigMode function as declared in nvml/nvml.h func nvmlDeviceGetMigMode(nvmlDevice nvmlDevice, CurrentMode *uint32, PendingMode *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrentMode, _ := (*C.uint)(unsafe.Pointer(CurrentMode)), cgoAllocsUnknown cPendingMode, _ := (*C.uint)(unsafe.Pointer(PendingMode)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMigMode(cnvmlDevice, cCurrentMode, cPendingMode) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstanceProfileInfo function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstanceProfileInfo(nvmlDevice nvmlDevice, Profile uint32, Info *GpuInstanceProfileInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfile, _ := (C.uint)(Profile), cgoAllocsUnknown cInfo, _ := (*C.nvmlGpuInstanceProfileInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstanceProfileInfo(cnvmlDevice, cProfile, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstanceProfileInfoV function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstanceProfileInfoV(nvmlDevice nvmlDevice, Profile uint32, Info *GpuInstanceProfileInfo_v2) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfile, _ := (C.uint)(Profile), cgoAllocsUnknown cInfo, _ := (*C.nvmlGpuInstanceProfileInfo_v2_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstanceProfileInfoV(cnvmlDevice, cProfile, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstanceProfileInfoByIdV function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstanceProfileInfoByIdV(nvmlDevice nvmlDevice, ProfileId uint32, Info *GpuInstanceProfileInfo_v2) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cInfo, _ := (*C.nvmlGpuInstanceProfileInfo_v2_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstanceProfileInfoByIdV(cnvmlDevice, cProfileId, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstancePossiblePlacements_v2 function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstancePossiblePlacements_v2(nvmlDevice nvmlDevice, ProfileId uint32, Placements *GpuInstancePlacement, Count *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cPlacements, _ := (*C.nvmlGpuInstancePlacement_t)(unsafe.Pointer(Placements)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstancePossiblePlacements_v2(cnvmlDevice, cProfileId, cPlacements, cCount) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstanceRemainingCapacity function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstanceRemainingCapacity(nvmlDevice nvmlDevice, ProfileId uint32, Count *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstanceRemainingCapacity(cnvmlDevice, cProfileId, cCount) __v := (Return)(__ret) return __v } // nvmlDeviceCreateGpuInstance function as declared in nvml/nvml.h func nvmlDeviceCreateGpuInstance(nvmlDevice nvmlDevice, ProfileId uint32, nvmlGpuInstance *nvmlGpuInstance) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cnvmlGpuInstance, _ := (*C.nvmlGpuInstance_t)(unsafe.Pointer(nvmlGpuInstance)), cgoAllocsUnknown __ret := C.nvmlDeviceCreateGpuInstance(cnvmlDevice, cProfileId, cnvmlGpuInstance) __v := (Return)(__ret) return __v } // nvmlDeviceCreateGpuInstanceWithPlacement function as declared in nvml/nvml.h func nvmlDeviceCreateGpuInstanceWithPlacement(nvmlDevice nvmlDevice, ProfileId uint32, Placement *GpuInstancePlacement, nvmlGpuInstance *nvmlGpuInstance) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cPlacement, _ := (*C.nvmlGpuInstancePlacement_t)(unsafe.Pointer(Placement)), cgoAllocsUnknown cnvmlGpuInstance, _ := (*C.nvmlGpuInstance_t)(unsafe.Pointer(nvmlGpuInstance)), cgoAllocsUnknown __ret := C.nvmlDeviceCreateGpuInstanceWithPlacement(cnvmlDevice, cProfileId, cPlacement, cnvmlGpuInstance) __v := (Return)(__ret) return __v } // nvmlGpuInstanceDestroy function as declared in nvml/nvml.h func nvmlGpuInstanceDestroy(nvmlGpuInstance nvmlGpuInstance) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceDestroy(cnvmlGpuInstance) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstances function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstances(nvmlDevice nvmlDevice, ProfileId uint32, GpuInstances *nvmlGpuInstance, Count *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cGpuInstances, _ := (*C.nvmlGpuInstance_t)(unsafe.Pointer(GpuInstances)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstances(cnvmlDevice, cProfileId, cGpuInstances, cCount) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstanceById function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstanceById(nvmlDevice nvmlDevice, Id uint32, nvmlGpuInstance *nvmlGpuInstance) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cId, _ := (C.uint)(Id), cgoAllocsUnknown cnvmlGpuInstance, _ := (*C.nvmlGpuInstance_t)(unsafe.Pointer(nvmlGpuInstance)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstanceById(cnvmlDevice, cId, cnvmlGpuInstance) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetInfo function as declared in nvml/nvml.h func nvmlGpuInstanceGetInfo(nvmlGpuInstance nvmlGpuInstance, Info *nvmlGpuInstanceInfo) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cInfo, _ := (*C.nvmlGpuInstanceInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetInfo(cnvmlGpuInstance, cInfo) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetComputeInstanceProfileInfo function as declared in nvml/nvml.h func nvmlGpuInstanceGetComputeInstanceProfileInfo(nvmlGpuInstance nvmlGpuInstance, Profile uint32, EngProfile uint32, Info *ComputeInstanceProfileInfo) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cProfile, _ := (C.uint)(Profile), cgoAllocsUnknown cEngProfile, _ := (C.uint)(EngProfile), cgoAllocsUnknown cInfo, _ := (*C.nvmlComputeInstanceProfileInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetComputeInstanceProfileInfo(cnvmlGpuInstance, cProfile, cEngProfile, cInfo) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetComputeInstanceProfileInfoV function as declared in nvml/nvml.h func nvmlGpuInstanceGetComputeInstanceProfileInfoV(nvmlGpuInstance nvmlGpuInstance, Profile uint32, EngProfile uint32, Info *ComputeInstanceProfileInfo_v2) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cProfile, _ := (C.uint)(Profile), cgoAllocsUnknown cEngProfile, _ := (C.uint)(EngProfile), cgoAllocsUnknown cInfo, _ := (*C.nvmlComputeInstanceProfileInfo_v2_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetComputeInstanceProfileInfoV(cnvmlGpuInstance, cProfile, cEngProfile, cInfo) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetComputeInstanceRemainingCapacity function as declared in nvml/nvml.h func nvmlGpuInstanceGetComputeInstanceRemainingCapacity(nvmlGpuInstance nvmlGpuInstance, ProfileId uint32, Count *uint32) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetComputeInstanceRemainingCapacity(cnvmlGpuInstance, cProfileId, cCount) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetComputeInstancePossiblePlacements function as declared in nvml/nvml.h func nvmlGpuInstanceGetComputeInstancePossiblePlacements(nvmlGpuInstance nvmlGpuInstance, ProfileId uint32, Placements *ComputeInstancePlacement, Count *uint32) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cPlacements, _ := (*C.nvmlComputeInstancePlacement_t)(unsafe.Pointer(Placements)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetComputeInstancePossiblePlacements(cnvmlGpuInstance, cProfileId, cPlacements, cCount) __v := (Return)(__ret) return __v } // nvmlGpuInstanceCreateComputeInstance function as declared in nvml/nvml.h func nvmlGpuInstanceCreateComputeInstance(nvmlGpuInstance nvmlGpuInstance, ProfileId uint32, nvmlComputeInstance *nvmlComputeInstance) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cnvmlComputeInstance, _ := (*C.nvmlComputeInstance_t)(unsafe.Pointer(nvmlComputeInstance)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceCreateComputeInstance(cnvmlGpuInstance, cProfileId, cnvmlComputeInstance) __v := (Return)(__ret) return __v } // nvmlGpuInstanceCreateComputeInstanceWithPlacement function as declared in nvml/nvml.h func nvmlGpuInstanceCreateComputeInstanceWithPlacement(nvmlGpuInstance nvmlGpuInstance, ProfileId uint32, Placement *ComputeInstancePlacement, nvmlComputeInstance *nvmlComputeInstance) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cPlacement, _ := (*C.nvmlComputeInstancePlacement_t)(unsafe.Pointer(Placement)), cgoAllocsUnknown cnvmlComputeInstance, _ := (*C.nvmlComputeInstance_t)(unsafe.Pointer(nvmlComputeInstance)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceCreateComputeInstanceWithPlacement(cnvmlGpuInstance, cProfileId, cPlacement, cnvmlComputeInstance) __v := (Return)(__ret) return __v } // nvmlComputeInstanceDestroy function as declared in nvml/nvml.h func nvmlComputeInstanceDestroy(nvmlComputeInstance nvmlComputeInstance) Return { cnvmlComputeInstance, _ := *(*C.nvmlComputeInstance_t)(unsafe.Pointer(&nvmlComputeInstance)), cgoAllocsUnknown __ret := C.nvmlComputeInstanceDestroy(cnvmlComputeInstance) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetComputeInstances function as declared in nvml/nvml.h func nvmlGpuInstanceGetComputeInstances(nvmlGpuInstance nvmlGpuInstance, ProfileId uint32, ComputeInstances *nvmlComputeInstance, Count *uint32) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cComputeInstances, _ := (*C.nvmlComputeInstance_t)(unsafe.Pointer(ComputeInstances)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetComputeInstances(cnvmlGpuInstance, cProfileId, cComputeInstances, cCount) __v := (Return)(__ret) return __v } // nvmlGpuInstanceGetComputeInstanceById function as declared in nvml/nvml.h func nvmlGpuInstanceGetComputeInstanceById(nvmlGpuInstance nvmlGpuInstance, Id uint32, nvmlComputeInstance *nvmlComputeInstance) Return { cnvmlGpuInstance, _ := *(*C.nvmlGpuInstance_t)(unsafe.Pointer(&nvmlGpuInstance)), cgoAllocsUnknown cId, _ := (C.uint)(Id), cgoAllocsUnknown cnvmlComputeInstance, _ := (*C.nvmlComputeInstance_t)(unsafe.Pointer(nvmlComputeInstance)), cgoAllocsUnknown __ret := C.nvmlGpuInstanceGetComputeInstanceById(cnvmlGpuInstance, cId, cnvmlComputeInstance) __v := (Return)(__ret) return __v } // nvmlComputeInstanceGetInfo_v2 function as declared in nvml/nvml.h func nvmlComputeInstanceGetInfo_v2(nvmlComputeInstance nvmlComputeInstance, Info *nvmlComputeInstanceInfo) Return { cnvmlComputeInstance, _ := *(*C.nvmlComputeInstance_t)(unsafe.Pointer(&nvmlComputeInstance)), cgoAllocsUnknown cInfo, _ := (*C.nvmlComputeInstanceInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlComputeInstanceGetInfo_v2(cnvmlComputeInstance, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceIsMigDeviceHandle function as declared in nvml/nvml.h func nvmlDeviceIsMigDeviceHandle(nvmlDevice nvmlDevice, IsMigDevice *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIsMigDevice, _ := (*C.uint)(unsafe.Pointer(IsMigDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceIsMigDeviceHandle(cnvmlDevice, cIsMigDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstanceId function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstanceId(nvmlDevice nvmlDevice, Id *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cId, _ := (*C.uint)(unsafe.Pointer(Id)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstanceId(cnvmlDevice, cId) __v := (Return)(__ret) return __v } // nvmlDeviceGetComputeInstanceId function as declared in nvml/nvml.h func nvmlDeviceGetComputeInstanceId(nvmlDevice nvmlDevice, Id *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cId, _ := (*C.uint)(unsafe.Pointer(Id)), cgoAllocsUnknown __ret := C.nvmlDeviceGetComputeInstanceId(cnvmlDevice, cId) __v := (Return)(__ret) return __v } // nvmlDeviceGetMaxMigDeviceCount function as declared in nvml/nvml.h func nvmlDeviceGetMaxMigDeviceCount(nvmlDevice nvmlDevice, Count *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMaxMigDeviceCount(cnvmlDevice, cCount) __v := (Return)(__ret) return __v } // nvmlDeviceGetMigDeviceHandleByIndex function as declared in nvml/nvml.h func nvmlDeviceGetMigDeviceHandleByIndex(nvmlDevice nvmlDevice, Index uint32, MigDevice *nvmlDevice) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cIndex, _ := (C.uint)(Index), cgoAllocsUnknown cMigDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(MigDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMigDeviceHandleByIndex(cnvmlDevice, cIndex, cMigDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetDeviceHandleFromMigDeviceHandle function as declared in nvml/nvml.h func nvmlDeviceGetDeviceHandleFromMigDeviceHandle(MigDevice nvmlDevice, nvmlDevice *nvmlDevice) Return { cMigDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&MigDevice)), cgoAllocsUnknown cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDeviceHandleFromMigDeviceHandle(cMigDevice, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlGpmMetricsGet function as declared in nvml/nvml.h func nvmlGpmMetricsGet(MetricsGet *nvmlGpmMetricsGetType) Return { cMetricsGet, _ := (*C.nvmlGpmMetricsGet_t)(unsafe.Pointer(MetricsGet)), cgoAllocsUnknown __ret := C.nvmlGpmMetricsGet(cMetricsGet) __v := (Return)(__ret) return __v } // nvmlGpmSampleFree function as declared in nvml/nvml.h func nvmlGpmSampleFree(nvmlGpmSample nvmlGpmSample) Return { cnvmlGpmSample, _ := *(*C.nvmlGpmSample_t)(unsafe.Pointer(&nvmlGpmSample)), cgoAllocsUnknown __ret := C.nvmlGpmSampleFree(cnvmlGpmSample) __v := (Return)(__ret) return __v } // nvmlGpmSampleAlloc function as declared in nvml/nvml.h func nvmlGpmSampleAlloc(nvmlGpmSample *nvmlGpmSample) Return { cnvmlGpmSample, _ := (*C.nvmlGpmSample_t)(unsafe.Pointer(nvmlGpmSample)), cgoAllocsUnknown __ret := C.nvmlGpmSampleAlloc(cnvmlGpmSample) __v := (Return)(__ret) return __v } // nvmlGpmSampleGet function as declared in nvml/nvml.h func nvmlGpmSampleGet(nvmlDevice nvmlDevice, nvmlGpmSample nvmlGpmSample) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cnvmlGpmSample, _ := *(*C.nvmlGpmSample_t)(unsafe.Pointer(&nvmlGpmSample)), cgoAllocsUnknown __ret := C.nvmlGpmSampleGet(cnvmlDevice, cnvmlGpmSample) __v := (Return)(__ret) return __v } // nvmlGpmMigSampleGet function as declared in nvml/nvml.h func nvmlGpmMigSampleGet(nvmlDevice nvmlDevice, GpuInstanceId uint32, nvmlGpmSample nvmlGpmSample) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cGpuInstanceId, _ := (C.uint)(GpuInstanceId), cgoAllocsUnknown cnvmlGpmSample, _ := *(*C.nvmlGpmSample_t)(unsafe.Pointer(&nvmlGpmSample)), cgoAllocsUnknown __ret := C.nvmlGpmMigSampleGet(cnvmlDevice, cGpuInstanceId, cnvmlGpmSample) __v := (Return)(__ret) return __v } // nvmlGpmQueryDeviceSupport function as declared in nvml/nvml.h func nvmlGpmQueryDeviceSupport(nvmlDevice nvmlDevice, GpmSupport *GpmSupport) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cGpmSupport, _ := (*C.nvmlGpmSupport_t)(unsafe.Pointer(GpmSupport)), cgoAllocsUnknown __ret := C.nvmlGpmQueryDeviceSupport(cnvmlDevice, cGpmSupport) __v := (Return)(__ret) return __v } // nvmlGpmQueryIfStreamingEnabled function as declared in nvml/nvml.h func nvmlGpmQueryIfStreamingEnabled(nvmlDevice nvmlDevice, State *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cState, _ := (*C.uint)(unsafe.Pointer(State)), cgoAllocsUnknown __ret := C.nvmlGpmQueryIfStreamingEnabled(cnvmlDevice, cState) __v := (Return)(__ret) return __v } // nvmlGpmSetStreamingEnabled function as declared in nvml/nvml.h func nvmlGpmSetStreamingEnabled(nvmlDevice nvmlDevice, State uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cState, _ := (C.uint)(State), cgoAllocsUnknown __ret := C.nvmlGpmSetStreamingEnabled(cnvmlDevice, cState) __v := (Return)(__ret) return __v } // nvmlDeviceGetCapabilities function as declared in nvml/nvml.h func nvmlDeviceGetCapabilities(nvmlDevice nvmlDevice, Caps *DeviceCapabilities) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCaps, _ := (*C.nvmlDeviceCapabilities_t)(unsafe.Pointer(Caps)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCapabilities(cnvmlDevice, cCaps) __v := (Return)(__ret) return __v } // nvmlDeviceWorkloadPowerProfileGetProfilesInfo function as declared in nvml/nvml.h func nvmlDeviceWorkloadPowerProfileGetProfilesInfo(nvmlDevice nvmlDevice, ProfilesInfo *WorkloadPowerProfileProfilesInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfilesInfo, _ := (*C.nvmlWorkloadPowerProfileProfilesInfo_t)(unsafe.Pointer(ProfilesInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceWorkloadPowerProfileGetProfilesInfo(cnvmlDevice, cProfilesInfo) __v := (Return)(__ret) return __v } // nvmlDeviceWorkloadPowerProfileGetCurrentProfiles function as declared in nvml/nvml.h func nvmlDeviceWorkloadPowerProfileGetCurrentProfiles(nvmlDevice nvmlDevice, CurrentProfiles *WorkloadPowerProfileCurrentProfiles) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrentProfiles, _ := (*C.nvmlWorkloadPowerProfileCurrentProfiles_t)(unsafe.Pointer(CurrentProfiles)), cgoAllocsUnknown __ret := C.nvmlDeviceWorkloadPowerProfileGetCurrentProfiles(cnvmlDevice, cCurrentProfiles) __v := (Return)(__ret) return __v } // nvmlDeviceWorkloadPowerProfileSetRequestedProfiles function as declared in nvml/nvml.h func nvmlDeviceWorkloadPowerProfileSetRequestedProfiles(nvmlDevice nvmlDevice, RequestedProfiles *WorkloadPowerProfileRequestedProfiles) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cRequestedProfiles, _ := (*C.nvmlWorkloadPowerProfileRequestedProfiles_t)(unsafe.Pointer(RequestedProfiles)), cgoAllocsUnknown __ret := C.nvmlDeviceWorkloadPowerProfileSetRequestedProfiles(cnvmlDevice, cRequestedProfiles) __v := (Return)(__ret) return __v } // nvmlDeviceWorkloadPowerProfileClearRequestedProfiles function as declared in nvml/nvml.h func nvmlDeviceWorkloadPowerProfileClearRequestedProfiles(nvmlDevice nvmlDevice, RequestedProfiles *WorkloadPowerProfileRequestedProfiles) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cRequestedProfiles, _ := (*C.nvmlWorkloadPowerProfileRequestedProfiles_t)(unsafe.Pointer(RequestedProfiles)), cgoAllocsUnknown __ret := C.nvmlDeviceWorkloadPowerProfileClearRequestedProfiles(cnvmlDevice, cRequestedProfiles) __v := (Return)(__ret) return __v } // nvmlDevicePowerSmoothingActivatePresetProfile function as declared in nvml/nvml.h func nvmlDevicePowerSmoothingActivatePresetProfile(nvmlDevice nvmlDevice, Profile *PowerSmoothingProfile) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfile, _ := (*C.nvmlPowerSmoothingProfile_t)(unsafe.Pointer(Profile)), cgoAllocsUnknown __ret := C.nvmlDevicePowerSmoothingActivatePresetProfile(cnvmlDevice, cProfile) __v := (Return)(__ret) return __v } // nvmlDevicePowerSmoothingUpdatePresetProfileParam function as declared in nvml/nvml.h func nvmlDevicePowerSmoothingUpdatePresetProfileParam(nvmlDevice nvmlDevice, Profile *PowerSmoothingProfile) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfile, _ := (*C.nvmlPowerSmoothingProfile_t)(unsafe.Pointer(Profile)), cgoAllocsUnknown __ret := C.nvmlDevicePowerSmoothingUpdatePresetProfileParam(cnvmlDevice, cProfile) __v := (Return)(__ret) return __v } // nvmlDevicePowerSmoothingSetState function as declared in nvml/nvml.h func nvmlDevicePowerSmoothingSetState(nvmlDevice nvmlDevice, State *PowerSmoothingState) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cState, _ := (*C.nvmlPowerSmoothingState_t)(unsafe.Pointer(State)), cgoAllocsUnknown __ret := C.nvmlDevicePowerSmoothingSetState(cnvmlDevice, cState) __v := (Return)(__ret) return __v } // nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts function as declared in nvml/nvml.h func nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts(nvmlDevice nvmlDevice, ErrorCounts *EccSramUniqueUncorrectedErrorCounts) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cErrorCounts, _ := (*C.nvmlEccSramUniqueUncorrectedErrorCounts_t)(unsafe.Pointer(ErrorCounts)), cgoAllocsUnknown __ret := C.nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts(cnvmlDevice, cErrorCounts) __v := (Return)(__ret) return __v } // nvmlInit_v1 function as declared in nvml/nvml.h func nvmlInit_v1() Return { __ret := C.nvmlInit() __v := (Return)(__ret) return __v } // nvmlDeviceGetCount_v1 function as declared in nvml/nvml.h func nvmlDeviceGetCount_v1(DeviceCount *uint32) Return { cDeviceCount, _ := (*C.uint)(unsafe.Pointer(DeviceCount)), cgoAllocsUnknown __ret := C.nvmlDeviceGetCount(cDeviceCount) __v := (Return)(__ret) return __v } // nvmlDeviceGetHandleByIndex_v1 function as declared in nvml/nvml.h func nvmlDeviceGetHandleByIndex_v1(Index uint32, nvmlDevice *nvmlDevice) Return { cIndex, _ := (C.uint)(Index), cgoAllocsUnknown cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHandleByIndex(cIndex, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetHandleByPciBusId_v1 function as declared in nvml/nvml.h func nvmlDeviceGetHandleByPciBusId_v1(PciBusId string, nvmlDevice *nvmlDevice) Return { cPciBusId, _ := unpackPCharString(PciBusId) cnvmlDevice, _ := (*C.nvmlDevice_t)(unsafe.Pointer(nvmlDevice)), cgoAllocsUnknown __ret := C.nvmlDeviceGetHandleByPciBusId(cPciBusId, cnvmlDevice) __v := (Return)(__ret) return __v } // nvmlDeviceGetPciInfo_v1 function as declared in nvml/nvml.h func nvmlDeviceGetPciInfo_v1(nvmlDevice nvmlDevice, Pci *PciInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPci, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(Pci)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPciInfo(cnvmlDevice, cPci) __v := (Return)(__ret) return __v } // nvmlDeviceGetPciInfo_v2 function as declared in nvml/nvml.h func nvmlDeviceGetPciInfo_v2(nvmlDevice nvmlDevice, Pci *PciInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPci, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(Pci)), cgoAllocsUnknown __ret := C.nvmlDeviceGetPciInfo_v2(cnvmlDevice, cPci) __v := (Return)(__ret) return __v } // nvmlDeviceGetNvLinkRemotePciInfo_v1 function as declared in nvml/nvml.h func nvmlDeviceGetNvLinkRemotePciInfo_v1(nvmlDevice nvmlDevice, Link uint32, Pci *PciInfo) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cLink, _ := (C.uint)(Link), cgoAllocsUnknown cPci, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(Pci)), cgoAllocsUnknown __ret := C.nvmlDeviceGetNvLinkRemotePciInfo(cnvmlDevice, cLink, cPci) __v := (Return)(__ret) return __v } // nvmlDeviceGetGridLicensableFeatures_v1 function as declared in nvml/nvml.h func nvmlDeviceGetGridLicensableFeatures_v1(nvmlDevice nvmlDevice, PGridLicensableFeatures *GridLicensableFeatures) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPGridLicensableFeatures, _ := (*C.nvmlGridLicensableFeatures_t)(unsafe.Pointer(PGridLicensableFeatures)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGridLicensableFeatures(cnvmlDevice, cPGridLicensableFeatures) __v := (Return)(__ret) return __v } // nvmlDeviceGetGridLicensableFeatures_v2 function as declared in nvml/nvml.h func nvmlDeviceGetGridLicensableFeatures_v2(nvmlDevice nvmlDevice, PGridLicensableFeatures *GridLicensableFeatures) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPGridLicensableFeatures, _ := (*C.nvmlGridLicensableFeatures_t)(unsafe.Pointer(PGridLicensableFeatures)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGridLicensableFeatures_v2(cnvmlDevice, cPGridLicensableFeatures) __v := (Return)(__ret) return __v } // nvmlDeviceGetGridLicensableFeatures_v3 function as declared in nvml/nvml.h func nvmlDeviceGetGridLicensableFeatures_v3(nvmlDevice nvmlDevice, PGridLicensableFeatures *GridLicensableFeatures) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cPGridLicensableFeatures, _ := (*C.nvmlGridLicensableFeatures_t)(unsafe.Pointer(PGridLicensableFeatures)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGridLicensableFeatures_v3(cnvmlDevice, cPGridLicensableFeatures) __v := (Return)(__ret) return __v } // nvmlDeviceRemoveGpu_v1 function as declared in nvml/nvml.h func nvmlDeviceRemoveGpu_v1(PciInfo *PciInfo) Return { cPciInfo, _ := (*C.nvmlPciInfo_t)(unsafe.Pointer(PciInfo)), cgoAllocsUnknown __ret := C.nvmlDeviceRemoveGpu(cPciInfo) __v := (Return)(__ret) return __v } // nvmlEventSetWait_v1 function as declared in nvml/nvml.h func nvmlEventSetWait_v1(Set nvmlEventSet, Data *nvmlEventData, Timeoutms uint32) Return { cSet, _ := *(*C.nvmlEventSet_t)(unsafe.Pointer(&Set)), cgoAllocsUnknown cData, _ := (*C.nvmlEventData_t)(unsafe.Pointer(Data)), cgoAllocsUnknown cTimeoutms, _ := (C.uint)(Timeoutms), cgoAllocsUnknown __ret := C.nvmlEventSetWait(cSet, cData, cTimeoutms) __v := (Return)(__ret) return __v } // nvmlDeviceGetAttributes_v1 function as declared in nvml/nvml.h func nvmlDeviceGetAttributes_v1(nvmlDevice nvmlDevice, Attributes *DeviceAttributes) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cAttributes, _ := (*C.nvmlDeviceAttributes_t)(unsafe.Pointer(Attributes)), cgoAllocsUnknown __ret := C.nvmlDeviceGetAttributes(cnvmlDevice, cAttributes) __v := (Return)(__ret) return __v } // nvmlComputeInstanceGetInfo_v1 function as declared in nvml/nvml.h func nvmlComputeInstanceGetInfo_v1(nvmlComputeInstance nvmlComputeInstance, Info *nvmlComputeInstanceInfo) Return { cnvmlComputeInstance, _ := *(*C.nvmlComputeInstance_t)(unsafe.Pointer(&nvmlComputeInstance)), cgoAllocsUnknown cInfo, _ := (*C.nvmlComputeInstanceInfo_t)(unsafe.Pointer(Info)), cgoAllocsUnknown __ret := C.nvmlComputeInstanceGetInfo(cnvmlComputeInstance, cInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetComputeRunningProcesses_v1 function as declared in nvml/nvml.h func nvmlDeviceGetComputeRunningProcesses_v1(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo_v1) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_v1_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetComputeRunningProcesses(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetComputeRunningProcesses_v2 function as declared in nvml/nvml.h func nvmlDeviceGetComputeRunningProcesses_v2(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo_v2) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_v2_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetComputeRunningProcesses_v2(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetGraphicsRunningProcesses_v1 function as declared in nvml/nvml.h func nvmlDeviceGetGraphicsRunningProcesses_v1(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo_v1) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_v1_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGraphicsRunningProcesses(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetGraphicsRunningProcesses_v2 function as declared in nvml/nvml.h func nvmlDeviceGetGraphicsRunningProcesses_v2(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo_v2) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_v2_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGraphicsRunningProcesses_v2(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetMPSComputeRunningProcesses_v1 function as declared in nvml/nvml.h func nvmlDeviceGetMPSComputeRunningProcesses_v1(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo_v1) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_v1_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMPSComputeRunningProcesses(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetMPSComputeRunningProcesses_v2 function as declared in nvml/nvml.h func nvmlDeviceGetMPSComputeRunningProcesses_v2(nvmlDevice nvmlDevice, InfoCount *uint32, Infos *ProcessInfo_v2) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cInfoCount, _ := (*C.uint)(unsafe.Pointer(InfoCount)), cgoAllocsUnknown cInfos, _ := (*C.nvmlProcessInfo_v2_t)(unsafe.Pointer(Infos)), cgoAllocsUnknown __ret := C.nvmlDeviceGetMPSComputeRunningProcesses_v2(cnvmlDevice, cInfoCount, cInfos) __v := (Return)(__ret) return __v } // nvmlDeviceGetGpuInstancePossiblePlacements_v1 function as declared in nvml/nvml.h func nvmlDeviceGetGpuInstancePossiblePlacements_v1(nvmlDevice nvmlDevice, ProfileId uint32, Placements *GpuInstancePlacement, Count *uint32) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cProfileId, _ := (C.uint)(ProfileId), cgoAllocsUnknown cPlacements, _ := (*C.nvmlGpuInstancePlacement_t)(unsafe.Pointer(Placements)), cgoAllocsUnknown cCount, _ := (*C.uint)(unsafe.Pointer(Count)), cgoAllocsUnknown __ret := C.nvmlDeviceGetGpuInstancePossiblePlacements(cnvmlDevice, cProfileId, cPlacements, cCount) __v := (Return)(__ret) return __v } // nvmlVgpuInstanceGetLicenseInfo_v1 function as declared in nvml/nvml.h func nvmlVgpuInstanceGetLicenseInfo_v1(nvmlVgpuInstance nvmlVgpuInstance, LicenseInfo *VgpuLicenseInfo) Return { cnvmlVgpuInstance, _ := (C.nvmlVgpuInstance_t)(nvmlVgpuInstance), cgoAllocsUnknown cLicenseInfo, _ := (*C.nvmlVgpuLicenseInfo_t)(unsafe.Pointer(LicenseInfo)), cgoAllocsUnknown __ret := C.nvmlVgpuInstanceGetLicenseInfo(cnvmlVgpuInstance, cLicenseInfo) __v := (Return)(__ret) return __v } // nvmlDeviceGetDriverModel_v1 function as declared in nvml/nvml.h func nvmlDeviceGetDriverModel_v1(nvmlDevice nvmlDevice, Current *DriverModel, Pending *DriverModel) Return { cnvmlDevice, _ := *(*C.nvmlDevice_t)(unsafe.Pointer(&nvmlDevice)), cgoAllocsUnknown cCurrent, _ := (*C.nvmlDriverModel_t)(unsafe.Pointer(Current)), cgoAllocsUnknown cPending, _ := (*C.nvmlDriverModel_t)(unsafe.Pointer(Pending)), cgoAllocsUnknown __ret := C.nvmlDeviceGetDriverModel(cnvmlDevice, cCurrent, cPending) __v := (Return)(__ret) return __v } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/nvml.h000066400000000000000000026045671520540370700256560ustar00rootroot00000000000000/*** NVML VERSION: 13.0.39 ***/ /*** From https://developer.download.nvidia.com/compute/cuda/redist/cuda_nvml_dev/linux-x86_64/cuda_nvml_dev-linux-x86_64-13.0.39-archive.tar.xz ***/ /* * Copyright 1993-2025 NVIDIA Corporation. All rights reserved. * * NOTICE TO USER: * * This source code is subject to NVIDIA ownership rights under U.S. and * international Copyright laws. Users and possessors of this source code * are hereby granted a nonexclusive, royalty-free license to use this code * in individual and commercial software. * * NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE * CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR * IMPLIED WARRANTY OF ANY KIND. NVIDIA DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE. * IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE * OR PERFORMANCE OF THIS SOURCE CODE. * * U.S. Government End Users. This source code is a "commercial item" as * that term is defined at 48 C.F.R. 2.101 (OCT 1995), consisting of * "commercial computer software" and "commercial computer software * documentation" as such terms are used in 48 C.F.R. 12.212 (SEPT 1995) * and is provided to the U.S. Government only as a commercial end item. * Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through * 227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the * source code with only those rights set forth herein. * * Any use of this source code in individual and commercial software must * include, in the user documentation and internal comments to the code, * the above Disclaimer and U.S. Government End Users Notice. */ /* NVML API Reference The NVIDIA Management Library (NVML) is a C-based programmatic interface for monitoring and managing various states within NVIDIA Tesla &tm; GPUs. It is intended to be a platform for building 3rd party applications, and is also the underlying library for the NVIDIA-supported nvidia-smi tool. NVML is thread-safe so it is safe to make simultaneous NVML calls from multiple threads. API Documentation Supported platforms: - Windows: Windows Server 2008 R2 64bit, Windows Server 2012 R2 64bit, Windows 7 64bit, Windows 8 64bit, Windows 10 64bit - Linux: 32-bit and 64-bit - Hypervisors: Windows Server 2008R2/2012 Hyper-V 64bit, Citrix XenServer 6.2 SP1+, VMware ESX 5.1/5.5 Supported products: - Full Support - All Tesla products, starting with the Fermi architecture - All Quadro products, starting with the Fermi architecture - All vGPU Software products, starting with the Kepler architecture - Selected GeForce Titan products - Limited Support - All Geforce products, starting with the Fermi architecture The NVML library can be found at \%ProgramW6432\%\\"NVIDIA Corporation"\\NVSMI\\ on Windows. It is not be added to the system path by default. To dynamically link to NVML, add this path to the PATH environmental variable. To dynamically load NVML, call LoadLibrary with this path. On Linux the NVML library will be found on the standard library path. For 64 bit Linux, both the 32 bit and 64 bit NVML libraries will be installed. Online documentation for this library is available at http://docs.nvidia.com/deploy/nvml-api/index.html */ #ifndef __nvml_nvml_h__ #define __nvml_nvml_h__ #ifdef __cplusplus extern "C" { #endif /* * On Windows, set up methods for DLL export * define NVML_STATIC_IMPORT when using nvml_loader library */ #if defined _WINDOWS #if !defined NVML_STATIC_IMPORT #if defined NVML_LIB_EXPORT #define DECLDIR __declspec(dllexport) #else #define DECLDIR __declspec(dllimport) #endif #else #define DECLDIR #endif #else #define DECLDIR #endif /* * Deprecation definition. Starting CUDA 13.1 this will change to: * #if defined _WINDOWS * #define DEPRECATED(ver) __declspec(deprecated) * #else * #define DEPRECATED(ver) __attribute__((deprecated)) * #endif */ #define DEPRECATED(ver) /* nop in CUDA 13.0, enabled in CUDA 13.1 */ #define NVML_MCDM_SUPPORT /** * NVML API versioning support */ #define NVML_API_VERSION 13 #define NVML_API_VERSION_STR "13" /** * Defining NVML_NO_UNVERSIONED_FUNC_DEFS will disable "auto upgrading" of APIs. * e.g. the user will have to call nvmlInit_v2 instead of nvmlInit. Enable this * guard if you need to support older versions of the API */ #ifndef NVML_NO_UNVERSIONED_FUNC_DEFS #define nvmlInit nvmlInit_v2 #define nvmlDeviceGetPciInfo nvmlDeviceGetPciInfo_v3 #define nvmlDeviceGetCount nvmlDeviceGetCount_v2 #define nvmlDeviceGetHandleByIndex nvmlDeviceGetHandleByIndex_v2 #define nvmlDeviceGetHandleByPciBusId nvmlDeviceGetHandleByPciBusId_v2 #define nvmlDeviceGetNvLinkRemotePciInfo nvmlDeviceGetNvLinkRemotePciInfo_v2 #define nvmlDeviceRemoveGpu nvmlDeviceRemoveGpu_v2 #define nvmlDeviceGetGridLicensableFeatures nvmlDeviceGetGridLicensableFeatures_v4 #define nvmlEventSetWait nvmlEventSetWait_v2 #define nvmlDeviceGetAttributes nvmlDeviceGetAttributes_v2 #define nvmlComputeInstanceGetInfo nvmlComputeInstanceGetInfo_v2 #define nvmlDeviceGetComputeRunningProcesses nvmlDeviceGetComputeRunningProcesses_v3 #define nvmlDeviceGetGraphicsRunningProcesses nvmlDeviceGetGraphicsRunningProcesses_v3 #define nvmlDeviceGetMPSComputeRunningProcesses nvmlDeviceGetMPSComputeRunningProcesses_v3 #define nvmlBlacklistDeviceInfo_t nvmlExcludedDeviceInfo_t #define nvmlGetBlacklistDeviceCount nvmlGetExcludedDeviceCount #define nvmlGetBlacklistDeviceInfoByIndex nvmlGetExcludedDeviceInfoByIndex #define nvmlDeviceGetGpuInstancePossiblePlacements nvmlDeviceGetGpuInstancePossiblePlacements_v2 #define nvmlVgpuInstanceGetLicenseInfo nvmlVgpuInstanceGetLicenseInfo_v2 #define nvmlDeviceGetDriverModel nvmlDeviceGetDriverModel_v2 #endif // #ifndef NVML_NO_UNVERSIONED_FUNC_DEFS #define NVML_STRUCT_VERSION(data, ver) (unsigned int)(sizeof(nvml ## data ## _v ## ver ## _t) | \ (ver << 24U)) /***************************************************************************************************/ /** @defgroup nvmlDeviceStructs Device Structs * @{ */ /***************************************************************************************************/ /** * Special constant that some fields take when they are not available. * Used when only part of the struct is not available. * * Each structure explicitly states when to check for this value. */ #define NVML_VALUE_NOT_AVAILABLE (-1) typedef struct { struct nvmlDevice_st* handle; } nvmlDevice_t; typedef struct { struct nvmlGpuInstance_st* handle; } nvmlGpuInstance_t; /** * Buffer size guaranteed to be large enough for pci bus id */ #define NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE 32 /** * Buffer size guaranteed to be large enough for pci bus id for \p busIdLegacy */ #define NVML_DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE 16 /** * PCI information about a GPU device. */ typedef struct { unsigned int version; //!< The version number of this struct unsigned int domain; //!< The PCI domain on which the device's bus resides, 0 to 0xffffffff unsigned int bus; //!< The bus on which the device resides, 0 to 0xff unsigned int device; //!< The device's id on the bus, 0 to 31 unsigned int pciDeviceId; //!< The combined 16-bit device id and 16-bit vendor id unsigned int pciSubSystemId; //!< The 32-bit Sub System Device ID unsigned int baseClass; //!< The 8-bit PCI base class code unsigned int subClass; //!< The 8-bit PCI sub class code char busId[NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE]; //!< The tuple domain:bus:device.function PCI identifier (& NULL terminator) } nvmlPciInfoExt_v1_t; typedef nvmlPciInfoExt_v1_t nvmlPciInfoExt_t; #define nvmlPciInfoExt_v1 NVML_STRUCT_VERSION(PciInfoExt, 1) /** * PCI information about a GPU device. */ typedef struct nvmlPciInfo_st { char busIdLegacy[NVML_DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE]; //!< The legacy tuple domain:bus:device.function PCI identifier (& NULL terminator) unsigned int domain; //!< The PCI domain on which the device's bus resides, 0 to 0xffffffff unsigned int bus; //!< The bus on which the device resides, 0 to 0xff unsigned int device; //!< The device's id on the bus, 0 to 31 unsigned int pciDeviceId; //!< The combined 16-bit device id and 16-bit vendor id // Added in NVML 2.285 API unsigned int pciSubSystemId; //!< The 32-bit Sub System Device ID char busId[NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE]; //!< The tuple domain:bus:device.function PCI identifier (& NULL terminator) } nvmlPciInfo_t; /** * PCI format string for \p busIdLegacy */ #define NVML_DEVICE_PCI_BUS_ID_LEGACY_FMT "%04X:%02X:%02X.0" /** * PCI format string for \p busId */ #define NVML_DEVICE_PCI_BUS_ID_FMT "%08X:%02X:%02X.0" /** * Utility macro for filling the pci bus id format from a nvmlPciInfo_t */ #define NVML_DEVICE_PCI_BUS_ID_FMT_ARGS(pciInfo) (pciInfo)->domain, \ (pciInfo)->bus, \ (pciInfo)->device /** * Detailed ECC error counts for a device. * * @deprecated Different GPU families can have different memory error counters * See \ref nvmlDeviceGetMemoryErrorCounter */ typedef struct nvmlEccErrorCounts_st { unsigned long long l1Cache; //!< L1 cache errors unsigned long long l2Cache; //!< L2 cache errors unsigned long long deviceMemory; //!< Device memory errors unsigned long long registerFile; //!< Register file errors } nvmlEccErrorCounts_t; /** * Utilization information for a device. * Each sample period may be between 1 second and 1/6 second, depending on the product being queried. */ typedef struct nvmlUtilization_st { unsigned int gpu; //!< Percent of time over the past sample period during which one or more kernels was executing on the GPU unsigned int memory; //!< Percent of time over the past sample period during which global (device) memory was being read or written } nvmlUtilization_t; /** * Memory allocation information for a device (v1). * The total amount is equal to the sum of the amounts of free and used memory. */ typedef struct nvmlMemory_st { unsigned long long total; //!< Total physical device memory (in bytes) unsigned long long free; //!< Unallocated device memory (in bytes) unsigned long long used; //!< Sum of Reserved and Allocated device memory (in bytes). //!< Note that the driver/GPU always sets aside a small amount of memory for bookkeeping } nvmlMemory_t; /** * Memory allocation information for a device (v2). * * Version 2 adds versioning for the struct and the amount of system-reserved memory as an output. */ typedef struct nvmlMemory_v2_st { unsigned int version; //!< Structure format version (must be 2) unsigned long long total; //!< Total physical device memory (in bytes) unsigned long long reserved; //!< Device memory (in bytes) reserved for system use (driver or firmware) unsigned long long free; //!< Unallocated device memory (in bytes) unsigned long long used; //!< Allocated device memory (in bytes). } nvmlMemory_v2_t; #define nvmlMemory_v2 NVML_STRUCT_VERSION(Memory, 2) /** * BAR1 Memory allocation Information for a device */ typedef struct nvmlBAR1Memory_st { unsigned long long bar1Total; //!< Total BAR1 Memory (in bytes) unsigned long long bar1Free; //!< Unallocated BAR1 Memory (in bytes) unsigned long long bar1Used; //!< Allocated Used Memory (in bytes) }nvmlBAR1Memory_t; /** * Information about running compute processes on the GPU, legacy version * for older versions of the API. */ typedef struct nvmlProcessInfo_v1_st { unsigned int pid; //!< Process ID unsigned long long usedGpuMemory; //!< Amount of used GPU memory in bytes. //! Under WDDM, \ref NVML_VALUE_NOT_AVAILABLE is always reported //! because Windows KMD manages all the memory and not the NVIDIA driver } nvmlProcessInfo_v1_t; /** * Information about running compute processes on the GPU */ typedef struct nvmlProcessInfo_v2_st { unsigned int pid; //!< Process ID unsigned long long usedGpuMemory; //!< Amount of used GPU memory in bytes. //! Under WDDM, \ref NVML_VALUE_NOT_AVAILABLE is always reported //! because Windows KMD manages all the memory and not the NVIDIA driver unsigned int gpuInstanceId; //!< If MIG is enabled, stores a valid GPU instance ID. gpuInstanceId is set to // 0xFFFFFFFF otherwise. unsigned int computeInstanceId; //!< If MIG is enabled, stores a valid compute instance ID. computeInstanceId is set to // 0xFFFFFFFF otherwise. } nvmlProcessInfo_v2_t, nvmlProcessInfo_t; /** * Information about running process on the GPU with protected memory */ typedef struct { unsigned int pid; //!< Process ID unsigned long long usedGpuMemory; //!< Amount of used GPU memory in bytes. //! Under WDDM, \ref NVML_VALUE_NOT_AVAILABLE is always reported //! because Windows KMD manages all the memory and not the NVIDIA driver unsigned int gpuInstanceId; //!< If MIG is enabled, stores a valid GPU instance ID. gpuInstanceId is // set to 0xFFFFFFFF otherwise. unsigned int computeInstanceId; //!< If MIG is enabled, stores a valid compute instance ID. computeInstanceId // is set to 0xFFFFFFFF otherwise. unsigned long long usedGpuCcProtectedMemory; //!< Amount of used GPU conf compute protected memory in bytes. } nvmlProcessDetail_v1_t; /** * Information about all running processes on the GPU for the given mode */ typedef struct { unsigned int version; //!< Struct version, MUST be nvmlProcessDetailList_v1 unsigned int mode; //!< Process mode(Compute/Graphics/MPSCompute) unsigned int numProcArrayEntries; //!< Number of process entries in procArray nvmlProcessDetail_v1_t *procArray; //!< Process array } nvmlProcessDetailList_v1_t; typedef nvmlProcessDetailList_v1_t nvmlProcessDetailList_t; /** * nvmlProcessDetailList version */ #define nvmlProcessDetailList_v1 NVML_STRUCT_VERSION(ProcessDetailList, 1) typedef struct nvmlDeviceAttributes_st { unsigned int multiprocessorCount; //!< Streaming Multiprocessor count unsigned int sharedCopyEngineCount; //!< Shared Copy Engine count unsigned int sharedDecoderCount; //!< Shared Decoder Engine count unsigned int sharedEncoderCount; //!< Shared Encoder Engine count unsigned int sharedJpegCount; //!< Shared JPEG Engine count unsigned int sharedOfaCount; //!< Shared OFA Engine count unsigned int gpuInstanceSliceCount; //!< GPU instance slice count unsigned int computeInstanceSliceCount; //!< Compute instance slice count unsigned long long memorySizeMB; //!< Device memory size (in MiB) } nvmlDeviceAttributes_t; /** * C2C Mode information for a device */ typedef struct { unsigned int isC2cEnabled; } nvmlC2cModeInfo_v1_t; #define nvmlC2cModeInfo_v1 NVML_STRUCT_VERSION(C2cModeInfo, 1) /** * Enum to represent device addressing mode values */ typedef enum { NVML_DEVICE_ADDRESSING_MODE_NONE = 0, //!< No active mode NVML_DEVICE_ADDRESSING_MODE_HMM = 1, //!< Heterogeneous Memory Management mode NVML_DEVICE_ADDRESSING_MODE_ATS = 2, //!< Address Translation Services mode } nvmlDeviceAddressingModeType_t; /** * Struct to represent device addressing mode information */ typedef struct { unsigned int version; //!< API version unsigned int value; //!< One of \ref nvmlDeviceAddressingModeType_t } nvmlDeviceAddressingMode_v1_t; typedef nvmlDeviceAddressingMode_v1_t nvmlDeviceAddressingMode_t; #define nvmlDeviceAddressingMode_v1 NVML_STRUCT_VERSION(DeviceAddressingMode, 1) /** * Struct to represent the NVML repair status */ typedef struct { unsigned int version; //!< API version number unsigned int bChannelRepairPending; //!< Reference to \a unsigned int unsigned int bTpcRepairPending; //!< Reference to \a unsigned int } nvmlRepairStatus_v1_t; typedef nvmlRepairStatus_v1_t nvmlRepairStatus_t; #define nvmlRepairStatus_v1 NVML_STRUCT_VERSION(RepairStatus, 1) /** * Possible values that classify the remap availability for each bank. The max * field will contain the number of banks that have maximum remap availability * (all reserved rows are available). None means that there are no reserved * rows available. */ typedef struct nvmlRowRemapperHistogramValues_st { unsigned int max; unsigned int high; unsigned int partial; unsigned int low; unsigned int none; } nvmlRowRemapperHistogramValues_t; /** * Enum to represent type of bridge chip */ typedef enum nvmlBridgeChipType_enum { NVML_BRIDGE_CHIP_PLX = 0, NVML_BRIDGE_CHIP_BRO4 = 1 }nvmlBridgeChipType_t; /** * Maximum number of NvLink links supported */ #define NVML_NVLINK_MAX_LINKS 18 /** * Enum to represent the NvLink utilization counter packet units */ typedef enum nvmlNvLinkUtilizationCountUnits_enum { NVML_NVLINK_COUNTER_UNIT_CYCLES = 0, // count by cycles NVML_NVLINK_COUNTER_UNIT_PACKETS = 1, // count by packets NVML_NVLINK_COUNTER_UNIT_BYTES = 2, // count by bytes NVML_NVLINK_COUNTER_UNIT_RESERVED = 3, // count reserved for internal use // this must be last NVML_NVLINK_COUNTER_UNIT_COUNT } nvmlNvLinkUtilizationCountUnits_t; /** * Enum to represent the NvLink utilization counter packet types to count * ** this is ONLY applicable with the units as packets or bytes * ** as specified in \a nvmlNvLinkUtilizationCountUnits_t * ** all packet filter descriptions are target GPU centric * ** these can be "OR'd" together */ typedef enum nvmlNvLinkUtilizationCountPktTypes_enum { NVML_NVLINK_COUNTER_PKTFILTER_NOP = 0x1, // no operation packets NVML_NVLINK_COUNTER_PKTFILTER_READ = 0x2, // read packets NVML_NVLINK_COUNTER_PKTFILTER_WRITE = 0x4, // write packets NVML_NVLINK_COUNTER_PKTFILTER_RATOM = 0x8, // reduction atomic requests NVML_NVLINK_COUNTER_PKTFILTER_NRATOM = 0x10, // non-reduction atomic requests NVML_NVLINK_COUNTER_PKTFILTER_FLUSH = 0x20, // flush requests NVML_NVLINK_COUNTER_PKTFILTER_RESPDATA = 0x40, // responses with data NVML_NVLINK_COUNTER_PKTFILTER_RESPNODATA = 0x80, // responses without data NVML_NVLINK_COUNTER_PKTFILTER_ALL = 0xFF // all packets } nvmlNvLinkUtilizationCountPktTypes_t; /** * Struct to define the NVLINK counter controls */ typedef struct nvmlNvLinkUtilizationControl_st { nvmlNvLinkUtilizationCountUnits_t units; nvmlNvLinkUtilizationCountPktTypes_t pktfilter; } nvmlNvLinkUtilizationControl_t; /** * Enum to represent NvLink queryable capabilities */ typedef enum nvmlNvLinkCapability_enum { NVML_NVLINK_CAP_P2P_SUPPORTED = 0, // P2P over NVLink is supported NVML_NVLINK_CAP_SYSMEM_ACCESS = 1, // Access to system memory is supported NVML_NVLINK_CAP_P2P_ATOMICS = 2, // P2P atomics are supported NVML_NVLINK_CAP_SYSMEM_ATOMICS= 3, // System memory atomics are supported NVML_NVLINK_CAP_SLI_BRIDGE = 4, // SLI is supported over this link NVML_NVLINK_CAP_VALID = 5, // Link is supported on this device // should be last NVML_NVLINK_CAP_COUNT } nvmlNvLinkCapability_t; /** * Enum to represent NvLink queryable error counters */ typedef enum nvmlNvLinkErrorCounter_enum { NVML_NVLINK_ERROR_DL_REPLAY = 0, // Data link transmit replay error counter NVML_NVLINK_ERROR_DL_RECOVERY = 1, // Data link transmit recovery error counter NVML_NVLINK_ERROR_DL_CRC_FLIT = 2, // Data link receive flow control digit CRC error counter NVML_NVLINK_ERROR_DL_CRC_DATA = 3, // Data link receive data CRC error counter NVML_NVLINK_ERROR_DL_ECC_DATA = 4, // Data link receive data ECC error counter // this must be last NVML_NVLINK_ERROR_COUNT } nvmlNvLinkErrorCounter_t; /** * Enum to represent NvLink's remote device type */ typedef enum nvmlIntNvLinkDeviceType_enum { NVML_NVLINK_DEVICE_TYPE_GPU = 0x00, NVML_NVLINK_DEVICE_TYPE_IBMNPU = 0x01, NVML_NVLINK_DEVICE_TYPE_SWITCH = 0x02, NVML_NVLINK_DEVICE_TYPE_UNKNOWN = 0xFF } nvmlIntNvLinkDeviceType_t; /** * Represents level relationships within a system between two GPUs * The enums are spaced to allow for future relationships */ typedef enum nvmlGpuLevel_enum { NVML_TOPOLOGY_INTERNAL = 0, // e.g. Tesla K80 NVML_TOPOLOGY_SINGLE = 10, // all devices that only need traverse a single PCIe switch NVML_TOPOLOGY_MULTIPLE = 20, // all devices that need not traverse a host bridge NVML_TOPOLOGY_HOSTBRIDGE = 30, // all devices that are connected to the same host bridge NVML_TOPOLOGY_NODE = 40, // all devices that are connected to the same NUMA node but possibly multiple host bridges NVML_TOPOLOGY_SYSTEM = 50 // all devices in the system // there is purposefully no COUNT here because of the need for spacing above } nvmlGpuTopologyLevel_t; /* Compatibility for CPU->NODE renaming */ #define NVML_TOPOLOGY_CPU NVML_TOPOLOGY_NODE /* P2P Capability Index Status*/ typedef enum nvmlGpuP2PStatus_enum { NVML_P2P_STATUS_OK = 0, NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED, NVML_P2P_STATUS_CHIPSET_NOT_SUPPORTED = NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED, NVML_P2P_STATUS_GPU_NOT_SUPPORTED, NVML_P2P_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED, NVML_P2P_STATUS_DISABLED_BY_REGKEY, NVML_P2P_STATUS_NOT_SUPPORTED, NVML_P2P_STATUS_UNKNOWN } nvmlGpuP2PStatus_t; /* P2P Capability Index*/ typedef enum nvmlGpuP2PCapsIndex_enum { NVML_P2P_CAPS_INDEX_READ = 0, NVML_P2P_CAPS_INDEX_WRITE = 1, NVML_P2P_CAPS_INDEX_NVLINK = 2, NVML_P2P_CAPS_INDEX_ATOMICS = 3, NVML_P2P_CAPS_INDEX_PCI = 4, /* * DO NOT USE! NVML_P2P_CAPS_INDEX_PROP is deprecated. * Use NVML_P2P_CAPS_INDEX_PCI instead. */ NVML_P2P_CAPS_INDEX_PROP = NVML_P2P_CAPS_INDEX_PCI, NVML_P2P_CAPS_INDEX_UNKNOWN = 5, }nvmlGpuP2PCapsIndex_t; /** * Maximum limit on Physical Bridges per Board */ #define NVML_MAX_PHYSICAL_BRIDGE (128) /** * Information about the Bridge Chip Firmware */ typedef struct nvmlBridgeChipInfo_st { nvmlBridgeChipType_t type; //!< Type of Bridge Chip unsigned int fwVersion; //!< Firmware Version. 0=Version is unavailable }nvmlBridgeChipInfo_t; /** * This structure stores the complete Hierarchy of the Bridge Chip within the board. The immediate * bridge is stored at index 0 of bridgeInfoList, parent to immediate bridge is at index 1 and so forth. */ typedef struct nvmlBridgeChipHierarchy_st { unsigned char bridgeCount; //!< Number of Bridge Chips on the Board nvmlBridgeChipInfo_t bridgeChipInfo[NVML_MAX_PHYSICAL_BRIDGE]; //!< Hierarchy of Bridge Chips on the board }nvmlBridgeChipHierarchy_t; /** * Represents Type of Sampling Event */ typedef enum nvmlSamplingType_enum { NVML_TOTAL_POWER_SAMPLES = 0, //!< To represent total power drawn by GPU NVML_GPU_UTILIZATION_SAMPLES = 1, //!< To represent percent of time during which one or more kernels was executing on the GPU NVML_MEMORY_UTILIZATION_SAMPLES = 2, //!< To represent percent of time during which global (device) memory was being read or written NVML_ENC_UTILIZATION_SAMPLES = 3, //!< To represent percent of time during which NVENC remains busy NVML_DEC_UTILIZATION_SAMPLES = 4, //!< To represent percent of time during which NVDEC remains busy NVML_PROCESSOR_CLK_SAMPLES = 5, //!< To represent processor clock samples NVML_MEMORY_CLK_SAMPLES = 6, //!< To represent memory clock samples NVML_MODULE_POWER_SAMPLES = 7, //!< To represent module power samples for total module starting Grace Hopper NVML_JPG_UTILIZATION_SAMPLES = 8, //!< To represent percent of time during which NVJPG remains busy NVML_OFA_UTILIZATION_SAMPLES = 9, //!< To represent percent of time during which NVOFA remains busy // Keep this last NVML_SAMPLINGTYPE_COUNT }nvmlSamplingType_t; /** * Represents the queryable PCIe utilization counters */ typedef enum nvmlPcieUtilCounter_enum { NVML_PCIE_UTIL_TX_BYTES = 0, // 1KB granularity NVML_PCIE_UTIL_RX_BYTES = 1, // 1KB granularity // Keep this last NVML_PCIE_UTIL_COUNT } nvmlPcieUtilCounter_t; /** * Represents the type for sample value returned */ typedef enum nvmlValueType_enum { NVML_VALUE_TYPE_DOUBLE = 0, NVML_VALUE_TYPE_UNSIGNED_INT = 1, NVML_VALUE_TYPE_UNSIGNED_LONG = 2, NVML_VALUE_TYPE_UNSIGNED_LONG_LONG = 3, NVML_VALUE_TYPE_SIGNED_LONG_LONG = 4, NVML_VALUE_TYPE_SIGNED_INT = 5, NVML_VALUE_TYPE_UNSIGNED_SHORT = 6, // Keep this last NVML_VALUE_TYPE_COUNT }nvmlValueType_t; /** * Union to represent different types of Value */ typedef union nvmlValue_st { double dVal; //!< If the value is double int siVal; //!< If the value is signed int unsigned int uiVal; //!< If the value is unsigned int unsigned long ulVal; //!< If the value is unsigned long unsigned long long ullVal; //!< If the value is unsigned long long signed long long sllVal; //!< If the value is signed long long unsigned short usVal; //!< If the value is unsigned short }nvmlValue_t; /** * Information for Sample */ typedef struct nvmlSample_st { unsigned long long timeStamp; //!< CPU Timestamp in microseconds nvmlValue_t sampleValue; //!< Sample Value }nvmlSample_t; /** * Represents type of perf policy for which violation times can be queried */ typedef enum nvmlPerfPolicyType_enum { NVML_PERF_POLICY_POWER = 0, //!< How long did power violations cause the GPU to be below application clocks NVML_PERF_POLICY_THERMAL = 1, //!< How long did thermal violations cause the GPU to be below application clocks NVML_PERF_POLICY_SYNC_BOOST = 2, //!< How long did sync boost cause the GPU to be below application clocks NVML_PERF_POLICY_BOARD_LIMIT = 3, //!< How long did the board limit cause the GPU to be below application clocks NVML_PERF_POLICY_LOW_UTILIZATION = 4, //!< How long did low utilization cause the GPU to be below application clocks NVML_PERF_POLICY_RELIABILITY = 5, //!< How long did the board reliability limit cause the GPU to be below application clocks NVML_PERF_POLICY_TOTAL_APP_CLOCKS = 10, //!< Total time the GPU was held below application clocks by any limiter (0 - 5 above) NVML_PERF_POLICY_TOTAL_BASE_CLOCKS = 11, //!< Total time the GPU was held below base clocks // Keep this last NVML_PERF_POLICY_COUNT }nvmlPerfPolicyType_t; /** * Struct to hold perf policy violation status data */ typedef struct nvmlViolationTime_st { unsigned long long referenceTime; //!< referenceTime represents CPU timestamp in microseconds unsigned long long violationTime; //!< violationTime in Nanoseconds }nvmlViolationTime_t; #define NVML_MAX_THERMAL_SENSORS_PER_GPU 3 /** * Represents the thermal sensor targets */ typedef enum { NVML_THERMAL_TARGET_NONE = 0, NVML_THERMAL_TARGET_GPU = 1, //!< GPU core temperature requires NvPhysicalGpuHandle NVML_THERMAL_TARGET_MEMORY = 2, //!< GPU memory temperature requires NvPhysicalGpuHandle NVML_THERMAL_TARGET_POWER_SUPPLY = 4, //!< GPU power supply temperature requires NvPhysicalGpuHandle NVML_THERMAL_TARGET_BOARD = 8, //!< GPU board ambient temperature requires NvPhysicalGpuHandle NVML_THERMAL_TARGET_VCD_BOARD = 9, //!< Visual Computing Device Board temperature requires NvVisualComputingDeviceHandle NVML_THERMAL_TARGET_VCD_INLET = 10, //!< Visual Computing Device Inlet temperature requires NvVisualComputingDeviceHandle NVML_THERMAL_TARGET_VCD_OUTLET = 11, //!< Visual Computing Device Outlet temperature requires NvVisualComputingDeviceHandle NVML_THERMAL_TARGET_ALL = 15, NVML_THERMAL_TARGET_UNKNOWN = -1, } nvmlThermalTarget_t; /** * Represents the thermal sensor controllers */ typedef enum { NVML_THERMAL_CONTROLLER_NONE = 0, NVML_THERMAL_CONTROLLER_GPU_INTERNAL, NVML_THERMAL_CONTROLLER_ADM1032, NVML_THERMAL_CONTROLLER_ADT7461, NVML_THERMAL_CONTROLLER_MAX6649, NVML_THERMAL_CONTROLLER_MAX1617, NVML_THERMAL_CONTROLLER_LM99, NVML_THERMAL_CONTROLLER_LM89, NVML_THERMAL_CONTROLLER_LM64, NVML_THERMAL_CONTROLLER_G781, NVML_THERMAL_CONTROLLER_ADT7473, NVML_THERMAL_CONTROLLER_SBMAX6649, NVML_THERMAL_CONTROLLER_VBIOSEVT, NVML_THERMAL_CONTROLLER_OS, NVML_THERMAL_CONTROLLER_NVSYSCON_CANOAS, NVML_THERMAL_CONTROLLER_NVSYSCON_E551, NVML_THERMAL_CONTROLLER_MAX6649R, NVML_THERMAL_CONTROLLER_ADT7473S, NVML_THERMAL_CONTROLLER_UNKNOWN = -1, } nvmlThermalController_t; /** * Struct to hold the thermal sensor settings */ typedef struct { unsigned int count; struct { nvmlThermalController_t controller; int defaultMinTemp; int defaultMaxTemp; int currentTemp; nvmlThermalTarget_t target; } sensor[NVML_MAX_THERMAL_SENSORS_PER_GPU]; } nvmlGpuThermalSettings_t; /** * Cooler control type */ typedef enum nvmlCoolerControl_enum { NVML_THERMAL_COOLER_SIGNAL_NONE = 0, //!< This cooler has no control signal. NVML_THERMAL_COOLER_SIGNAL_TOGGLE = 1, //!< This cooler can only be toggled either ON or OFF (eg a switch). NVML_THERMAL_COOLER_SIGNAL_VARIABLE = 2, //!< This cooler's level can be adjusted from some minimum to some maximum (eg a knob). // Keep this last NVML_THERMAL_COOLER_SIGNAL_COUNT } nvmlCoolerControl_t; /** * Cooler's target */ typedef enum nvmlCoolerTarget_enum { NVML_THERMAL_COOLER_TARGET_NONE = 1 << 0, //!< This cooler cools nothing. NVML_THERMAL_COOLER_TARGET_GPU = 1 << 1, //!< This cooler can cool the GPU. NVML_THERMAL_COOLER_TARGET_MEMORY = 1 << 2, //!< This cooler can cool the memory. NVML_THERMAL_COOLER_TARGET_POWER_SUPPLY = 1 << 3, //!< This cooler can cool the power supply. NVML_THERMAL_COOLER_TARGET_GPU_RELATED = (NVML_THERMAL_COOLER_TARGET_GPU | NVML_THERMAL_COOLER_TARGET_MEMORY | NVML_THERMAL_COOLER_TARGET_POWER_SUPPLY) //!< This cooler cools all of the components related to its target gpu. GPU_RELATED = GPU | MEMORY | POWER_SUPPLY } nvmlCoolerTarget_t; typedef struct { unsigned int version; //!< the API version number unsigned int index; //!< the cooler index nvmlCoolerControl_t signalType; //!< OUT: the cooler's control signal characteristics nvmlCoolerTarget_t target; //!< OUT: the target that cooler cools } nvmlCoolerInfo_v1_t; typedef nvmlCoolerInfo_v1_t nvmlCoolerInfo_t; #define nvmlCoolerInfo_v1 NVML_STRUCT_VERSION(CoolerInfo, 1) /** * UUID length in ASCII format */ #define NVML_DEVICE_UUID_ASCII_LEN 41 /** * UUID length in binary format */ #define NVML_DEVICE_UUID_BINARY_LEN 16 /** * Enum to represent different UUID types */ typedef enum { NVML_UUID_TYPE_NONE = 0, //!< Undefined type NVML_UUID_TYPE_ASCII = 1, //!< ASCII format type NVML_UUID_TYPE_BINARY = 2, //!< Binary format type } nvmlUUIDType_t; /** * Union to represent different UUID values */ typedef union { char str[NVML_DEVICE_UUID_ASCII_LEN]; //!< ASCII format value unsigned char bytes[NVML_DEVICE_UUID_BINARY_LEN]; //!< Binary format value } nvmlUUIDValue_t; /** * Struct to represent NVML UUID information */ typedef struct { unsigned int version; //!< API version number unsigned int type; //!< One of \p nvmlUUIDType_t nvmlUUIDValue_t value; //!< One of \p nvmlUUIDValue_t, to be set based on the UUID format } nvmlUUID_v1_t; typedef nvmlUUID_v1_t nvmlUUID_t; #define nvmlUUID_v1 NVML_STRUCT_VERSION(UUID, 1) /** * Struct to represent the NVML PDI information */ typedef struct { unsigned int version; //!< API version number unsigned long long value; //!< 64-bit PDI value } nvmlPdi_v1_t; typedef nvmlPdi_v1_t nvmlPdi_t; #define nvmlPdi_v1 NVML_STRUCT_VERSION(Pdi, 1) /** @} */ /***************************************************************************************************/ /** @defgroup nvmlDeviceEnumvs Device Enums * @{ */ /***************************************************************************************************/ /** * Generic enable/disable enum. */ typedef enum nvmlEnableState_enum { NVML_FEATURE_DISABLED = 0, //!< Feature disabled NVML_FEATURE_ENABLED = 1 //!< Feature enabled } nvmlEnableState_t; //! Generic flag used to specify the default behavior of some functions. See description of particular functions for details. #define nvmlFlagDefault 0x00 //! Generic flag used to force some behavior. See description of particular functions for details. #define nvmlFlagForce 0x01 /** * DRAM Encryption Info */ typedef struct { unsigned int version; //!< IN - the API version number nvmlEnableState_t encryptionState; //!< IN/OUT - DRAM Encryption state } nvmlDramEncryptionInfo_v1_t; typedef nvmlDramEncryptionInfo_v1_t nvmlDramEncryptionInfo_t; #define nvmlDramEncryptionInfo_v1 NVML_STRUCT_VERSION(DramEncryptionInfo, 1) /** * * The Brand of the GPU * */ typedef enum nvmlBrandType_enum { NVML_BRAND_UNKNOWN = 0, NVML_BRAND_QUADRO = 1, NVML_BRAND_TESLA = 2, NVML_BRAND_NVS = 3, NVML_BRAND_GRID = 4, // Deprecated from API reporting. Keeping definition for backward compatibility. NVML_BRAND_GEFORCE = 5, NVML_BRAND_TITAN = 6, NVML_BRAND_NVIDIA_VAPPS = 7, // NVIDIA Virtual Applications NVML_BRAND_NVIDIA_VPC = 8, // NVIDIA Virtual PC NVML_BRAND_NVIDIA_VCS = 9, // NVIDIA Virtual Compute Server NVML_BRAND_NVIDIA_VWS = 10, // NVIDIA RTX Virtual Workstation NVML_BRAND_NVIDIA_CLOUD_GAMING = 11, // NVIDIA Cloud Gaming NVML_BRAND_NVIDIA_VGAMING = NVML_BRAND_NVIDIA_CLOUD_GAMING, // Deprecated from API reporting. Keeping definition for backward compatibility. NVML_BRAND_QUADRO_RTX = 12, NVML_BRAND_NVIDIA_RTX = 13, NVML_BRAND_NVIDIA = 14, NVML_BRAND_GEFORCE_RTX = 15, // Unused NVML_BRAND_TITAN_RTX = 16, // Unused // Keep this last NVML_BRAND_COUNT = 18, } nvmlBrandType_t; /** * Temperature thresholds. */ typedef enum nvmlTemperatureThresholds_enum { NVML_TEMPERATURE_THRESHOLD_SHUTDOWN = 0, // Temperature at which the GPU will // shut down for HW protection NVML_TEMPERATURE_THRESHOLD_SLOWDOWN = 1, // Temperature at which the GPU will // begin HW slowdown NVML_TEMPERATURE_THRESHOLD_MEM_MAX = 2, // Memory Temperature at which the GPU will // begin SW slowdown NVML_TEMPERATURE_THRESHOLD_GPU_MAX = 3, // GPU Temperature at which the GPU // can be throttled below base clock NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_MIN = 4, // Minimum GPU Temperature that can be // set as acoustic threshold NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_CURR = 5, // Current temperature that is set as // acoustic threshold. NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_MAX = 6, // Maximum GPU temperature that can be // set as acoustic threshold. NVML_TEMPERATURE_THRESHOLD_GPS_CURR = 7, // Current temperature that is set as // gps threshold. // Keep this last NVML_TEMPERATURE_THRESHOLD_COUNT } nvmlTemperatureThresholds_t; /** * Temperature sensors. */ typedef enum nvmlTemperatureSensors_enum { NVML_TEMPERATURE_GPU = 0, //!< Temperature sensor for the GPU die // Keep this last NVML_TEMPERATURE_COUNT } nvmlTemperatureSensors_t; /** * Margin temperature values */ typedef struct { unsigned int version; //!< The version number of this struct int marginTemperature; //!< The margin temperature value } nvmlMarginTemperature_v1_t; typedef nvmlMarginTemperature_v1_t nvmlMarginTemperature_t; #define nvmlMarginTemperature_v1 NVML_STRUCT_VERSION(MarginTemperature, 1) /** * Compute mode. * * NVML_COMPUTEMODE_EXCLUSIVE_PROCESS was added in CUDA 4.0. * Earlier CUDA versions supported a single exclusive mode, * which is equivalent to NVML_COMPUTEMODE_EXCLUSIVE_THREAD in CUDA 4.0 and beyond. */ typedef enum nvmlComputeMode_enum { NVML_COMPUTEMODE_DEFAULT = 0, //!< Default compute mode -- multiple contexts per device NVML_COMPUTEMODE_EXCLUSIVE_THREAD = 1, //!< Support Removed NVML_COMPUTEMODE_PROHIBITED = 2, //!< Compute-prohibited mode -- no contexts per device NVML_COMPUTEMODE_EXCLUSIVE_PROCESS = 3, //!< Compute-exclusive-process mode -- only one context per device, usable from multiple threads at a time // Keep this last NVML_COMPUTEMODE_COUNT } nvmlComputeMode_t; /** * Max Clock Monitors available */ #define MAX_CLK_DOMAINS 32 /** * Clock Monitor error types */ typedef struct nvmlClkMonFaultInfo_struct { /** * The Domain which faulted */ unsigned int clkApiDomain; /** * Faults Information */ unsigned int clkDomainFaultMask; } nvmlClkMonFaultInfo_t; /** * Clock Monitor Status */ typedef struct nvmlClkMonStatus_status { /** * Fault status Indicator */ unsigned int bGlobalStatus; /** * Total faulted domain numbers */ unsigned int clkMonListSize; /** * The fault Information structure */ nvmlClkMonFaultInfo_t clkMonList[MAX_CLK_DOMAINS]; } nvmlClkMonStatus_t; /** * ECC bit types. * * @deprecated See \ref nvmlMemoryErrorType_t for a more flexible type */ #define nvmlEccBitType_t nvmlMemoryErrorType_t /** * Single bit ECC errors * * @deprecated Mapped to \ref NVML_MEMORY_ERROR_TYPE_CORRECTED */ #define NVML_SINGLE_BIT_ECC NVML_MEMORY_ERROR_TYPE_CORRECTED /** * Double bit ECC errors * * @deprecated Mapped to \ref NVML_MEMORY_ERROR_TYPE_UNCORRECTED */ #define NVML_DOUBLE_BIT_ECC NVML_MEMORY_ERROR_TYPE_UNCORRECTED /** * Memory error types */ typedef enum nvmlMemoryErrorType_enum { /** * A memory error that was corrected * * For ECC errors, these are single bit errors * For Texture memory, these are errors fixed by resend */ NVML_MEMORY_ERROR_TYPE_CORRECTED = 0, /** * A memory error that was not corrected * * For ECC errors, these are double bit errors * For Texture memory, these are errors where the resend fails */ NVML_MEMORY_ERROR_TYPE_UNCORRECTED = 1, // Keep this last NVML_MEMORY_ERROR_TYPE_COUNT //!< Count of memory error types } nvmlMemoryErrorType_t; /** * Represents Nvlink Version */ typedef enum nvmlNvlinkVersion_enum { NVML_NVLINK_VERSION_INVALID = 0, NVML_NVLINK_VERSION_1_0 = 1, NVML_NVLINK_VERSION_2_0 = 2, NVML_NVLINK_VERSION_2_2 = 3, NVML_NVLINK_VERSION_3_0 = 4, NVML_NVLINK_VERSION_3_1 = 5, NVML_NVLINK_VERSION_4_0 = 6, NVML_NVLINK_VERSION_5_0 = 7, }nvmlNvlinkVersion_t; /** * ECC counter types. * * Note: Volatile counts are reset each time the driver loads. On Windows this is once per boot. On Linux this can be more frequent. * On Linux the driver unloads when no active clients exist. If persistence mode is enabled or there is always a driver * client active (e.g. X11), then Linux also sees per-boot behavior. If not, volatile counts are reset each time a compute app * is run. */ typedef enum nvmlEccCounterType_enum { NVML_VOLATILE_ECC = 0, //!< Volatile counts are reset each time the driver loads. NVML_AGGREGATE_ECC = 1, //!< Aggregate counts persist across reboots (i.e. for the lifetime of the device) // Keep this last NVML_ECC_COUNTER_TYPE_COUNT //!< Count of memory counter types } nvmlEccCounterType_t; /** * Clock types. * * All speeds are in Mhz. */ typedef enum nvmlClockType_enum { NVML_CLOCK_GRAPHICS = 0, //!< Graphics clock domain NVML_CLOCK_SM = 1, //!< SM clock domain NVML_CLOCK_MEM = 2, //!< Memory clock domain NVML_CLOCK_VIDEO = 3, //!< Video encoder/decoder clock domain // Keep this last NVML_CLOCK_COUNT //!< Count of clock types } nvmlClockType_t; /** * Clock Ids. These are used in combination with nvmlClockType_t * to specify a single clock value. */ typedef enum nvmlClockId_enum { NVML_CLOCK_ID_CURRENT = 0, //!< Current actual clock value NVML_CLOCK_ID_APP_CLOCK_TARGET = 1, //!< Target application clock. //!< Deprecated, do not use. NVML_CLOCK_ID_APP_CLOCK_DEFAULT = 2, //!< Default application clock target //!< Deprecated, do not use. NVML_CLOCK_ID_CUSTOMER_BOOST_MAX = 3, //!< OEM-defined maximum clock rate //Keep this last NVML_CLOCK_ID_COUNT //!< Count of Clock Ids. } nvmlClockId_t; /** * Driver models. * * Windows only. */ typedef enum nvmlDriverModel_enum { NVML_DRIVER_WDDM = 0, //!< WDDM driver model -- GPU treated as a display device NVML_DRIVER_WDM = 1, //!< WDM (TCC) model (deprecated) -- GPU treated as a generic compute device NVML_DRIVER_MCDM = 2 //!< MCDM driver model -- GPU treated as a Microsoft compute device } nvmlDriverModel_t; #define NVML_MAX_GPU_PERF_PSTATES 16 /** * Allowed PStates. */ typedef enum nvmlPStates_enum { NVML_PSTATE_0 = 0, //!< Performance state 0 -- Maximum Performance NVML_PSTATE_1 = 1, //!< Performance state 1 NVML_PSTATE_2 = 2, //!< Performance state 2 NVML_PSTATE_3 = 3, //!< Performance state 3 NVML_PSTATE_4 = 4, //!< Performance state 4 NVML_PSTATE_5 = 5, //!< Performance state 5 NVML_PSTATE_6 = 6, //!< Performance state 6 NVML_PSTATE_7 = 7, //!< Performance state 7 NVML_PSTATE_8 = 8, //!< Performance state 8 NVML_PSTATE_9 = 9, //!< Performance state 9 NVML_PSTATE_10 = 10, //!< Performance state 10 NVML_PSTATE_11 = 11, //!< Performance state 11 NVML_PSTATE_12 = 12, //!< Performance state 12 NVML_PSTATE_13 = 13, //!< Performance state 13 NVML_PSTATE_14 = 14, //!< Performance state 14 NVML_PSTATE_15 = 15, //!< Performance state 15 -- Minimum Performance NVML_PSTATE_UNKNOWN = 32 //!< Unknown performance state } nvmlPstates_t; /** * Clock offset info. */ typedef struct { unsigned int version; //!< The version number of this struct nvmlClockType_t type; nvmlPstates_t pstate; int clockOffsetMHz; int minClockOffsetMHz; int maxClockOffsetMHz; } nvmlClockOffset_v1_t; typedef nvmlClockOffset_v1_t nvmlClockOffset_t; #define nvmlClockOffset_v1 NVML_STRUCT_VERSION(ClockOffset, 1) /** * Fan speed info. */ typedef struct { unsigned int version; //!< the API version number unsigned int fan; //!< the fan index unsigned int speed; //!< OUT: the fan speed in RPM } nvmlFanSpeedInfo_v1_t; typedef nvmlFanSpeedInfo_v1_t nvmlFanSpeedInfo_t; #define nvmlFanSpeedInfo_v1 NVML_STRUCT_VERSION(FanSpeedInfo, 1) #define NVML_PERF_MODES_BUFFER_SIZE 2048 /** * Device performance modes string */ typedef struct { unsigned int version; //!< the API version number char str[NVML_PERF_MODES_BUFFER_SIZE]; //!< OUT: the performance modes string. } nvmlDevicePerfModes_v1_t; typedef nvmlDevicePerfModes_v1_t nvmlDevicePerfModes_t; #define nvmlDevicePerfModes_v1 NVML_STRUCT_VERSION(DevicePerfModes, 1) /** * Device current clocks string */ typedef struct { unsigned int version; //!< the API version number char str[NVML_PERF_MODES_BUFFER_SIZE]; //!< OUT: the current clock frequency string. } nvmlDeviceCurrentClockFreqs_v1_t; typedef nvmlDeviceCurrentClockFreqs_v1_t nvmlDeviceCurrentClockFreqs_t; #define nvmlDeviceCurrentClockFreqs_v1 NVML_STRUCT_VERSION(DeviceCurrentClockFreqs, 1) /** * Device powerMizer modes */ #define NVML_POWER_MIZER_MODE_ADAPTIVE 0 //!< adjust GPU clocks based on GPU utilization #define NVML_POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE 1 //!< raise GPU clocks to favor maximum performance, //!< to the extent that thermal and other constraints allow #define NVML_POWER_MIZER_MODE_AUTO 2 //!< PowerMizer mode is driver controlled. #define NVML_POWER_MIZER_MODE_PREFER_CONSISTENT_PERFORMANCE 3 //!< lock to GPU base clocks typedef struct { unsigned int currentMode; //!< OUT: the current powermizer mode unsigned int mode; //!< IN: the powermizer mode to set unsigned int supportedPowerMizerModes; //!< OUT: Bitmask of supported powermizer modes } nvmlDevicePowerMizerModes_v1_t; /** * GPU Operation Mode * * GOM allows to reduce power usage and optimize GPU throughput by disabling GPU features. * * Each GOM is designed to meet specific user needs. */ typedef enum nvmlGom_enum { NVML_GOM_ALL_ON = 0, //!< Everything is enabled and running at full speed NVML_GOM_COMPUTE = 1, //!< Designed for running only compute tasks. Graphics operations //!< are not allowed NVML_GOM_LOW_DP = 2 //!< Designed for running graphics applications that don't require //!< high bandwidth double precision } nvmlGpuOperationMode_t; /** * Available infoROM objects. */ typedef enum nvmlInforomObject_enum { NVML_INFOROM_OEM = 0, //!< An object defined by OEM NVML_INFOROM_ECC = 1, //!< The ECC object determining the level of ECC support NVML_INFOROM_POWER = 2, //!< The power management object NVML_INFOROM_DEN = 3, //!< DRAM Encryption object // Keep this last NVML_INFOROM_COUNT //!< This counts the number of infoROM objects the driver knows about } nvmlInforomObject_t; /** * Return values for NVML API calls. */ typedef enum nvmlReturn_enum { // cppcheck-suppress * NVML_SUCCESS = 0, //!< The operation was successful NVML_ERROR_UNINITIALIZED = 1, //!< NVML was not first initialized with nvmlInit() NVML_ERROR_INVALID_ARGUMENT = 2, //!< A supplied argument is invalid NVML_ERROR_NOT_SUPPORTED = 3, //!< The requested operation is not available on target device NVML_ERROR_NO_PERMISSION = 4, //!< The current user does not have permission for operation NVML_ERROR_ALREADY_INITIALIZED = 5, //!< Deprecated: Multiple initializations are now allowed through ref counting NVML_ERROR_NOT_FOUND = 6, //!< A query to find an object was unsuccessful NVML_ERROR_INSUFFICIENT_SIZE = 7, //!< An input argument is not large enough NVML_ERROR_INSUFFICIENT_POWER = 8, //!< A device's external power cables are not properly attached NVML_ERROR_DRIVER_NOT_LOADED = 9, //!< NVIDIA driver is not loaded NVML_ERROR_TIMEOUT = 10, //!< User provided timeout passed NVML_ERROR_IRQ_ISSUE = 11, //!< NVIDIA Kernel detected an interrupt issue with a GPU NVML_ERROR_LIBRARY_NOT_FOUND = 12, //!< NVML Shared Library couldn't be found or loaded NVML_ERROR_FUNCTION_NOT_FOUND = 13, //!< Local version of NVML doesn't implement this function NVML_ERROR_CORRUPTED_INFOROM = 14, //!< infoROM is corrupted NVML_ERROR_GPU_IS_LOST = 15, //!< The GPU has fallen off the bus or has otherwise become inaccessible NVML_ERROR_RESET_REQUIRED = 16, //!< The GPU requires a reset before it can be used again NVML_ERROR_OPERATING_SYSTEM = 17, //!< The GPU control device has been blocked by the operating system/cgroups NVML_ERROR_LIB_RM_VERSION_MISMATCH = 18, //!< RM detects a driver/library version mismatch NVML_ERROR_IN_USE = 19, //!< An operation cannot be performed because the GPU is currently in use NVML_ERROR_MEMORY = 20, //!< Insufficient memory NVML_ERROR_NO_DATA = 21, //!< No data NVML_ERROR_VGPU_ECC_NOT_SUPPORTED = 22, //!< The requested vgpu operation is not available on target device, becasue ECC is enabled NVML_ERROR_INSUFFICIENT_RESOURCES = 23, //!< Ran out of critical resources, other than memory NVML_ERROR_FREQ_NOT_SUPPORTED = 24, //!< Ran out of critical resources, other than memory NVML_ERROR_ARGUMENT_VERSION_MISMATCH = 25, //!< The provided version is invalid/unsupported NVML_ERROR_DEPRECATED = 26, //!< The requested functionality has been deprecated NVML_ERROR_NOT_READY = 27, //!< The system is not ready for the request NVML_ERROR_GPU_NOT_FOUND = 28, //!< No GPUs were found NVML_ERROR_INVALID_STATE = 29, //!< Resource not in correct state to perform requested operation NVML_ERROR_RESET_TYPE_NOT_SUPPORTED = 30, //!< Reset not supported for given device/parameters NVML_ERROR_UNKNOWN = 999 //!< An internal driver error occurred } nvmlReturn_t; /** * See \ref nvmlDeviceGetMemoryErrorCounter */ typedef enum nvmlMemoryLocation_enum { NVML_MEMORY_LOCATION_L1_CACHE = 0, //!< GPU L1 Cache NVML_MEMORY_LOCATION_L2_CACHE = 1, //!< GPU L2 Cache NVML_MEMORY_LOCATION_DRAM = 2, //!< Turing+ DRAM NVML_MEMORY_LOCATION_DEVICE_MEMORY = 2, //!< GPU Device Memory NVML_MEMORY_LOCATION_REGISTER_FILE = 3, //!< GPU Register File NVML_MEMORY_LOCATION_TEXTURE_MEMORY = 4, //!< GPU Texture Memory NVML_MEMORY_LOCATION_TEXTURE_SHM = 5, //!< Shared memory NVML_MEMORY_LOCATION_CBU = 6, //!< CBU NVML_MEMORY_LOCATION_SRAM = 7, //!< Turing+ SRAM // Keep this last NVML_MEMORY_LOCATION_COUNT //!< This counts the number of memory locations the driver knows about } nvmlMemoryLocation_t; /** * Causes for page retirement */ typedef enum nvmlPageRetirementCause_enum { NVML_PAGE_RETIREMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS = 0, //!< Page was retired due to multiple single bit ECC error NVML_PAGE_RETIREMENT_CAUSE_DOUBLE_BIT_ECC_ERROR = 1, //!< Page was retired due to double bit ECC error // Keep this last NVML_PAGE_RETIREMENT_CAUSE_COUNT } nvmlPageRetirementCause_t; /** * API types that allow changes to default permission restrictions */ typedef enum nvmlRestrictedAPI_enum { NVML_RESTRICTED_API_SET_APPLICATION_CLOCKS = 0, //!< APIs that change application clocks, see nvmlDeviceSetApplicationsClocks //!< and see nvmlDeviceResetApplicationsClocks. //!< Deprecated, keeping definition for backward compatibility. NVML_RESTRICTED_API_SET_AUTO_BOOSTED_CLOCKS = 1, //!< APIs that enable/disable Auto Boosted clocks //!< see nvmlDeviceSetAutoBoostedClocksEnabled // Keep this last NVML_RESTRICTED_API_COUNT } nvmlRestrictedAPI_t; /** * Structure to store utilization value and process Id */ typedef struct nvmlProcessUtilizationSample_st { unsigned int pid; //!< PID of process unsigned long long timeStamp; //!< CPU Timestamp in microseconds unsigned int smUtil; //!< SM (3D/Compute) Util Value unsigned int memUtil; //!< Frame Buffer Memory Util Value unsigned int encUtil; //!< Encoder Util Value unsigned int decUtil; //!< Decoder Util Value } nvmlProcessUtilizationSample_t; /** * Structure to store utilization value and process Id -- version 1 */ typedef struct { unsigned long long timeStamp; //!< CPU Timestamp in microseconds unsigned int pid; //!< PID of process unsigned int smUtil; //!< SM (3D/Compute) Util Value unsigned int memUtil; //!< Frame Buffer Memory Util Value unsigned int encUtil; //!< Encoder Util Value unsigned int decUtil; //!< Decoder Util Value unsigned int jpgUtil; //!< Jpeg Util Value unsigned int ofaUtil; //!< Ofa Util Value } nvmlProcessUtilizationInfo_v1_t; /** * Structure to store utilization and process ID for each running process -- version 1 */ typedef struct { unsigned int version; //!< The version number of this struct unsigned int processSamplesCount; //!< Caller-supplied array size, and returns number of processes running unsigned long long lastSeenTimeStamp; //!< Return only samples with timestamp greater than lastSeenTimeStamp nvmlProcessUtilizationInfo_v1_t *procUtilArray; //!< The array (allocated by caller) of the utilization of GPU SM, framebuffer, video encoder, video decoder, JPEG, and OFA } nvmlProcessesUtilizationInfo_v1_t; typedef nvmlProcessesUtilizationInfo_v1_t nvmlProcessesUtilizationInfo_t; #define nvmlProcessesUtilizationInfo_v1 NVML_STRUCT_VERSION(ProcessesUtilizationInfo, 1) /** * Structure to store SRAM uncorrectable error counters */ typedef struct { unsigned int version; //!< the API version number unsigned long long aggregateUncParity; //!< aggregate uncorrectable parity error count unsigned long long aggregateUncSecDed; //!< aggregate uncorrectable SEC-DED error count unsigned long long aggregateCor; //!< aggregate correctable error count unsigned long long volatileUncParity; //!< volatile uncorrectable parity error count unsigned long long volatileUncSecDed; //!< volatile uncorrectable SEC-DED error count unsigned long long volatileCor; //!< volatile correctable error count unsigned long long aggregateUncBucketL2; //!< aggregate uncorrectable error count for L2 cache bucket unsigned long long aggregateUncBucketSm; //!< aggregate uncorrectable error count for SM bucket unsigned long long aggregateUncBucketPcie; //!< aggregate uncorrectable error count for PCIE bucket unsigned long long aggregateUncBucketMcu; //!< aggregate uncorrectable error count for Microcontroller bucket unsigned long long aggregateUncBucketOther; //!< aggregate uncorrectable error count for Other bucket unsigned int bThresholdExceeded; //!< if the error threshold of field diag is exceeded } nvmlEccSramErrorStatus_v1_t; typedef nvmlEccSramErrorStatus_v1_t nvmlEccSramErrorStatus_t; #define nvmlEccSramErrorStatus_v1 NVML_STRUCT_VERSION(EccSramErrorStatus, 1) /** * Structure to store platform information * * @deprecated The nvmlPlatformInfo_v1_t will be deprecated in the subsequent releases. * Use nvmlPlatformInfo_v2_t */ typedef struct { unsigned int version; //!< the API version number unsigned char ibGuid[16]; //!< Infiniband GUID reported by platform (for Blackwell, ibGuid is 8 bytes so indices 8-15 are zero) unsigned char rackGuid[16]; //!< GUID of the rack containing this GPU (for Blackwell rackGuid is 13 bytes so indices 13-15 are zero) unsigned char chassisPhysicalSlotNumber; //!< The slot number in the rack containing this GPU (includes switches) unsigned char computeSlotIndex; //!< The index within the compute slots in the rack containing this GPU (does not include switches) unsigned char nodeIndex; //!< Index of the node within the slot containing this GPU unsigned char peerType; //!< Platform indicated NVLink-peer type (e.g. switch present or not) unsigned char moduleId; //!< ID of this GPU within the node } nvmlPlatformInfo_v1_t; #define nvmlPlatformInfo_v1 NVML_STRUCT_VERSION(PlatformInfo, 1) /** * Structure to store platform information (v2) */ typedef struct { unsigned int version; //!< the API version number unsigned char ibGuid[16]; //!< Infiniband GUID reported by platform (for Blackwell, ibGuid is 8 bytes so indices 8-15 are zero) unsigned char chassisSerialNumber[16]; //!< Serial number of the chassis containing this GPU (for Blackwell it is 13 bytes so indices 13-15 are zero) unsigned char slotNumber; //!< The slot number in the chassis containing this GPU (includes switches) unsigned char trayIndex; //!< The tray index within the compute slots in the chassis containing this GPU (does not include switches) unsigned char hostId; //!< Index of the node within the slot containing this GPU unsigned char peerType; //!< Platform indicated NVLink-peer type (e.g. switch present or not) unsigned char moduleId; //!< ID of this GPU within the node } nvmlPlatformInfo_v2_t; typedef nvmlPlatformInfo_v2_t nvmlPlatformInfo_t; #define nvmlPlatformInfo_v2 NVML_STRUCT_VERSION(PlatformInfo, 2) typedef struct { unsigned int unit; //!< the SRAM unit index unsigned int location; //!< the error location within the SRAM unit unsigned int sublocation; //!< the error sublocation within the SRAM unit unsigned int extlocation; //!< the error extlocation within the SRAM unit unsigned int address; //!< the error address within the SRAM unit unsigned int isParity; //!< if the SRAM error is parity or not unsigned int count; //!< the error count at the same SRAM address } nvmlEccSramUniqueUncorrectedErrorEntry_v1_t; typedef struct { unsigned int version; //!< the API version number unsigned int entryCount; //!< the number of error count entries nvmlEccSramUniqueUncorrectedErrorEntry_v1_t *entries; //!< pointer to caller-supplied buffer to return the SRAM unique uncorrected ECC error count entries } nvmlEccSramUniqueUncorrectedErrorCounts_v1_t; typedef nvmlEccSramUniqueUncorrectedErrorCounts_v1_t nvmlEccSramUniqueUncorrectedErrorCounts_t; #define nvmlEccSramUniqueUncorrectedErrorCounts_v1 NVML_STRUCT_VERSION(EccSramUniqueUncorrectedErrorCounts, 1) /** * GSP firmware */ #define NVML_GSP_FIRMWARE_VERSION_BUF_SIZE 0x40 /** * Simplified chip architecture */ #define NVML_DEVICE_ARCH_KEPLER 2 // Devices based on the NVIDIA Kepler architecture #define NVML_DEVICE_ARCH_MAXWELL 3 // Devices based on the NVIDIA Maxwell architecture #define NVML_DEVICE_ARCH_PASCAL 4 // Devices based on the NVIDIA Pascal architecture #define NVML_DEVICE_ARCH_VOLTA 5 // Devices based on the NVIDIA Volta architecture #define NVML_DEVICE_ARCH_TURING 6 // Devices based on the NVIDIA Turing architecture #define NVML_DEVICE_ARCH_AMPERE 7 // Devices based on the NVIDIA Ampere architecture #define NVML_DEVICE_ARCH_ADA 8 // Devices based on the NVIDIA Ada architecture #define NVML_DEVICE_ARCH_HOPPER 9 // Devices based on the NVIDIA Hopper architecture #define NVML_DEVICE_ARCH_BLACKWELL 10 // Devices based on the NVIDIA Blackwell architecture #define NVML_DEVICE_ARCH_UNKNOWN 0xffffffff // Anything else, presumably something newer typedef unsigned int nvmlDeviceArchitecture_t; /** * PCI bus types */ #define NVML_BUS_TYPE_UNKNOWN 0 #define NVML_BUS_TYPE_PCI 1 #define NVML_BUS_TYPE_PCIE 2 #define NVML_BUS_TYPE_FPCI 3 #define NVML_BUS_TYPE_AGP 4 typedef unsigned int nvmlBusType_t; /** * Device Power Modes */ /** * Device Fan control policy */ #define NVML_FAN_POLICY_TEMPERATURE_CONTINOUS_SW 0 #define NVML_FAN_POLICY_MANUAL 1 typedef unsigned int nvmlFanControlPolicy_t; /** * Device Power Source */ #define NVML_POWER_SOURCE_AC 0x00000000 #define NVML_POWER_SOURCE_BATTERY 0x00000001 #define NVML_POWER_SOURCE_UNDERSIZED 0x00000002 typedef unsigned int nvmlPowerSource_t; /** * Device PCIE link Max Speed */ #define NVML_PCIE_LINK_MAX_SPEED_INVALID 0x00000000 #define NVML_PCIE_LINK_MAX_SPEED_2500MBPS 0x00000001 #define NVML_PCIE_LINK_MAX_SPEED_5000MBPS 0x00000002 #define NVML_PCIE_LINK_MAX_SPEED_8000MBPS 0x00000003 #define NVML_PCIE_LINK_MAX_SPEED_16000MBPS 0x00000004 #define NVML_PCIE_LINK_MAX_SPEED_32000MBPS 0x00000005 #define NVML_PCIE_LINK_MAX_SPEED_64000MBPS 0x00000006 /** * Adaptive clocking status */ #define NVML_ADAPTIVE_CLOCKING_INFO_STATUS_DISABLED 0x00000000 #define NVML_ADAPTIVE_CLOCKING_INFO_STATUS_ENABLED 0x00000001 #define NVML_MAX_GPU_UTILIZATIONS 8 /** * Represents the GPU utilization domains */ typedef enum nvmlGpuUtilizationDomainId_t { NVML_GPU_UTILIZATION_DOMAIN_GPU = 0, //!< Graphics engine domain NVML_GPU_UTILIZATION_DOMAIN_FB = 1, //!< Frame buffer domain NVML_GPU_UTILIZATION_DOMAIN_VID = 2, //!< Video engine domain NVML_GPU_UTILIZATION_DOMAIN_BUS = 3, //!< Bus interface domain } nvmlGpuUtilizationDomainId_t; typedef struct nvmlGpuDynamicPstatesInfo_st { unsigned int flags; //!< Reserved for future use struct { unsigned int bIsPresent; //!< Set if this utilization domain is present on this GPU unsigned int percentage; //!< Percentage of time where the domain is considered busy in the last 1-second interval unsigned int incThreshold; //!< Utilization threshold that can trigger a perf-increasing P-State change when crossed unsigned int decThreshold; //!< Utilization threshold that can trigger a perf-decreasing P-State change when crossed } utilization[NVML_MAX_GPU_UTILIZATIONS]; } nvmlGpuDynamicPstatesInfo_t; /* * PCIe outbound/inbound atomic operations capability */ #define NVML_PCIE_ATOMICS_CAP_FETCHADD32 0x01 #define NVML_PCIE_ATOMICS_CAP_FETCHADD64 0x02 #define NVML_PCIE_ATOMICS_CAP_SWAP32 0x04 #define NVML_PCIE_ATOMICS_CAP_SWAP64 0x08 #define NVML_PCIE_ATOMICS_CAP_CAS32 0x10 #define NVML_PCIE_ATOMICS_CAP_CAS64 0x20 #define NVML_PCIE_ATOMICS_CAP_CAS128 0x40 #define NVML_PCIE_ATOMICS_OPS_MAX 7 /** * Device Scope - This is useful to retrieve the telemetry at GPU and module (e.g. GPU + CPU) level */ #define NVML_POWER_SCOPE_GPU 0U //!< Targets only GPU #define NVML_POWER_SCOPE_MODULE 1U //!< Targets the whole module #define NVML_POWER_SCOPE_MEMORY 2U //!< Targets the GPU Memory typedef unsigned char nvmlPowerScopeType_t; /** * Contains the power management limit */ typedef struct { unsigned int version; //!< Structure format version (must be 1) nvmlPowerScopeType_t powerScope; //!< [in] Device type: GPU or Total Module unsigned int powerValueMw; //!< [out] Power value to retrieve or set in milliwatts } nvmlPowerValue_v2_t; #define nvmlPowerValue_v2 NVML_STRUCT_VERSION(PowerValue, 2) /** @} */ /***************************************************************************************************/ /** @addtogroup virtualGPU vGPU Enums, Constants, Structs * @{ */ /***************************************************************************************************/ /** @defgroup nvmlVirtualGpuEnums vGPU Enums * @{ */ /***************************************************************************************************/ /*! * GPU virtualization mode types. */ typedef enum nvmlGpuVirtualizationMode { NVML_GPU_VIRTUALIZATION_MODE_NONE = 0, //!< Represents Bare Metal GPU NVML_GPU_VIRTUALIZATION_MODE_PASSTHROUGH = 1, //!< Device is associated with GPU-Passthorugh NVML_GPU_VIRTUALIZATION_MODE_VGPU = 2, //!< Device is associated with vGPU inside virtual machine. NVML_GPU_VIRTUALIZATION_MODE_HOST_VGPU = 3, //!< Device is associated with VGX hypervisor in vGPU mode NVML_GPU_VIRTUALIZATION_MODE_HOST_VSGA = 4 //!< Device is associated with VGX hypervisor in vSGA mode } nvmlGpuVirtualizationMode_t; /** * Host vGPU modes */ typedef enum nvmlHostVgpuMode_enum { NVML_HOST_VGPU_MODE_NON_SRIOV = 0, //!< Non SR-IOV mode NVML_HOST_VGPU_MODE_SRIOV = 1 //!< SR-IOV mode } nvmlHostVgpuMode_t; /*! * Types of VM identifiers */ typedef enum nvmlVgpuVmIdType { NVML_VGPU_VM_ID_DOMAIN_ID = 0, //!< VM ID represents DOMAIN ID NVML_VGPU_VM_ID_UUID = 1 //!< VM ID represents UUID } nvmlVgpuVmIdType_t; /** * vGPU GUEST info state */ typedef enum nvmlVgpuGuestInfoState_enum { NVML_VGPU_INSTANCE_GUEST_INFO_STATE_UNINITIALIZED = 0, //!< Guest-dependent fields uninitialized NVML_VGPU_INSTANCE_GUEST_INFO_STATE_INITIALIZED = 1 //!< Guest-dependent fields initialized } nvmlVgpuGuestInfoState_t; /** * vGPU software licensable features */ typedef enum { NVML_GRID_LICENSE_FEATURE_CODE_UNKNOWN = 0, //!< Unknown NVML_GRID_LICENSE_FEATURE_CODE_VGPU = 1, //!< Virtual GPU NVML_GRID_LICENSE_FEATURE_CODE_NVIDIA_RTX = 2, //!< Nvidia RTX NVML_GRID_LICENSE_FEATURE_CODE_VWORKSTATION = NVML_GRID_LICENSE_FEATURE_CODE_NVIDIA_RTX, //!< Deprecated, do not use. NVML_GRID_LICENSE_FEATURE_CODE_GAMING = 3, //!< Gaming NVML_GRID_LICENSE_FEATURE_CODE_COMPUTE = 4 //!< Compute } nvmlGridLicenseFeatureCode_t; /** * Status codes for license expiry */ #define NVML_GRID_LICENSE_EXPIRY_NOT_AVAILABLE 0 //!< Expiry information not available #define NVML_GRID_LICENSE_EXPIRY_INVALID 1 //!< Invalid expiry or error fetching expiry #define NVML_GRID_LICENSE_EXPIRY_VALID 2 //!< Valid expiry #define NVML_GRID_LICENSE_EXPIRY_NOT_APPLICABLE 3 //!< Expiry not applicable #define NVML_GRID_LICENSE_EXPIRY_PERMANENT 4 //!< Permanent expiry /** * vGPU queryable capabilities */ typedef enum nvmlVgpuCapability_enum { NVML_VGPU_CAP_NVLINK_P2P = 0, //!< P2P over NVLink is supported NVML_VGPU_CAP_GPUDIRECT = 1, //!< GPUDirect capability is supported NVML_VGPU_CAP_MULTI_VGPU_EXCLUSIVE = 2, //!< vGPU profile cannot be mixed with other vGPU profiles in same VM NVML_VGPU_CAP_EXCLUSIVE_TYPE = 3, //!< vGPU profile cannot run on a GPU alongside other profiles of different type NVML_VGPU_CAP_EXCLUSIVE_SIZE = 4, //!< vGPU profile cannot run on a GPU alongside other profiles of different size // Keep this last NVML_VGPU_CAP_COUNT } nvmlVgpuCapability_t; /** * vGPU driver queryable capabilities */ typedef enum nvmlVgpuDriverCapability_enum { NVML_VGPU_DRIVER_CAP_HETEROGENEOUS_MULTI_VGPU = 0, //!< Supports mixing of different vGPU profiles within one guest VM NVML_VGPU_DRIVER_CAP_WARM_UPDATE = 1, //!< Supports FSR and warm update of vGPU host driver without terminating the running guest VM // Keep this last NVML_VGPU_DRIVER_CAP_COUNT } nvmlVgpuDriverCapability_t; /** * Device vGPU queryable capabilities */ typedef enum nvmlDeviceVgpuCapability_enum { NVML_DEVICE_VGPU_CAP_FRACTIONAL_MULTI_VGPU = 0, //!< Query whether the fractional vGPU profiles on this GPU can be used in multi-vGPU configurations NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_PROFILES = 1, //!< Query whether the GPU support concurrent execution of timesliced vGPU profiles of differing types NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_SIZES = 2, //!< Query whether the GPU support concurrent execution of timesliced vGPU profiles of differing framebuffer sizes NVML_DEVICE_VGPU_CAP_READ_DEVICE_BUFFER_BW = 3, //!< Query the GPU's read_device_buffer expected bandwidth capacity in megabytes per second NVML_DEVICE_VGPU_CAP_WRITE_DEVICE_BUFFER_BW = 4, //!< Query the GPU's write_device_buffer expected bandwidth capacity in megabytes per second NVML_DEVICE_VGPU_CAP_DEVICE_STREAMING = 5, //!< Query whether the vGPU profiles on the GPU supports migration data streaming NVML_DEVICE_VGPU_CAP_MINI_QUARTER_GPU = 6, //!< Set/Get support for mini-quarter vGPU profiles NVML_DEVICE_VGPU_CAP_COMPUTE_MEDIA_ENGINE_GPU = 7, //!< Set/Get support for compute media engine vGPU profiles NVML_DEVICE_VGPU_CAP_WARM_UPDATE = 8, //!< Query whether the GPU supports FSR and warm update NVML_DEVICE_VGPU_CAP_HOMOGENEOUS_PLACEMENTS = 9, //!< Query whether the GPU supports reporting of placements of timesliced vGPU profiles with identical framebuffer sizes NVML_DEVICE_VGPU_CAP_MIG_TIMESLICING_SUPPORTED = 10, //!< Query whether the GPU supports timesliced vGPU on MIG NVML_DEVICE_VGPU_CAP_MIG_TIMESLICING_ENABLED = 11, //!< Set/Get MIG timesliced mode reporting, without impacting the underlying functionality // Keep this last NVML_DEVICE_VGPU_CAP_COUNT } nvmlDeviceVgpuCapability_t; /** @} */ /***************************************************************************************************/ /** @defgroup nvmlVgpuConstants vGPU Constants * @{ */ /***************************************************************************************************/ /** * Buffer size guaranteed to be large enough for \ref nvmlVgpuTypeGetLicense */ #define NVML_GRID_LICENSE_BUFFER_SIZE 128 #define NVML_VGPU_NAME_BUFFER_SIZE 64 #define NVML_GRID_LICENSE_FEATURE_MAX_COUNT 3 #define INVALID_GPU_INSTANCE_PROFILE_ID 0xFFFFFFFF #define INVALID_GPU_INSTANCE_ID 0xFFFFFFFF #define NVML_INVALID_VGPU_PLACEMENT_ID 0xFFFF /*! * Macros for vGPU instance's virtualization capabilities bitfield. */ #define NVML_VGPU_VIRTUALIZATION_CAP_MIGRATION 0:0 #define NVML_VGPU_VIRTUALIZATION_CAP_MIGRATION_NO 0x0 #define NVML_VGPU_VIRTUALIZATION_CAP_MIGRATION_YES 0x1 /*! * Macros for pGPU's virtualization capabilities bitfield. */ #define NVML_VGPU_PGPU_VIRTUALIZATION_CAP_MIGRATION 0:0 #define NVML_VGPU_PGPU_VIRTUALIZATION_CAP_MIGRATION_NO 0x0 #define NVML_VGPU_PGPU_VIRTUALIZATION_CAP_MIGRATION_YES 0x1 /** * Macros to indicate the vGPU mode of the GPU. */ #define NVML_VGPU_PGPU_HETEROGENEOUS_MODE 0 #define NVML_VGPU_PGPU_HOMOGENEOUS_MODE 1 /** @} */ /***************************************************************************************************/ /** @defgroup nvmlVgpuStructs vGPU Structs * @{ */ /***************************************************************************************************/ typedef unsigned int nvmlVgpuTypeId_t; typedef unsigned int nvmlVgpuInstance_t; /** * Structure to store the vGPU heterogeneous mode of device -- version 1 */ typedef struct { unsigned int version; //!< The version number of this struct unsigned int mode; //!< The vGPU heterogeneous mode } nvmlVgpuHeterogeneousMode_v1_t; typedef nvmlVgpuHeterogeneousMode_v1_t nvmlVgpuHeterogeneousMode_t; #define nvmlVgpuHeterogeneousMode_v1 NVML_STRUCT_VERSION(VgpuHeterogeneousMode, 1) /** * Structure to store the placement ID of vGPU instance -- version 1 */ typedef struct { unsigned int version; //!< The version number of this struct unsigned int placementId; //!< Placement ID of the active vGPU instance } nvmlVgpuPlacementId_v1_t; typedef nvmlVgpuPlacementId_v1_t nvmlVgpuPlacementId_t; #define nvmlVgpuPlacementId_v1 NVML_STRUCT_VERSION(VgpuPlacementId, 1) /** * Structure to store the list of vGPU placements -- version 1 */ typedef struct { unsigned int version; //!< The version number of this struct unsigned int placementSize; //!< The number of slots occupied by the vGPU type unsigned int count; //!< Count of placement IDs fetched unsigned int *placementIds; //!< Placement IDs for the vGPU type } nvmlVgpuPlacementList_v1_t; #define nvmlVgpuPlacementList_v1 NVML_STRUCT_VERSION(VgpuPlacementList, 1) /** * Structure to store the list of vGPU placements -- version 2 */ typedef struct { unsigned int version; //!< IN: The version number of this struct unsigned int placementSize; //!< OUT: The number of slots occupied by the vGPU type unsigned int count; //!< IN/OUT: Count of the placement IDs unsigned int *placementIds; //!< IN/OUT: Placement IDs for the vGPU type unsigned int mode; //!< IN: The vGPU mode. Either NVML_VGPU_PGPU_HETEROGENEOUS_MODE or NVML_VGPU_PGPU_HOMOGENEOUS_MODE } nvmlVgpuPlacementList_v2_t; typedef nvmlVgpuPlacementList_v2_t nvmlVgpuPlacementList_t; #define nvmlVgpuPlacementList_v2 NVML_STRUCT_VERSION(VgpuPlacementList, 2) /** * Structure to store BAR1 size information of vGPU type -- Version 1 */ typedef struct { unsigned int version; //!< The version number of this struct unsigned long long bar1Size; //!< BAR1 size in megabytes } nvmlVgpuTypeBar1Info_v1_t; typedef nvmlVgpuTypeBar1Info_v1_t nvmlVgpuTypeBar1Info_t; #define nvmlVgpuTypeBar1Info_v1 NVML_STRUCT_VERSION(VgpuTypeBar1Info, 1) /** * Structure to store Utilization Value and vgpuInstance */ typedef struct nvmlVgpuInstanceUtilizationSample_st { nvmlVgpuInstance_t vgpuInstance; //!< vGPU Instance unsigned long long timeStamp; //!< CPU Timestamp in microseconds nvmlValue_t smUtil; //!< SM (3D/Compute) Util Value nvmlValue_t memUtil; //!< Frame Buffer Memory Util Value nvmlValue_t encUtil; //!< Encoder Util Value nvmlValue_t decUtil; //!< Decoder Util Value } nvmlVgpuInstanceUtilizationSample_t; /** * Structure to store Utilization Value and vgpuInstance Info -- Version 1 */ typedef struct { unsigned long long timeStamp; //!< CPU Timestamp in microseconds nvmlVgpuInstance_t vgpuInstance; //!< vGPU Instance nvmlValue_t smUtil; //!< SM (3D/Compute) Util Value nvmlValue_t memUtil; //!< Frame Buffer Memory Util Value nvmlValue_t encUtil; //!< Encoder Util Value nvmlValue_t decUtil; //!< Decoder Util Value nvmlValue_t jpgUtil; //!< Jpeg Util Value nvmlValue_t ofaUtil; //!< Ofa Util Value } nvmlVgpuInstanceUtilizationInfo_v1_t; /** * Structure to store recent utilization for vGPU instances running on a device -- version 1 */ typedef struct { unsigned int version; //!< The version number of this struct nvmlValueType_t sampleValType; //!< Hold the type of returned sample values unsigned int vgpuInstanceCount; //!< Hold the number of vGPU instances unsigned long long lastSeenTimeStamp; //!< Return only samples with timestamp greater than lastSeenTimeStamp nvmlVgpuInstanceUtilizationInfo_v1_t *vgpuUtilArray; //!< The array (allocated by caller) in which vGPU utilization are returned } nvmlVgpuInstancesUtilizationInfo_v1_t; typedef nvmlVgpuInstancesUtilizationInfo_v1_t nvmlVgpuInstancesUtilizationInfo_t; #define nvmlVgpuInstancesUtilizationInfo_v1 NVML_STRUCT_VERSION(VgpuInstancesUtilizationInfo, 1) /** * Structure to store Utilization Value, vgpuInstance and subprocess information */ typedef struct nvmlVgpuProcessUtilizationSample_st { nvmlVgpuInstance_t vgpuInstance; //!< vGPU Instance unsigned int pid; //!< PID of process running within the vGPU VM char processName[NVML_VGPU_NAME_BUFFER_SIZE]; //!< Name of process running within the vGPU VM unsigned long long timeStamp; //!< CPU Timestamp in microseconds unsigned int smUtil; //!< SM (3D/Compute) Util Value unsigned int memUtil; //!< Frame Buffer Memory Util Value unsigned int encUtil; //!< Encoder Util Value unsigned int decUtil; //!< Decoder Util Value } nvmlVgpuProcessUtilizationSample_t; /** * Structure to store Utilization Value, vgpuInstance and subprocess information for process running on vGPU instance -- version 1 */ typedef struct { char processName[NVML_VGPU_NAME_BUFFER_SIZE]; //!< Name of process running within the vGPU VM unsigned long long timeStamp; //!< CPU Timestamp in microseconds nvmlVgpuInstance_t vgpuInstance; //!< vGPU Instance unsigned int pid; //!< PID of process running within the vGPU VM unsigned int smUtil; //!< SM (3D/Compute) Util Value unsigned int memUtil; //!< Frame Buffer Memory Util Value unsigned int encUtil; //!< Encoder Util Value unsigned int decUtil; //!< Decoder Util Value unsigned int jpgUtil; //!< Jpeg Util Value unsigned int ofaUtil; //!< Ofa Util Value } nvmlVgpuProcessUtilizationInfo_v1_t; /** * Structure to store recent utilization, vgpuInstance and subprocess information for processes running on vGPU instances active on a device -- version 1 */ typedef struct { unsigned int version; //!< The version number of this struct unsigned int vgpuProcessCount; //!< Hold the number of processes running on vGPU instances unsigned long long lastSeenTimeStamp; //!< Return only samples with timestamp greater than lastSeenTimeStamp nvmlVgpuProcessUtilizationInfo_v1_t *vgpuProcUtilArray; //!< The array (allocated by caller) in which utilization of processes running on vGPU instances are returned } nvmlVgpuProcessesUtilizationInfo_v1_t; typedef nvmlVgpuProcessesUtilizationInfo_v1_t nvmlVgpuProcessesUtilizationInfo_t; #define nvmlVgpuProcessesUtilizationInfo_v1 NVML_STRUCT_VERSION(VgpuProcessesUtilizationInfo, 1) /** * Structure to store the information of vGPU runtime state -- version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct unsigned long long size; //!< OUT: The runtime state size of the vGPU instance } nvmlVgpuRuntimeState_v1_t; typedef nvmlVgpuRuntimeState_v1_t nvmlVgpuRuntimeState_t; #define nvmlVgpuRuntimeState_v1 NVML_STRUCT_VERSION(VgpuRuntimeState, 1) /** * vGPU scheduler policies */ #define NVML_VGPU_SCHEDULER_POLICY_UNKNOWN 0 #define NVML_VGPU_SCHEDULER_POLICY_BEST_EFFORT 1 #define NVML_VGPU_SCHEDULER_POLICY_EQUAL_SHARE 2 #define NVML_VGPU_SCHEDULER_POLICY_FIXED_SHARE 3 #define NVML_SUPPORTED_VGPU_SCHEDULER_POLICY_COUNT 3 #define NVML_SCHEDULER_SW_MAX_LOG_ENTRIES 200 #define NVML_VGPU_SCHEDULER_ARR_DEFAULT 0 #define NVML_VGPU_SCHEDULER_ARR_DISABLE 1 #define NVML_VGPU_SCHEDULER_ARR_ENABLE 2 /** * vGPU scheduler engine types */ #define NVML_VGPU_SCHEDULER_ENGINE_TYPE_GRAPHICS 1 /** * Union to represent the vGPU Scheduler Parameters */ typedef union { struct { unsigned int avgFactor; //!< Average factor in compensating the timeslice for Adaptive Round Robin mode unsigned int timeslice; //!< The timeslice in ns for each software run list as configured, or the default value otherwise } vgpuSchedDataWithARR; struct { unsigned int timeslice; //!< The timeslice in ns for each software run list as configured, or the default value otherwise } vgpuSchedData; } nvmlVgpuSchedulerParams_t; /** * Structure to store the state and logs of a software runlist */ typedef struct nvmlVgpuSchedulerLogEntries_st { unsigned long long timestamp; //!< Timestamp in ns when this software runlist was preeempted unsigned long long timeRunTotal; //!< Total time in ns this software runlist has run unsigned long long timeRun; //!< Time in ns this software runlist ran before preemption unsigned int swRunlistId; //!< Software runlist Id unsigned long long targetTimeSlice; //!< The actual timeslice after deduction unsigned long long cumulativePreemptionTime; //!< Preemption time in ns for this SW runlist } nvmlVgpuSchedulerLogEntry_t; /** * Structure to store a vGPU software scheduler log */ typedef struct nvmlVgpuSchedulerLog_st { unsigned int engineId; //!< Engine whose software runlist log entries are fetched unsigned int schedulerPolicy; //!< Scheduler policy unsigned int arrMode; //!< Adaptive Round Robin scheduler mode. One of the NVML_VGPU_SCHEDULER_ARR_*. nvmlVgpuSchedulerParams_t schedulerParams; unsigned int entriesCount; //!< Count of log entries fetched nvmlVgpuSchedulerLogEntry_t logEntries[NVML_SCHEDULER_SW_MAX_LOG_ENTRIES]; } nvmlVgpuSchedulerLog_t; /** * Structure to store the vGPU scheduler state */ typedef struct nvmlVgpuSchedulerGetState_st { unsigned int schedulerPolicy; //!< Scheduler policy unsigned int arrMode; //!< Adaptive Round Robin scheduler mode. One of the NVML_VGPU_SCHEDULER_ARR_*. nvmlVgpuSchedulerParams_t schedulerParams; } nvmlVgpuSchedulerGetState_t; /** * Union to represent the vGPU Scheduler set Parameters */ typedef union { struct { unsigned int avgFactor; //!< Average factor in compensating the timeslice for Adaptive Round Robin mode unsigned int frequency; //!< Frequency for Adaptive Round Robin mode } vgpuSchedDataWithARR; struct { unsigned int timeslice; //!< The timeslice in ns(Nanoseconds) for each software run list as configured, or the default value otherwise } vgpuSchedData; } nvmlVgpuSchedulerSetParams_t; /** * Structure to set the vGPU scheduler state */ typedef struct nvmlVgpuSchedulerSetState_st { unsigned int schedulerPolicy; //!< Scheduler policy unsigned int enableARRMode; //!< Adaptive Round Robin scheduler nvmlVgpuSchedulerSetParams_t schedulerParams; } nvmlVgpuSchedulerSetState_t; /** * Structure to store the vGPU scheduler capabilities */ typedef struct nvmlVgpuSchedulerCapabilities_st { unsigned int supportedSchedulers[NVML_SUPPORTED_VGPU_SCHEDULER_POLICY_COUNT]; //!< List the supported vGPU schedulers on the device unsigned int maxTimeslice; //!< Maximum timeslice value in ns unsigned int minTimeslice; //!< Minimum timeslice value in ns unsigned int isArrModeSupported; //!< Flag to check Adaptive Round Robin mode enabled/disabled. unsigned int maxFrequencyForARR; //!< Maximum frequency for Adaptive Round Robin mode unsigned int minFrequencyForARR; //!< Minimum frequency for Adaptive Round Robin mode unsigned int maxAvgFactorForARR; //!< Maximum averaging factor for Adaptive Round Robin mode unsigned int minAvgFactorForARR; //!< Minimum averaging factor for Adaptive Round Robin mode } nvmlVgpuSchedulerCapabilities_t; /** * Structure to store the vGPU license expiry details */ typedef struct nvmlVgpuLicenseExpiry_st { unsigned int year; //!< Year of license expiry unsigned short month; //!< Month of license expiry unsigned short day; //!< Day of license expiry unsigned short hour; //!< Hour of license expiry unsigned short min; //!< Minutes of license expiry unsigned short sec; //!< Seconds of license expiry unsigned char status; //!< License expiry status } nvmlVgpuLicenseExpiry_t; /** * vGPU license state */ #define NVML_GRID_LICENSE_STATE_UNKNOWN 0 //!< Unknown state #define NVML_GRID_LICENSE_STATE_UNINITIALIZED 1 //!< Uninitialized state #define NVML_GRID_LICENSE_STATE_UNLICENSED_UNRESTRICTED 2 //!< Unlicensed unrestricted state #define NVML_GRID_LICENSE_STATE_UNLICENSED_RESTRICTED 3 //!< Unlicensed restricted state #define NVML_GRID_LICENSE_STATE_UNLICENSED 4 //!< Unlicensed state #define NVML_GRID_LICENSE_STATE_LICENSED 5 //!< Licensed state typedef struct nvmlVgpuLicenseInfo_st { unsigned char isLicensed; //!< License status nvmlVgpuLicenseExpiry_t licenseExpiry; //!< License expiry information unsigned int currentState; //!< Current license state } nvmlVgpuLicenseInfo_t; /** * Structure to store license expiry date and time values */ typedef struct nvmlGridLicenseExpiry_st { unsigned int year; //!< Year value of license expiry unsigned short month; //!< Month value of license expiry unsigned short day; //!< Day value of license expiry unsigned short hour; //!< Hour value of license expiry unsigned short min; //!< Minutes value of license expiry unsigned short sec; //!< Seconds value of license expiry unsigned char status; //!< License expiry status } nvmlGridLicenseExpiry_t; /** * Structure containing vGPU software licensable feature information */ typedef struct nvmlGridLicensableFeature_st { nvmlGridLicenseFeatureCode_t featureCode; //!< Licensed feature code unsigned int featureState; //!< Non-zero if feature is currently licensed, otherwise zero char licenseInfo[NVML_GRID_LICENSE_BUFFER_SIZE]; //!< Deprecated. char productName[NVML_GRID_LICENSE_BUFFER_SIZE]; //!< Product name of feature unsigned int featureEnabled; //!< Non-zero if feature is enabled, otherwise zero nvmlGridLicenseExpiry_t licenseExpiry; //!< License expiry structure containing date and time } nvmlGridLicensableFeature_t; /** * Structure to store vGPU software licensable features */ typedef struct nvmlGridLicensableFeatures_st { int isGridLicenseSupported; //!< Non-zero if vGPU Software Licensing is supported on the system, otherwise zero unsigned int licensableFeaturesCount; //!< Entries returned in \a gridLicensableFeatures array nvmlGridLicensableFeature_t gridLicensableFeatures[NVML_GRID_LICENSE_FEATURE_MAX_COUNT]; //!< Array of vGPU software licensable features. } nvmlGridLicensableFeatures_t; /** * Enum describing the GPU Recovery Action */ typedef enum nvmlDeviceGpuRecoveryAction_s { NVML_GPU_RECOVERY_ACTION_NONE = 0, NVML_GPU_RECOVERY_ACTION_GPU_RESET = 1, NVML_GPU_RECOVERY_ACTION_NODE_REBOOT = 2, NVML_GPU_RECOVERY_ACTION_DRAIN_P2P = 3, NVML_GPU_RECOVERY_ACTION_DRAIN_AND_RESET = 4, } nvmlDeviceGpuRecoveryAction_t; /** * Structure to store the vGPU type IDs -- version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct unsigned int vgpuCount; //!< IN/OUT: Number of vGPU types nvmlVgpuTypeId_t *vgpuTypeIds; //!< OUT: List of vGPU type IDs } nvmlVgpuTypeIdInfo_v1_t; typedef nvmlVgpuTypeIdInfo_v1_t nvmlVgpuTypeIdInfo_t; #define nvmlVgpuTypeIdInfo_v1 NVML_STRUCT_VERSION(VgpuTypeIdInfo, 1) /** * Structure to store the maximum number of possible vGPU type IDs -- version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct nvmlVgpuTypeId_t vgpuTypeId; //!< IN: Handle to vGPU type unsigned int maxInstancePerGI; //!< OUT: Maximum number of vGPU instances per GPU instance } nvmlVgpuTypeMaxInstance_v1_t; typedef nvmlVgpuTypeMaxInstance_v1_t nvmlVgpuTypeMaxInstance_t; #define nvmlVgpuTypeMaxInstance_v1 NVML_STRUCT_VERSION(VgpuTypeMaxInstance, 1) /** * Structure to store active vGPU instance information -- Version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct unsigned int vgpuCount; //!< IN/OUT: Count of the active vGPU instances nvmlVgpuInstance_t *vgpuInstances; //!< IN/OUT: list of active vGPU instances } nvmlActiveVgpuInstanceInfo_v1_t; typedef nvmlActiveVgpuInstanceInfo_v1_t nvmlActiveVgpuInstanceInfo_t; #define nvmlActiveVgpuInstanceInfo_v1 NVML_STRUCT_VERSION(ActiveVgpuInstanceInfo, 1) /** * Structure to set vGPU scheduler state information -- version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct unsigned int engineId; //!< IN: One of NVML_VGPU_SCHEDULER_ENGINE_TYPE_*. unsigned int schedulerPolicy; //!< IN: Scheduler policy unsigned int enableARRMode; //!< IN: Adaptive Round Robin scheduler nvmlVgpuSchedulerSetParams_t schedulerParams; //!< IN: vGPU Scheduler Parameters } nvmlVgpuSchedulerState_v1_t; typedef nvmlVgpuSchedulerState_v1_t nvmlVgpuSchedulerState_t; #define nvmlVgpuSchedulerState_v1 NVML_STRUCT_VERSION(VgpuSchedulerState, 1) /** * Structure to store vGPU scheduler state information -- Version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct unsigned int engineId; //!< IN: Engine whose software scheduler state info is fetched. One of NVML_VGPU_SCHEDULER_ENGINE_TYPE_*. unsigned int schedulerPolicy; //!< OUT: Scheduler policy unsigned int arrMode; //!< OUT: Adaptive Round Robin scheduler mode. One of the NVML_VGPU_SCHEDULER_ARR_*. nvmlVgpuSchedulerParams_t schedulerParams; //!< OUT: vGPU Scheduler Parameters } nvmlVgpuSchedulerStateInfo_v1_t; typedef nvmlVgpuSchedulerStateInfo_v1_t nvmlVgpuSchedulerStateInfo_t; #define nvmlVgpuSchedulerStateInfo_v1 NVML_STRUCT_VERSION(VgpuSchedulerStateInfo, 1) /** * Structure to store vGPU scheduler log information -- Version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct unsigned int engineId; //!< IN: Engine whose software runlist log entries are fetched. One of One of NVML_VGPU_SCHEDULER_ENGINE_TYPE_*. unsigned int schedulerPolicy; //!< OUT: Scheduler policy unsigned int arrMode; //!< OUT: Adaptive Round Robin scheduler mode. One of the NVML_VGPU_SCHEDULER_ARR_*. nvmlVgpuSchedulerParams_t schedulerParams; //!< OUT: vGPU Scheduler Parameters unsigned int entriesCount; //!< OUT: Count of log entries fetched nvmlVgpuSchedulerLogEntry_t logEntries[NVML_SCHEDULER_SW_MAX_LOG_ENTRIES]; //!< OUT: Structure to store the state and logs of a software runlist } nvmlVgpuSchedulerLogInfo_v1_t; typedef nvmlVgpuSchedulerLogInfo_v1_t nvmlVgpuSchedulerLogInfo_t; #define nvmlVgpuSchedulerLogInfo_v1 NVML_STRUCT_VERSION(VgpuSchedulerLogInfo, 1) /** * Structure to store creatable vGPU placement information -- version 1 */ typedef struct { unsigned int version; //!< IN: The version number of this struct nvmlVgpuTypeId_t vgpuTypeId; //!< IN: Handle to vGPU type unsigned int count; //!< IN/OUT: Count of the placement IDs unsigned int *placementIds; //!< IN/OUT: Placement IDs for the vGPU type unsigned int placementSize; //!< OUT: The number of slots occupied by the vGPU type } nvmlVgpuCreatablePlacementInfo_v1_t; typedef nvmlVgpuCreatablePlacementInfo_v1_t nvmlVgpuCreatablePlacementInfo_t; #define nvmlVgpuCreatablePlacementInfo_v1 NVML_STRUCT_VERSION(VgpuCreatablePlacementInfo, 1) /** @} */ /** @} */ /***************************************************************************************************/ /** @defgroup nvmlFieldValueEnums Field Value Enums * @{ */ /***************************************************************************************************/ /** * Field Identifiers. * * All Identifiers pertain to a device. Each ID is only used once and is guaranteed never to change. */ #define NVML_FI_DEV_ECC_CURRENT 1 //!< Current ECC mode. 1=Active. 0=Inactive #define NVML_FI_DEV_ECC_PENDING 2 //!< Pending ECC mode. 1=Active. 0=Inactive /* ECC Count Totals */ #define NVML_FI_DEV_ECC_SBE_VOL_TOTAL 3 //!< Total single bit volatile ECC errors #define NVML_FI_DEV_ECC_DBE_VOL_TOTAL 4 //!< Total double bit volatile ECC errors #define NVML_FI_DEV_ECC_SBE_AGG_TOTAL 5 //!< Total single bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_DBE_AGG_TOTAL 6 //!< Total double bit aggregate (persistent) ECC errors /* Individual ECC locations */ #define NVML_FI_DEV_ECC_SBE_VOL_L1 7 //!< L1 cache single bit volatile ECC errors #define NVML_FI_DEV_ECC_DBE_VOL_L1 8 //!< L1 cache double bit volatile ECC errors #define NVML_FI_DEV_ECC_SBE_VOL_L2 9 //!< L2 cache single bit volatile ECC errors #define NVML_FI_DEV_ECC_DBE_VOL_L2 10 //!< L2 cache double bit volatile ECC errors #define NVML_FI_DEV_ECC_SBE_VOL_DEV 11 //!< Device memory single bit volatile ECC errors #define NVML_FI_DEV_ECC_DBE_VOL_DEV 12 //!< Device memory double bit volatile ECC errors #define NVML_FI_DEV_ECC_SBE_VOL_REG 13 //!< Register file single bit volatile ECC errors #define NVML_FI_DEV_ECC_DBE_VOL_REG 14 //!< Register file double bit volatile ECC errors #define NVML_FI_DEV_ECC_SBE_VOL_TEX 15 //!< Texture memory single bit volatile ECC errors #define NVML_FI_DEV_ECC_DBE_VOL_TEX 16 //!< Texture memory double bit volatile ECC errors #define NVML_FI_DEV_ECC_DBE_VOL_CBU 17 //!< CBU double bit volatile ECC errors #define NVML_FI_DEV_ECC_SBE_AGG_L1 18 //!< L1 cache single bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_DBE_AGG_L1 19 //!< L1 cache double bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_SBE_AGG_L2 20 //!< L2 cache single bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_DBE_AGG_L2 21 //!< L2 cache double bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_SBE_AGG_DEV 22 //!< Device memory single bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_DBE_AGG_DEV 23 //!< Device memory double bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_SBE_AGG_REG 24 //!< Register File single bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_DBE_AGG_REG 25 //!< Register File double bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_SBE_AGG_TEX 26 //!< Texture memory single bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_DBE_AGG_TEX 27 //!< Texture memory double bit aggregate (persistent) ECC errors #define NVML_FI_DEV_ECC_DBE_AGG_CBU 28 //!< CBU double bit aggregate ECC errors /* Page Retirement */ #define NVML_FI_DEV_RETIRED_SBE 29 //!< Number of retired pages because of single bit errors #define NVML_FI_DEV_RETIRED_DBE 30 //!< Number of retired pages because of double bit errors #define NVML_FI_DEV_RETIRED_PENDING 31 //!< If any pages are pending retirement. 1=yes. 0=no. /** * NVLink Flit Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L0 32 //!< NVLink flow control CRC Error Counter for Lane 0 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L1 33 //!< NVLink flow control CRC Error Counter for Lane 1 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L2 34 //!< NVLink flow control CRC Error Counter for Lane 2 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L3 35 //!< NVLink flow control CRC Error Counter for Lane 3 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L4 36 //!< NVLink flow control CRC Error Counter for Lane 4 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L5 37 //!< NVLink flow control CRC Error Counter for Lane 5 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_TOTAL 38 //!< NVLink flow control CRC Error Counter total for all Lanes /** * NVLink CRC Data Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L0 39 //!< NVLink data CRC Error Counter for Lane 0 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L1 40 //!< NVLink data CRC Error Counter for Lane 1 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L2 41 //!< NVLink data CRC Error Counter for Lane 2 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L3 42 //!< NVLink data CRC Error Counter for Lane 3 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L4 43 //!< NVLink data CRC Error Counter for Lane 4 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L5 44 //!< NVLink data CRC Error Counter for Lane 5 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_TOTAL 45 //!< NvLink data CRC Error Counter total for all Lanes /** * NVLink Replay Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L0 46 //!< NVLink Replay Error Counter for Lane 0 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L1 47 //!< NVLink Replay Error Counter for Lane 1 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L2 48 //!< NVLink Replay Error Counter for Lane 2 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L3 49 //!< NVLink Replay Error Counter for Lane 3 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L4 50 //!< NVLink Replay Error Counter for Lane 4 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L5 51 //!< NVLink Replay Error Counter for Lane 5 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_TOTAL 52 //!< NVLink Replay Error Counter total for all Lanes /** * NVLink Recovery Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L0 53 //!< NVLink Recovery Error Counter for Lane 0 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L1 54 //!< NVLink Recovery Error Counter for Lane 1 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L2 55 //!< NVLink Recovery Error Counter for Lane 2 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L3 56 //!< NVLink Recovery Error Counter for Lane 3 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L4 57 //!< NVLink Recovery Error Counter for Lane 4 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L5 58 //!< NVLink Recovery Error Counter for Lane 5 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_TOTAL 59 //!< NVLink Recovery Error Counter total for all Lanes /* NvLink Bandwidth Counters */ /* * NVML_FI_DEV_NVLINK_BANDWIDTH_* field values are now deprecated. * Please use the following field values instead: * NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_TX * NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_RX * NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_TX * NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_RX */ #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L0 60 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 0 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L1 61 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 1 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L2 62 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 2 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L3 63 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 3 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L4 64 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 4 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L5 65 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 5 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_TOTAL 66 //!< NVLink Bandwidth Counter Total for Counter Set 0, All Lanes /* NvLink Bandwidth Counters */ #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L0 67 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 0 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L1 68 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 1 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L2 69 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 2 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L3 70 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 3 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L4 71 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 4 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L5 72 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 5 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_TOTAL 73 //!< NVLink Bandwidth Counter Total for Counter Set 1, All Lanes /* NVML Perf Policy Counters */ #define NVML_FI_DEV_PERF_POLICY_POWER 74 //!< Perf Policy Counter for Power Policy #define NVML_FI_DEV_PERF_POLICY_THERMAL 75 //!< Perf Policy Counter for Thermal Policy #define NVML_FI_DEV_PERF_POLICY_SYNC_BOOST 76 //!< Perf Policy Counter for Sync boost Policy #define NVML_FI_DEV_PERF_POLICY_BOARD_LIMIT 77 //!< Perf Policy Counter for Board Limit #define NVML_FI_DEV_PERF_POLICY_LOW_UTILIZATION 78 //!< Perf Policy Counter for Low GPU Utilization Policy #define NVML_FI_DEV_PERF_POLICY_RELIABILITY 79 //!< Perf Policy Counter for Reliability Policy #define NVML_FI_DEV_PERF_POLICY_TOTAL_APP_CLOCKS 80 //!< Perf Policy Counter for Total App Clock Policy #define NVML_FI_DEV_PERF_POLICY_TOTAL_BASE_CLOCKS 81 //!< Perf Policy Counter for Total Base Clocks Policy /* Memory temperatures */ #define NVML_FI_DEV_MEMORY_TEMP 82 //!< Memory temperature for the device /* Energy Counter */ #define NVML_FI_DEV_TOTAL_ENERGY_CONSUMPTION 83 //!< Total energy consumption for the GPU in mJ since the driver was last reloaded /** * NVLink Speed * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L0 84 //!< NVLink Speed in MBps for Link 0 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L1 85 //!< NVLink Speed in MBps for Link 1 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L2 86 //!< NVLink Speed in MBps for Link 2 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L3 87 //!< NVLink Speed in MBps for Link 3 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L4 88 //!< NVLink Speed in MBps for Link 4 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L5 89 //!< NVLink Speed in MBps for Link 5 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_COMMON 90 //!< Common NVLink Speed in MBps for active links #define NVML_FI_DEV_NVLINK_LINK_COUNT 91 //!< Number of NVLinks present on the device #define NVML_FI_DEV_RETIRED_PENDING_SBE 92 //!< If any pages are pending retirement due to SBE. 1=yes. 0=no. #define NVML_FI_DEV_RETIRED_PENDING_DBE 93 //!< If any pages are pending retirement due to DBE. 1=yes. 0=no. #define NVML_FI_DEV_PCIE_REPLAY_COUNTER 94 //!< PCIe replay counter #define NVML_FI_DEV_PCIE_REPLAY_ROLLOVER_COUNTER 95 //!< PCIe replay rollover counter /** * NVLink Flit Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L6 96 //!< NVLink flow control CRC Error Counter for Lane 6 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L7 97 //!< NVLink flow control CRC Error Counter for Lane 7 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L8 98 //!< NVLink flow control CRC Error Counter for Lane 8 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L9 99 //!< NVLink flow control CRC Error Counter for Lane 9 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L10 100 //!< NVLink flow control CRC Error Counter for Lane 10 #define NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L11 101 //!< NVLink flow control CRC Error Counter for Lane 11 /** * NVLink CRC Data Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L6 102 //!< NVLink data CRC Error Counter for Lane 6 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L7 103 //!< NVLink data CRC Error Counter for Lane 7 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L8 104 //!< NVLink data CRC Error Counter for Lane 8 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L9 105 //!< NVLink data CRC Error Counter for Lane 9 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L10 106 //!< NVLink data CRC Error Counter for Lane 10 #define NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L11 107 //!< NVLink data CRC Error Counter for Lane 11 /** * NVLink Replay Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L6 108 //!< NVLink Replay Error Counter for Lane 6 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L7 109 //!< NVLink Replay Error Counter for Lane 7 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L8 110 //!< NVLink Replay Error Counter for Lane 8 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L9 111 //!< NVLink Replay Error Counter for Lane 9 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L10 112 //!< NVLink Replay Error Counter for Lane 10 #define NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L11 113 //!< NVLink Replay Error Counter for Lane 11 /** * NVLink Recovery Error Counters * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L6 114 //!< NVLink Recovery Error Counter for Lane 6 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L7 115 //!< NVLink Recovery Error Counter for Lane 7 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L8 116 //!< NVLink Recovery Error Counter for Lane 8 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L9 117 //!< NVLink Recovery Error Counter for Lane 9 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L10 118 //!< NVLink Recovery Error Counter for Lane 10 #define NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L11 119 //!< NVLink Recovery Error Counter for Lane 11 /* NvLink Bandwidth Counters */ /* * NVML_FI_DEV_NVLINK_BANDWIDTH_* field values are now deprecated. * Please use the following field values instead: * NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_TX * NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_RX * NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_TX * NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_RX */ #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L6 120 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 6 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L7 121 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 7 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L8 122 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 8 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L9 123 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 9 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L10 124 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 10 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L11 125 //!< NVLink Bandwidth Counter for Counter Set 0, Lane 11 /* NvLink Bandwidth Counters */ #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L6 126 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 6 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L7 127 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 7 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L8 128 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 8 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L9 129 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 9 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L10 130 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 10 #define NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L11 131 //!< NVLink Bandwidth Counter for Counter Set 1, Lane 11 /** * NVLink Speed * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L6 132 //!< NVLink Speed in MBps for Link 6 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L7 133 //!< NVLink Speed in MBps for Link 7 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L8 134 //!< NVLink Speed in MBps for Link 8 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L9 135 //!< NVLink Speed in MBps for Link 9 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L10 136 //!< NVLink Speed in MBps for Link 10 #define NVML_FI_DEV_NVLINK_SPEED_MBPS_L11 137 //!< NVLink Speed in MBps for Link 11 /** * NVLink throughput counters field values * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. * A scopeId of UINT_MAX returns aggregate value summed up across all links * for the specified counter type in fieldId. */ #define NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_TX 138 //!< NVLink TX Data throughput in KiB #define NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_RX 139 //!< NVLink RX Data throughput in KiB #define NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_TX 140 //!< NVLink TX Data + protocol overhead in KiB #define NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_RX 141 //!< NVLink RX Data + protocol overhead in KiB /* Row Remapper */ #define NVML_FI_DEV_REMAPPED_COR 142 //!< Number of remapped rows due to correctable errors #define NVML_FI_DEV_REMAPPED_UNC 143 //!< Number of remapped rows due to uncorrectable errors #define NVML_FI_DEV_REMAPPED_PENDING 144 //!< If any rows are pending remapping. 1=yes 0=no #define NVML_FI_DEV_REMAPPED_FAILURE 145 //!< If any rows failed to be remapped 1=yes 0=no /** * Remote device NVLink ID * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_REMOTE_NVLINK_ID 146 //!< Remote device NVLink ID /** * NVSwitch: connected NVLink count */ #define NVML_FI_DEV_NVSWITCH_CONNECTED_LINK_COUNT 147 //!< Number of NVLinks connected to NVSwitch /* NvLink ECC Data Error Counters * * Lane ID needs to be specified in the scopeId field in nvmlFieldValue_t. * */ #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L0 148 //!< NVLink data ECC Error Counter for Link 0 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L1 149 //!< NVLink data ECC Error Counter for Link 1 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L2 150 //!< NVLink data ECC Error Counter for Link 2 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L3 151 //!< NVLink data ECC Error Counter for Link 3 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L4 152 //!< NVLink data ECC Error Counter for Link 4 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L5 153 //!< NVLink data ECC Error Counter for Link 5 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L6 154 //!< NVLink data ECC Error Counter for Link 6 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L7 155 //!< NVLink data ECC Error Counter for Link 7 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L8 156 //!< NVLink data ECC Error Counter for Link 8 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L9 157 //!< NVLink data ECC Error Counter for Link 9 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L10 158 //!< NVLink data ECC Error Counter for Link 10 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L11 159 //!< NVLink data ECC Error Counter for Link 11 #define NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_TOTAL 160 //!< NVLink data ECC Error Counter total for all Links /** * NVLink Error Replay * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_ERROR_DL_REPLAY 161 //!< NVLink Replay Error Counter //!< This is unsupported for Blackwell+. //!< Please use NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_* /** * NVLink Recovery Error Counter * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_ERROR_DL_RECOVERY 162 //!< NVLink Recovery Error Counter //!< This is unsupported for Blackwell+ //!< Please use NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_* /** * NVLink Recovery Error CRC Counter * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_ERROR_DL_CRC 163 //!< NVLink CRC Error Counter //!< This is unsupported for Blackwell+ //!< Please use NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_* /** * NVLink Speed, State and Version field id 164, 165, and 166 * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_GET_SPEED 164 //!< NVLink Speed in MBps #define NVML_FI_DEV_NVLINK_GET_STATE 165 //!< NVLink State - Active,Inactive #define NVML_FI_DEV_NVLINK_GET_VERSION 166 //!< NVLink Version #define NVML_FI_DEV_NVLINK_GET_POWER_STATE 167 //!< NVLink Power state. 0=HIGH_SPEED 1=LOW_SPEED #define NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD 168 //!< NVLink length of idle period (units can be found from //!< NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS) before //!< transitioning links to sleep state #define NVML_FI_DEV_PCIE_L0_TO_RECOVERY_COUNTER 169 //!< Device PEX error recovery counter #define NVML_FI_DEV_C2C_LINK_COUNT 170 //!< Number of C2C Links present on the device #define NVML_FI_DEV_C2C_LINK_GET_STATUS 171 //!< C2C Link Status 0=INACTIVE 1=ACTIVE #define NVML_FI_DEV_C2C_LINK_GET_MAX_BW 172 //!< C2C Link Speed in MBps for active links #define NVML_FI_DEV_PCIE_COUNT_CORRECTABLE_ERRORS 173 //!< PCIe Correctable Errors Counter #define NVML_FI_DEV_PCIE_COUNT_NAKS_RECEIVED 174 //!< PCIe NAK Receive Counter #define NVML_FI_DEV_PCIE_COUNT_RECEIVER_ERROR 175 //!< PCIe Receiver Error Counter #define NVML_FI_DEV_PCIE_COUNT_BAD_TLP 176 //!< PCIe Bad TLP Counter #define NVML_FI_DEV_PCIE_COUNT_NAKS_SENT 177 //!< PCIe NAK Send Counter #define NVML_FI_DEV_PCIE_COUNT_BAD_DLLP 178 //!< PCIe Bad DLLP Counter #define NVML_FI_DEV_PCIE_COUNT_NON_FATAL_ERROR 179 //!< PCIe Non Fatal Error Counter #define NVML_FI_DEV_PCIE_COUNT_FATAL_ERROR 180 //!< PCIe Fatal Error Counter #define NVML_FI_DEV_PCIE_COUNT_UNSUPPORTED_REQ 181 //!< PCIe Unsupported Request Counter #define NVML_FI_DEV_PCIE_COUNT_LCRC_ERROR 182 //!< PCIe LCRC Error Counter #define NVML_FI_DEV_PCIE_COUNT_LANE_ERROR 183 //!< PCIe Per Lane Error Counter. #define NVML_FI_DEV_IS_RESETLESS_MIG_SUPPORTED 184 //!< Device's Restless MIG Capability /** * Retrieves power usage for this GPU in milliwatts. * It is only available if power management mode is supported. See \ref nvmlDeviceGetPowerManagementMode and * \ref nvmlDeviceGetPowerUsage. * * scopeId needs to be specified. It signifies: * 0 - GPU Only Scope - Metrics for GPU are retrieved * 1 - Module scope - Metrics for the module (e.g. CPU + GPU) are retrieved. * Note: CPU here refers to NVIDIA CPU (e.g. Grace). x86 or non-NVIDIA ARM is not supported */ #define NVML_FI_DEV_POWER_AVERAGE 185 //!< GPU power averaged over 1 sec interval, supported on Ampere (except GA100) or newer architectures. #define NVML_FI_DEV_POWER_INSTANT 186 //!< Current GPU power, supported on all architectures. #define NVML_FI_DEV_POWER_MIN_LIMIT 187 //!< Minimum power limit in milliwatts. #define NVML_FI_DEV_POWER_MAX_LIMIT 188 //!< Maximum power limit in milliwatts. #define NVML_FI_DEV_POWER_DEFAULT_LIMIT 189 //!< Default power limit in milliwatts (limit which device boots with). #define NVML_FI_DEV_POWER_CURRENT_LIMIT 190 //!< Limit currently enforced in milliwatts (This includes other limits set elsewhere. E.g. Out-of-band). #define NVML_FI_DEV_ENERGY 191 //!< Total energy consumption (in mJ) since the driver was last reloaded. Same as \ref NVML_FI_DEV_TOTAL_ENERGY_CONSUMPTION for the GPU. #define NVML_FI_DEV_POWER_REQUESTED_LIMIT 192 //!< Power limit requested by NVML or any other userspace client. /** * GPU T.Limit temperature thresholds in degree Celsius * * These fields are supported on Ada and later architectures and supersedes \ref nvmlDeviceGetTemperatureThreshold. */ #define NVML_FI_DEV_TEMPERATURE_SHUTDOWN_TLIMIT 193 //!< T.Limit temperature after which GPU may shut down for HW protection #define NVML_FI_DEV_TEMPERATURE_SLOWDOWN_TLIMIT 194 //!< T.Limit temperature after which GPU may begin HW slowdown #define NVML_FI_DEV_TEMPERATURE_MEM_MAX_TLIMIT 195 //!< T.Limit temperature after which GPU may begin SW slowdown due to memory temperature #define NVML_FI_DEV_TEMPERATURE_GPU_MAX_TLIMIT 196 //!< T.Limit temperature after which GPU may be throttled below base clock #define NVML_FI_DEV_PCIE_COUNT_TX_BYTES 197 //!< PCIe transmit bytes. Value can be wrapped. #define NVML_FI_DEV_PCIE_COUNT_RX_BYTES 198 //!< PCIe receive bytes. Value can be wrapped. #define NVML_FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE 199 //!< MIG mode independent, MIG query capable device. 1=yes. 0=no. #define NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX 200 //!< Max Nvlink Power Threshold. See NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD /** * NVLink counter field id 201-225 * * Link ID needs to be specified in the scopeId field in nvmlFieldValue_t. */ #define NVML_FI_DEV_NVLINK_COUNT_XMIT_PACKETS 201 //!usedGpuMemory is not supported unsigned long long time; //!< Amount of time in ms during which the compute context was active. The time is reported as 0 if //!< the process is not terminated unsigned long long startTime; //!< CPU Timestamp in usec representing start time for the process unsigned int isRunning; //!< Flag to represent if the process is running (1 for running, 0 for terminated) unsigned int reserved[5]; //!< Reserved for future use } nvmlAccountingStats_t; /** @} */ /***************************************************************************************************/ /** @defgroup nvmlEncoderStructs Encoder Structs * @{ */ /***************************************************************************************************/ /** * Represents type of encoder for capacity can be queried */ typedef enum nvmlEncoderQueryType_enum { NVML_ENCODER_QUERY_H264 = 0x00, //!< H264 encoder NVML_ENCODER_QUERY_HEVC = 0x01, //!< HEVC encoder NVML_ENCODER_QUERY_AV1 = 0x02, //!< AV1 encoder NVML_ENCODER_QUERY_UNKNOWN = 0xFF //!< Unknown encoder }nvmlEncoderType_t; /** * Structure to hold encoder session data */ typedef struct nvmlEncoderSessionInfo_st { unsigned int sessionId; //!< Unique session ID unsigned int pid; //!< Owning process ID nvmlVgpuInstance_t vgpuInstance; //!< Owning vGPU instance ID (only valid on vGPU hosts, otherwise zero) nvmlEncoderType_t codecType; //!< Video encoder type unsigned int hResolution; //!< Current encode horizontal resolution unsigned int vResolution; //!< Current encode vertical resolution unsigned int averageFps; //!< Moving average encode frames per second unsigned int averageLatency; //!< Moving average encode latency in microseconds }nvmlEncoderSessionInfo_t; /** @} */ /***************************************************************************************************/ /** @defgroup nvmlFBCStructs Frame Buffer Capture Structures * @{ */ /***************************************************************************************************/ /** * Represents frame buffer capture session type */ typedef enum nvmlFBCSessionType_enum { NVML_FBC_SESSION_TYPE_UNKNOWN = 0, //!< Unknown NVML_FBC_SESSION_TYPE_TOSYS, //!< ToSys NVML_FBC_SESSION_TYPE_CUDA, //!< Cuda NVML_FBC_SESSION_TYPE_VID, //!< Vid NVML_FBC_SESSION_TYPE_HWENC //!< HEnc } nvmlFBCSessionType_t; /** * Structure to hold frame buffer capture sessions stats */ typedef struct nvmlFBCStats_st { unsigned int sessionsCount; //!< Total no of sessions unsigned int averageFPS; //!< Moving average new frames captured per second unsigned int averageLatency; //!< Moving average new frame capture latency in microseconds } nvmlFBCStats_t; #define NVML_NVFBC_SESSION_FLAG_DIFFMAP_ENABLED 0x00000001 //!< Bit specifying differential map state. #define NVML_NVFBC_SESSION_FLAG_CLASSIFICATIONMAP_ENABLED 0x00000002 //!< Bit specifying classification map state. #define NVML_NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_NO_WAIT 0x00000004 //!< Bit specifying if capture was requested as non-blocking call. #define NVML_NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_INFINITE 0x00000008 //!< Bit specifying if capture was requested as blocking call. #define NVML_NVFBC_SESSION_FLAG_CAPTURE_WITH_WAIT_TIMEOUT 0x00000010 //!< Bit specifying if capture was requested as blocking call with timeout period. /** * Structure to hold FBC session data */ typedef struct nvmlFBCSessionInfo_st { unsigned int sessionId; //!< Unique session ID unsigned int pid; //!< Owning process ID nvmlVgpuInstance_t vgpuInstance; //!< Owning vGPU instance ID (only valid on vGPU hosts, otherwise zero) unsigned int displayOrdinal; //!< Display identifier nvmlFBCSessionType_t sessionType; //!< Type of frame buffer capture session unsigned int sessionFlags; //!< Session flags (one or more of NVML_NVFBC_SESSION_FLAG_XXX). unsigned int hMaxResolution; //!< Max horizontal resolution supported by the capture session unsigned int vMaxResolution; //!< Max vertical resolution supported by the capture session unsigned int hResolution; //!< Horizontal resolution requested by caller in capture call unsigned int vResolution; //!< Vertical resolution requested by caller in capture call unsigned int averageFPS; //!< Moving average new frames captured per second unsigned int averageLatency; //!< Moving average new frame capture latency in microseconds } nvmlFBCSessionInfo_t; /** @} */ /***************************************************************************************************/ /** @defgroup nvmlDrainDefs Drain State definitions * @{ */ /***************************************************************************************************/ /** * Is the GPU device to be removed from the kernel by nvmlDeviceRemoveGpu() */ typedef enum nvmlDetachGpuState_enum { NVML_DETACH_GPU_KEEP = 0, NVML_DETACH_GPU_REMOVE } nvmlDetachGpuState_t; /** * Parent bridge PCIe link state requested by nvmlDeviceRemoveGpu() */ typedef enum nvmlPcieLinkState_enum { NVML_PCIE_LINK_KEEP = 0, NVML_PCIE_LINK_SHUT_DOWN } nvmlPcieLinkState_t; /** @} */ /***************************************************************************************************/ /** @defgroup nvmlConfidentialComputingDefs Confidential Computing definitions * @{ */ /***************************************************************************************************/ /** * Confidential Compute CPU Capabilities values */ #define NVML_CC_SYSTEM_CPU_CAPS_NONE 0 #define NVML_CC_SYSTEM_CPU_CAPS_AMD_SEV 1 #define NVML_CC_SYSTEM_CPU_CAPS_INTEL_TDX 2 #define NVML_CC_SYSTEM_CPU_CAPS_AMD_SEV_SNP 3 #define NVML_CC_SYSTEM_CPU_CAPS_AMD_SNP_VTOM 4 /** * Confidenial Compute GPU Capabilities values */ #define NVML_CC_SYSTEM_GPUS_CC_NOT_CAPABLE 0 #define NVML_CC_SYSTEM_GPUS_CC_CAPABLE 1 typedef struct nvmlConfComputeSystemCaps_st { unsigned int cpuCaps; unsigned int gpusCaps; } nvmlConfComputeSystemCaps_t; /** * Confidential Compute DevTools Mode values */ #define NVML_CC_SYSTEM_DEVTOOLS_MODE_OFF 0 #define NVML_CC_SYSTEM_DEVTOOLS_MODE_ON 1 /** * Confidential Compute Environment values */ #define NVML_CC_SYSTEM_ENVIRONMENT_UNAVAILABLE 0 #define NVML_CC_SYSTEM_ENVIRONMENT_SIM 1 #define NVML_CC_SYSTEM_ENVIRONMENT_PROD 2 /** * Confidential Compute Feature Status values */ #define NVML_CC_SYSTEM_FEATURE_DISABLED 0 #define NVML_CC_SYSTEM_FEATURE_ENABLED 1 typedef struct nvmlConfComputeSystemState_st { unsigned int environment; unsigned int ccFeature; unsigned int devToolsMode; } nvmlConfComputeSystemState_t; /** * Confidential Compute Multigpu mode values */ #define NVML_CC_SYSTEM_MULTIGPU_NONE 0 #define NVML_CC_SYSTEM_MULTIGPU_PROTECTED_PCIE 1 #define NVML_CC_SYSTEM_MULTIGPU_NVLE 2 /** * Confidential Compute System settings */ typedef struct { unsigned int version; unsigned int environment; unsigned int ccFeature; unsigned int devToolsMode; unsigned int multiGpuMode; } nvmlSystemConfComputeSettings_v1_t; typedef nvmlSystemConfComputeSettings_v1_t nvmlSystemConfComputeSettings_t; #define nvmlSystemConfComputeSettings_v1 NVML_STRUCT_VERSION(SystemConfComputeSettings, 1) /** * Protected memory size */ typedef struct nvmlConfComputeMemSizeInfo_st { unsigned long long protectedMemSizeKib; unsigned long long unprotectedMemSizeKib; } nvmlConfComputeMemSizeInfo_t; /** * Confidential Compute GPUs/System Ready State values */ #define NVML_CC_ACCEPTING_CLIENT_REQUESTS_FALSE 0 #define NVML_CC_ACCEPTING_CLIENT_REQUESTS_TRUE 1 /** * GPU Certificate Details */ #define NVML_GPU_CERT_CHAIN_SIZE 0x1000 #define NVML_GPU_ATTESTATION_CERT_CHAIN_SIZE 0x1400 typedef struct nvmlConfComputeGpuCertificate_st { unsigned int certChainSize; unsigned int attestationCertChainSize; unsigned char certChain[NVML_GPU_CERT_CHAIN_SIZE]; unsigned char attestationCertChain[NVML_GPU_ATTESTATION_CERT_CHAIN_SIZE]; } nvmlConfComputeGpuCertificate_t; /** * GPU Attestation Report */ #define NVML_CC_GPU_CEC_NONCE_SIZE 0x20 #define NVML_CC_GPU_ATTESTATION_REPORT_SIZE 0x2000 #define NVML_CC_GPU_CEC_ATTESTATION_REPORT_SIZE 0x1000 #define NVML_CC_CEC_ATTESTATION_REPORT_NOT_PRESENT 0 #define NVML_CC_CEC_ATTESTATION_REPORT_PRESENT 1 #define NVML_CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MIN 50 #define NVML_CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MAX 65 typedef struct nvmlConfComputeGpuAttestationReport_st { unsigned int isCecAttestationReportPresent; //!< output unsigned int attestationReportSize; //!< output unsigned int cecAttestationReportSize; //!< output unsigned char nonce[NVML_CC_GPU_CEC_NONCE_SIZE]; //!< input: spdm supports 32 bytes on nonce unsigned char attestationReport[NVML_CC_GPU_ATTESTATION_REPORT_SIZE]; //!< output unsigned char cecAttestationReport[NVML_CC_GPU_CEC_ATTESTATION_REPORT_SIZE]; //!< output } nvmlConfComputeGpuAttestationReport_t; typedef struct nvmlConfComputeSetKeyRotationThresholdInfo_st { unsigned int version; unsigned long long maxAttackerAdvantage; } nvmlConfComputeSetKeyRotationThresholdInfo_v1_t; typedef nvmlConfComputeSetKeyRotationThresholdInfo_v1_t nvmlConfComputeSetKeyRotationThresholdInfo_t; #define nvmlConfComputeSetKeyRotationThresholdInfo_v1 \ NVML_STRUCT_VERSION(ConfComputeSetKeyRotationThresholdInfo, 1) typedef struct nvmlConfComputeGetKeyRotationThresholdInfo_st { unsigned int version; unsigned long long attackerAdvantage; } nvmlConfComputeGetKeyRotationThresholdInfo_v1_t; typedef nvmlConfComputeGetKeyRotationThresholdInfo_v1_t nvmlConfComputeGetKeyRotationThresholdInfo_t; #define nvmlConfComputeGetKeyRotationThresholdInfo_v1 \ NVML_STRUCT_VERSION(ConfComputeGetKeyRotationThresholdInfo, 1) /** @} */ /***************************************************************************************************/ /** @defgroup nvmlFabricDefs Fabric definitions * @{ */ /***************************************************************************************************/ #define NVML_GPU_FABRIC_UUID_LEN 16 //!< Length of Fabric UUID /** * Fabric Probe States */ #define NVML_GPU_FABRIC_STATE_NOT_SUPPORTED 0 //!< Fabric Probe State not supported #define NVML_GPU_FABRIC_STATE_NOT_STARTED 1 //!< Fabric Probe has not started #define NVML_GPU_FABRIC_STATE_IN_PROGRESS 2 //!< Fabric Probe in progress #define NVML_GPU_FABRIC_STATE_COMPLETED 3 //!< Fabric Probe State completed /** * Probe State of GPU registration process */ typedef unsigned char nvmlGpuFabricState_t; /** * Contains the device fabric information */ typedef struct { unsigned char clusterUuid[NVML_GPU_FABRIC_UUID_LEN]; //!< Uuid of the cluster to which this GPU belongs nvmlReturn_t status; //!< Error status, if any. Must be checked only if state returns "complete". unsigned int cliqueId; //!< ID of the fabric clique to which this GPU belongs nvmlGpuFabricState_t state; //!< Current state of GPU registration process. See NVML_GPU_FABRIC_STATE_* } nvmlGpuFabricInfo_t; /** * Fabric Degraded BW */ #define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_NOT_SUPPORTED 0 //!< Fabric Health Mask: Degraded Bandwidth not supported #define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_TRUE 1 //!< Fabric Health Mask: Bandwidth degraded #define NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_FALSE 2 //!< Fabric Health Mask: Bandwidth not degraded #define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_DEGRADED_BW 0 //!< Fabric Health Mask Bit Shift for Degraded Bandwidth #define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW 0x3 //!< Fabric Health Mask Width for Degraded Bandwidth /** * Fabric Route Recovery */ #define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_NOT_SUPPORTED 0 //!< Fabric Health Mask: Route Recovery not supported #define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_TRUE 1 //!< Fabric Health Mask: Route Recovery in progress #define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_FALSE 2 //!< Fabric Health Mask: Route Recovery not in progress #define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_RECOVERY 2 //!< Fabric Health Mask Bit Shift for Route Recovery #define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_RECOVERY 0x3 //!< Fabric Health Mask Width for Route Recovery /** * Nvlink Fabric Route Unhealthy */ #define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_NOT_SUPPORTED 0 //!< Fabric Health Mask: Route Unhealthy not supported #define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_TRUE 1 //!< Fabric Health Mask: Route is unhealthy #define NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_FALSE 2 //!< Fabric Health Mask: Route is healthy #define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_UNHEALTHY 4 //!< Fabric Health Mask Bit Shift for Route Unhealthy #define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_UNHEALTHY 0x3 //!< Fabric Health Mask Width for Route Unhealthy /** * Fabric Access Timeout Recovery */ #define NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_NOT_SUPPORTED 0 //!< Fabric Health Mask: Access Timeout Recovery not supported #define NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_TRUE 1 //!< Fabric Health Mask: Access Timeout Recovery in progress #define NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_FALSE 2 //!< Fabric Health Mask: Access Timeout Recovery not in progress #define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ACCESS_TIMEOUT_RECOVERY 6 //!< Fabric Health Mask Bit Shift for Access Timeout Recovery #define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ACCESS_TIMEOUT_RECOVERY 0x3 //!< Fabric Health Mask Width for Access Timeout Recovery /** * Fabric Incorrect Configuration */ #define NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NOT_SUPPORTED 0 //!< Fabric Health Mask: Incorrect Configuration not supported #define NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NONE 1 //!< Fabric Health Mask: Correct Configuration #define NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_SYSGUID 2 //!< Fabric Health Mask: Incorrect Configuration - SysGUID #define NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_CHASSIS_SN 3 //!< Fabric Health Mask: Incorrect Configuration - Chassis Serial Number #define NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NO_PARTITION 4 //!< Fabric Health Mask: Incorrect Configuration - No Partition #define NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INSUFFICIENT_NVLINKS 5 //!< Fabric Health Mask: Incorrect Configuration - Insufficient Nvlinks #define NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_INCORRECT_CONFIGURATION 8 //!< Fabric Health Mask Bit Shift for Incorrect Configuration #define NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_INCORRECT_CONFIGURATION 0xf //!< Fabric Health Mask Width for Incorrect Configuration /** * Fabric Health */ #define NVML_GPU_FABRIC_HEALTH_SUMMARY_NOT_SUPPORTED 0 //!< Fabric Health Summary: Not supported #define NVML_GPU_FABRIC_HEALTH_SUMMARY_HEALTHY 1 //!< Fabric Health Summary: Healthy #define NVML_GPU_FABRIC_HEALTH_SUMMARY_UNHEALTHY 2 //!< Fabric Health Summary: Unhealthy #define NVML_GPU_FABRIC_HEALTH_SUMMARY_LIMITED_CAPACITY 3 //!< Fabric Health Summary: Limited Capacity /** * GPU Fabric Health Status Mask for various fields can be obtained * using the below macro. * Ex - NVML_GPU_FABRIC_HEALTH_GET(var, _DEGRADED_BW) */ #define NVML_GPU_FABRIC_HEALTH_GET(var, type) \ (((var) >> NVML_GPU_FABRIC_HEALTH_MASK_SHIFT##type) & \ (NVML_GPU_FABRIC_HEALTH_MASK_WIDTH##type)) /** * GPU Fabric Health Status Mask for various fields can be tested * using the below macro. * Ex - NVML_GPU_FABRIC_HEALTH_TEST(var, _DEGRADED_BW, _TRUE) */ #define NVML_GPU_FABRIC_HEALTH_TEST(var, type, val) \ (NVML_GPU_FABRIC_HEALTH_GET(var, type) == \ NVML_GPU_FABRIC_HEALTH_MASK##type##val) /** * GPU Fabric information (v2). * * @deprecated nvmlGpuFabricInfo_v2_t is deprecated and will be removed in a future release. * Use nvmlGpuFabricInfo_v3_t instead * * Version 2 adds the \ref nvmlGpuFabricInfo_v2_t.version field * to the start of the structure, and the \ref nvmlGpuFabricInfo_v2_t.healthMask * field to the end. This structure is not backwards-compatible with * \ref nvmlGpuFabricInfo_t. */ typedef struct { unsigned int version; //!< Structure version identifier (set to nvmlGpuFabricInfo_v2) unsigned char clusterUuid[NVML_GPU_FABRIC_UUID_LEN]; //!< Uuid of the cluster to which this GPU belongs nvmlReturn_t status; //!< Probe Error status, if any. Must be checked only if Probe state returns "complete". unsigned int cliqueId; //!< ID of the fabric clique to which this GPU belongs nvmlGpuFabricState_t state; //!< Current Probe State of GPU registration process. See NVML_GPU_FABRIC_STATE_* unsigned int healthMask; //!< GPU Fabric health Status Mask. See NVML_GPU_FABRIC_HEALTH_MASK_* } nvmlGpuFabricInfo_v2_t; /** * Version identifier value for \ref nvmlGpuFabricInfo_v2_t.version. */ #define nvmlGpuFabricInfo_v2 NVML_STRUCT_VERSION(GpuFabricInfo, 2) /** * GPU Fabric information (v3). */ typedef struct { unsigned int version; //!< Structure version identifier (set to nvmlGpuFabricInfo_v2) unsigned char clusterUuid[NVML_GPU_FABRIC_UUID_LEN]; //!< Uuid of the cluster to which this GPU belongs nvmlReturn_t status; //!< Probe Error status, if any. Must be checked only if Probe state returns "complete". unsigned int cliqueId; //!< ID of the fabric clique to which this GPU belongs nvmlGpuFabricState_t state; //!< Current Probe State of GPU registration process. See NVML_GPU_FABRIC_STATE_* unsigned int healthMask; //!< GPU Fabric health Status Mask. See NVML_GPU_FABRIC_HEALTH_MASK_* unsigned char healthSummary; //!< GPU Fabric health summary. See NVML_GPU_FABRIC_HEALTH_SUMMARY_* } nvmlGpuFabricInfo_v3_t; typedef nvmlGpuFabricInfo_v3_t nvmlGpuFabricInfoV_t; /** * Version identifier value for \ref nvmlGpuFabricInfo_v3_t.version. */ #define nvmlGpuFabricInfo_v3 NVML_STRUCT_VERSION(GpuFabricInfo, 3) /** @} */ /***************************************************************************************************/ /** @defgroup nvmlInitializationAndCleanup Initialization and Cleanup * This chapter describes the methods that handle NVML initialization and cleanup. * It is the user's responsibility to call \ref nvmlInit_v2() before calling any other methods, and * nvmlShutdown() once NVML is no longer being used. * @{ */ /***************************************************************************************************/ #define NVML_INIT_FLAG_NO_GPUS 1 //!< Don't fail nvmlInit() when no GPUs are found #define NVML_INIT_FLAG_NO_ATTACH 2 //!< Don't attach GPUs /** * Initialize NVML, but don't initialize any GPUs yet. * * \note nvmlInit_v3 introduces a "flags" argument, that allows passing boolean values * modifying the behaviour of nvmlInit(). * \note In NVML 5.319 new nvmlInit_v2 has replaced nvmlInit"_v1" (default in NVML 4.304 and older) that * did initialize all GPU devices in the system. * * This allows NVML to communicate with a GPU * when other GPUs in the system are unstable or in a bad state. When using this API, GPUs are * discovered and initialized in nvmlDeviceGetHandleBy* functions instead. * * \note To contrast nvmlInit_v2 with nvmlInit"_v1", NVML 4.304 nvmlInit"_v1" will fail when any detected GPU is in * a bad or unstable state. * * For all products. * * This method, should be called once before invoking any other methods in the library. * A reference count of the number of initializations is maintained. Shutdown only occurs * when the reference count reaches zero. * * @return * - \ref NVML_SUCCESS if NVML has been properly initialized * - \ref NVML_ERROR_DRIVER_NOT_LOADED if NVIDIA driver is not running * - \ref NVML_ERROR_NO_PERMISSION if NVML does not have permission to talk to the driver * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlInit_v2(void); /** * nvmlInitWithFlags is a variant of nvmlInit(), that allows passing a set of boolean values * modifying the behaviour of nvmlInit(). * Other than the "flags" parameter it is completely similar to \ref nvmlInit_v2. * * For all products. * * @param flags behaviour modifier flags * * @return * - \ref NVML_SUCCESS if NVML has been properly initialized * - \ref NVML_ERROR_DRIVER_NOT_LOADED if NVIDIA driver is not running * - \ref NVML_ERROR_NO_PERMISSION if NVML does not have permission to talk to the driver * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlInitWithFlags(unsigned int flags); /** * Shut down NVML by releasing all GPU resources previously allocated with \ref nvmlInit_v2(). * * For all products. * * This method should be called after NVML work is done, once for each call to \ref nvmlInit_v2() * A reference count of the number of initializations is maintained. Shutdown only occurs * when the reference count reaches zero. For backwards compatibility, no error is reported if * nvmlShutdown() is called more times than nvmlInit(). * * @return * - \ref NVML_SUCCESS if NVML has been properly shut down * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlShutdown(void); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlErrorReporting Error reporting * This chapter describes helper functions for error reporting routines. * @{ */ /***************************************************************************************************/ /** * Helper method for converting NVML error codes into readable strings. * * For all products. * * @param result NVML error code to convert * * @return String representation of the error. * */ const DECLDIR char* nvmlErrorString(nvmlReturn_t result); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlConstants Constants * @{ */ /***************************************************************************************************/ /** * Buffer size guaranteed to be large enough for \ref nvmlDeviceGetInforomVersion and \ref nvmlDeviceGetInforomImageVersion */ #define NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE 16 /** * Buffer size guaranteed to be large enough for storing GPU identifiers. */ #define NVML_DEVICE_UUID_BUFFER_SIZE 80 /** * Buffer size guaranteed to be large enough for \ref nvmlDeviceGetUUID */ #define NVML_DEVICE_UUID_V2_BUFFER_SIZE 96 /** * Buffer size guaranteed to be large enough for \ref nvmlDeviceGetBoardPartNumber */ #define NVML_DEVICE_PART_NUMBER_BUFFER_SIZE 80 /** * Buffer size guaranteed to be large enough for \ref nvmlSystemGetDriverVersion */ #define NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE 80 /** * Buffer size guaranteed to be large enough for \ref nvmlSystemGetNVMLVersion */ #define NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE 80 /** * Buffer size guaranteed to be large enough for storing GPU device names. */ #define NVML_DEVICE_NAME_BUFFER_SIZE 64 /** * Buffer size guaranteed to be large enough for \ref nvmlDeviceGetName */ #define NVML_DEVICE_NAME_V2_BUFFER_SIZE 96 /** * Buffer size guaranteed to be large enough for \ref nvmlDeviceGetSerial */ #define NVML_DEVICE_SERIAL_BUFFER_SIZE 30 /** * Buffer size guaranteed to be large enough for \ref nvmlDeviceGetVbiosVersion */ #define NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE 32 /** @} */ /***************************************************************************************************/ /** @defgroup nvmlSystemQueries System Queries * This chapter describes the queries that NVML can perform against the local system. These queries * are not device-specific. * @{ */ /***************************************************************************************************/ /** * Retrieves the version of the system's graphics driver. * * For all products. * * The version identifier is an alphanumeric string. It will not exceed 80 characters in length * (including the NULL terminator). See \ref nvmlConstants::NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE. * * @param version Reference in which to return the version identifier * @param length The maximum allowed length of the string returned in \a version * * @return * - \ref NVML_SUCCESS if \a version has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a version is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small */ nvmlReturn_t DECLDIR nvmlSystemGetDriverVersion(char *version, unsigned int length); /** * Retrieves the version of the NVML library. * * For all products. * * The version identifier is an alphanumeric string. It will not exceed 80 characters in length * (including the NULL terminator). See \ref nvmlConstants::NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE. * * @param version Reference in which to return the version identifier * @param length The maximum allowed length of the string returned in \a version * * @return * - \ref NVML_SUCCESS if \a version has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a version is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small */ nvmlReturn_t DECLDIR nvmlSystemGetNVMLVersion(char *version, unsigned int length); /** * Retrieves the version of the CUDA driver. * * For all products. * * The CUDA driver version returned will be retreived from the currently installed version of CUDA. * If the cuda library is not found, this function will return a known supported version number. * * @param cudaDriverVersion Reference in which to return the version identifier * * @return * - \ref NVML_SUCCESS if \a cudaDriverVersion has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a cudaDriverVersion is NULL */ nvmlReturn_t DECLDIR nvmlSystemGetCudaDriverVersion(int *cudaDriverVersion); /** * Retrieves the version of the CUDA driver from the shared library. * * For all products. * * The returned CUDA driver version by calling cuDriverGetVersion() * * @param cudaDriverVersion Reference in which to return the version identifier * * @return * - \ref NVML_SUCCESS if \a cudaDriverVersion has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a cudaDriverVersion is NULL * - \ref NVML_ERROR_LIBRARY_NOT_FOUND if \a libcuda.so.1 or libcuda.dll is not found * - \ref NVML_ERROR_FUNCTION_NOT_FOUND if \a cuDriverGetVersion() is not found in the shared library */ nvmlReturn_t DECLDIR nvmlSystemGetCudaDriverVersion_v2(int *cudaDriverVersion); /** * Macros for converting the CUDA driver version number to Major and Minor version numbers. */ #define NVML_CUDA_DRIVER_VERSION_MAJOR(v) ((v)/1000) #define NVML_CUDA_DRIVER_VERSION_MINOR(v) (((v)%1000)/10) /** * Gets name of the process with provided process id * * For all products. * * Returned process name is cropped to provided length. * name string is encoded in ANSI. * * @param pid The identifier of the process * @param name Reference in which to return the process name * @param length The maximum allowed length of the string returned in \a name * * @return * - \ref NVML_SUCCESS if \a name has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a name is NULL or \a length is 0. * - \ref NVML_ERROR_NOT_FOUND if process doesn't exists * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlSystemGetProcessName(unsigned int pid, char *name, unsigned int length); /** * Retrieves the IDs and firmware versions for any Host Interface Cards (HICs) in the system. * * For S-class products. * * The \a hwbcCount argument is expected to be set to the size of the input \a hwbcEntries array. * The HIC must be connected to an S-class system for it to be reported by this function. * * @param hwbcCount Size of hwbcEntries array * @param hwbcEntries Array holding information about hwbc * * @return * - \ref NVML_SUCCESS if \a hwbcCount and \a hwbcEntries have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if either \a hwbcCount or \a hwbcEntries is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a hwbcCount indicates that the \a hwbcEntries array is too small */ nvmlReturn_t DECLDIR nvmlSystemGetHicVersion(unsigned int *hwbcCount, nvmlHwbcEntry_t *hwbcEntries); /** * Retrieve the set of GPUs that have a CPU affinity with the given CPU number * For all products. * Supported on Linux only. * * @param cpuNumber The CPU number * @param count When zero, is set to the number of matching GPUs such that \a deviceArray * can be malloc'd. When non-zero, \a deviceArray will be filled with \a count * number of device handles. * @param deviceArray An array of device handles for GPUs found with affinity to \a cpuNumber * * @return * - \ref NVML_SUCCESS if \a deviceArray or \a count (if initially zero) has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a cpuNumber, or \a count is invalid, or \a deviceArray is NULL with a non-zero \a count * - \ref NVML_ERROR_NOT_SUPPORTED if the device or OS does not support this feature * - \ref NVML_ERROR_UNKNOWN an error has occurred in underlying topology discovery */ nvmlReturn_t DECLDIR nvmlSystemGetTopologyGpuSet(unsigned int cpuNumber, unsigned int *count, nvmlDevice_t *deviceArray); /** * Structure to store Driver branch information */ typedef struct { unsigned int version; //!< The version number of this struct char branch[NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE]; //!< driver branch } nvmlSystemDriverBranchInfo_v1_t; typedef nvmlSystemDriverBranchInfo_v1_t nvmlSystemDriverBranchInfo_t; #define nvmlSystemDriverBranchInfo_v1 NVML_STRUCT_VERSION(SystemDriverBranchInfo, 1) /** * Retrieves the driver branch of the NVIDIA driver installed on the system. * * For all products. * * The branch identifier is an alphanumeric string. It will not exceed 80 characters in length * (including the NULL terminator). See \ref nvmlConstants::NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE. * * @param branchInfo Pointer to the driver branch information structure \a nvmlSystemDriverBranchInfo_t * @param length The maximum allowed length of the driver branch string * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a branchInfo is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlSystemGetDriverBranch(nvmlSystemDriverBranchInfo_t *branchInfo, unsigned int length); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlUnitQueries Unit Queries * This chapter describes that queries that NVML can perform against each unit. For S-class systems only. * In each case the device is identified with an nvmlUnit_t handle. This handle is obtained by * calling \ref nvmlUnitGetHandleByIndex(). * @{ */ /***************************************************************************************************/ /** * Retrieves the number of units in the system. * * For S-class products. * * @param unitCount Reference in which to return the number of units * * @return * - \ref NVML_SUCCESS if \a unitCount has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unitCount is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlUnitGetCount(unsigned int *unitCount); /** * Acquire the handle for a particular unit, based on its index. * * For S-class products. * * Valid indices are derived from the \a unitCount returned by \ref nvmlUnitGetCount(). * For example, if \a unitCount is 2 the valid indices are 0 and 1, corresponding to UNIT 0 and UNIT 1. * * The order in which NVML enumerates units has no guarantees of consistency between reboots. * * @param index The index of the target unit, >= 0 and < \a unitCount * @param unit Reference in which to return the unit handle * * @return * - \ref NVML_SUCCESS if \a unit has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a index is invalid or \a unit is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlUnitGetHandleByIndex(unsigned int index, nvmlUnit_t *unit); /** * Retrieves the static information associated with a unit. * * For S-class products. * * See \ref nvmlUnitInfo_t for details on available unit info. * * @param unit The identifier of the target unit * @param info Reference in which to return the unit information * * @return * - \ref NVML_SUCCESS if \a info has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unit is invalid or \a info is NULL */ nvmlReturn_t DECLDIR nvmlUnitGetUnitInfo(nvmlUnit_t unit, nvmlUnitInfo_t *info); /** * Retrieves the LED state associated with this unit. * * For S-class products. * * See \ref nvmlLedState_t for details on allowed states. * * @param unit The identifier of the target unit * @param state Reference in which to return the current LED state * * @return * - \ref NVML_SUCCESS if \a state has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unit is invalid or \a state is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this is not an S-class product * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlUnitSetLedState() */ nvmlReturn_t DECLDIR nvmlUnitGetLedState(nvmlUnit_t unit, nvmlLedState_t *state); /** * Retrieves the PSU stats for the unit. * * For S-class products. * * See \ref nvmlPSUInfo_t for details on available PSU info. * * @param unit The identifier of the target unit * @param psu Reference in which to return the PSU information * * @return * - \ref NVML_SUCCESS if \a psu has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unit is invalid or \a psu is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this is not an S-class product * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlUnitGetPsuInfo(nvmlUnit_t unit, nvmlPSUInfo_t *psu); /** * Retrieves the temperature readings for the unit, in degrees C. * * For S-class products. * * Depending on the product, readings may be available for intake (type=0), * exhaust (type=1) and board (type=2). * * @param unit The identifier of the target unit * @param type The type of reading to take * @param temp Reference in which to return the intake temperature * * @return * - \ref NVML_SUCCESS if \a temp has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unit or \a type is invalid or \a temp is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this is not an S-class product * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlUnitGetTemperature(nvmlUnit_t unit, unsigned int type, unsigned int *temp); /** * Retrieves the fan speed readings for the unit. * * For S-class products. * * See \ref nvmlUnitFanSpeeds_t for details on available fan speed info. * * @param unit The identifier of the target unit * @param fanSpeeds Reference in which to return the fan speed information * * @return * - \ref NVML_SUCCESS if \a fanSpeeds has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unit is invalid or \a fanSpeeds is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this is not an S-class product * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlUnitGetFanSpeedInfo(nvmlUnit_t unit, nvmlUnitFanSpeeds_t *fanSpeeds); /** * Retrieves the set of GPU devices that are attached to the specified unit. * * For S-class products. * * The \a deviceCount argument is expected to be set to the size of the input \a devices array. * * @param unit The identifier of the target unit * @param deviceCount Reference in which to provide the \a devices array size, and * to return the number of attached GPU devices * @param devices Reference in which to return the references to the attached GPU devices * * @return * - \ref NVML_SUCCESS if \a deviceCount and \a devices have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a deviceCount indicates that the \a devices array is too small * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unit is invalid, either of \a deviceCount or \a devices is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlUnitGetDevices(nvmlUnit_t unit, unsigned int *deviceCount, nvmlDevice_t *devices); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlDeviceQueries Device Queries * This chapter describes that queries that NVML can perform against each device. * In each case the device is identified with an nvmlDevice_t handle. This handle is obtained by * calling one of \ref nvmlDeviceGetHandleByIndex_v2(), \ref nvmlDeviceGetHandleBySerial(), * \ref nvmlDeviceGetHandleByPciBusId_v2(). or \ref nvmlDeviceGetHandleByUUID(). * @{ */ /***************************************************************************************************/ /** * Retrieves the number of compute devices in the system. A compute device is a single GPU. * * For all products. * * Note: New nvmlDeviceGetCount_v2 (default in NVML 5.319) returns count of all devices in the system * even if nvmlDeviceGetHandleByIndex_v2 returns NVML_ERROR_NO_PERMISSION for such device. * Update your code to handle this error, or use NVML 4.304 or older nvml header file. * For backward binary compatibility reasons _v1 version of the API is still present in the shared * library. * Old _v1 version of nvmlDeviceGetCount doesn't count devices that NVML has no permission to talk to. * * @param deviceCount Reference in which to return the number of accessible devices * * @return * - \ref NVML_SUCCESS if \a deviceCount has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a deviceCount is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCount_v2(unsigned int *deviceCount); /** * Get attributes (engine counts etc.) for the given NVML device handle. * * @note This API currently only supports MIG device handles. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device NVML device handle * @param attributes Device attributes * * @return * - \ref NVML_SUCCESS if \a device attributes were successfully retrieved * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device handle is invalid * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetAttributes_v2(nvmlDevice_t device, nvmlDeviceAttributes_t *attributes); /** * Acquire the handle for a particular device, based on its index. * * For all products. * * Valid indices are derived from the \a accessibleDevices count returned by * \ref nvmlDeviceGetCount_v2(). For example, if \a accessibleDevices is 2 the valid indices * are 0 and 1, corresponding to GPU 0 and GPU 1. * * The order in which NVML enumerates devices has no guarantees of consistency between reboots. For that reason it * is recommended that devices be looked up by their PCI ids or UUID. See * \ref nvmlDeviceGetHandleByUUID() and \ref nvmlDeviceGetHandleByPciBusId_v2(). * * Note: The NVML index may not correlate with other APIs, such as the CUDA device index. * * Starting from NVML 5, this API causes NVML to initialize the target GPU * NVML may initialize additional GPUs if: * - The target GPU is an SLI slave * * Note: New nvmlDeviceGetCount_v2 (default in NVML 5.319) returns count of all devices in the system * even if nvmlDeviceGetHandleByIndex_v2 returns NVML_ERROR_NO_PERMISSION for such device. * Update your code to handle this error, or use NVML 4.304 or older nvml header file. * For backward binary compatibility reasons _v1 version of the API is still present in the shared * library. * Old _v1 version of nvmlDeviceGetCount doesn't count devices that NVML has no permission to talk to. * * This means that nvmlDeviceGetHandleByIndex_v2 and _v1 can return different devices for the same index. * If you don't touch macros that map old (_v1) versions to _v2 versions at the top of the file you don't * need to worry about that. * * @param index The index of the target GPU, >= 0 and < \a accessibleDevices * @param device Reference in which to return the device handle * * @return * - \ref NVML_SUCCESS if \a device has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a index is invalid or \a device is NULL * - \ref NVML_ERROR_INSUFFICIENT_POWER if any attached devices have improperly attached external power cables * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to talk to this device * - \ref NVML_ERROR_IRQ_ISSUE if NVIDIA kernel detected an interrupt issue with the attached GPUs * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetIndex * @see nvmlDeviceGetCount */ nvmlReturn_t DECLDIR nvmlDeviceGetHandleByIndex_v2(unsigned int index, nvmlDevice_t *device); /** * Acquire the handle for a particular device, based on its board serial number. * * For Fermi &tm; or newer fully supported devices. * * This number corresponds to the value printed directly on the board, and to the value returned by * \ref nvmlDeviceGetSerial(). * * @deprecated Since more than one GPU can exist on a single board this function is deprecated in favor * of \ref nvmlDeviceGetHandleByUUID. * For dual GPU boards this function will return NVML_ERROR_INVALID_ARGUMENT. * * Starting from NVML 5, this API causes NVML to initialize the target GPU * NVML may initialize additional GPUs as it searches for the target GPU * * @param serial The board serial number of the target GPU * @param device Reference in which to return the device handle * * @return * - \ref NVML_SUCCESS if \a device has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a serial is invalid, \a device is NULL or more than one * device has the same serial (dual GPU boards) * - \ref NVML_ERROR_NOT_FOUND if \a serial does not match a valid device on the system * - \ref NVML_ERROR_INSUFFICIENT_POWER if any attached devices have improperly attached external power cables * - \ref NVML_ERROR_IRQ_ISSUE if NVIDIA kernel detected an interrupt issue with the attached GPUs * - \ref NVML_ERROR_GPU_IS_LOST if any GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetSerial * @see nvmlDeviceGetHandleByUUID */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetHandleBySerial(const char *serial, nvmlDevice_t *device); /** * Acquire the handle for a particular device, based on its globally unique immutable UUID (in ASCII format) associated with each device. * * For all products. * * @param uuid The UUID of the target GPU or MIG instance * @param device Reference in which to return the device handle or MIG device handle * * Starting from NVML 5, this API causes NVML to initialize the target GPU * NVML may initialize additional GPUs as it searches for the target GPU * * @return * - \ref NVML_SUCCESS if \a device has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a uuid is invalid or \a device is null * - \ref NVML_ERROR_NOT_FOUND if \a uuid does not match a valid device on the system * - \ref NVML_ERROR_INSUFFICIENT_POWER if any attached devices have improperly attached external power cables * - \ref NVML_ERROR_IRQ_ISSUE if NVIDIA kernel detected an interrupt issue with the attached GPUs * - \ref NVML_ERROR_GPU_IS_LOST if any GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetUUID */ nvmlReturn_t DECLDIR nvmlDeviceGetHandleByUUID(const char *uuid, nvmlDevice_t *device); /** * Acquire the handle for a particular device, based on its globally unique immutable UUID (in either ASCII or binary format) associated with each device. * See \ref nvmlUUID_v1_t for more information on the UUID struct. The caller must set the appropriate version prior to calling this API. * * For all products. * * @param[in] uuid The UUID of the target GPU or MIG instance * @param[out] device Reference in which to return the device handle or MIG device handle * * This API causes NVML to initialize the target GPU * NVML may initialize additional GPUs as it searches for the target GPU * * @return * - \ref NVML_SUCCESS if \a device has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a uuid is invalid, \a device is null or \a uuid->type is invalid * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the provided version is invalid/unsupported * - \ref NVML_ERROR_NOT_FOUND if \a uuid does not match a valid device on the system * - \ref NVML_ERROR_GPU_IS_LOST if any GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetHandleByUUIDV(const nvmlUUID_t *uuid, nvmlDevice_t *device); /** * Acquire the handle for a particular device, based on its PCI bus id. * * For all products. * * This value corresponds to the nvmlPciInfo_t::busId returned by \ref nvmlDeviceGetPciInfo_v3(). * * Starting from NVML 5, this API causes NVML to initialize the target GPU * NVML may initialize additional GPUs if: * - The target GPU is an SLI slave * * \note NVML 4.304 and older version of nvmlDeviceGetHandleByPciBusId"_v1" returns NVML_ERROR_NOT_FOUND * instead of NVML_ERROR_NO_PERMISSION. * * @param pciBusId The PCI bus id of the target GPU * Accept the following formats (all numbers in hexadecimal): * domain:bus:device.function in format %x:%x:%x.%x * domain:bus:device in format %x:%x:%x * bus:device.function in format %x:%x.%x * * @param device Reference in which to return the device handle * * @return * - \ref NVML_SUCCESS if \a device has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a pciBusId is invalid or \a device is NULL * - \ref NVML_ERROR_NOT_FOUND if \a pciBusId does not match a valid device on the system * - \ref NVML_ERROR_INSUFFICIENT_POWER if the attached device has improperly attached external power cables * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to talk to this device * - \ref NVML_ERROR_IRQ_ISSUE if NVIDIA kernel detected an interrupt issue with the attached GPUs * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetHandleByPciBusId_v2(const char *pciBusId, nvmlDevice_t *device); /** * Retrieves the name of this device. * * For all products. * * The name is an alphanumeric string that denotes a particular product, e.g. Tesla &tm; C2070. It will not * exceed 96 characters in length (including the NULL terminator). See \ref * nvmlConstants::NVML_DEVICE_NAME_V2_BUFFER_SIZE. * * When used with MIG device handles the API returns MIG device names which can be used to identify devices * based on their attributes. * * @param device The identifier of the target device * @param name Reference in which to return the product name * @param length The maximum allowed length of the string returned in \a name * * @return * - \ref NVML_SUCCESS if \a name has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a name is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetName(nvmlDevice_t device, char *name, unsigned int length); /** * Retrieves the brand of this device. * * For all products. * * The type is a member of \ref nvmlBrandType_t defined above. * * @param device The identifier of the target device * @param type Reference in which to return the product brand type * * @return * - \ref NVML_SUCCESS if \a name has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a type is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetBrand(nvmlDevice_t device, nvmlBrandType_t *type); /** * Retrieves the NVML index of this device. * * For all products. * * Valid indices are derived from the \a accessibleDevices count returned by * \ref nvmlDeviceGetCount_v2(). For example, if \a accessibleDevices is 2 the valid indices * are 0 and 1, corresponding to GPU 0 and GPU 1. * * The order in which NVML enumerates devices has no guarantees of consistency between reboots. For that reason it * is recommended that devices be looked up by their PCI ids or GPU UUID. See * \ref nvmlDeviceGetHandleByPciBusId_v2() and \ref nvmlDeviceGetHandleByUUID(). * * When used with MIG device handles this API returns indices that can be * passed to \ref nvmlDeviceGetMigDeviceHandleByIndex to retrieve an identical handle. * MIG device indices are unique within a device. * * Note: The NVML index may not correlate with other APIs, such as the CUDA device index. * * @param device The identifier of the target device * @param index Reference in which to return the NVML index of the device * * @return * - \ref NVML_SUCCESS if \a index has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a index is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetHandleByIndex() * @see nvmlDeviceGetCount() */ nvmlReturn_t DECLDIR nvmlDeviceGetIndex(nvmlDevice_t device, unsigned int *index); /** * Retrieves the globally unique board serial number associated with this device's board. * * For all products with an inforom. * * The serial number is an alphanumeric string that will not exceed 30 characters (including the NULL terminator). * This number matches the serial number tag that is physically attached to the board. See \ref * nvmlConstants::NVML_DEVICE_SERIAL_BUFFER_SIZE. * * @param device The identifier of the target device * @param serial Reference in which to return the board/module serial number * @param length The maximum allowed length of the string returned in \a serial * * @return * - \ref NVML_SUCCESS if \a serial has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a serial is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetSerial(nvmlDevice_t device, char *serial, unsigned int length); /** * Get a unique identifier for the device module on the baseboard * * This API retrieves a unique identifier for each GPU module that exists on a given baseboard. * For non-baseboard products, this ID would always be 0. * * @param device The identifier of the target device * @param moduleId Unique identifier for the GPU module * * @return * - \ref NVML_SUCCESS if \a moduleId has been successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a moduleId is invalid * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetModuleId(nvmlDevice_t device, unsigned int *moduleId); /** * Retrieves the Device's C2C Mode information * * @param device The identifier of the target device * @param c2cModeInfo Output struct containing the device's C2C Mode info * * @return * - \ref NVML_SUCCESS if \a C2C Mode Infor query is successful * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a serial is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetC2cModeInfoV(nvmlDevice_t device, nvmlC2cModeInfo_v1_t *c2cModeInfo); /***************************************************************************************************/ /** @defgroup nvmlAffinity CPU and Memory Affinity * This chapter describes NVML operations that are associated with CPU and memory * affinity. * @{ */ /***************************************************************************************************/ //! Scope of NUMA node for affinity queries #define NVML_AFFINITY_SCOPE_NODE 0 //! Scope of processor socket for affinity queries #define NVML_AFFINITY_SCOPE_SOCKET 1 typedef unsigned int nvmlAffinityScope_t; /** * Retrieves an array of unsigned ints (sized to nodeSetSize) of bitmasks with * the ideal memory affinity within node or socket for the device. * For example, if NUMA node 0, 1 are ideal within the socket for the device and nodeSetSize == 1, * result[0] = 0x3 * * \note If requested scope is not applicable to the target topology, the API * will fall back to reporting the memory affinity for the immediate non-I/O * ancestor of the device. * * For Kepler &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * @param nodeSetSize The size of the nodeSet array that is safe to access * @param nodeSet Array reference in which to return a bitmask of NODEs, 64 NODEs per * unsigned long on 64-bit machines, 32 on 32-bit machines * @param scope Scope that change the default behavior * * @return * - \ref NVML_SUCCESS if \a NUMA node Affinity has been filled * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, nodeSetSize == 0, nodeSet is NULL or scope is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMemoryAffinity(nvmlDevice_t device, unsigned int nodeSetSize, unsigned long *nodeSet, nvmlAffinityScope_t scope); /** * Retrieves an array of unsigned ints (sized to cpuSetSize) of bitmasks with the * ideal CPU affinity within node or socket for the device. * For example, if processors 0, 1, 32, and 33 are ideal for the device and cpuSetSize == 2, * result[0] = 0x3, result[1] = 0x3 * * \note If requested scope is not applicable to the target topology, the API * will fall back to reporting the CPU affinity for the immediate non-I/O * ancestor of the device. * * For Kepler &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * @param cpuSetSize The size of the cpuSet array that is safe to access * @param cpuSet Array reference in which to return a bitmask of CPUs, 64 CPUs per * unsigned long on 64-bit machines, 32 on 32-bit machines * @param scope Scope that change the default behavior * * @return * - \ref NVML_SUCCESS if \a cpuAffinity has been filled * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, cpuSetSize == 0, cpuSet is NULL or sope is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCpuAffinityWithinScope(nvmlDevice_t device, unsigned int cpuSetSize, unsigned long *cpuSet, nvmlAffinityScope_t scope); /** * Retrieves an array of unsigned ints (sized to cpuSetSize) of bitmasks with the ideal CPU affinity for the device * For example, if processors 0, 1, 32, and 33 are ideal for the device and cpuSetSize == 2, * result[0] = 0x3, result[1] = 0x3 * This is equivalent to calling \ref nvmlDeviceGetCpuAffinityWithinScope with \ref NVML_AFFINITY_SCOPE_NODE. * * For Kepler &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * @param cpuSetSize The size of the cpuSet array that is safe to access * @param cpuSet Array reference in which to return a bitmask of CPUs, 64 CPUs per * unsigned long on 64-bit machines, 32 on 32-bit machines * * @return * - \ref NVML_SUCCESS if \a cpuAffinity has been filled * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, cpuSetSize == 0, or cpuSet is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCpuAffinity(nvmlDevice_t device, unsigned int cpuSetSize, unsigned long *cpuSet); /** * Sets the ideal affinity for the calling thread and device using the guidelines * given in nvmlDeviceGetCpuAffinity(). Note, this is a change as of version 8.0. * Older versions set the affinity for a calling process and all children. * Currently supports up to 1024 processors. * * For Kepler &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * * @return * - \ref NVML_SUCCESS if the calling process has been successfully bound * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetCpuAffinity(nvmlDevice_t device); /** * Clear all affinity bindings for the calling thread. Note, this is a change as of version * 8.0 as older versions cleared the affinity for a calling process and all children. * * For Kepler &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * * @return * - \ref NVML_SUCCESS if the calling process has been successfully unbound * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceClearCpuAffinity(nvmlDevice_t device); /** * Get the NUMA node of the given GPU device. * This only applies to platforms where the GPUs are NUMA nodes. * * @param[in] device The device handle * @param[out] node NUMA node ID of the device * * @returns * - \ref NVML_SUCCESS if the NUMA node is retrieved successfully * - \ref NVML_ERROR_NOT_SUPPORTED if request is not supported on the current platform * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device \a node is invalid */ nvmlReturn_t DECLDIR nvmlDeviceGetNumaNodeId(nvmlDevice_t device, unsigned int *node); /** * Get the addressing mode for a given GPU. Addressing modes can be one of: * 1. HMM: System allocated memory (malloc, mmap) is addressable from the device (GPU), * via software-based mirroring of the CPU's page tables, on the GPU. * 2. ATS: System allocated memory (malloc, mmap) is addressable from the device (GPU), * via Address Translation Services. This means that there is (effectively) * a single set of page tables, and the CPU and GPU both use them. * 3. None: Neither HMM nor ATS is active. * * %TURING_OR_NEWER% * Supported on Linux only. * * @param[in] device The device handle * @param[out] mode Pointer to addressing mode of the device * * @returns * - \ref NVML_SUCCESS if \a mode is retrieved successfully * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the provided version is invalid/unsupported * - \ref NVML_ERROR_NOT_SUPPORTED if request is not supported on the current platform * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device \a node is invalid */ nvmlReturn_t DECLDIR nvmlDeviceGetAddressingMode(nvmlDevice_t device, nvmlDeviceAddressingMode_t *mode); /** * Get the repair status for TPC/Channel repair * * For Ampere &tm; or newer fully supported devices. * * @param[in] device The identifier of the target device * @param[out] repairStatus Reference to \a nvmlRepairStatus_t * * @return * - \ref NVML_SUCCESS if the query was successful * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the provided version is invalid/unsupported * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetRepairStatus(nvmlDevice_t device, nvmlRepairStatus_t *repairStatus); /** * Retrieve the common ancestor for two devices * For all products. * Supported on Linux only. * * @param device1 The identifier of the first device * @param device2 The identifier of the second device * @param pathInfo A \ref nvmlGpuTopologyLevel_t that gives the path type * * @return * - \ref NVML_SUCCESS if \a pathInfo has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device1, or \a device2 is invalid, or \a pathInfo is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device or OS does not support this feature * - \ref NVML_ERROR_UNKNOWN an error has occurred in underlying topology discovery */ /** @} */ nvmlReturn_t DECLDIR nvmlDeviceGetTopologyCommonAncestor(nvmlDevice_t device1, nvmlDevice_t device2, nvmlGpuTopologyLevel_t *pathInfo); /** * Retrieve the set of GPUs that are nearest to a given device at a specific interconnectivity level * For all products. * Supported on Linux only. * * @param device The identifier of the first device * @param level The \ref nvmlGpuTopologyLevel_t level to search for other GPUs * @param count When zero, is set to the number of matching GPUs such that \a deviceArray * can be malloc'd. When non-zero, \a deviceArray will be filled with \a count * number of device handles. * @param deviceArray An array of device handles for GPUs found at \a level * * @return * - \ref NVML_SUCCESS if \a deviceArray or \a count (if initially zero) has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a level, or \a count is invalid, or \a deviceArray is NULL with a non-zero \a count * - \ref NVML_ERROR_NOT_SUPPORTED if the device or OS does not support this feature * - \ref NVML_ERROR_UNKNOWN an error has occurred in underlying topology discovery */ nvmlReturn_t DECLDIR nvmlDeviceGetTopologyNearestGpus(nvmlDevice_t device, nvmlGpuTopologyLevel_t level, unsigned int *count, nvmlDevice_t *deviceArray); /** * Retrieve the status for a given p2p capability index between a given pair of GPU * * @param device1 The first device * @param device2 The second device * @param p2pIndex p2p Capability Index being looked for between \a device1 and \a device2 * @param p2pStatus Reference in which to return the status of the \a p2pIndex * between \a device1 and \a device2 * @return * - \ref NVML_SUCCESS if \a p2pStatus has been populated * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device1 or \a device2 or \a p2pIndex is invalid or \a p2pStatus is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetP2PStatus(nvmlDevice_t device1, nvmlDevice_t device2, nvmlGpuP2PCapsIndex_t p2pIndex,nvmlGpuP2PStatus_t *p2pStatus); /** * Retrieves the globally unique immutable UUID associated with this device, as a 5 part hexadecimal string, * that augments the immutable, board serial identifier. * * For all products. * * The UUID is a globally unique identifier. It is the only available identifier for pre-Fermi-architecture products. * It does NOT correspond to any identifier printed on the board. It will not exceed 96 characters in length * (including the NULL terminator). See \ref nvmlConstants::NVML_DEVICE_UUID_V2_BUFFER_SIZE. * * When used with MIG device handles the API returns globally unique UUIDs which can be used to identify MIG * devices across both GPU and MIG devices. UUIDs are immutable for the lifetime of a MIG device. * * @param device The identifier of the target device * @param uuid Reference in which to return the GPU UUID * @param length The maximum allowed length of the string returned in \a uuid * * @return * - \ref NVML_SUCCESS if \a uuid has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a uuid is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetUUID(nvmlDevice_t device, char *uuid, unsigned int length); /** * Retrieves minor number for the device. The minor number for the device is such that the Nvidia device node file for * each GPU will have the form /dev/nvidia[minor number]. * * For all products. * Supported only for Linux * * @param device The identifier of the target device * @param minorNumber Reference in which to return the minor number for the device * @return * - \ref NVML_SUCCESS if the minor number is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a minorNumber is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMinorNumber(nvmlDevice_t device, unsigned int *minorNumber); /** * Retrieves the the device board part number which is programmed into the board's InfoROM * * For all products. * * @param device Identifier of the target device * @param partNumber Reference to the buffer to return * @param length Length of the buffer reference * * @return * - \ref NVML_SUCCESS if \a partNumber has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NOT_SUPPORTED if the needed VBIOS fields have not been filled * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a serial is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetBoardPartNumber(nvmlDevice_t device, char* partNumber, unsigned int length); /** * Retrieves the version information for the device's infoROM object. * * For all products with an inforom. * * Fermi and higher parts have non-volatile on-board memory for persisting device info, such as aggregate * ECC counts. The version of the data structures in this memory may change from time to time. It will not * exceed 16 characters in length (including the NULL terminator). * See \ref nvmlConstants::NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE. * * See \ref nvmlInforomObject_t for details on the available infoROM objects. * * @param device The identifier of the target device * @param object The target infoROM object * @param version Reference in which to return the infoROM version * @param length The maximum allowed length of the string returned in \a version * * @return * - \ref NVML_SUCCESS if \a version has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a version is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have an infoROM * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetInforomImageVersion */ nvmlReturn_t DECLDIR nvmlDeviceGetInforomVersion(nvmlDevice_t device, nvmlInforomObject_t object, char *version, unsigned int length); /** * Retrieves the global infoROM image version * * For all products with an inforom. * * Image version just like VBIOS version uniquely describes the exact version of the infoROM flashed on the board * in contrast to infoROM object version which is only an indicator of supported features. * Version string will not exceed 16 characters in length (including the NULL terminator). * See \ref nvmlConstants::NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE. * * @param device The identifier of the target device * @param version Reference in which to return the infoROM image version * @param length The maximum allowed length of the string returned in \a version * * @return * - \ref NVML_SUCCESS if \a version has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a version is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have an infoROM * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetInforomVersion */ nvmlReturn_t DECLDIR nvmlDeviceGetInforomImageVersion(nvmlDevice_t device, char *version, unsigned int length); /** * Retrieves the checksum of the configuration stored in the device's infoROM. * * For all products with an inforom. * * Can be used to make sure that two GPUs have the exact same configuration. * Current checksum takes into account configuration stored in PWR and ECC infoROM objects. * Checksum can change between driver releases or when user changes configuration (e.g. disable/enable ECC) * * @param device The identifier of the target device * @param checksum Reference in which to return the infoROM configuration checksum * * @return * - \ref NVML_SUCCESS if \a checksum has been set * - \ref NVML_ERROR_CORRUPTED_INFOROM if the device's checksum couldn't be retrieved due to infoROM corruption * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a checksum is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetInforomConfigurationChecksum(nvmlDevice_t device, unsigned int *checksum); /** * Reads the infoROM from the flash and verifies the checksums. * * For all products with an inforom. * * @param device The identifier of the target device * * @return * - \ref NVML_SUCCESS if infoROM is not corrupted * - \ref NVML_ERROR_CORRUPTED_INFOROM if the device's infoROM is corrupted * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceValidateInforom(nvmlDevice_t device); /** * Retrieves the timestamp and the duration of the last flush of the BBX (blackbox) infoROM object during the current run. * * For all products with an inforom. * * @param device The identifier of the target device * @param timestamp The start timestamp of the last BBX Flush * @param durationUs The duration (us) of the last BBX Flush * * @return * - \ref NVML_SUCCESS if \a timestamp and \a durationUs are successfully retrieved * - \ref NVML_ERROR_NOT_READY if the BBX object has not been flushed yet * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have an infoROM * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetInforomVersion */ nvmlReturn_t DECLDIR nvmlDeviceGetLastBBXFlushTime(nvmlDevice_t device, unsigned long long *timestamp, unsigned long *durationUs); /** * Retrieves the display mode for the device. * * For all products. * * This method indicates whether a physical display (e.g. monitor) is currently connected to * any of the device's connectors. * * See \ref nvmlEnableState_t for details on allowed modes. * * @param device The identifier of the target device * @param display Reference in which to return the display mode * * @return * - \ref NVML_SUCCESS if \a display has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a display is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetDisplayMode(nvmlDevice_t device, nvmlEnableState_t *display); /** * Retrieves the display active state for the device. * * For all products. * * This method indicates whether a display is initialized on the device. * For example whether X Server is attached to this device and has allocated memory for the screen. * * Display can be active even when no monitor is physically attached. * * See \ref nvmlEnableState_t for details on allowed modes. * * @param device The identifier of the target device * @param isActive Reference in which to return the display active state * * @return * - \ref NVML_SUCCESS if \a isActive has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a isActive is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetDisplayActive(nvmlDevice_t device, nvmlEnableState_t *isActive); /** * Retrieves the persistence mode associated with this device. * * For all products. * For Linux only. * * When driver persistence mode is enabled the driver software state is not torn down when the last * client disconnects. By default this feature is disabled. * * See \ref nvmlEnableState_t for details on allowed modes. * * @param device The identifier of the target device * @param mode Reference in which to return the current driver persistence mode * * @return * - \ref NVML_SUCCESS if \a mode has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a mode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetPersistenceMode() */ nvmlReturn_t DECLDIR nvmlDeviceGetPersistenceMode(nvmlDevice_t device, nvmlEnableState_t *mode); /** * Retrieves PCI attributes of this device. * * For all products. * * See \ref nvmlPciInfoExt_v1_t for details on the available PCI info. * * @param device The identifier of the target device * @param pci Reference in which to return the PCI info * * @return * - \ref NVML_SUCCESS if \a pci has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pci is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPciInfoExt(nvmlDevice_t device, nvmlPciInfoExt_t *pci); /** * Retrieves the PCI attributes of this device. * * For all products. * * See \ref nvmlPciInfo_t for details on the available PCI info. * * @param device The identifier of the target device * @param pci Reference in which to return the PCI info * * @return * - \ref NVML_SUCCESS if \a pci has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pci is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPciInfo_v3(nvmlDevice_t device, nvmlPciInfo_t *pci); /** * Retrieves the maximum PCIe link generation possible with this device and system * * I.E. for a generation 2 PCIe device attached to a generation 1 PCIe bus the max link generation this function will * report is generation 1. * * For Fermi &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param maxLinkGen Reference in which to return the max PCIe link generation * * @return * - \ref NVML_SUCCESS if \a maxLinkGen has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a maxLinkGen is null * - \ref NVML_ERROR_NOT_SUPPORTED if PCIe link information is not available * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMaxPcieLinkGeneration(nvmlDevice_t device, unsigned int *maxLinkGen); /** * Retrieves the maximum PCIe link generation supported by this device * * For Fermi &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param maxLinkGenDevice Reference in which to return the max PCIe link generation * * @return * - \ref NVML_SUCCESS if \a maxLinkGenDevice has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a maxLinkGenDevice is null * - \ref NVML_ERROR_NOT_SUPPORTED if PCIe link information is not available * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuMaxPcieLinkGeneration(nvmlDevice_t device, unsigned int *maxLinkGenDevice); /** * Retrieves the maximum PCIe link width possible with this device and system * * I.E. for a device with a 16x PCIe bus width attached to a 8x PCIe system bus this function will report * a max link width of 8. * * For Fermi &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param maxLinkWidth Reference in which to return the max PCIe link generation * * @return * - \ref NVML_SUCCESS if \a maxLinkWidth has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a maxLinkWidth is null * - \ref NVML_ERROR_NOT_SUPPORTED if PCIe link information is not available * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMaxPcieLinkWidth(nvmlDevice_t device, unsigned int *maxLinkWidth); /** * Retrieves the current PCIe link generation * * For Fermi &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param currLinkGen Reference in which to return the current PCIe link generation * * @return * - \ref NVML_SUCCESS if \a currLinkGen has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a currLinkGen is null * - \ref NVML_ERROR_NOT_SUPPORTED if PCIe link information is not available * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCurrPcieLinkGeneration(nvmlDevice_t device, unsigned int *currLinkGen); /** * Retrieves the current PCIe link width * * For Fermi &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param currLinkWidth Reference in which to return the current PCIe link generation * * @return * - \ref NVML_SUCCESS if \a currLinkWidth has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a currLinkWidth is null * - \ref NVML_ERROR_NOT_SUPPORTED if PCIe link information is not available * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCurrPcieLinkWidth(nvmlDevice_t device, unsigned int *currLinkWidth); /** * Retrieve PCIe utilization information. * This function is querying a byte counter over a 20ms interval and thus is the * PCIe throughput over that interval. * * For Maxwell &tm; or newer fully supported devices. * * This method is not supported in virtual machines running virtual GPU (vGPU). * * @param device The identifier of the target device * @param counter The specific counter that should be queried \ref nvmlPcieUtilCounter_t * @param value Reference in which to return throughput in KB/s * * @return * - \ref NVML_SUCCESS if \a value has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a counter is invalid, or \a value is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPcieThroughput(nvmlDevice_t device, nvmlPcieUtilCounter_t counter, unsigned int *value); /** * Retrieve the PCIe replay counter. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param value Reference in which to return the counter's value * * @return * - \ref NVML_SUCCESS if \a value has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a value is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPcieReplayCounter(nvmlDevice_t device, unsigned int *value); /** * Retrieves the current clock speeds for the device. * * For Fermi &tm; or newer fully supported devices. * * See \ref nvmlClockType_t for details on available clock information. * * @param device The identifier of the target device * @param type Identify which clock domain to query * @param clock Reference in which to return the clock speed in MHz * * @return * - \ref NVML_SUCCESS if \a clock has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a clock is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device cannot report the specified clock * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetClockInfo(nvmlDevice_t device, nvmlClockType_t type, unsigned int *clock); /** * Retrieves the maximum clock speeds for the device. * * For Fermi &tm; or newer fully supported devices. * * See \ref nvmlClockType_t for details on available clock information. * * \note On GPUs from Fermi family current P0 clocks (reported by \ref nvmlDeviceGetClockInfo) can differ from max clocks * by few MHz. * * @param device The identifier of the target device * @param type Identify which clock domain to query * @param clock Reference in which to return the clock speed in MHz * * @return * - \ref NVML_SUCCESS if \a clock has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a clock is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device cannot report the specified clock * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMaxClockInfo(nvmlDevice_t device, nvmlClockType_t type, unsigned int *clock); /** * Retrieve the GPCCLK VF offset value * @param[in] device The identifier of the target device * @param[out] offset The retrieved GPCCLK VF offset value * * @return * - \ref NVML_SUCCESS if \a offset has been successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetGpcClkVfOffset(nvmlDevice_t device, int *offset); /** * @deprecated Applications clocks are deprecated and will be removed in CUDA 14.0. */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetApplicationsClock(nvmlDevice_t device, nvmlClockType_t clockType, unsigned int *clockMHz); /** * @deprecated Applications clocks are deprecated and will be removed in CUDA 14.0. */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetDefaultApplicationsClock(nvmlDevice_t device, nvmlClockType_t clockType, unsigned int *clockMHz); /** * Retrieves the clock speed for the clock specified by the clock type and clock ID. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param clockType Identify which clock domain to query * @param clockId Identify which clock in the domain to query * @param clockMHz Reference in which to return the clock in MHz * * @return * - \ref NVML_SUCCESS if \a clockMHz has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a clockMHz is NULL or \a clockType is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetClock(nvmlDevice_t device, nvmlClockType_t clockType, nvmlClockId_t clockId, unsigned int *clockMHz); /** * Retrieves the customer defined maximum boost clock speed specified by the given clock type. * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param clockType Identify which clock domain to query * @param clockMHz Reference in which to return the clock in MHz * * @return * - \ref NVML_SUCCESS if \a clockMHz has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a clockMHz is NULL or \a clockType is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device or the \a clockType on this device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMaxCustomerBoostClock(nvmlDevice_t device, nvmlClockType_t clockType, unsigned int *clockMHz); /** * Retrieves the list of possible memory clocks that can be used as an argument for \ref nvmlDeviceSetMemoryLockedClocks. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param count Reference in which to provide the \a clocksMHz array size, and * to return the number of elements * @param clocksMHz Reference in which to return the clock in MHz * * @return * - \ref NVML_SUCCESS if \a count and \a clocksMHz have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a count is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a count is too small (\a count is set to the number of * required elements) * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetMemoryLockedClocks */ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedMemoryClocks(nvmlDevice_t device, unsigned int *count, unsigned int *clocksMHz); /** * Retrieves the list of possible graphics clocks that can be used as an argument for \ref nvmlDeviceSetGpuLockedClocks. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param memoryClockMHz Memory clock for which to return possible graphics clocks * @param count Reference in which to provide the \a clocksMHz array size, and * to return the number of elements * @param clocksMHz Reference in which to return the clocks in MHz * * @return * - \ref NVML_SUCCESS if \a count and \a clocksMHz have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NOT_FOUND if the specified \a memoryClockMHz is not a supported frequency * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a clock is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a count is too small * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetGpuLockedClocks */ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedGraphicsClocks(nvmlDevice_t device, unsigned int memoryClockMHz, unsigned int *count, unsigned int *clocksMHz); /** * Retrieve the current state of Auto Boosted clocks on a device and store it in \a isEnabled * * For Kepler &tm; or newer fully supported devices. * * Auto Boosted clocks are enabled by default on some hardware, allowing the GPU to run at higher clock rates * to maximize performance as thermal limits allow. * * On Pascal and newer hardware, Auto Aoosted clocks are controlled through application clocks. * Use \ref nvmlDeviceSetApplicationsClocks and \ref nvmlDeviceResetApplicationsClocks to control Auto Boost * behavior. * * @param device The identifier of the target device * @param isEnabled Where to store the current state of Auto Boosted clocks of the target device * @param defaultIsEnabled Where to store the default Auto Boosted clocks behavior of the target device that the device will * revert to when no applications are using the GPU * * @return * - \ref NVML_SUCCESS If \a isEnabled has been been set with the Auto Boosted clocks state of \a device * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a isEnabled is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support Auto Boosted clocks * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * */ nvmlReturn_t DECLDIR nvmlDeviceGetAutoBoostedClocksEnabled(nvmlDevice_t device, nvmlEnableState_t *isEnabled, nvmlEnableState_t *defaultIsEnabled); /** * Retrieves the intended operating speed of the device's fan. * * Note: The reported speed is the intended fan speed. If the fan is physically blocked and unable to spin, the * output will not match the actual fan speed. * * For all discrete products with dedicated fans. * * The fan speed is expressed as a percentage of the product's maximum noise tolerance fan speed. * This value may exceed 100% in certain cases. * * @param device The identifier of the target device * @param speed Reference in which to return the fan speed percentage * * @return * - \ref NVML_SUCCESS if \a speed has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a speed is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have a fan * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetFanSpeed(nvmlDevice_t device, unsigned int *speed); /** * Retrieves the intended operating speed of the device's specified fan. * * Note: The reported speed is the intended fan speed. If the fan is physically blocked and unable to spin, the * output will not match the actual fan speed. * * For all discrete products with dedicated fans. * * The fan speed is expressed as a percentage of the product's maximum noise tolerance fan speed. * This value may exceed 100% in certain cases. * * @param device The identifier of the target device * @param fan The index of the target fan, zero indexed. * @param speed Reference in which to return the fan speed percentage * * @return * - \ref NVML_SUCCESS if \a speed has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a fan is not an acceptable index, or \a speed is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have a fan or is newer than Maxwell * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetFanSpeed_v2(nvmlDevice_t device, unsigned int fan, unsigned int * speed); /** * Retrieves the intended operating speed in rotations per minute (RPM) of the device's specified fan. * * For Maxwell &tm; or newer fully supported devices. * * For all discrete products with dedicated fans. * * Note: The reported speed is the intended fan speed. If the fan is physically blocked and unable to spin, the * output will not match the actual fan speed. * * @param device The identifier of the target device * @param fanSpeed Structure specifying the index of the target fan (input) and * retrieved fan speed value (output) * * @return * - \ref NVML_SUCCESS If everything worked * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid, \a fan is not an acceptable * index, or \a speed is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported * - \ref NVML_ERROR_NOT_SUPPORTED If the \a device does not support this feature */ nvmlReturn_t DECLDIR nvmlDeviceGetFanSpeedRPM(nvmlDevice_t device, nvmlFanSpeedInfo_t *fanSpeed); /** * Retrieves the intended target speed of the device's specified fan. * * Normally, the driver dynamically adjusts the fan based on * the needs of the GPU. But when user set fan speed using nvmlDeviceSetFanSpeed_v2, * the driver will attempt to make the fan achieve the setting in * nvmlDeviceSetFanSpeed_v2. The actual current speed of the fan * is reported in nvmlDeviceGetFanSpeed_v2. * * For all discrete products with dedicated fans. * * The fan speed is expressed as a percentage of the product's maximum noise tolerance fan speed. * This value may exceed 100% in certain cases. * * @param device The identifier of the target device * @param fan The index of the target fan, zero indexed. * @param targetSpeed Reference in which to return the fan speed percentage * * @return * - \ref NVML_SUCCESS if \a speed has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a fan is not an acceptable index, or \a speed is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have a fan or is newer than Maxwell * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetTargetFanSpeed(nvmlDevice_t device, unsigned int fan, unsigned int *targetSpeed); /** * Retrieves the min and max fan speed that user can set for the GPU fan. * * For all cuda-capable discrete products with fans * * @param device The identifier of the target device * @param minSpeed The minimum speed allowed to set * @param maxSpeed The maximum speed allowed to set * * return * NVML_SUCCESS if speed has been adjusted * NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * NVML_ERROR_INVALID_ARGUMENT if device is invalid * NVML_ERROR_NOT_SUPPORTED if the device does not support this * (doesn't have fans) * NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMinMaxFanSpeed(nvmlDevice_t device, unsigned int * minSpeed, unsigned int * maxSpeed); /** * Gets current fan control policy. * * For Maxwell &tm; or newer fully supported devices. * * For all cuda-capable discrete products with fans * * device The identifier of the target \a device * policy Reference in which to return the fan control \a policy * * return * NVML_SUCCESS if \a policy has been populated * NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a policy is null or the \a fan given doesn't reference * a fan that exists. * NVML_ERROR_NOT_SUPPORTED if the \a device is older than Maxwell * NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetFanControlPolicy_v2(nvmlDevice_t device, unsigned int fan, nvmlFanControlPolicy_t *policy); /** * Retrieves the number of fans on the device. * * For all discrete products with dedicated fans. * * @param device The identifier of the target device * @param numFans The number of fans * * @return * - \ref NVML_SUCCESS if \a fan number query was successful * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a numFans is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have a fan * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNumFans(nvmlDevice_t device, unsigned int *numFans); /** * @deprecated Use \ref nvmlDeviceGetTemperatureV instead */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetTemperature(nvmlDevice_t device, nvmlTemperatureSensors_t sensorType, unsigned int *temp); /** * Retrieves the cooler's information. * Returns a cooler's control signal characteristics. The possible types are restricted, Variable and Toggle. * See \ref nvmlCoolerControl_t for details on available signal types. * Returns objects that cooler cools. Targets may be GPU, Memory, Power Supply or All of these. * See \ref nvmlCoolerTarget_t for details on available targets. * * For Maxwell &tm; or newer fully supported devices. * * For all discrete products with dedicated fans. * * @param[in] device The identifier of the target device * @param[out] coolerInfo Structure specifying the cooler's control signal characteristics (out) * and the target that cooler cools (out) * * @return * - \ref NVML_SUCCESS If everything worked * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid, \a signalType or \a target is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported * - \ref NVML_ERROR_NOT_SUPPORTED If the \a device does not support this feature */ nvmlReturn_t DECLDIR nvmlDeviceGetCoolerInfo(nvmlDevice_t device, nvmlCoolerInfo_t *coolerInfo); /** * Structure used to encapsulate temperature info */ typedef struct { unsigned int version; nvmlTemperatureSensors_t sensorType; int temperature; } nvmlTemperature_v1_t; typedef nvmlTemperature_v1_t nvmlTemperature_t; #define nvmlTemperature_v1 NVML_STRUCT_VERSION(Temperature, 1) /** * Retrieves the current temperature readings (in degrees C) for the given device. * * For all products. * * @param[in] device Target device identifier. * @param[in,out] temperature Structure specifying the sensor type (input) and retrieved * temperature value (output). * * @return * - \ref NVML_SUCCESS if \a temp has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a sensorType is invalid or \a temp is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have the specified sensor * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetTemperatureV(nvmlDevice_t device, nvmlTemperature_t *temperature); /** * Retrieves the temperature threshold for the GPU with the specified threshold type in degrees C. * * For Kepler &tm; or newer fully supported devices. * * See \ref nvmlTemperatureThresholds_t for details on available temperature thresholds. * * Note: This API is no longer the preferred interface for retrieving the following temperature thresholds * on Ada and later architectures: NVML_TEMPERATURE_THRESHOLD_SHUTDOWN, NVML_TEMPERATURE_THRESHOLD_SLOWDOWN, * NVML_TEMPERATURE_THRESHOLD_MEM_MAX and NVML_TEMPERATURE_THRESHOLD_GPU_MAX. * * Support for reading these temperature thresholds for Ada and later architectures would be removed from this * API in future releases. Please use \ref nvmlDeviceGetFieldValues with NVML_FI_DEV_TEMPERATURE_* fields to retrieve * temperature thresholds on these architectures. * * @param device The identifier of the target device * @param thresholdType The type of threshold value queried * @param temp Reference in which to return the temperature reading * @return * - \ref NVML_SUCCESS if \a temp has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a thresholdType is invalid or \a temp is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have a temperature sensor or is unsupported * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetTemperatureThreshold(nvmlDevice_t device, nvmlTemperatureThresholds_t thresholdType, unsigned int *temp); /** * Retrieves the thermal margin temperature (distance to nearest slowdown threshold). * * @param[in] device The identifier of the target device * @param[in,out] marginTempInfo Versioned structure in which to return the temperature reading * * @returns * - \ref NVML_SUCCESS if the margin temperature was retrieved successfully * - \ref NVML_ERROR_NOT_SUPPORTED if request is not supported on the current platform * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a temperature is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the right versioned structure is not used * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMarginTemperature(nvmlDevice_t device, nvmlMarginTemperature_t *marginTempInfo); /** * Used to execute a list of thermal system instructions. * * @param device The identifier of the target device * @param sensorIndex The index of the thermal sensor * @param pThermalSettings Reference in which to return the thermal sensor information * * @return * - \ref NVML_SUCCESS if \a pThermalSettings has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pThermalSettings is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetThermalSettings(nvmlDevice_t device, unsigned int sensorIndex, nvmlGpuThermalSettings_t *pThermalSettings); /** * Retrieves the current performance state for the device. * * For Fermi &tm; or newer fully supported devices. * * See \ref nvmlPstates_t for details on allowed performance states. * * @param device The identifier of the target device * @param pState Reference in which to return the performance state reading * * @return * - \ref NVML_SUCCESS if \a pState has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pState is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPerformanceState(nvmlDevice_t device, nvmlPstates_t *pState); /** * Retrieves current clocks event reasons. * * For all fully supported products. * * \note More than one bit can be enabled at the same time. Multiple reasons can be affecting clocks at once. * * @param device The identifier of the target device * @param clocksEventReasons Reference in which to return bitmask of active clocks event * reasons * * @return * - \ref NVML_SUCCESS if \a clocksEventReasons has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a clocksEventReasons is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlClocksEventReasons * @see nvmlDeviceGetSupportedClocksEventReasons */ nvmlReturn_t DECLDIR nvmlDeviceGetCurrentClocksEventReasons(nvmlDevice_t device, unsigned long long *clocksEventReasons); /** * @deprecated Use \ref nvmlDeviceGetCurrentClocksEventReasons instead */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetCurrentClocksThrottleReasons(nvmlDevice_t device, unsigned long long *clocksThrottleReasons); /** * Retrieves bitmask of supported clocks event reasons that can be returned by * \ref nvmlDeviceGetCurrentClocksEventReasons * * For all fully supported products. * * This method is not supported in virtual machines running virtual GPU (vGPU). * * @param device The identifier of the target device * @param supportedClocksEventReasons Reference in which to return bitmask of supported * clocks event reasons * * @return * - \ref NVML_SUCCESS if \a supportedClocksEventReasons has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a supportedClocksEventReasons is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlClocksEventReasons * @see nvmlDeviceGetCurrentClocksEventReasons */ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedClocksEventReasons(nvmlDevice_t device, unsigned long long *supportedClocksEventReasons); /** * @deprecated Use \ref nvmlDeviceGetSupportedClocksEventReasons instead */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetSupportedClocksThrottleReasons(nvmlDevice_t device, unsigned long long *supportedClocksThrottleReasons); /** * @deprecated Use \ref nvmlDeviceGetPerformanceState. This function exposes an incorrect generalization. * * Retrieve the current performance state for the device. * * For Fermi &tm; or newer fully supported devices. * * See \ref nvmlPstates_t for details on allowed performance states. * * @param device The identifier of the target device * @param pState Reference in which to return the performance state reading * * @return * - \ref NVML_SUCCESS if \a pState has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pState is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetPowerState(nvmlDevice_t device, nvmlPstates_t *pState); /** * Retrieve performance monitor samples from the associated subdevice. * * @param device * @param pDynamicPstatesInfo * * @return * - \ref NVML_SUCCESS if \a pDynamicPstatesInfo has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pDynamicPstatesInfo is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetDynamicPstatesInfo(nvmlDevice_t device, nvmlGpuDynamicPstatesInfo_t *pDynamicPstatesInfo); /** * Retrieve the MemClk (Memory Clock) VF offset value. * @param[in] device The identifier of the target device * @param[out] offset The retrieved MemClk VF offset value * * @return * - \ref NVML_SUCCESS if \a offset has been successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMemClkVfOffset(nvmlDevice_t device, int *offset); /** * Retrieve min and max clocks of some clock domain for a given PState * * @param device The identifier of the target device * @param type Clock domain * @param pstate PState to query * @param minClockMHz Reference in which to return min clock frequency * @param maxClockMHz Reference in which to return max clock frequency * * @return * - \ref NVML_SUCCESS if everything worked * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a type or \a pstate are invalid or both * \a minClockMHz and \a maxClockMHz are NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature */ nvmlReturn_t DECLDIR nvmlDeviceGetMinMaxClockOfPState(nvmlDevice_t device, nvmlClockType_t type, nvmlPstates_t pstate, unsigned int * minClockMHz, unsigned int * maxClockMHz); /** * Get all supported Performance States (P-States) for the device. * * The returned array would contain a contiguous list of valid P-States supported by * the device. If the number of supported P-States is fewer than the size of the array * supplied missing elements would contain \a NVML_PSTATE_UNKNOWN. * * The number of elements in the returned list will never exceed \a NVML_MAX_GPU_PERF_PSTATES. * * @param device The identifier of the target device * @param pstates Container to return the list of performance states * supported by device * @param size Size of the supplied \a pstates array in bytes * * @return * - \ref NVML_SUCCESS if \a pstates array has been retrieved * - \ref NVML_ERROR_INSUFFICIENT_SIZE if the the container supplied was not large enough to * hold the resulting list * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a pstates is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support performance state readings * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedPerformanceStates(nvmlDevice_t device, nvmlPstates_t *pstates, unsigned int size); /** * Retrieve the GPCCLK min max VF offset value. * @param[in] device The identifier of the target device * @param[out] minOffset The retrieved GPCCLK VF min offset value * @param[out] maxOffset The retrieved GPCCLK VF max offset value * * @return * - \ref NVML_SUCCESS if \a offset has been successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetGpcClkMinMaxVfOffset(nvmlDevice_t device, int *minOffset, int *maxOffset); /** * Retrieve the MemClk (Memory Clock) min max VF offset value. * @param[in] device The identifier of the target device * @param[out] minOffset The retrieved MemClk VF min offset value * @param[out] maxOffset The retrieved MemClk VF max offset value * * @return * - \ref NVML_SUCCESS if \a offset has been successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMemClkMinMaxVfOffset(nvmlDevice_t device, int *minOffset, int *maxOffset); /** * Retrieve min, max and current clock offset of some clock domain for a given PState * * For Maxwell &tm; or newer fully supported devices. * * Note: \ref nvmlDeviceGetGpcClkVfOffset, \ref nvmlDeviceGetMemClkVfOffset, \ref nvmlDeviceGetGpcClkMinMaxVfOffset and * \ref nvmlDeviceGetMemClkMinMaxVfOffset will be deprecated in a future release. Use \ref nvmlDeviceGetClockOffsets instead. * * @param device The identifier of the target device * @param info Structure specifying the clock type (input) and the pstate (input) * retrieved clock offset value (output), min clock offset (output) * and max clock offset (output) * * @return * - \ref NVML_SUCCESS If everything worked * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a type or \a pstate are invalid or both * \a minClockOffsetMHz and \a maxClockOffsetMHz are NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature */ nvmlReturn_t DECLDIR nvmlDeviceGetClockOffsets(nvmlDevice_t device, nvmlClockOffset_t *info); /** * Control current clock offset of some clock domain for a given PState * * For Maxwell &tm; or newer fully supported devices. * * Requires privileged user. * * @param device The identifier of the target device * @param info Structure specifying the clock type (input), the pstate (input) * and clock offset value (input) * * @return * - \ref NVML_SUCCESS If everything worked * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_NO_PERMISSION If the user doesn't have permission to perform this operation * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a type or \a pstate are invalid or both * \a clockOffsetMHz is out of allowed range. * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature */ nvmlReturn_t DECLDIR nvmlDeviceSetClockOffsets(nvmlDevice_t device, nvmlClockOffset_t *info); /** * Retrieves a performance mode string with all the * performance modes defined for this device along with their associated * GPU Clock and Memory Clock values. * Not all tokens will be reported on all GPUs, and additional tokens * may be added in the future. * For backwards compatibility we still provide nvclock and memclock; * those are the same as nvclockmin and memclockmin. * * Note: These clock values take into account the offset * set by clients through /ref nvmlDeviceSetClockOffsets. * * Maximum available Pstate (P15) shows the minimum performance level (0) and vice versa. * * Each performance modes are returned as a comma-separated list of * "token=value" pairs. Each set of performance mode tokens are separated * by a ";". Valid tokens: * * Token Value * "perf" unsigned int - the Performance level * "nvclock" unsigned int - the GPU clocks (in MHz) for the perf level * "nvclockmin" unsigned int - the GPU clocks min (in MHz) for the perf level * "nvclockmax" unsigned int - the GPU clocks max (in MHz) for the perf level * "nvclockeditable" unsigned int - if the GPU clock domain is editable for the perf level * "memclock" unsigned int - the memory clocks (in MHz) for the perf level * "memclockmin" unsigned int - the memory clocks min (in MHz) for the perf level * "memclockmax" unsigned int - the memory clocks max (in MHz) for the perf level * "memclockeditable" unsigned int - if the memory clock domain is editable for the perf level * "memtransferrate" unsigned int - the memory transfer rate (in MHz) for the perf level * "memtransferratemin" unsigned int - the memory transfer rate min (in MHz) for the perf level * "memtransferratemax" unsigned int - the memory transfer rate max (in MHz) for the perf level * "memtransferrateeditable" unsigned int - if the memory transfer rate is editable for the perf level * * Example: * * perf=0, nvclock=324, nvclockmin=324, nvclockmax=324, nvclockeditable=0, * memclock=324, memclockmin=324, memclockmax=324, memclockeditable=0, * memtransferrate=648, memtransferratemin=648, memtransferratemax=648, * memtransferrateeditable=0 ; * perf=1, nvclock=324, nvclockmin=324, nvclockmax=640, nvclockeditable=0, * memclock=810, memclockmin=810, memclockmax=810, memclockeditable=0, * memtransferrate=1620, memtransferrate=1620, memtransferrate=1620, * memtransferrateeditable=0 ; * * * @param device The identifier of the target device * @param perfModes Reference in which to return the performance level string * * @return * - \ref NVML_SUCCESS if \a perfModes has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a name is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPerformanceModes(nvmlDevice_t device, nvmlDevicePerfModes_t *perfModes); /** * Retrieves a string with the associated current GPU Clock and Memory Clock values. * * Not all tokens will be reported on all GPUs, and additional tokens * may be added in the future. * * Note: These clock values take into account the offset * set by clients through /ref nvmlDeviceSetClockOffsets. * * Clock values are returned as a comma-separated list of * "token=value" pairs. * Valid tokens: * * Token Value * "perf" unsigned int - the Performance level * "nvclock" unsigned int - the GPU clocks (in MHz) for the perf level * "nvclockmin" unsigned int - the GPU clocks min (in MHz) for the perf level * "nvclockmax" unsigned int - the GPU clocks max (in MHz) for the perf level * "nvclockeditable" unsigned int - if the GPU clock domain is editable for the perf level * "memclock" unsigned int - the memory clocks (in MHz) for the perf level * "memclockmin" unsigned int - the memory clocks min (in MHz) for the perf level * "memclockmax" unsigned int - the memory clocks max (in MHz) for the perf level * "memclockeditable" unsigned int - if the memory clock domain is editable for the perf level * "memtransferrate" unsigned int - the memory transfer rate (in MHz) for the perf level * "memtransferratemin" unsigned int - the memory transfer rate min (in MHz) for the perf level * "memtransferratemax" unsigned int - the memory transfer rate max (in MHz) for the perf level * "memtransferrateeditable" unsigned int - if the memory transfer rate is editable for the perf level * * Example: * * nvclock=324, nvclockmin=324, nvclockmax=324, nvclockeditable=0, * memclock=324, memclockmin=324, memclockmax=324, memclockeditable=0, * memtransferrate=648, memtransferratemin=648, memtransferratemax=648, * memtransferrateeditable=0 ; * * * @param device The identifier of the target device * @param currentClockFreqs Reference in which to return the performance level string * * @return * - \ref NVML_SUCCESS if \a currentClockFreqs has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a name is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCurrentClockFreqs(nvmlDevice_t device, nvmlDeviceCurrentClockFreqs_t *currentClockFreqs); /** * @deprecated This API has been deprecated. * * Retrieves the power management mode associated with this device. * * For products from the Fermi family. * - Requires \a NVML_INFOROM_POWER version 3.0 or higher. * * For from the Kepler or newer families. * - Does not require \a NVML_INFOROM_POWER object. * * This flag indicates whether any power management algorithm is currently active on the device. An * enabled state does not necessarily mean the device is being actively throttled -- only that * that the driver will do so if the appropriate conditions are met. * * See \ref nvmlEnableState_t for details on allowed modes. * * @param device The identifier of the target device * @param mode Reference in which to return the current power management mode * * @return * - \ref NVML_SUCCESS if \a mode has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a mode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetPowerManagementMode(nvmlDevice_t device, nvmlEnableState_t *mode); /** * Retrieves the power management limit associated with this device. * * For Fermi &tm; or newer fully supported devices. * * The power limit defines the upper boundary for the card's power draw. If * the card's total power draw reaches this limit the power management algorithm kicks in. * * This reading is only available if power management mode is supported. * See \ref nvmlDeviceGetPowerManagementMode. * * @param device The identifier of the target device * @param limit Reference in which to return the power management limit in milliwatts * * @return * - \ref NVML_SUCCESS if \a limit has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a limit is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPowerManagementLimit(nvmlDevice_t device, unsigned int *limit); /** * Retrieves information about possible values of power management limits on this device. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param minLimit Reference in which to return the minimum power management limit in milliwatts * @param maxLimit Reference in which to return the maximum power management limit in milliwatts * * @return * - \ref NVML_SUCCESS if \a minLimit and \a maxLimit have been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a minLimit or \a maxLimit is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetPowerManagementLimit */ nvmlReturn_t DECLDIR nvmlDeviceGetPowerManagementLimitConstraints(nvmlDevice_t device, unsigned int *minLimit, unsigned int *maxLimit); /** * Retrieves default power management limit on this device, in milliwatts. * Default power management limit is a power management limit that the device boots with. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param defaultLimit Reference in which to return the default power management limit in milliwatts * * @return * - \ref NVML_SUCCESS if \a defaultLimit has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a defaultLimit is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPowerManagementDefaultLimit(nvmlDevice_t device, unsigned int *defaultLimit); /** * Retrieves power usage for this GPU in milliwatts and its associated circuitry (e.g. memory) * * For Fermi &tm; or newer fully supported devices. * * On Fermi and Kepler GPUs the reading is accurate to within +/- 5% of current power draw. On Ampere * (except GA100) or newer GPUs, the API returns power averaged over 1 sec interval. On GA100 and * older architectures, instantaneous power is returned. * * See \ref NVML_FI_DEV_POWER_AVERAGE and \ref NVML_FI_DEV_POWER_INSTANT to query specific power * values. * * It is only available if power management mode is supported. See \ref nvmlDeviceGetPowerManagementMode. * * @param device The identifier of the target device * @param power Reference in which to return the power usage information * * @return * - \ref NVML_SUCCESS if \a power has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a power is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support power readings * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPowerUsage(nvmlDevice_t device, unsigned int *power); /** * Retrieves current power mizer mode on this device. * * PowerMizerMode provides a hint to the driver as to how to manage the performance of the GPU. * * For Maxwell &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param powerMizerMode Reference in which to return the power mizer mode * @param supportedPowerMizerModes Reference in which to return the bitmask of supported power mizer modes on this device. * The supported modes can be combined using the bitwise OR operator '|'. * For example, if a device supports all PowerMizer modes, the bitmask would be: * supportedPowerMizerModes = ((1 << NVML_POWER_MIZER_MODE_ADAPTIVE) | * (1 << NVML_POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE) | * (1 << NVML_POWER_MIZER_MODE_AUTO) | * (1 << NVML_POWER_MIZER_MODE_PREFER_CONSISTENT_PERFORMANCE)); * This bitmask can be used to check which power mizer modes are available on the device by performing * a bitwise AND operation with the specific mode you want to check. * * @return * - \ref NVML_SUCCESS if \a powerMizerMode has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a powerMizerMode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support powerMizerMode readings * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPowerMizerMode_v1(nvmlDevice_t device, nvmlDevicePowerMizerModes_v1_t *powerMizerMode); /** * Sets the new power mizer mode. * * For Maxwell &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param powerMizerMode Reference in which to set the power mizer mode. * * @return * - \ref NVML_SUCCESS if \a powerMizerMode has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a powerMizerMode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support powerMizerMode readings * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetPowerMizerMode_v1(nvmlDevice_t device, nvmlDevicePowerMizerModes_v1_t *powerMizerMode); /** * Retrieves total energy consumption for this GPU in millijoules (mJ) since the driver was last reloaded * * For Volta &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param energy Reference in which to return the energy consumption information * * @return * - \ref NVML_SUCCESS if \a energy has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a energy is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support energy readings * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetTotalEnergyConsumption(nvmlDevice_t device, unsigned long long *energy); /** * Get the effective power limit that the driver enforces after taking into account all limiters * * Note: This can be different from the \ref nvmlDeviceGetPowerManagementLimit if other limits are set elsewhere * This includes the out of band power limit interface * * For Kepler &tm; or newer fully supported devices. * * @param device The device to communicate with * @param limit Reference in which to return the power management limit in milliwatts * * @return * - \ref NVML_SUCCESS if \a limit has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a limit is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetEnforcedPowerLimit(nvmlDevice_t device, unsigned int *limit); /** * Retrieves the current GOM and pending GOM (the one that GPU will switch to after reboot). * * For GK110 M-class and X-class Tesla &tm; products from the Kepler family. * Modes \ref NVML_GOM_LOW_DP and \ref NVML_GOM_ALL_ON are supported on fully supported GeForce products. * Not supported on Quadro ® and Tesla &tm; C-class products. * * @param device The identifier of the target device * @param current Reference in which to return the current GOM * @param pending Reference in which to return the pending GOM * * @return * - \ref NVML_SUCCESS if \a mode has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a current or \a pending is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlGpuOperationMode_t * @see nvmlDeviceSetGpuOperationMode */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuOperationMode(nvmlDevice_t device, nvmlGpuOperationMode_t *current, nvmlGpuOperationMode_t *pending); /** * Retrieves the amount of used, free, reserved and total memory available on the device, in bytes. * The reserved amount is supported on version 2 only. * * For all products. * * Enabling ECC reduces the amount of total available memory, due to the extra required parity bits. * Under WDDM most device memory is allocated and managed on startup by Windows. * * Under Linux and Windows TCC, the reported amount of used memory is equal to the sum of memory allocated * by all active channels on the device. * * See \ref nvmlMemory_v2_t for details on available memory info. * * @note In MIG mode, if device handle is provided, the API returns aggregate * information, only if the caller has appropriate privileges. Per-instance * information can be queried by using specific MIG device handles. * * @note nvmlDeviceGetMemoryInfo_v2 adds additional memory information. * * @note On systems where GPUs are NUMA nodes, the accuracy of FB memory utilization * provided by this API depends on the memory accounting of the operating system. * This is because FB memory is managed by the operating system instead of the NVIDIA GPU driver. * Typically, pages allocated from FB memory are not released even after * the process terminates to enhance performance. In scenarios where * the operating system is under memory pressure, it may resort to utilizing FB memory. * Such actions can result in discrepancies in the accuracy of memory reporting. * * @param device The identifier of the target device * @param memory Reference in which to return the memory information * * @return * - \ref NVML_SUCCESS if \a memory has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a memory is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMemoryInfo(nvmlDevice_t device, nvmlMemory_t *memory); /** * nvmlDeviceGetMemoryInfo_v2 accounts separately for reserved memory and includes it in the used memory amount. */ nvmlReturn_t DECLDIR nvmlDeviceGetMemoryInfo_v2(nvmlDevice_t device, nvmlMemory_v2_t *memory); /** * Retrieves the current compute mode for the device. * * For all products. * * See \ref nvmlComputeMode_t for details on allowed compute modes. * * @param device The identifier of the target device * @param mode Reference in which to return the current compute mode * * @return * - \ref NVML_SUCCESS if \a mode has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a mode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetComputeMode() */ nvmlReturn_t DECLDIR nvmlDeviceGetComputeMode(nvmlDevice_t device, nvmlComputeMode_t *mode); /** * Retrieves the CUDA compute capability of the device. * * For all products. * * Returns the major and minor compute capability version numbers of the * device. The major and minor versions are equivalent to the * CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR and * CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR attributes that would be * returned by CUDA's cuDeviceGetAttribute(). * * @param device The identifier of the target device * @param major Reference in which to return the major CUDA compute capability * @param minor Reference in which to return the minor CUDA compute capability * * @return * - \ref NVML_SUCCESS if \a major and \a minor have been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a major or \a minor are NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCudaComputeCapability(nvmlDevice_t device, int *major, int *minor); /** * Retrieves the current and pending DRAM Encryption modes for the device. * * %BLACKWELL_OR_NEWER% * Only applicable to devices that support DRAM Encryption * Requires \a NVML_INFOROM_DEN version 1.0 or higher. * * Changing DRAM Encryption modes requires a reboot. The "pending" DRAM Encryption mode refers to the target mode following * the next reboot. * * See \ref nvmlEnableState_t for details on allowed modes. * * @param device The identifier of the target device * @param current Reference in which to return the current DRAM Encryption mode * @param pending Reference in which to return the pending DRAM Encryption mode * * @return * - \ref NVML_SUCCESS if \a current and \a pending have been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or either \a current or \a pending is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the argument version is not supported * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetDramEncryptionMode() */ nvmlReturn_t DECLDIR nvmlDeviceGetDramEncryptionMode(nvmlDevice_t device, nvmlDramEncryptionInfo_t *current, nvmlDramEncryptionInfo_t *pending); /** * Set the DRAM Encryption mode for the device. * * For Kepler &tm; or newer fully supported devices. * Only applicable to devices that support DRAM Encryption. * Requires \a NVML_INFOROM_DEN version 1.0 or higher. * Requires root/admin permissions. * * The DRAM Encryption mode determines whether the GPU enables its DRAM Encryption support. * * This operation takes effect after the next reboot. * * See \ref nvmlEnableState_t for details on available modes. * * @param device The identifier of the target device * @param dramEncryption The target DRAM Encryption mode * * @return * - \ref NVML_SUCCESS if the DRAM Encryption mode was set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a DRAM Encryption is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the argument version is not supported * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetDramEncryptionMode() */ nvmlReturn_t DECLDIR nvmlDeviceSetDramEncryptionMode(nvmlDevice_t device, const nvmlDramEncryptionInfo_t *dramEncryption); /** * Retrieves the current and pending ECC modes for the device. * * For Fermi &tm; or newer fully supported devices. * Only applicable to devices with ECC. * Requires \a NVML_INFOROM_ECC version 1.0 or higher. * * Changing ECC modes requires a reboot. The "pending" ECC mode refers to the target mode following * the next reboot. * * See \ref nvmlEnableState_t for details on allowed modes. * * @param device The identifier of the target device * @param current Reference in which to return the current ECC mode * @param pending Reference in which to return the pending ECC mode * * @return * - \ref NVML_SUCCESS if \a current and \a pending have been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or either \a current or \a pending is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetEccMode() */ nvmlReturn_t DECLDIR nvmlDeviceGetEccMode(nvmlDevice_t device, nvmlEnableState_t *current, nvmlEnableState_t *pending); /** * Retrieves the default ECC modes for the device. * * For Fermi &tm; or newer fully supported devices. * Only applicable to devices with ECC. * Requires \a NVML_INFOROM_ECC version 1.0 or higher. * * See \ref nvmlEnableState_t for details on allowed modes. * * @param device The identifier of the target device * @param defaultMode Reference in which to return the default ECC mode * * @return * - \ref NVML_SUCCESS if \a current and \a pending have been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a default is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetEccMode() */ nvmlReturn_t DECLDIR nvmlDeviceGetDefaultEccMode(nvmlDevice_t device, nvmlEnableState_t *defaultMode); /** * Retrieves the device boardId from 0-N. * Devices with the same boardId indicate GPUs connected to the same PLX. Use in conjunction with * \ref nvmlDeviceGetMultiGpuBoard() to decide if they are on the same board as well. * The boardId returned is a unique ID for the current configuration. Uniqueness and ordering across * reboots and system configurations is not guaranteed (i.e. if a Tesla K40c returns 0x100 and * the two GPUs on a Tesla K10 in the same system returns 0x200 it is not guaranteed they will * always return those values but they will always be different from each other). * * * For Fermi &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param boardId Reference in which to return the device's board ID * * @return * - \ref NVML_SUCCESS if \a boardId has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a boardId is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetBoardId(nvmlDevice_t device, unsigned int *boardId); /** * Retrieves whether the device is on a Multi-GPU Board * Devices that are on multi-GPU boards will set \a multiGpuBool to a non-zero value. * * For Fermi &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param multiGpuBool Reference in which to return a zero or non-zero value * to indicate whether the device is on a multi GPU board * * @return * - \ref NVML_SUCCESS if \a multiGpuBool has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a multiGpuBool is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMultiGpuBoard(nvmlDevice_t device, unsigned int *multiGpuBool); /** * Retrieves the total ECC error counts for the device. * * For Fermi &tm; or newer fully supported devices. * Only applicable to devices with ECC. * Requires \a NVML_INFOROM_ECC version 1.0 or higher. * Requires ECC Mode to be enabled. * * The total error count is the sum of errors across each of the separate memory systems, i.e. the total set of * errors across the entire device. * * See \ref nvmlMemoryErrorType_t for a description of available error types.\n * See \ref nvmlEccCounterType_t for a description of available counter types. * * @param device The identifier of the target device * @param errorType Flag that specifies the type of the errors. * @param counterType Flag that specifies the counter-type of the errors. * @param eccCounts Reference in which to return the specified ECC errors * * @return * - \ref NVML_SUCCESS if \a eccCounts has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a errorType or \a counterType is invalid, or \a eccCounts is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceClearEccErrorCounts() */ nvmlReturn_t DECLDIR nvmlDeviceGetTotalEccErrors(nvmlDevice_t device, nvmlMemoryErrorType_t errorType, nvmlEccCounterType_t counterType, unsigned long long *eccCounts); /** * Retrieves the detailed ECC error counts for the device. * * @deprecated This API supports only a fixed set of ECC error locations * On different GPU architectures different locations are supported * See \ref nvmlDeviceGetMemoryErrorCounter * * For Fermi &tm; or newer fully supported devices. * Only applicable to devices with ECC. * Requires \a NVML_INFOROM_ECC version 2.0 or higher to report aggregate location-based ECC counts. * Requires \a NVML_INFOROM_ECC version 1.0 or higher to report all other ECC counts. * Requires ECC Mode to be enabled. * * Detailed errors provide separate ECC counts for specific parts of the memory system. * * Reports zero for unsupported ECC error counters when a subset of ECC error counters are supported. * * See \ref nvmlMemoryErrorType_t for a description of available bit types.\n * See \ref nvmlEccCounterType_t for a description of available counter types.\n * See \ref nvmlEccErrorCounts_t for a description of provided detailed ECC counts. * * @param device The identifier of the target device * @param errorType Flag that specifies the type of the errors. * @param counterType Flag that specifies the counter-type of the errors. * @param eccCounts Reference in which to return the specified ECC errors * * @return * - \ref NVML_SUCCESS if \a eccCounts has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a errorType or \a counterType is invalid, or \a eccCounts is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceClearEccErrorCounts() */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetDetailedEccErrors(nvmlDevice_t device, nvmlMemoryErrorType_t errorType, nvmlEccCounterType_t counterType, nvmlEccErrorCounts_t *eccCounts); /** * Retrieves the requested memory error counter for the device. * * For Fermi &tm; or newer fully supported devices. * Requires \a NVML_INFOROM_ECC version 2.0 or higher to report aggregate location-based memory error counts. * Requires \a NVML_INFOROM_ECC version 1.0 or higher to report all other memory error counts. * * Only applicable to devices with ECC. * * Requires ECC Mode to be enabled. * * @note On MIG-enabled GPUs, per instance information can be queried using specific * MIG device handles. Per instance information is currently only supported for * non-DRAM uncorrectable volatile errors. Querying volatile errors using device * handles is currently not supported. * * See \ref nvmlMemoryErrorType_t for a description of available memory error types.\n * See \ref nvmlEccCounterType_t for a description of available counter types.\n * See \ref nvmlMemoryLocation_t for a description of available counter locations.\n * * @param device The identifier of the target device * @param errorType Flag that specifies the type of error. * @param counterType Flag that specifies the counter-type of the errors. * @param locationType Specifies the location of the counter. * @param count Reference in which to return the ECC counter * * @return * - \ref NVML_SUCCESS if \a count has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a bitTyp,e \a counterType or \a locationType is * invalid, or \a count is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support ECC error reporting in the specified memory * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMemoryErrorCounter(nvmlDevice_t device, nvmlMemoryErrorType_t errorType, nvmlEccCounterType_t counterType, nvmlMemoryLocation_t locationType, unsigned long long *count); /** * Retrieves the current utilization rates for the device's major subsystems. * * For Fermi &tm; or newer fully supported devices. * * See \ref nvmlUtilization_t for details on available utilization rates. * * \note During driver initialization when ECC is enabled one can see high GPU and Memory Utilization readings. * This is caused by ECC Memory Scrubbing mechanism that is performed during driver initialization. * * @note On MIG-enabled GPUs, querying device utilization rates is not currently supported. * * @param device The identifier of the target device * @param utilization Reference in which to return the utilization information * * @return * - \ref NVML_SUCCESS if \a utilization has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a utilization is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetUtilizationRates(nvmlDevice_t device, nvmlUtilization_t *utilization); /** * Retrieves the current utilization and sampling size in microseconds for the Encoder * * For Kepler &tm; or newer fully supported devices. * * @note On MIG-enabled GPUs, querying encoder utilization is not currently supported. * * @param device The identifier of the target device * @param utilization Reference to an unsigned int for encoder utilization info * @param samplingPeriodUs Reference to an unsigned int for the sampling period in US * * @return * - \ref NVML_SUCCESS if \a utilization has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a utilization is NULL, or \a samplingPeriodUs is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetEncoderUtilization(nvmlDevice_t device, unsigned int *utilization, unsigned int *samplingPeriodUs); /** * Retrieves the current capacity of the device's encoder, as a percentage of maximum encoder capacity with valid values in the range 0-100. * * For Maxwell &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param encoderQueryType Type of encoder to query * @param encoderCapacity Reference to an unsigned int for the encoder capacity * * @return * - \ref NVML_SUCCESS if \a encoderCapacity is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a encoderCapacity is NULL, or \a device or \a encoderQueryType * are invalid * - \ref NVML_ERROR_NOT_SUPPORTED if device does not support the encoder specified in \a encodeQueryType * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetEncoderCapacity (nvmlDevice_t device, nvmlEncoderType_t encoderQueryType, unsigned int *encoderCapacity); /** * Retrieves the current encoder statistics for a given device. * * For Maxwell &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param sessionCount Reference to an unsigned int for count of active encoder sessions * @param averageFps Reference to an unsigned int for trailing average FPS of all active sessions * @param averageLatency Reference to an unsigned int for encode latency in microseconds * * @return * - \ref NVML_SUCCESS if \a sessionCount, \a averageFps and \a averageLatency is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a sessionCount, or \a device or \a averageFps, * or \a averageLatency is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetEncoderStats (nvmlDevice_t device, unsigned int *sessionCount, unsigned int *averageFps, unsigned int *averageLatency); /** * Retrieves information about active encoder sessions on a target device. * * An array of active encoder sessions is returned in the caller-supplied buffer pointed at by \a sessionInfos. The * array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions * written to the buffer. * * If the supplied buffer is not large enough to accommodate the active session array, the function returns * NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlEncoderSessionInfo_t array required in \a sessionCount. * To query the number of active encoder sessions, call this function with *sessionCount = 0. The code will return * NVML_SUCCESS with number of active encoder sessions updated in *sessionCount. * * For Maxwell &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param sessionCount Reference to caller supplied array size, and returns the number of sessions. * @param sessionInfos Reference in which to return the session information * * @return * - \ref NVML_SUCCESS if \a sessionInfos is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a sessionCount is too small, array element count is returned in \a sessionCount * - \ref NVML_ERROR_INVALID_ARGUMENT if \a sessionCount is NULL. * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by \a device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetEncoderSessions(nvmlDevice_t device, unsigned int *sessionCount, nvmlEncoderSessionInfo_t *sessionInfos); /** * Retrieves the current utilization and sampling size in microseconds for the Decoder * * For Kepler &tm; or newer fully supported devices. * * @note On MIG-enabled GPUs, querying decoder utilization is not currently supported. * * @param device The identifier of the target device * @param utilization Reference to an unsigned int for decoder utilization info * @param samplingPeriodUs Reference to an unsigned int for the sampling period in US * * @return * - \ref NVML_SUCCESS if \a utilization has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a utilization is NULL, or \a samplingPeriodUs is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetDecoderUtilization(nvmlDevice_t device, unsigned int *utilization, unsigned int *samplingPeriodUs); /** * Retrieves the current utilization and sampling size in microseconds for the JPG * * %TURING_OR_NEWER% * * @note On MIG-enabled GPUs, querying decoder utilization is not currently supported. * * @param device The identifier of the target device * @param utilization Reference to an unsigned int for jpg utilization info * @param samplingPeriodUs Reference to an unsigned int for the sampling period in US * * @return * - \ref NVML_SUCCESS if \a utilization has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a utilization is NULL, or \a samplingPeriodUs is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetJpgUtilization(nvmlDevice_t device, unsigned int *utilization, unsigned int *samplingPeriodUs); /** * Retrieves the current utilization and sampling size in microseconds for the OFA (Optical Flow Accelerator) * * %TURING_OR_NEWER% * * @note On MIG-enabled GPUs, querying decoder utilization is not currently supported. * * @param device The identifier of the target device * @param utilization Reference to an unsigned int for ofa utilization info * @param samplingPeriodUs Reference to an unsigned int for the sampling period in US * * @return * - \ref NVML_SUCCESS if \a utilization has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a utilization is NULL, or \a samplingPeriodUs is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetOfaUtilization(nvmlDevice_t device, unsigned int *utilization, unsigned int *samplingPeriodUs); /** * Retrieves the active frame buffer capture sessions statistics for a given device. * * For Maxwell &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param fbcStats Reference to nvmlFBCStats_t structure containing NvFBC stats * * @return * - \ref NVML_SUCCESS if \a fbcStats is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a fbcStats is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetFBCStats(nvmlDevice_t device, nvmlFBCStats_t *fbcStats); /** * Retrieves information about active frame buffer capture sessions on a target device. * * An array of active FBC sessions is returned in the caller-supplied buffer pointed at by \a sessionInfo. The * array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions * written to the buffer. * * If the supplied buffer is not large enough to accommodate the active session array, the function returns * NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlFBCSessionInfo_t array required in \a sessionCount. * To query the number of active FBC sessions, call this function with *sessionCount = 0. The code will return * NVML_SUCCESS with number of active FBC sessions updated in *sessionCount. * * For Maxwell &tm; or newer fully supported devices. * * @note hResolution, vResolution, averageFPS and averageLatency data for a FBC session returned in \a sessionInfo may * be zero if there are no new frames captured since the session started. * * @param device The identifier of the target device * @param sessionCount Reference to caller supplied array size, and returns the number of sessions. * @param sessionInfo Reference in which to return the session information * * @return * - \ref NVML_SUCCESS if \a sessionInfo is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a sessionCount is too small, array element count is returned in \a sessionCount * - \ref NVML_ERROR_INVALID_ARGUMENT if \a sessionCount is NULL. * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetFBCSessions(nvmlDevice_t device, unsigned int *sessionCount, nvmlFBCSessionInfo_t *sessionInfo); /** * Retrieves the current and pending driver model for the device. * * For Kepler &tm; or newer fully supported devices. * For windows only. * * On Windows platforms the device driver can run in either WDDM, MCDM or WDM (TCC) modes. If a display is attached * to the device it must run in WDDM mode. MCDM mode is preferred if a display is not attached. TCC mode is deprecated. * * See \ref nvmlDriverModel_t for details on available driver models. * * @param device The identifier of the target device * @param current Reference in which to return the current driver model * @param pending Reference in which to return the pending driver model * * @return * - \ref NVML_SUCCESS if either \a current and/or \a pending have been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or both \a current and \a pending are NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the platform is not windows * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceSetDriverModel_v2() */ nvmlReturn_t DECLDIR nvmlDeviceGetDriverModel_v2(nvmlDevice_t device, nvmlDriverModel_t *current, nvmlDriverModel_t *pending); /** * Get VBIOS version of the device. * * For all products. * * The VBIOS version may change from time to time. It will not exceed 32 characters in length * (including the NULL terminator). See \ref nvmlConstants::NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE. * * @param device The identifier of the target device * @param version Reference to which to return the VBIOS version * @param length The maximum allowed length of the string returned in \a version * * @return * - \ref NVML_SUCCESS if \a version has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a version is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVbiosVersion(nvmlDevice_t device, char *version, unsigned int length); /** * Get Bridge Chip Information for all the bridge chips on the board. * * For all fully supported products. * Only applicable to multi-GPU products. * * @param device The identifier of the target device * @param bridgeHierarchy Reference to the returned bridge chip Hierarchy * * @return * - \ref NVML_SUCCESS if bridge chip exists * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a bridgeInfo is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if bridge chip not supported on the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * */ nvmlReturn_t DECLDIR nvmlDeviceGetBridgeChipInfo(nvmlDevice_t device, nvmlBridgeChipHierarchy_t *bridgeHierarchy); /** * Get information about processes with a compute context on a device * * For Fermi &tm; or newer fully supported devices. * * This function returns information only about compute running processes (e.g. CUDA application which have * active context). Any graphics applications (e.g. using OpenGL, DirectX) won't be listed by this function. * * To query the current number of running compute processes, call this function with *infoCount = 0. The * return code will be NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if none are running. For this call * \a infos is allowed to be NULL. * * The usedGpuMemory field returned is all of the memory used by the application. * * Keep in mind that information returned by this call is dynamic and the number of elements might change in * time. Allocate more space for \a infos table in case new compute processes are spawned. * * @note In MIG mode, if device handle is provided, the API returns aggregate information, only if * the caller has appropriate privileges. Per-instance information can be queried by using * specific MIG device handles. * Querying per-instance information using MIG device handles is not supported if the device is in vGPU Host virtualization mode. * * @param device The device handle or MIG device handle * @param infoCount Reference in which to provide the \a infos array size, and * to return the number of returned elements * @param infos Reference in which to return the process information * * @return * - \ref NVML_SUCCESS if \a infoCount and \a infos have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a infoCount indicates that the \a infos array is too small * \a infoCount will contain minimal amount of space necessary for * the call to complete * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, either of \a infoCount or \a infos is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by \a device * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see \ref nvmlSystemGetProcessName */ nvmlReturn_t DECLDIR nvmlDeviceGetComputeRunningProcesses_v3(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_t *infos); /** * Get information about processes with a graphics context on a device * * For Kepler &tm; or newer fully supported devices. * * This function returns information only about graphics based processes * (eg. applications using OpenGL, DirectX) * * To query the current number of running graphics processes, call this function with *infoCount = 0. The * return code will be NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if none are running. For this call * \a infos is allowed to be NULL. * * The usedGpuMemory field returned is all of the memory used by the application. * * Keep in mind that information returned by this call is dynamic and the number of elements might change in * time. Allocate more space for \a infos table in case new graphics processes are spawned. * * @note In MIG mode, if device handle is provided, the API returns aggregate information, only if * the caller has appropriate privileges. Per-instance information can be queried by using * specific MIG device handles. * Querying per-instance information using MIG device handles is not supported if the device is in vGPU Host virtualization mode. * * @param device The device handle or MIG device handle * @param infoCount Reference in which to provide the \a infos array size, and * to return the number of returned elements * @param infos Reference in which to return the process information * * @return * - \ref NVML_SUCCESS if \a infoCount and \a infos have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a infoCount indicates that the \a infos array is too small * \a infoCount will contain minimal amount of space necessary for * the call to complete * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, either of \a infoCount or \a infos is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by \a device * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see \ref nvmlSystemGetProcessName */ nvmlReturn_t DECLDIR nvmlDeviceGetGraphicsRunningProcesses_v3(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_t *infos); /** * Get information about processes with a Multi-Process Service (MPS) compute context on a device * * For Volta &tm; or newer fully supported devices. * * This function returns information only about compute running processes (e.g. CUDA application which have * active context) utilizing MPS. Any graphics applications (e.g. using OpenGL, DirectX) won't be listed by * this function. * * To query the current number of running compute processes, call this function with *infoCount = 0. The * return code will be NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if none are running. For this call * \a infos is allowed to be NULL. * * The usedGpuMemory field returned is all of the memory used by the application. * * Keep in mind that information returned by this call is dynamic and the number of elements might change in * time. Allocate more space for \a infos table in case new compute processes are spawned. * * @note In MIG mode, if device handle is provided, the API returns aggregate information, only if * the caller has appropriate privileges. Per-instance information can be queried by using * specific MIG device handles. * Querying per-instance information using MIG device handles is not supported if the device is in vGPU Host virtualization mode. * * @param device The device handle or MIG device handle * @param infoCount Reference in which to provide the \a infos array size, and * to return the number of returned elements * @param infos Reference in which to return the process information * * @return * - \ref NVML_SUCCESS if \a infoCount and \a infos have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a infoCount indicates that the \a infos array is too small * \a infoCount will contain minimal amount of space necessary for * the call to complete * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, either of \a infoCount or \a infos is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by \a device * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see \ref nvmlSystemGetProcessName */ nvmlReturn_t DECLDIR nvmlDeviceGetMPSComputeRunningProcesses_v3(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_t *infos); /** * Get information about running processes on a device for input context * * For Hopper &tm; or newer fully supported devices. * * This function returns information only about running processes (e.g. CUDA application which have * active context). * * To determine the size of the \a plist->procArray array to allocate, call the function with * \a plist->numProcArrayEntries set to zero and \a plist->procArray set to NULL. The return * code will be either NVML_ERROR_INSUFFICIENT_SIZE (if there are valid processes of type * \a plist->mode to report on, in which case the \a plist->numProcArrayEntries field will * indicate the required number of entries in the array) or NVML_SUCCESS (if no processes of type * \a plist->mode exist). * * The usedGpuMemory field returned is all of the memory used by the application. * The usedGpuCcProtectedMemory field returned is all of the protected memory used by the application. * * Keep in mind that information returned by this call is dynamic and the number of elements might change in * time. Allocate more space for \a plist->procArray table in case new processes are spawned. * * @note In MIG mode, if device handle is provided, the API returns aggregate information, only if * the caller has appropriate privileges. Per-instance information can be queried by using * specific MIG device handles. * Querying per-instance information using MIG device handles is not supported if the device is in * vGPU Host virtualization mode. * Protected memory usage is currently not available in MIG mode and in windows. * * @param device The device handle or MIG device handle * @param plist Reference in which to process detail list * \a plist->version The api version * \a plist->mode The process mode * \a plist->procArray Reference in which to return the process information * \a plist->numProcArrayEntries Proc array size of returned entries * * @return * - \ref NVML_SUCCESS if \a plist->numprocArrayEntries and \a plist->procArray have been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a plist->numprocArrayEntries indicates that the \a plist->procArray is too small * \a plist->numprocArrayEntries will contain minimal amount of space necessary for * the call to complete * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a plist is NULL, \a plist->version is invalid, * \a plist->mode is invalid, * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by \a device * - \ref NVML_ERROR_UNKNOWN on any unexpected error * */ nvmlReturn_t DECLDIR nvmlDeviceGetRunningProcessDetailList(nvmlDevice_t device, nvmlProcessDetailList_t *plist); /** * Check if the GPU devices are on the same physical board. * * For all fully supported products. * * @param device1 The first GPU device * @param device2 The second GPU device * @param onSameBoard Reference in which to return the status. * Non-zero indicates that the GPUs are on the same board. * * @return * - \ref NVML_SUCCESS if \a onSameBoard has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a dev1 or \a dev2 are invalid or \a onSameBoard is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this check is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the either GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceOnSameBoard(nvmlDevice_t device1, nvmlDevice_t device2, int *onSameBoard); /** * Retrieves the root/admin permissions on the target API. See \a nvmlRestrictedAPI_t for the list of supported APIs. * If an API is restricted only root users can call that API. See \a nvmlDeviceSetAPIRestriction to change current permissions. * * For all fully supported products. * * @param device The identifier of the target device * @param apiType Target API type for this operation * @param isRestricted Reference in which to return the current restriction * NVML_FEATURE_ENABLED indicates that the API is root-only * NVML_FEATURE_DISABLED indicates that the API is accessible to all users * * @return * - \ref NVML_SUCCESS if \a isRestricted has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a apiType incorrect or \a isRestricted is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device or the device does not support * the feature that is being queried (E.G. Enabling/disabling Auto Boosted clocks is * not supported by the device) * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlRestrictedAPI_t */ nvmlReturn_t DECLDIR nvmlDeviceGetAPIRestriction(nvmlDevice_t device, nvmlRestrictedAPI_t apiType, nvmlEnableState_t *isRestricted); /** * Gets recent samples for the GPU. * * For Kepler &tm; or newer fully supported devices. * * Based on type, this method can be used to fetch the power, utilization or clock samples maintained in the buffer by * the driver. * * Power, Utilization and Clock samples are returned as type "unsigned int" for the union nvmlValue_t. * * To get the size of samples that user needs to allocate, the method is invoked with samples set to NULL. * The returned samplesCount will provide the number of samples that can be queried. The user needs to * allocate the buffer with size as samplesCount * sizeof(nvmlSample_t). * * lastSeenTimeStamp represents CPU timestamp in microseconds. Set it to 0 to fetch all the samples maintained by the * underlying buffer. Set lastSeenTimeStamp to one of the timeStamps retrieved from the date of the previous query * to get more recent samples. * * This method fetches the number of entries which can be accommodated in the provided samples array, and the * reference samplesCount is updated to indicate how many samples were actually retrieved. The advantage of using this * method for samples in contrast to polling via existing methods is to get get higher frequency data at lower polling cost. * * @note On MIG-enabled GPUs, querying the following sample types, NVML_GPU_UTILIZATION_SAMPLES, NVML_MEMORY_UTILIZATION_SAMPLES * NVML_ENC_UTILIZATION_SAMPLES and NVML_DEC_UTILIZATION_SAMPLES, is not currently supported. * * @param device The identifier for the target device * @param type Type of sampling event * @param lastSeenTimeStamp Return only samples with timestamp greater than lastSeenTimeStamp. * @param sampleValType Output parameter to represent the type of sample value as described in nvmlSampleVal_t * @param sampleCount Reference to provide the number of elements which can be queried in samples array * @param samples Reference in which samples are returned * @return * - \ref NVML_SUCCESS if samples are successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a samplesCount is NULL or * reference to \a sampleCount is 0 for non null \a samples * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_FOUND if sample entries are not found * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetSamples(nvmlDevice_t device, nvmlSamplingType_t type, unsigned long long lastSeenTimeStamp, nvmlValueType_t *sampleValType, unsigned int *sampleCount, nvmlSample_t *samples); /** * Gets Total, Available and Used size of BAR1 memory. * * BAR1 is used to map the FB (device memory) so that it can be directly accessed by the CPU or by 3rd party * devices (peer-to-peer on the PCIE bus). * * @note In MIG mode, if device handle is provided, the API returns aggregate * information, only if the caller has appropriate privileges. Per-instance * information can be queried by using specific MIG device handles. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param bar1Memory Reference in which BAR1 memory * information is returned. * * @return * - \ref NVML_SUCCESS if BAR1 memory is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a bar1Memory is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * */ nvmlReturn_t DECLDIR nvmlDeviceGetBAR1MemoryInfo(nvmlDevice_t device, nvmlBAR1Memory_t *bar1Memory); /** * @deprecated Use \ref nvmlDeviceGetFieldValues to query this data. * This API will be removed in CUDA 14.0. * * Translations are as follows: * * NVML_PERF_POLICY_POWER -> NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_POWER_CAP * NVML_PERF_POLICY_THERMAL -> NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_THERM_SLOWDOWN * NVML_PERF_POLICY_SYNC_BOOST -> NVML_FI_DEV_CLOCKS_EVENT_REASON_SYNC_BOOST * NVML_PERF_POLICY_BOARD_LIMIT -> NVML_FI_DEV_PERF_POLICY_BOARD_LIMIT * NVML_PERF_POLICY_LOW_UTILIZATION -> NVML_FI_DEV_PERF_POLICY_LOW_UTILIZATION * NVML_PERF_POLICY_RELIABILITY -> NVML_FI_DEV_PERF_POLICY_RELIABILITY * NVML_PERF_POLICY_TOTAL_APP_CLOCKS -> DEPRECATED, Do not use * NVML_PERF_POLICY_TOTAL_BASE_CLOCKS -> NVML_FI_DEV_PERF_POLICY_TOTAL_BASE_CLOCKS */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetViolationStatus(nvmlDevice_t device, nvmlPerfPolicyType_t perfPolicyType, nvmlViolationTime_t *violTime); /** * Gets the device's interrupt number * * @param device The identifier of the target device * @param irqNum The interrupt number associated with the specified device * * @return * - \ref NVML_SUCCESS if irq number is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a irqNum is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * */ nvmlReturn_t DECLDIR nvmlDeviceGetIrqNum(nvmlDevice_t device, unsigned int *irqNum); /** * Gets the device's core count * * @note On MIG-enabled GPUs, querying the device's core count is currently not supported using this API. * Please use \ref nvmlDeviceGetGpuInstanceProfileInfo to fetch the MIG device's core count. * * @param device The identifier of the target device * @param numCores The number of cores for the specified device * * @return * - \ref NVML_SUCCESS if GPU core count is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a numCores is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device or a mig device. * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * */ nvmlReturn_t DECLDIR nvmlDeviceGetNumGpuCores(nvmlDevice_t device, unsigned int *numCores); /** * Gets the devices power source * * @param device The identifier of the target device * @param powerSource The power source of the device * * @return * - \ref NVML_SUCCESS if the current power source was successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a powerSource is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * */ nvmlReturn_t DECLDIR nvmlDeviceGetPowerSource(nvmlDevice_t device, nvmlPowerSource_t *powerSource); /** * Gets the device's memory bus width * * @param device The identifier of the target device * @param busWidth The devices's memory bus width * * @return * - \ref NVML_SUCCESS if the memory bus width is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a busWidth is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * */ nvmlReturn_t DECLDIR nvmlDeviceGetMemoryBusWidth(nvmlDevice_t device, unsigned int *busWidth); /** * Gets the device's PCIE Max Link speed in MBPS * * @param device The identifier of the target device * @param maxSpeed The devices's PCIE Max Link speed in MBPS * * @return * - \ref NVML_SUCCESS if PCIe Max Link Speed is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a maxSpeed is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * */ nvmlReturn_t DECLDIR nvmlDeviceGetPcieLinkMaxSpeed(nvmlDevice_t device, unsigned int *maxSpeed); /** * Gets the device's PCIe Link speed in Mbps * * @param device The identifier of the target device * @param pcieSpeed The devices's PCIe Max Link speed in Mbps * * @return * - \ref NVML_SUCCESS if \a pcieSpeed has been retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pcieSpeed is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support PCIe speed getting * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPcieSpeed(nvmlDevice_t device, unsigned int *pcieSpeed); /** * Gets the device's Adaptive Clock status * * @param device The identifier of the target device * @param adaptiveClockStatus The current adaptive clocking status, either * NVML_ADAPTIVE_CLOCKING_INFO_STATUS_DISABLED * or NVML_ADAPTIVE_CLOCKING_INFO_STATUS_ENABLED * * @return * - \ref NVML_SUCCESS if the current adaptive clocking status is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a adaptiveClockStatus is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * */ nvmlReturn_t DECLDIR nvmlDeviceGetAdaptiveClockInfoStatus(nvmlDevice_t device, unsigned int *adaptiveClockStatus); /** * Get the type of the GPU Bus (PCIe, PCI, ...) * * @param device The identifier of the target device * @param type The PCI Bus type * * return * - \ref NVML_SUCCESS if the bus \a type is successfully retreived * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a type is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetBusType(nvmlDevice_t device, nvmlBusType_t *type); /** * @deprecated Will be deprecated in a future release. Use \ref nvmlDeviceGetGpuFabricInfoV instead * * Get fabric information associated with the device. * * For Hopper &tm; or newer fully supported devices. * * On Hopper + NVSwitch systems, GPU is registered with the NVIDIA Fabric Manager * Upon successful registration, the GPU is added to the NVLink fabric to enable * peer-to-peer communication. * This API reports the current state of the GPU in the NVLink fabric * along with other useful information. * * * @param device The identifier of the target device * @param gpuFabricInfo Information about GPU fabric state * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support gpu fabric */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetGpuFabricInfo(nvmlDevice_t device, nvmlGpuFabricInfo_t *gpuFabricInfo); /** * Versioned wrapper around \ref nvmlDeviceGetGpuFabricInfo that accepts a versioned * \ref nvmlGpuFabricInfo_v2_t or later output structure. * * @note The caller must set the \ref nvmlGpuFabricInfoV_t.version field to the * appropriate version prior to calling this function. For example: * \code * nvmlGpuFabricInfoV_t fabricInfo = * { .version = nvmlGpuFabricInfo_v2 }; * nvmlReturn_t result = nvmlDeviceGetGpuFabricInfoV(device,&fabricInfo); * \endcode * * For Hopper &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param gpuFabricInfo Information about GPU fabric state * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support gpu fabric */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuFabricInfoV(nvmlDevice_t device, nvmlGpuFabricInfoV_t *gpuFabricInfo); /** * Get Conf Computing System capabilities. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param capabilities System CC capabilities * * @return * - \ref NVML_SUCCESS if \a capabilities were successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a capabilities is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlSystemGetConfComputeCapabilities(nvmlConfComputeSystemCaps_t *capabilities); /** * Get Conf Computing System State. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param state System CC State * * @return * - \ref NVML_SUCCESS if \a state were successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a state is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlSystemGetConfComputeState(nvmlConfComputeSystemState_t *state); /** * Get Conf Computing Protected and Unprotected Memory Sizes. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param device Device handle * @param memInfo Protected/Unprotected Memory sizes * * @return * - \ref NVML_SUCCESS if \a memInfo were successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a memInfo or \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlDeviceGetConfComputeMemSizeInfo(nvmlDevice_t device, nvmlConfComputeMemSizeInfo_t *memInfo); /** * Get Conf Computing GPUs ready state. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param isAcceptingWork Returns GPU current work accepting state, * NVML_CC_ACCEPTING_CLIENT_REQUESTS_TRUE or * NVML_CC_ACCEPTING_CLIENT_REQUESTS_FALSE * * return * - \ref NVML_SUCCESS if \a current GPUs ready state were successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a isAcceptingWork is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlSystemGetConfComputeGpusReadyState(unsigned int *isAcceptingWork); /** * Get Conf Computing protected memory usage. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param device The identifier of the target device * @param memory Reference in which to return the memory information * * @return * - \ref NVML_SUCCESS if \a memory has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a memory is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetConfComputeProtectedMemoryUsage(nvmlDevice_t device, nvmlMemory_t *memory); /** * Get Conf Computing GPU certificate details. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param device The identifier of the target device * @param gpuCert Reference in which to return the gpu certificate information * * @return * - \ref NVML_SUCCESS if \a gpu certificate info has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a memory is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetConfComputeGpuCertificate(nvmlDevice_t device, nvmlConfComputeGpuCertificate_t *gpuCert); /** * Get Conf Computing GPU attestation report. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param device The identifier of the target device * @param gpuAtstReport Reference in which to return the gpu attestation report * * @return * - \ref NVML_SUCCESS if \a gpu attestation report has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a memory is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetConfComputeGpuAttestationReport(nvmlDevice_t device, nvmlConfComputeGpuAttestationReport_t *gpuAtstReport); /** * Get Conf Computing key rotation threshold detail. * * For Hopper &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param pKeyRotationThrInfo Reference in which to return the key rotation threshold data * * @return * - \ref NVML_SUCCESS if \a gpu key rotation threshold info has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a memory is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlSystemGetConfComputeKeyRotationThresholdInfo( nvmlConfComputeGetKeyRotationThresholdInfo_t *pKeyRotationThrInfo); /** * Set Conf Computing Unprotected Memory Size. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param device Device Handle * @param sizeKiB Unprotected Memory size to be set in KiB * * @return * - \ref NVML_SUCCESS if \a sizeKiB successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlDeviceSetConfComputeUnprotectedMemSize(nvmlDevice_t device, unsigned long long sizeKiB); /** * Set Conf Computing GPUs ready state. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param isAcceptingWork GPU accepting new work, NVML_CC_ACCEPTING_CLIENT_REQUESTS_TRUE or * NVML_CC_ACCEPTING_CLIENT_REQUESTS_FALSE * * return * - \ref NVML_SUCCESS if \a current GPUs ready state is successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a isAcceptingWork is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlSystemSetConfComputeGpusReadyState(unsigned int isAcceptingWork); /** * Set Conf Computing key rotation threshold. * * For Hopper &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * This function is to set the confidential compute key rotation threshold parameters. * \a pKeyRotationThrInfo->maxAttackerAdvantage should be in the range from * NVML_CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MIN to NVML_CC_KEY_ROTATION_THRESHOLD_ATTACKER_ADVANTAGE_MAX. * Default value is 60. * * @param pKeyRotationThrInfo Reference to the key rotation threshold data * * @return * - \ref NVML_SUCCESS if \a key rotation threashold max attacker advantage has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a memory is NULL * - \ref NVML_ERROR_INVALID_STATE if confidential compute GPU ready state is enabled * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlSystemSetConfComputeKeyRotationThresholdInfo( nvmlConfComputeSetKeyRotationThresholdInfo_t *pKeyRotationThrInfo); /** * Get Conf Computing System Settings. * * For Hopper &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param settings System CC settings * * @return * - \ref NVML_SUCCESS If the query is success * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a counters is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlSystemGetConfComputeSettings(nvmlSystemConfComputeSettings_t *settings); /** * Retrieve GSP firmware version. * * The caller passes in buffer via \a version and corresponding GSP firmware numbered version * is returned with the same parameter in string format. * * @param device Device handle * @param version The retrieved GSP firmware version * * @return * - \ref NVML_SUCCESS if GSP firmware version is sucessfully retrieved * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or GSP \a version pointer is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if GSP firmware is not enabled for GPU * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetGspFirmwareVersion(nvmlDevice_t device, char *version); /** * Retrieve GSP firmware mode. * * The caller passes in integer pointers. GSP firmware enablement and default mode information is returned with * corresponding parameters. The return value in \a isEnabled and \a defaultMode should be treated as boolean. * * @param device Device handle * @param isEnabled Pointer to specify if GSP firmware is enabled * @param defaultMode Pointer to specify if GSP firmware is supported by default on \a device * * @return * - \ref NVML_SUCCESS if GSP firmware mode is sucessfully retrieved * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or any of \a isEnabled or \a defaultMode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if GSP firmware is not enabled for GPU * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetGspFirmwareMode(nvmlDevice_t device, unsigned int *isEnabled, unsigned int *defaultMode); /** * Get SRAM ECC error status of this device. * * For Ampere &tm; or newer fully supported devices. * Requires root/admin permissions. * * See \ref nvmlEccSramErrorStatus_v1_t for more information on the struct. * * @param device The identifier of the target device * @param status Returns SRAM ECC error status * * @return * - \ref NVML_SUCCESS If \a limit has been set * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a counters is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a nvmlEccSramErrorStatus_t is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetSramEccErrorStatus(nvmlDevice_t device, nvmlEccSramErrorStatus_t *status); /** * Set new power limit of this device. * * For Kepler &tm; or newer fully supported devices. * Requires root/admin permissions. * * See \ref nvmlDeviceGetPowerManagementLimitConstraints to check the allowed ranges of values. * * See \ref nvmlPowerValue_v2_t for more information on the struct. * * \note Limit is not persistent across reboots or driver unloads. * Enable persistent mode to prevent driver from unloading when no application is using the device. * * This API replaces nvmlDeviceSetPowerManagementLimit. It can be used as a drop-in replacement for the older version. * * @param device The identifier of the target device * @param powerValue Power management limit in milliwatts to set * * @return * - \ref NVML_SUCCESS if \a limit has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a powerValue is NULL or contains invalid values * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see NVML_FI_DEV_POWER_AVERAGE * @see NVML_FI_DEV_POWER_INSTANT * @see NVML_FI_DEV_POWER_MIN_LIMIT * @see NVML_FI_DEV_POWER_MAX_LIMIT * @see NVML_FI_DEV_POWER_CURRENT_LIMIT */ nvmlReturn_t DECLDIR nvmlDeviceSetPowerManagementLimit_v2(nvmlDevice_t device, nvmlPowerValue_v2_t *powerValue); /** * @} // @defgroup nvmlDeviceQueries Device Queries */ /** @addtogroup nvmlAccountingStats * @{ */ /** * Queries the state of per process accounting mode. * * For Kepler &tm; or newer fully supported devices. * * See \ref nvmlDeviceGetAccountingStats for more details. * See \ref nvmlDeviceSetAccountingMode * * @param device The identifier of the target device * @param mode Reference in which to return the current accounting mode * * @return * - \ref NVML_SUCCESS if the mode has been successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a mode are NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetAccountingMode(nvmlDevice_t device, nvmlEnableState_t *mode); /** * Queries process's accounting stats. * * For Kepler &tm; or newer fully supported devices. * * Accounting stats capture GPU utilization and other statistics across the lifetime of a process. * Accounting stats can be queried during life time of the process and after its termination. * The time field in \ref nvmlAccountingStats_t is reported as 0 during the lifetime of the process and * updated to actual running time after its termination. * Accounting stats are kept in a circular buffer, newly created processes overwrite information about old * processes. * * See \ref nvmlAccountingStats_t for description of each returned metric. * List of processes that can be queried can be retrieved from \ref nvmlDeviceGetAccountingPids. * * @note Accounting Mode needs to be on. See \ref nvmlDeviceGetAccountingMode. * @note Only compute and graphics applications stats can be queried. Monitoring applications stats can't be * queried since they don't contribute to GPU utilization. * @note In case of pid collision stats of only the latest process (that terminated last) will be reported * * @warning On Kepler devices per process statistics are accurate only if there's one process running on a GPU. * * @param device The identifier of the target device * @param pid Process Id of the target process to query stats for * @param stats Reference in which to return the process's accounting stats * * @return * - \ref NVML_SUCCESS if stats have been successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a stats are NULL * - \ref NVML_ERROR_NOT_FOUND if process stats were not found * - \ref NVML_ERROR_NOT_SUPPORTED if \a device doesn't support this feature or accounting mode is disabled * or on vGPU host. * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetAccountingBufferSize */ nvmlReturn_t DECLDIR nvmlDeviceGetAccountingStats(nvmlDevice_t device, unsigned int pid, nvmlAccountingStats_t *stats); /** * Queries list of processes that can be queried for accounting stats. The list of processes returned * can be in running or terminated state. * * For Kepler &tm; or newer fully supported devices. * * To query the number of processes under Accounting Mode, call this function with *count = 0 and pids=NULL. * The return code will be NVML_ERROR_INSUFFICIENT_SIZE with an updated count value indicating the number of processes. * * For more details see \ref nvmlDeviceGetAccountingStats. * * @note In case of PID collision some processes might not be accessible before the circular buffer is full. * * @param device The identifier of the target device * @param count Reference in which to provide the \a pids array size, and * to return the number of elements ready to be queried * @param pids Reference in which to return list of process ids * * @return * - \ref NVML_SUCCESS if pids were successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a count is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if \a device doesn't support this feature or accounting mode is disabled * or on vGPU host. * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a count is too small (\a count is set to * expected value) * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetAccountingBufferSize */ nvmlReturn_t DECLDIR nvmlDeviceGetAccountingPids(nvmlDevice_t device, unsigned int *count, unsigned int *pids); /** * Returns the number of processes that the circular buffer with accounting pids can hold. * * For Kepler &tm; or newer fully supported devices. * * This is the maximum number of processes that accounting information will be stored for before information * about oldest processes will get overwritten by information about new processes. * * @param device The identifier of the target device * @param bufferSize Reference in which to provide the size (in number of elements) * of the circular buffer for accounting stats. * * @return * - \ref NVML_SUCCESS if buffer size was successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a bufferSize is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature or accounting mode is disabled * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetAccountingStats * @see nvmlDeviceGetAccountingPids */ nvmlReturn_t DECLDIR nvmlDeviceGetAccountingBufferSize(nvmlDevice_t device, unsigned int *bufferSize); /** @} */ /** @addtogroup nvmlDeviceQueries * @{ */ /** * Returns the list of retired pages by source, including pages that are pending retirement * The address information provided from this API is the hardware address of the page that was retired. Note * that this does not match the virtual address used in CUDA, but will match the address information in Xid 63 * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param cause Filter page addresses by cause of retirement * @param pageCount Reference in which to provide the \a addresses buffer size, and * to return the number of retired pages that match \a cause * Set to 0 to query the size without allocating an \a addresses buffer * @param addresses Buffer to write the page addresses into * * @return * - \ref NVML_SUCCESS if \a pageCount was populated and \a addresses was filled * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a pageCount indicates the buffer is not large enough to store all the * matching page addresses. \a pageCount is set to the needed size. * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a pageCount is NULL, \a cause is invalid, or * \a addresses is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetRetiredPages(nvmlDevice_t device, nvmlPageRetirementCause_t cause, unsigned int *pageCount, unsigned long long *addresses); /** * Returns the list of retired pages by source, including pages that are pending retirement * The address information provided from this API is the hardware address of the page that was retired. Note * that this does not match the virtual address used in CUDA, but will match the address information in Xid 63 * * \note nvmlDeviceGetRetiredPages_v2 adds an additional timestamps parameter to return the time of each page's * retirement. This is supported for Pascal and newer architecture. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param cause Filter page addresses by cause of retirement * @param pageCount Reference in which to provide the \a addresses buffer size, and * to return the number of retired pages that match \a cause * Set to 0 to query the size without allocating an \a addresses buffer * @param addresses Buffer to write the page addresses into * @param timestamps Buffer to write the timestamps of page retirement, additional for _v2 * * @return * - \ref NVML_SUCCESS if \a pageCount was populated and \a addresses was filled * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a pageCount indicates the buffer is not large enough to store all the * matching page addresses. \a pageCount is set to the needed size. * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a pageCount is NULL, \a cause is invalid, or * \a addresses is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetRetiredPages_v2(nvmlDevice_t device, nvmlPageRetirementCause_t cause, unsigned int *pageCount, unsigned long long *addresses, unsigned long long *timestamps); /** * Check if any pages are pending retirement and need a reboot to fully retire. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param isPending Reference in which to return the pending status * * @return * - \ref NVML_SUCCESS if \a isPending was populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a isPending is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetRetiredPagesPendingStatus(nvmlDevice_t device, nvmlEnableState_t *isPending); /** * Get number of remapped rows. The number of rows reported will be based on * the cause of the remapping. isPending indicates whether or not there are * pending remappings. A reset will be required to actually remap the row. * failureOccurred will be set if a row remapping ever failed in the past. A * pending remapping won't affect future work on the GPU since * error-containment and dynamic page blacklisting will take care of that. * * @note On MIG-enabled GPUs with active instances, querying the number of * remapped rows is not supported * * For Ampere &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param corrRows Reference for number of rows remapped due to correctable errors * @param uncRows Reference for number of rows remapped due to uncorrectable errors * @param isPending Reference for whether or not remappings are pending * @param failureOccurred Reference that is set when a remapping has failed in the past * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_INVALID_ARGUMENT If \a corrRows, \a uncRows, \a isPending or \a failureOccurred is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If MIG is enabled or if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN Unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetRemappedRows(nvmlDevice_t device, unsigned int *corrRows, unsigned int *uncRows, unsigned int *isPending, unsigned int *failureOccurred); /** * Get the row remapper histogram. Returns the remap availability for each bank * on the GPU. * * @param device Device handle * @param values Histogram values * * @return * - \ref NVML_SUCCESS On success * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetRowRemapperHistogram(nvmlDevice_t device, nvmlRowRemapperHistogramValues_t *values); /** * Get architecture for device * * @param device The identifier of the target device * @param arch Reference where architecture is returned, if call successful. * Set to NVML_DEVICE_ARCH_* upon success * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device or \a arch (output refererence) are invalid */ nvmlReturn_t DECLDIR nvmlDeviceGetArchitecture(nvmlDevice_t device, nvmlDeviceArchitecture_t *arch); /** * Retrieves the frequency monitor fault status for the device. * * For Ampere &tm; or newer fully supported devices. * Requires root user. * * See \ref nvmlClkMonStatus_t for details on decoding the status output. * * @param device The identifier of the target device * @param status Reference in which to return the clkmon fault status * * @return * - \ref NVML_SUCCESS if \a status has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a status is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetClkMonStatus() */ nvmlReturn_t DECLDIR nvmlDeviceGetClkMonStatus(nvmlDevice_t device, nvmlClkMonStatus_t *status); /** * Retrieves the current utilization and process ID * * For Maxwell &tm; or newer fully supported devices. * * Reads recent utilization of GPU SM (3D/Compute), framebuffer, video encoder, and video decoder for processes running. * Utilization values are returned as an array of utilization sample structures in the caller-supplied buffer pointed at * by \a utilization. One utilization sample structure is returned per process running, that had some non-zero utilization * during the last sample period. It includes the CPU timestamp at which the samples were recorded. Individual utilization values * are returned as "unsigned int" values. If no valid sample entries are found since the lastSeenTimeStamp, NVML_ERROR_NOT_FOUND * is returned. * * To read utilization values, first determine the size of buffer required to hold the samples by invoking the function with * \a utilization set to NULL. The caller should allocate a buffer of size * processSamplesCount * sizeof(nvmlProcessUtilizationSample_t). Invoke the function again with the allocated buffer passed * in \a utilization, and \a processSamplesCount set to the number of entries the buffer is sized for. * * On successful return, the function updates \a processSamplesCount with the number of process utilization sample * structures that were actually written. This may differ from a previously read value as instances are created or * destroyed. * * lastSeenTimeStamp represents the CPU timestamp in microseconds at which utilization samples were last read. Set it to 0 * to read utilization based on all the samples maintained by the driver's internal sample buffer. Set lastSeenTimeStamp * to a timeStamp retrieved from a previous query to read utilization since the previous query. * * @note On MIG-enabled GPUs, querying process utilization is not currently supported. * * @param device The identifier of the target device * @param utilization Pointer to caller-supplied buffer in which guest process utilization samples are returned * @param processSamplesCount Pointer to caller-supplied array size, and returns number of processes running * @param lastSeenTimeStamp Return only samples with timestamp greater than lastSeenTimeStamp. * @return * - \ref NVML_SUCCESS if \a utilization has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a utilization is NULL, or \a samplingPeriodUs is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_NOT_FOUND if sample entries are not found * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetProcessUtilization(nvmlDevice_t device, nvmlProcessUtilizationSample_t *utilization, unsigned int *processSamplesCount, unsigned long long lastSeenTimeStamp); /** * Retrieves the recent utilization and process ID for all running processes * * For Maxwell &tm; or newer fully supported devices. * * Reads recent utilization of GPU SM (3D/Compute), framebuffer, video encoder, and video decoder, jpeg decoder, OFA (Optical Flow Accelerator) * for all running processes. Utilization values are returned as an array of utilization sample structures in the caller-supplied buffer pointed at * by \a procesesUtilInfo->procUtilArray. One utilization sample structure is returned per process running, that had some non-zero utilization * during the last sample period. It includes the CPU timestamp at which the samples were recorded. Individual utilization values * are returned as "unsigned int" values. * * The caller should allocate a buffer of size processSamplesCount * sizeof(nvmlProcessUtilizationInfo_t). If the buffer is too small, the API will * return \a NVML_ERROR_INSUFFICIENT_SIZE, with the recommended minimal buffer size at \a procesesUtilInfo->processSamplesCount. The caller should * invoke the function again with the allocated buffer passed in \a procesesUtilInfo->procUtilArray, and \a procesesUtilInfo->processSamplesCount * set to the number no less than the recommended value by the previous API return. * * On successful return, the function updates \a procesesUtilInfo->processSamplesCount with the number of process utilization info structures * that were actually written. This may differ from a previously read value as instances are created or destroyed. * * \a procesesUtilInfo->lastSeenTimeStamp represents the CPU timestamp in microseconds at which utilization samples were last read. Set it to 0 * to read utilization based on all the samples maintained by the driver's internal sample buffer. Set \a procesesUtilInfo->lastSeenTimeStamp * to a timeStamp retrieved from a previous query to read utilization since the previous query. * * \a procesesUtilInfo->version is the version number of the structure nvmlProcessesUtilizationInfo_t, the caller should set the correct version * number to retrieve the specific version of processes utilization information. * * @note On MIG-enabled GPUs, querying process utilization is not currently supported. * * @param device The identifier of the target device * @param procesesUtilInfo Pointer to the caller-provided structure of nvmlProcessesUtilizationInfo_t. * @return * - \ref NVML_SUCCESS If \a procesesUtilInfo->procUtilArray has been populated * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid, or \a procesesUtilInfo is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature * - \ref NVML_ERROR_NOT_FOUND If sample entries are not found * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a procesesUtilInfo is invalid * - \ref NVML_ERROR_INSUFFICIENT_SIZE If \a procesesUtilInfo->procUtilArray is NULL, or the buffer size of procesesUtilInfo->procUtilArray is too small. * The caller should check the minimul array size from the returned procesesUtilInfo->processSamplesCount, and call * the function again with a buffer no smaller than procesesUtilInfo->processSamplesCount * sizeof(nvmlProcessUtilizationInfo_t) * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetProcessesUtilizationInfo(nvmlDevice_t device, nvmlProcessesUtilizationInfo_t *procesesUtilInfo); /** * Get platform information of this device. * * %BLACKWELL_OR_NEWER% * * See \ref nvmlPlatformInfo_v2_t for more information on the struct. * * @param device The identifier of the target device * @param platformInfo Pointer to the caller-provided structure of nvmlPlatformInfo_t. * * @return * - \ref NVML_SUCCESS If \a platformInfo has been retrieved * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a platformInfo is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature * - \ref NVML_ERROR_MEMORY if system memory is insufficient * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a nvmlPlatformInfo_t is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPlatformInfo(nvmlDevice_t device, nvmlPlatformInfo_t *platformInfo); /** * Retrieves the Per Device Identifier (PDI) associated with this device. * * For Pascal &tm; or newer fully supported devices. * * See \ref nvmlPdi_v1_t for more information on the struct. * * @param[in] device The identifier of the target device * @param[out] pdi Reference to the caller-provided structure to return the GPU PDI * * @return * - \ref NVML_SUCCESS if \a pdi has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a pdi is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version is invalid/unsupported * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPdi(nvmlDevice_t device, nvmlPdi_t *pdi); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlUnitCommands Unit Commands * This chapter describes NVML operations that change the state of the unit. For S-class products. * Each of these requires root/admin access. Non-admin users will see an NVML_ERROR_NO_PERMISSION * error code when invoking any of these methods. * @{ */ /***************************************************************************************************/ /** * Set the LED state for the unit. The LED can be either green (0) or amber (1). * * For S-class products. * Requires root/admin permissions. * * This operation takes effect immediately. * * * Current S-Class products don't provide unique LEDs for each unit. As such, both front * and back LEDs will be toggled in unison regardless of which unit is specified with this command. * * See \ref nvmlLedColor_t for available colors. * * @param unit The identifier of the target unit * @param color The target LED color * * @return * - \ref NVML_SUCCESS if the LED color has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a unit or \a color is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this is not an S-class product * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlUnitGetLedState() */ nvmlReturn_t DECLDIR nvmlUnitSetLedState(nvmlUnit_t unit, nvmlLedColor_t color); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlDeviceCommands Device Commands * This chapter describes NVML operations that change the state of the device. * Each of these requires root/admin access. Non-admin users will see an NVML_ERROR_NO_PERMISSION * error code when invoking any of these methods. * @{ */ /***************************************************************************************************/ /** * Set the persistence mode for the device. * * For all products. * For Linux only. * Requires root/admin permissions. * * The persistence mode determines whether the GPU driver software is torn down after the last client * exits. * * This operation takes effect immediately. It is not persistent across reboots. After each reboot the * persistence mode is reset to "Disabled". * * See \ref nvmlEnableState_t for available modes. * * After calling this API with mode set to NVML_FEATURE_DISABLED on a device that has its own NUMA * memory, the given device handle will no longer be valid, and to continue to interact with this * device, a new handle should be obtained from one of the nvmlDeviceGetHandleBy*() APIs. This * limitation is currently only applicable to devices that have a coherent NVLink connection to * system memory. * * @param device The identifier of the target device * @param mode The target persistence mode * * @return * - \ref NVML_SUCCESS if the persistence mode was set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a mode is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetPersistenceMode() */ nvmlReturn_t DECLDIR nvmlDeviceSetPersistenceMode(nvmlDevice_t device, nvmlEnableState_t mode); /** * Set the compute mode for the device. * * For all products. * Requires root/admin permissions. * * The compute mode determines whether a GPU can be used for compute operations and whether it can * be shared across contexts. * * This operation takes effect immediately. Under Linux it is not persistent across reboots and * always resets to "Default". Under windows it is persistent. * * Under windows compute mode may only be set to DEFAULT when running in WDDM * * @note On MIG-enabled GPUs, compute mode would be set to DEFAULT and changing it is not supported. * * See \ref nvmlComputeMode_t for details on available compute modes. * * @param device The identifier of the target device * @param mode The target compute mode * * @return * - \ref NVML_SUCCESS if the compute mode was set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a mode is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetComputeMode() */ nvmlReturn_t DECLDIR nvmlDeviceSetComputeMode(nvmlDevice_t device, nvmlComputeMode_t mode); /** * Set the ECC mode for the device. * * For Kepler &tm; or newer fully supported devices. * Only applicable to devices with ECC. * Requires \a NVML_INFOROM_ECC version 1.0 or higher. * Requires root/admin permissions. * * The ECC mode determines whether the GPU enables its ECC support. * * This operation takes effect after the next reboot. * * See \ref nvmlEnableState_t for details on available modes. * * @param device The identifier of the target device * @param ecc The target ECC mode * * @return * - \ref NVML_SUCCESS if the ECC mode was set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a ecc is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetEccMode() */ nvmlReturn_t DECLDIR nvmlDeviceSetEccMode(nvmlDevice_t device, nvmlEnableState_t ecc); /** * Clear the ECC error and other memory error counts for the device. * * For Kepler &tm; or newer fully supported devices. * Only applicable to devices with ECC. * Requires \a NVML_INFOROM_ECC version 2.0 or higher to clear aggregate location-based ECC counts. * Requires \a NVML_INFOROM_ECC version 1.0 or higher to clear all other ECC counts. * Requires root/admin permissions. * Requires ECC Mode to be enabled. * * Sets all of the specified ECC counters to 0, including both detailed and total counts. * * This operation takes effect immediately. * * See \ref nvmlMemoryErrorType_t for details on available counter types. * * @param device The identifier of the target device * @param counterType Flag that indicates which type of errors should be cleared. * * @return * - \ref NVML_SUCCESS if the error counts were cleared * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a counterType is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see * - nvmlDeviceGetDetailedEccErrors() * - nvmlDeviceGetTotalEccErrors() */ nvmlReturn_t DECLDIR nvmlDeviceClearEccErrorCounts(nvmlDevice_t device, nvmlEccCounterType_t counterType); /** * Set the driver model for the device. * * For Fermi &tm; or newer fully supported devices. * For windows only. * Requires root/admin permissions. * * On Windows platforms the device driver can run in either WDDM or WDM (TCC) mode. If a display is attached * to the device it must run in WDDM mode. * * It is possible to force the change to WDM (TCC) while the display is still attached with a force flag (nvmlFlagForce). * This should only be done if the host is subsequently powered down and the display is detached from the device * before the next reboot. * * This operation takes effect after the next reboot. * * Windows driver model may only be set to WDDM when running in DEFAULT compute mode. * * Change driver model to WDDM is not supported when GPU doesn't support graphics acceleration or * will not support it after reboot. See \ref nvmlDeviceSetGpuOperationMode. * * See \ref nvmlDriverModel_t for details on available driver models. * See \ref nvmlFlagDefault and \ref nvmlFlagForce * * @param device The identifier of the target device * @param driverModel The target driver model * @param flags Flags that change the default behavior * * @return * - \ref NVML_SUCCESS if the driver model has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a driverModel is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the platform is not windows or the device does not support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetDriverModel() */ nvmlReturn_t DECLDIR nvmlDeviceSetDriverModel(nvmlDevice_t device, nvmlDriverModel_t driverModel, unsigned int flags); typedef enum nvmlClockLimitId_enum { NVML_CLOCK_LIMIT_ID_RANGE_START = 0xffffff00, NVML_CLOCK_LIMIT_ID_TDP, NVML_CLOCK_LIMIT_ID_UNLIMITED } nvmlClockLimitId_t; /** * Set clocks that device will lock to. * * Sets the clocks that the device will be running at to the value in the range of minGpuClockMHz to maxGpuClockMHz. * * Can be used as a setting to request constant performance. * * This can be called with a pair of integer clock frequencies in MHz, or a pair of /ref nvmlClockLimitId_t values. * See the table below for valid combinations of these values. * * minGpuClock | maxGpuClock | Effect * ------------+-------------+-------------------------------------------------- * tdp | tdp | Lock clock to TDP * unlimited | tdp | Upper bound is TDP but clock may drift below this * tdp | unlimited | Lower bound is TDP but clock may boost above this * unlimited | unlimited | Unlocked (== nvmlDeviceResetGpuLockedClocks) * * If one arg takes one of these values, the other must be one of these values as * well. Mixed numeric and symbolic calls return NVML_ERROR_INVALID_ARGUMENT. * * Requires root/admin permissions. * * After system reboot or driver reload GPU clocks go back to their default value. * See \ref nvmlDeviceResetGpuLockedClocks. * * For Volta &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param minGpuClockMHz Requested minimum gpu clock in MHz * @param maxGpuClockMHz Requested maximum gpu clock in MHz * * @return * - \ref NVML_SUCCESS if new settings were successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a minGpuClockMHz and \a maxGpuClockMHz * is not a valid clock combination * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetGpuLockedClocks(nvmlDevice_t device, unsigned int minGpuClockMHz, unsigned int maxGpuClockMHz); /** * Resets the gpu clock to the default value * * This is the gpu clock that will be used after system reboot or driver reload. * Default values are idle clocks. * * @see nvmlDeviceSetGpuLockedClocks * * For Volta &tm; or newer fully supported devices. * * @param device The identifier of the target device * * @return * - \ref NVML_SUCCESS if new settings were successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceResetGpuLockedClocks(nvmlDevice_t device); /** * Set memory clocks that device will lock to. * * Sets the device's memory clocks to the value in the range of minMemClockMHz to maxMemClockMHz. * * Can be used as a setting to request constant performance. * * Requires root/admin permissions. * * After system reboot or driver reload memory clocks go back to their default value. * See \ref nvmlDeviceResetMemoryLockedClocks. * * For Ampere &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param minMemClockMHz Requested minimum memory clock in MHz * @param maxMemClockMHz Requested maximum memory clock in MHz * * @return * - \ref NVML_SUCCESS if new settings were successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a minGpuClockMHz and \a maxGpuClockMHz * is not a valid clock combination * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetMemoryLockedClocks(nvmlDevice_t device, unsigned int minMemClockMHz, unsigned int maxMemClockMHz); /** * Resets the memory clock to the default value * * This is the memory clock that will be used after system reboot or driver reload. * Default values are idle clocks. * * @see nvmlDeviceSetMemoryLockedClocks * * For Ampere &tm; or newer fully supported devices. * * @param device The identifier of the target device * * @return * - \ref NVML_SUCCESS if new settings were successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceResetMemoryLockedClocks(nvmlDevice_t device); /** * @deprecated Applications clocks are deprecated and will be removed in CUDA 14.0. * * Please use \ref nvmlDeviceSetMemoryLockedClocks for Memory Clocks and * \ref nvmlDeviceSetGpuLockedClocks for Graphics Clocks. */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceSetApplicationsClocks(nvmlDevice_t device, unsigned int memClockMHz, unsigned int graphicsClockMHz); /** * @deprecated Applications clocks are deprecated and will be removed in CUDA 14.0. * * Please use \ref nvmlDeviceResetMemoryLockedClocks for Memory Clocks and * \ref nvmlDeviceResetGpuLockedClocks for Graphics Clocks. */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceResetApplicationsClocks(nvmlDevice_t device); /** * Try to set the current state of Auto Boosted clocks on a device. * * For Kepler &tm; or newer fully supported devices. * * Auto Boosted clocks are enabled by default on some hardware, allowing the GPU to run at higher clock rates * to maximize performance as thermal limits allow. Auto Boosted clocks should be disabled if fixed clock * rates are desired. * * Non-root users may use this API by default but can be restricted by root from using this API by calling * \ref nvmlDeviceSetAPIRestriction with apiType=NVML_RESTRICTED_API_SET_AUTO_BOOSTED_CLOCKS. * Note: Persistence Mode is required to modify current Auto Boost settings, therefore, it must be enabled. * * On Pascal and newer hardware, Auto Boosted clocks are controlled through application clocks. * Use \ref nvmlDeviceSetApplicationsClocks and \ref nvmlDeviceResetApplicationsClocks to control Auto Boost * behavior. * * @param device The identifier of the target device * @param enabled What state to try to set Auto Boosted clocks of the target device to * * @return * - \ref NVML_SUCCESS If the Auto Boosted clocks were successfully set to the state specified by \a enabled * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support Auto Boosted clocks * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * */ nvmlReturn_t DECLDIR nvmlDeviceSetAutoBoostedClocksEnabled(nvmlDevice_t device, nvmlEnableState_t enabled); /** * Try to set the default state of Auto Boosted clocks on a device. This is the default state that Auto Boosted clocks will * return to when no compute running processes (e.g. CUDA application which have an active context) are running * * For Kepler &tm; or newer non-GeForce fully supported devices and Maxwell or newer GeForce devices. * Requires root/admin permissions. * * Auto Boosted clocks are enabled by default on some hardware, allowing the GPU to run at higher clock rates * to maximize performance as thermal limits allow. Auto Boosted clocks should be disabled if fixed clock * rates are desired. * * On Pascal and newer hardware, Auto Boosted clocks are controlled through application clocks. * Use \ref nvmlDeviceSetApplicationsClocks and \ref nvmlDeviceResetApplicationsClocks to control Auto Boost * behavior. * * @param device The identifier of the target device * @param enabled What state to try to set default Auto Boosted clocks of the target device to * @param flags Flags that change the default behavior. Currently Unused. * * @return * - \ref NVML_SUCCESS If the Auto Boosted clock's default state was successfully set to the state specified by \a enabled * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NO_PERMISSION If the calling user does not have permission to change Auto Boosted clock's default state. * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support Auto Boosted clocks * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * */ nvmlReturn_t DECLDIR nvmlDeviceSetDefaultAutoBoostedClocksEnabled(nvmlDevice_t device, nvmlEnableState_t enabled, unsigned int flags); /** * Sets the speed of the fan control policy to default. * * For all cuda-capable discrete products with fans * * @param device The identifier of the target device * @param fan The index of the fan, starting at zero * * return * NVML_SUCCESS if speed has been adjusted * NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * NVML_ERROR_INVALID_ARGUMENT if device is invalid * NVML_ERROR_NOT_SUPPORTED if the device does not support this * (doesn't have fans) * NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetDefaultFanSpeed_v2(nvmlDevice_t device, unsigned int fan); /** * Sets current fan control policy. * * For Maxwell &tm; or newer fully supported devices. * * Requires privileged user. * * For all cuda-capable discrete products with fans * * device The identifier of the target \a device * policy The fan control \a policy to set * * return * NVML_SUCCESS if \a policy has been set * NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a policy is null or the \a fan given doesn't reference * a fan that exists. * NVML_ERROR_NOT_SUPPORTED if the \a device is older than Maxwell * NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetFanControlPolicy(nvmlDevice_t device, unsigned int fan, nvmlFanControlPolicy_t policy); /** * Sets the temperature threshold for the GPU with the specified threshold type in degrees C. * * For Maxwell &tm; or newer fully supported devices. * * See \ref nvmlTemperatureThresholds_t for details on available temperature thresholds. * * @param device The identifier of the target device * @param thresholdType The type of threshold value to be set * @param temp Reference which hold the value to be set * @return * - \ref NVML_SUCCESS if \a temp has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a thresholdType is invalid or \a temp is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not have a temperature sensor or is unsupported * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetTemperatureThreshold(nvmlDevice_t device, nvmlTemperatureThresholds_t thresholdType, int *temp); /** * Set new power limit of this device. * * For Kepler &tm; or newer fully supported devices. * Requires root/admin permissions. * * See \ref nvmlDeviceGetPowerManagementLimitConstraints to check the allowed ranges of values. * * \note Limit is not persistent across reboots or driver unloads. * Enable persistent mode to prevent driver from unloading when no application is using the device. * * @param device The identifier of the target device * @param limit Power management limit in milliwatts to set * * @return * - \ref NVML_SUCCESS if \a limit has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a defaultLimit is out of range * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceGetPowerManagementLimitConstraints * @see nvmlDeviceGetPowerManagementDefaultLimit */ nvmlReturn_t DECLDIR nvmlDeviceSetPowerManagementLimit(nvmlDevice_t device, unsigned int limit); /** * Sets new GOM. See \a nvmlGpuOperationMode_t for details. * * For GK110 M-class and X-class Tesla &tm; products from the Kepler family. * Modes \ref NVML_GOM_LOW_DP and \ref NVML_GOM_ALL_ON are supported on fully supported GeForce products. * Not supported on Quadro ® and Tesla &tm; C-class products. * Requires root/admin permissions. * * Changing GOMs requires a reboot. * The reboot requirement might be removed in the future. * * Compute only GOMs don't support graphics acceleration. Under windows switching to these GOMs when * pending driver model is WDDM is not supported. See \ref nvmlDeviceSetDriverModel. * * @param device The identifier of the target device * @param mode Target GOM * * @return * - \ref NVML_SUCCESS if \a mode has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a mode incorrect * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support GOM or specific mode * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlGpuOperationMode_t * @see nvmlDeviceGetGpuOperationMode */ nvmlReturn_t DECLDIR nvmlDeviceSetGpuOperationMode(nvmlDevice_t device, nvmlGpuOperationMode_t mode); /** * Changes the root/admin restructions on certain APIs. See \a nvmlRestrictedAPI_t for the list of supported APIs. * This method can be used by a root/admin user to give non-root/admin access to certain otherwise-restricted APIs. * The new setting lasts for the lifetime of the NVIDIA driver; it is not persistent. See \a nvmlDeviceGetAPIRestriction * to query the current restriction settings. * * For Kepler &tm; or newer fully supported devices. * Requires root/admin permissions. * * @param device The identifier of the target device * @param apiType Target API type for this operation * @param isRestricted The target restriction * * @return * - \ref NVML_SUCCESS if \a isRestricted has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a apiType incorrect * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support changing API restrictions or the device does not support * the feature that api restrictions are being set for (E.G. Enabling/disabling auto * boosted clocks is not supported by the device) * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlRestrictedAPI_t */ nvmlReturn_t DECLDIR nvmlDeviceSetAPIRestriction(nvmlDevice_t device, nvmlRestrictedAPI_t apiType, nvmlEnableState_t isRestricted); /** * Sets the speed of a specified fan. * * WARNING: This function changes the fan control policy to manual. It means that YOU have to monitor * the temperature and adjust the fan speed accordingly. * If you set the fan speed too low you can burn your GPU! * Use nvmlDeviceSetDefaultFanSpeed_v2 to restore default control policy. * * For all cuda-capable discrete products with fans that are Maxwell or Newer. * * device The identifier of the target device * fan The index of the fan, starting at zero * speed The target speed of the fan [0-100] in % of max speed * * return * NVML_SUCCESS if the fan speed has been set * NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * NVML_ERROR_INVALID_ARGUMENT if the device is not valid, or the speed is outside acceptable ranges, * or if the fan index doesn't reference an actual fan. * NVML_ERROR_NOT_SUPPORTED if the device is older than Maxwell. * NVML_ERROR_UNKNOWN if there was an unexpected error. */ nvmlReturn_t DECLDIR nvmlDeviceSetFanSpeed_v2(nvmlDevice_t device, unsigned int fan, unsigned int speed); /** * @deprecated Will be deprecated in a future release. Use \ref nvmlDeviceSetClockOffsets instead. It works * on Maxwell onwards GPU architectures. * * Set the GPCCLK VF offset value * @param[in] device The identifier of the target device * @param[in] offset The GPCCLK VF offset value to set * * @return * - \ref NVML_SUCCESS if \a offset has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceSetGpcClkVfOffset(nvmlDevice_t device, int offset); /** * @deprecated Will be deprecated in a future release. Use \ref nvmlDeviceSetClockOffsets instead. It works * on Maxwell onwards GPU architectures. * * Set the MemClk (Memory Clock) VF offset value. It requires elevated privileges. * @param[in] device The identifier of the target device * @param[in] offset The MemClk VF offset value to set * * @return * - \ref NVML_SUCCESS if \a offset has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceSetMemClkVfOffset(nvmlDevice_t device, int offset); /** * @} */ /** @addtogroup nvmlAccountingStats * @{ */ /** * Enables or disables per process accounting. * * For Kepler &tm; or newer fully supported devices. * Requires root/admin permissions. * * @note This setting is not persistent and will default to disabled after driver unloads. * Enable persistence mode to be sure the setting doesn't switch off to disabled. * * @note Enabling accounting mode has no negative impact on the GPU performance. * * @note Disabling accounting clears all accounting pids information. * * @note On MIG-enabled GPUs, accounting mode would be set to DISABLED and changing it is not supported. * * See \ref nvmlDeviceGetAccountingMode * See \ref nvmlDeviceGetAccountingStats * See \ref nvmlDeviceClearAccountingPids * * @param device The identifier of the target device * @param mode The target accounting mode * * @return * - \ref NVML_SUCCESS if the new mode has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a mode are invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetAccountingMode(nvmlDevice_t device, nvmlEnableState_t mode); /** * Clears accounting information about all processes that have already terminated. * * For Kepler &tm; or newer fully supported devices. * Requires root/admin permissions. * * See \ref nvmlDeviceGetAccountingMode * See \ref nvmlDeviceGetAccountingStats * See \ref nvmlDeviceSetAccountingMode * * @param device The identifier of the target device * * @return * - \ref NVML_SUCCESS if accounting information has been cleared * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device are invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceClearAccountingPids(nvmlDevice_t device); /** @} */ // @addtogroup nvmlAccountingStats /***************************************************************************************************/ /** @defgroup NvLink NvLink Methods * This chapter describes methods that NVML can perform on NVLINK enabled devices. * @{ */ /***************************************************************************************************/ #define NVML_NVLINK_BER_MANTISSA_SHIFT 8 #define NVML_NVLINK_BER_MANTISSA_WIDTH 0xf #define NVML_NVLINK_BER_EXP_SHIFT 0 #define NVML_NVLINK_BER_EXP_WIDTH 0xff /** * Nvlink Error counter BER can be obtained using the below macros * Ex - NVML_NVLINK_ERROR_COUNTER_BER_GET(var, BER_MANTISSA) */ #define NVML_NVLINK_ERROR_COUNTER_BER_GET(var, type) \ (((var) >> NVML_NVLINK_##type##_SHIFT) & \ (NVML_NVLINK_##type##_WIDTH)) \ /* * NVML_FI_DEV_NVLINK_GET_STATE state enums */ #define NVML_NVLINK_STATE_INACTIVE 0x0 #define NVML_NVLINK_STATE_ACTIVE 0x1 #define NVML_NVLINK_STATE_SLEEP 0x2 #define NVML_NVLINK_TOTAL_SUPPORTED_BW_MODES 23 typedef struct { unsigned int version; unsigned char bwModes[NVML_NVLINK_TOTAL_SUPPORTED_BW_MODES]; unsigned char totalBwModes; } nvmlNvlinkSupportedBwModes_v1_t; typedef nvmlNvlinkSupportedBwModes_v1_t nvmlNvlinkSupportedBwModes_t; #define nvmlNvlinkSupportedBwModes_v1 NVML_STRUCT_VERSION(NvlinkSupportedBwModes, 1) typedef struct { unsigned int version; unsigned int bIsBest; unsigned char bwMode; } nvmlNvlinkGetBwMode_v1_t; typedef nvmlNvlinkGetBwMode_v1_t nvmlNvlinkGetBwMode_t; #define nvmlNvlinkGetBwMode_v1 NVML_STRUCT_VERSION(NvlinkGetBwMode, 1) typedef struct { unsigned int version; unsigned int bSetBest; unsigned char bwMode; } nvmlNvlinkSetBwMode_v1_t; typedef nvmlNvlinkSetBwMode_v1_t nvmlNvlinkSetBwMode_t; #define nvmlNvlinkSetBwMode_v1 NVML_STRUCT_VERSION(NvlinkSetBwMode, 1) /** * Struct to represent per device NVLINK information v1 */ typedef struct { unsigned int version; //!< IN - the API version number unsigned int isNvleEnabled; //!< OUT - NVLINK encryption enablement } nvmlNvLinkInfo_v1_t; #define nvmlNvLinkInfo_v1 NVML_STRUCT_VERSION(NvLinkInfo, 1) #define NVML_NVLINK_FIRMWARE_UCODE_TYPE_MSE 0x1 #define NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR 0x2 #define NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_UPHY 0x3 #define NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_CLN 0x4 #define NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_DLN 0x5 #define NVML_NVLINK_FIRMWARE_VERSION_LENGTH 100 /** * Struct to represent NVLINK firmware Semantic versioning and ucode type */ typedef struct { unsigned char ucodeType; unsigned int major; unsigned int minor; unsigned int subMinor; } nvmlNvlinkFirmwareVersion_t; /** * Struct to represent NVLINK firmware information */ typedef struct { nvmlNvlinkFirmwareVersion_t firmwareVersion[NVML_NVLINK_FIRMWARE_VERSION_LENGTH]; //!< OUT - NVLINK firmware version unsigned int numValidEntries; //!< OUT - Number of valid firmware entries } nvmlNvlinkFirmwareInfo_t; /** * Struct to represent per device NVLINK information v2 */ typedef struct { unsigned int version; //!< IN - the API version number unsigned int isNvleEnabled; //!< OUT - NVLINK encryption enablement nvmlNvlinkFirmwareInfo_t firmwareInfo; //!< OUT - NVLINK Firmware info } nvmlNvLinkInfo_v2_t; typedef nvmlNvLinkInfo_v2_t nvmlNvLinkInfo_t; #define nvmlNvLinkInfo_v2 NVML_STRUCT_VERSION(NvLinkInfo, 2) /** * Retrieves the state of the device's NvLink for the link specified * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * @param isActive \a nvmlEnableState_t where NVML_FEATURE_ENABLED indicates that * the link is active and NVML_FEATURE_DISABLED indicates it * is inactive * * @return * - \ref NVML_SUCCESS if \a isActive has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a link is invalid or \a isActive is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkState(nvmlDevice_t device, unsigned int link, nvmlEnableState_t *isActive); /** * Retrieves the version of the device's NvLink for the link specified * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * @param version Requested NvLink version from nvmlNvlinkVersion_t * * @return * - \ref NVML_SUCCESS if \a version has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a link is invalid or \a version is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkVersion(nvmlDevice_t device, unsigned int link, unsigned int *version); /** * Retrieves the requested capability from the device's NvLink for the link specified * Please refer to the \a nvmlNvLinkCapability_t structure for the specific caps that can be queried * The return value should be treated as a boolean. * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * @param capability Specifies the \a nvmlNvLinkCapability_t to be queried * @param capResult A boolean for the queried capability indicating that feature is available * * @return * - \ref NVML_SUCCESS if \a capResult has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a link, or \a capability is invalid or \a capResult is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkCapability(nvmlDevice_t device, unsigned int link, nvmlNvLinkCapability_t capability, unsigned int *capResult); /** * Retrieves the PCI information for the remote node on a NvLink link * Note: pciSubSystemId is not filled in this function and is indeterminate * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * @param pci \a nvmlPciInfo_t of the remote node for the specified link * * @return * - \ref NVML_SUCCESS if \a pci has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a link is invalid or \a pci is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkRemotePciInfo_v2(nvmlDevice_t device, unsigned int link, nvmlPciInfo_t *pci); /** * Retrieves the specified error counter value * Please refer to \a nvmlNvLinkErrorCounter_t for error counters that are available * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * @param counter Specifies the NvLink counter to be queried * @param counterValue Returned counter value * * @return * - \ref NVML_SUCCESS if \a counter has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a link, or \a counter is invalid or \a counterValue is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkErrorCounter(nvmlDevice_t device, unsigned int link, nvmlNvLinkErrorCounter_t counter, unsigned long long *counterValue); /** * Resets all error counters to zero * Please refer to \a nvmlNvLinkErrorCounter_t for the list of error counters that are reset * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * * @return * - \ref NVML_SUCCESS if the reset is successful * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a link is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceResetNvLinkErrorCounters(nvmlDevice_t device, unsigned int link); /** * @deprecated Setting utilization counter control is no longer supported. * * Set the NVLINK utilization counter control information for the specified counter, 0 or 1. * Please refer to \a nvmlNvLinkUtilizationControl_t for the structure definition. Performs a reset * of the counters if the reset parameter is non-zero. * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param counter Specifies the counter that should be set (0 or 1). * @param link Specifies the NvLink link to be queried * @param control A reference to the \a nvmlNvLinkUtilizationControl_t to set * @param reset Resets the counters on set if non-zero * * @return * - \ref NVML_SUCCESS if the control has been set successfully * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a counter, \a link, or \a control is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceSetNvLinkUtilizationControl(nvmlDevice_t device, unsigned int link, unsigned int counter, nvmlNvLinkUtilizationControl_t *control, unsigned int reset); /** * @deprecated Getting utilization counter control is no longer supported. * * Get the NVLINK utilization counter control information for the specified counter, 0 or 1. * Please refer to \a nvmlNvLinkUtilizationControl_t for the structure definition * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param counter Specifies the counter that should be set (0 or 1). * @param link Specifies the NvLink link to be queried * @param control A reference to the \a nvmlNvLinkUtilizationControl_t to place information * * @return * - \ref NVML_SUCCESS if the control has been set successfully * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a counter, \a link, or \a control is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkUtilizationControl(nvmlDevice_t device, unsigned int link, unsigned int counter, nvmlNvLinkUtilizationControl_t *control); /** * @deprecated Use \ref nvmlDeviceGetFieldValues with NVML_FI_DEV_NVLINK_THROUGHPUT_* as field values instead. * * Retrieve the NVLINK utilization counter based on the current control for a specified counter. * In general it is good practice to use \a nvmlDeviceSetNvLinkUtilizationControl * before reading the utilization counters as they have no default state * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * @param counter Specifies the counter that should be read (0 or 1). * @param rxcounter Receive counter return value * @param txcounter Transmit counter return value * * @return * - \ref NVML_SUCCESS if \a rxcounter and \a txcounter have been successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a counter, or \a link is invalid or \a rxcounter or \a txcounter are NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkUtilizationCounter(nvmlDevice_t device, unsigned int link, unsigned int counter, unsigned long long *rxcounter, unsigned long long *txcounter); /** * @deprecated Freezing NVLINK utilization counters is no longer supported. * * Freeze the NVLINK utilization counters * Both the receive and transmit counters are operated on by this function * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be queried * @param counter Specifies the counter that should be frozen (0 or 1). * @param freeze NVML_FEATURE_ENABLED = freeze the receive and transmit counters * NVML_FEATURE_DISABLED = unfreeze the receive and transmit counters * * @return * - \ref NVML_SUCCESS if counters were successfully frozen or unfrozen * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a link, \a counter, or \a freeze is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceFreezeNvLinkUtilizationCounter (nvmlDevice_t device, unsigned int link, unsigned int counter, nvmlEnableState_t freeze); /** * @deprecated Resetting NVLINK utilization counters is no longer supported. * * Reset the NVLINK utilization counters * Both the receive and transmit counters are operated on by this function * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param link Specifies the NvLink link to be reset * @param counter Specifies the counter that should be reset (0 or 1) * * @return * - \ref NVML_SUCCESS if counters were successfully reset * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a link, or \a counter is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlDeviceResetNvLinkUtilizationCounter (nvmlDevice_t device, unsigned int link, unsigned int counter); /** * Get the NVLink device type of the remote device connected over the given link. * * @param device The device handle of the target GPU * @param link The NVLink link index on the target GPU * @param pNvLinkDeviceType Pointer in which the output remote device type is returned * * @return * - \ref NVML_SUCCESS if \a pNvLinkDeviceType has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NOT_SUPPORTED if NVLink is not supported * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a link is invalid, or * \a pNvLinkDeviceType is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is * otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkRemoteDeviceType(nvmlDevice_t device, unsigned int link, nvmlIntNvLinkDeviceType_t *pNvLinkDeviceType); /** * Set NvLink Low Power Threshold for device. * * For Hopper &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param info Reference to \a nvmlNvLinkPowerThres_t struct * input parameters * * @return * - \ref NVML_SUCCESS if the \a Threshold is successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a Threshold is not within range * - \ref NVML_ERROR_NOT_READY if an internal driver setting prevents the threshold from being used * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * **/ nvmlReturn_t DECLDIR nvmlDeviceSetNvLinkDeviceLowPowerThreshold(nvmlDevice_t device, nvmlNvLinkPowerThres_t *info); /** * Set the global nvlink bandwith mode * * @param nvlinkBwMode nvlink bandwidth mode * @return * - \ref NVML_SUCCESS on success * - \ref NVML_ERROR_INVALID_ARGUMENT if an invalid argument is provided * - \ref NVML_ERROR_IN_USE if P2P object exists * - \ref NVML_ERROR_NOT_SUPPORTED if GPU is not Hopper or newer architecture. * - \ref NVML_ERROR_NO_PERMISSION if not root user */ nvmlReturn_t DECLDIR nvmlSystemSetNvlinkBwMode(unsigned int nvlinkBwMode); /** * Get the global nvlink bandwith mode * * @param nvlinkBwMode reference of nvlink bandwidth mode * @return * - \ref NVML_SUCCESS on success * - \ref NVML_ERROR_INVALID_ARGUMENT if an invalid pointer is provided * - \ref NVML_ERROR_NOT_SUPPORTED if GPU is not Hopper or newer architecture. * - \ref NVML_ERROR_NO_PERMISSION if not root user */ nvmlReturn_t DECLDIR nvmlSystemGetNvlinkBwMode(unsigned int *nvlinkBwMode); /** * Get the supported NvLink Reduced Bandwidth Modes of the device * * %BLACKWELL_OR_NEWER% * * @param device The identifier of the target device * @param supportedBwMode Reference to \a nvmlNvlinkSupportedBwModes_t * * @return * - \ref NVML_SUCCESS if the query was successful * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or supportedBwMode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version specified is not supported **/ nvmlReturn_t DECLDIR nvmlDeviceGetNvlinkSupportedBwModes(nvmlDevice_t device, nvmlNvlinkSupportedBwModes_t *supportedBwMode); /** * Get the NvLink Reduced Bandwidth Mode for the device * * %BLACKWELL_OR_NEWER% * * @param device The identifier of the target device * @param getBwMode Reference to \a nvmlNvlinkGetBwMode_t * * @return * - \ref NVML_SUCCESS if the query was successful * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or getBwMode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version specified is not supported **/ nvmlReturn_t DECLDIR nvmlDeviceGetNvlinkBwMode(nvmlDevice_t device, nvmlNvlinkGetBwMode_t *getBwMode); /** * Set the NvLink Reduced Bandwidth Mode for the device * * %BLACKWELL_OR_NEWER% * * @param device The identifier of the target device * @param setBwMode Reference to \a nvmlNvlinkSetBwMode_t * * @return * - \ref NVML_SUCCESS if the Bandwidth mode was successfully set * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or setBwMode is NULL * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change Bandwidth mode * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version specified is not supported **/ nvmlReturn_t DECLDIR nvmlDeviceSetNvlinkBwMode(nvmlDevice_t device, nvmlNvlinkSetBwMode_t *setBwMode); /** * Query NVLINK information associated with this device. * * @param[in] device The identifier of the target device * @param[out] info Reference to \a nvmlNvLinkInfo_t * * @return * - \ref NVML_SUCCESS if query is success * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a info is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version is invalid/unsupported * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkInfo(nvmlDevice_t device, nvmlNvLinkInfo_t *info); /** @} */ // @defgroup NvLink NvLink Methods /***************************************************************************************************/ /** @defgroup nvmlEvents Event Handling Methods * This chapter describes methods that NVML can perform against each device to register and wait for * some event to occur. * @{ */ /***************************************************************************************************/ /** * Create an empty set of events. * Event set should be freed by \ref nvmlEventSetFree * * For Fermi &tm; or newer fully supported devices. * @param set Reference in which to return the event handle * * @return * - \ref NVML_SUCCESS if the event has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a set is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlEventSetFree */ nvmlReturn_t DECLDIR nvmlEventSetCreate(nvmlEventSet_t *set); /** * Starts recording of events on a specified devices and add the events to specified \ref nvmlEventSet_t * * For Fermi &tm; or newer fully supported devices. * ECC events are available only on ECC-enabled devices (see \ref nvmlDeviceGetTotalEccErrors) * Power capping events are available only on Power Management enabled devices (see \ref nvmlDeviceGetPowerManagementMode) * * For Linux only. * * This call starts recording of events on specific device. * All events that occurred before this call are not recorded. * Checking if some event occurred can be done with \ref nvmlEventSetWait_v2 * * If function reports NVML_ERROR_UNKNOWN, event set is in undefined state and should be freed. * If function reports NVML_ERROR_NOT_SUPPORTED, event set can still be used. None of the requested eventTypes * are registered in that case. * * @param device The identifier of the target device * @param eventTypes Bitmask of \ref nvmlEventType to record * @param set Set to which add new event types * * @return * - \ref NVML_SUCCESS if the event has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a eventTypes is invalid or \a set is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the platform does not support this feature or some of requested event types * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlEventType * @see nvmlDeviceGetSupportedEventTypes * @see nvmlEventSetWait * @see nvmlEventSetFree */ nvmlReturn_t DECLDIR nvmlDeviceRegisterEvents(nvmlDevice_t device, unsigned long long eventTypes, nvmlEventSet_t set); /** * Returns information about events supported on device * * For Fermi &tm; or newer fully supported devices. * * Events are not supported on Windows. So this function returns an empty mask in \a eventTypes on Windows. * * @param device The identifier of the target device * @param eventTypes Reference in which to return bitmask of supported events * * @return * - \ref NVML_SUCCESS if the eventTypes has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a eventType is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlEventType * @see nvmlDeviceRegisterEvents */ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedEventTypes(nvmlDevice_t device, unsigned long long *eventTypes); /** * Waits on events and delivers events * * For Fermi &tm; or newer fully supported devices. * * If some events are ready to be delivered at the time of the call, function returns immediately. * If there are no events ready to be delivered, function sleeps till event arrives * but not longer than specified timeout. This function in certain conditions can return before * specified timeout passes (e.g. when interrupt arrives) * * On Windows, in case of Xid error, the function returns the most recent Xid error type seen by the system. * If there are multiple Xid errors generated before nvmlEventSetWait is invoked then the last seen Xid error * type is returned for all Xid error events. * * On Linux, every Xid error event would return the associated event data and other information if applicable. * * In MIG mode, if device handle is provided, the API reports all the events for the available instances, * only if the caller has appropriate privileges. In absence of required privileges, only the events which * affect all the instances (i.e. whole device) are reported. * * This API does not currently support per-instance event reporting using MIG device handles. * * @param set Reference to set of events to wait on * @param data Reference in which to return event data * @param timeoutms Maximum amount of wait time in milliseconds for registered event * * @return * - \ref NVML_SUCCESS if the data has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a data is NULL * - \ref NVML_ERROR_TIMEOUT if no event arrived in specified timeout or interrupt arrived * - \ref NVML_ERROR_GPU_IS_LOST if a GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlEventType * @see nvmlDeviceRegisterEvents */ nvmlReturn_t DECLDIR nvmlEventSetWait_v2(nvmlEventSet_t set, nvmlEventData_t * data, unsigned int timeoutms); /** * Releases events in the set * * For Fermi &tm; or newer fully supported devices. * * @param set Reference to events to be released * * @return * - \ref NVML_SUCCESS if the event has been successfully released * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceRegisterEvents */ nvmlReturn_t DECLDIR nvmlEventSetFree(nvmlEventSet_t set); /** * Create an empty set of system events. * Event set should be freed by \ref nvmlSystemEventSetFree * * For Fermi &tm; or newer fully supported devices. * @param request Reference to nvmlSystemEventSetCreateRequest_t * * @return * - \ref NVML_SUCCESS if the event has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if request is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH for unsupported version * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlSystemEventSetFree */ nvmlReturn_t DECLDIR nvmlSystemEventSetCreate(nvmlSystemEventSetCreateRequest_t *request); /** * Releases system event set * * For Fermi &tm; or newer fully supported devices. * * @param request Reference to nvmlSystemEventSetFreeRequest_t * * @return * - \ref NVML_SUCCESS if the event has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if request is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH for unsupported version * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlDeviceRegisterEvents */ nvmlReturn_t DECLDIR nvmlSystemEventSetFree(nvmlSystemEventSetFreeRequest_t *request); /** * Starts recording of events on system and add the events to specified \ref nvmlSystemEventSet_t * * For Linux only. * * This call starts recording of events on specific device. * All events that occurred before this call are not recorded. * Checking if some event occurred can be done with \ref nvmlSystemEventSetWait * * If function reports NVML_ERROR_UNKNOWN, event set is in undefined state and should be freed. * If function reports NVML_ERROR_NOT_SUPPORTED, event set can still be used. None of the requested eventTypes * are registered in that case. * * @param request Reference to the struct nvmlSystemRegisterEventRequest_t * * @return * - \ref NVML_SUCCESS if the event has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if request is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH for unsupported version * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlSystemEventType * @see nvmlSystemEventSetWait * @see nvmlEventSetFree */ nvmlReturn_t DECLDIR nvmlSystemRegisterEvents(nvmlSystemRegisterEventRequest_t *request); /** * Waits on system events and delivers events * * For Fermi &tm; or newer fully supported devices. * * If some events are ready to be delivered at the time of the call, function returns immediately. * If there are no events ready to be delivered, function sleeps till event arrives * but not longer than specified timeout. This function in certain conditions can return before * specified timeout passes (e.g. when interrupt arrives) * * if the return request->numEvent equals to request->dataSize, there might be outstanding * event, it is recommended to call nvmlSystemEventSetWait again to query all the events. * * @param request Reference in which to nvmlSystemEventSetWaitRequest_t * * @return * - \ref NVML_SUCCESS if the event has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if request is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH for unsupported version * - \ref NVML_ERROR_TIMEOUT if no event notification after timeoutms * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlSystemEventType * @see nvmlSystemRegisterEvents */ nvmlReturn_t DECLDIR nvmlSystemEventSetWait(nvmlSystemEventSetWaitRequest_t *request); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlZPI Drain states * This chapter describes methods that NVML can perform against each device to control their drain state * and recognition by NVML and NVIDIA kernel driver. These methods can be used with out-of-band tools to * power on/off GPUs, enable robust reset scenarios, etc. * @{ */ /***************************************************************************************************/ /** * Modify the drain state of a GPU. This method forces a GPU to no longer accept new incoming requests. * Any new NVML process will no longer see this GPU. Persistence mode for this GPU must be turned off before * this call is made. * Must be called as administrator. * For Linux only. * * For Pascal &tm; or newer fully supported devices. * Some Kepler devices supported. * * @param pciInfo The PCI address of the GPU drain state to be modified * @param newState The drain state that should be entered, see \ref nvmlEnableState_t * * @return * - \ref NVML_SUCCESS if counters were successfully reset * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a nvmlIndex or \a newState is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_NO_PERMISSION if the calling process has insufficient permissions to perform operation * - \ref NVML_ERROR_IN_USE if the device has persistence mode turned on * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceModifyDrainState (nvmlPciInfo_t *pciInfo, nvmlEnableState_t newState); /** * Query the drain state of a GPU. This method is used to check if a GPU is in a currently draining * state. * For Linux only. * * For Pascal &tm; or newer fully supported devices. * Some Kepler devices supported. * * @param pciInfo The PCI address of the GPU drain state to be queried * @param currentState The current drain state for this GPU, see \ref nvmlEnableState_t * * @return * - \ref NVML_SUCCESS if counters were successfully reset * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a nvmlIndex or \a currentState is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceQueryDrainState (nvmlPciInfo_t *pciInfo, nvmlEnableState_t *currentState); /** * This method will remove the specified GPU from the view of both NVML and the NVIDIA kernel driver * as long as no other processes are attached. If other processes are attached, this call will return * NVML_ERROR_IN_USE and the GPU will be returned to its original "draining" state. Note: the * only situation where a process can still be attached after nvmlDeviceModifyDrainState() is called * to initiate the draining state is if that process was using, and is still using, a GPU before the * call was made. Also note, persistence mode counts as an attachment to the GPU thus it must be disabled * prior to this call. * * For long-running NVML processes please note that this will change the enumeration of current GPUs. * For example, if there are four GPUs present and GPU1 is removed, the new enumeration will be 0-2. * Also, device handles after the removed GPU will not be valid and must be re-established. * Must be run as administrator. * For Linux only. * * For Pascal &tm; or newer fully supported devices. * Some Kepler devices supported. * * @param pciInfo The PCI address of the GPU to be removed * @param gpuState Whether the GPU is to be removed, from the OS * see \ref nvmlDetachGpuState_t * @param linkState Requested upstream PCIe link state, see \ref nvmlPcieLinkState_t * * @return * - \ref NVML_SUCCESS if counters were successfully reset * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a nvmlIndex is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the device doesn't support this feature * - \ref NVML_ERROR_IN_USE if the device is still in use and cannot be removed */ nvmlReturn_t DECLDIR nvmlDeviceRemoveGpu_v2(nvmlPciInfo_t *pciInfo, nvmlDetachGpuState_t gpuState, nvmlPcieLinkState_t linkState); /** * Request the OS and the NVIDIA kernel driver to rediscover a portion of the PCI subsystem looking for GPUs that * were previously removed. The portion of the PCI tree can be narrowed by specifying a domain, bus, and device. * If all are zeroes then the entire PCI tree will be searched. Please note that for long-running NVML processes * the enumeration will change based on how many GPUs are discovered and where they are inserted in bus order. * * In addition, all newly discovered GPUs will be initialized and their ECC scrubbed which may take several seconds * per GPU. Also, all device handles are no longer guaranteed to be valid post discovery. * * Must be run as administrator. * For Linux only. * * For Pascal &tm; or newer fully supported devices. * Some Kepler devices supported. * * @param pciInfo The PCI tree to be searched. Only the domain, bus, and device * fields are used in this call. * * @return * - \ref NVML_SUCCESS if counters were successfully reset * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a pciInfo is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if the operating system does not support this feature * - \ref NVML_ERROR_OPERATING_SYSTEM if the operating system is denying this feature * - \ref NVML_ERROR_NO_PERMISSION if the calling process has insufficient permissions to perform operation * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceDiscoverGpus (nvmlPciInfo_t *pciInfo); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlFieldValueQueries Field Value Queries * This chapter describes NVML operations that are associated with retrieving Field Values from NVML * @{ */ /***************************************************************************************************/ /** * Request values for a list of fields for a device. This API allows multiple fields to be queried at once. * If any of the underlying fieldIds are populated by the same driver call, the results for those field IDs * will be populated from a single call rather than making a driver call for each fieldId. * * @param device The device handle of the GPU to request field values for * @param valuesCount Number of entries in values that should be retrieved * @param values Array of \a valuesCount structures to hold field values. * Each value's fieldId must be populated prior to this call * * @return * - \ref NVML_SUCCESS if any values in \a values were populated. Note that you must * check the nvmlReturn field of each value for each individual * status * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a values is NULL */ nvmlReturn_t DECLDIR nvmlDeviceGetFieldValues(nvmlDevice_t device, int valuesCount, nvmlFieldValue_t *values); /** * Clear values for a list of fields for a device. This API allows multiple fields to be cleared at once. * * @param device The device handle of the GPU to request field values for * @param valuesCount Number of entries in values that should be cleared * @param values Array of \a valuesCount structures to hold field values. * Each value's fieldId must be populated prior to this call * * @return * - \ref NVML_SUCCESS if any values in \a values were cleared. Note that you must * check the nvmlReturn field of each value for each individual * status * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a values is NULL */ nvmlReturn_t DECLDIR nvmlDeviceClearFieldValues(nvmlDevice_t device, int valuesCount, nvmlFieldValue_t *values); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlVirtualGpuQueries vGPU APIs * This chapter describes operations that are associated with NVIDIA vGPU Software products. * @{ */ /***************************************************************************************************/ /** * This method is used to get the virtualization mode corresponding to the GPU. * * For Kepler &tm; or newer fully supported devices. * * @param device Identifier of the target device * @param pVirtualMode Reference to virtualization mode. One of NVML_GPU_VIRTUALIZATION_? * * @return * - \ref NVML_SUCCESS if \a pVirtualMode is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pVirtualMode is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVirtualizationMode(nvmlDevice_t device, nvmlGpuVirtualizationMode_t *pVirtualMode); /** * Queries if SR-IOV host operation is supported on a vGPU supported device. * * Checks whether SR-IOV host capability is supported by the device and the * driver, and indicates device is in SR-IOV mode if both of these conditions * are true. * * @param device The identifier of the target device * @param pHostVgpuMode Reference in which to return the current vGPU mode * * @return * - \ref NVML_SUCCESS if device's vGPU mode has been successfully retrieved * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device handle is 0 or \a pVgpuMode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if \a device doesn't support this feature. * - \ref NVML_ERROR_UNKNOWN if any unexpected error occurred */ nvmlReturn_t DECLDIR nvmlDeviceGetHostVgpuMode(nvmlDevice_t device, nvmlHostVgpuMode_t *pHostVgpuMode); /** * This method is used to set the virtualization mode corresponding to the GPU. * * For Kepler &tm; or newer fully supported devices. * * @param device Identifier of the target device * @param virtualMode virtualization mode. One of NVML_GPU_VIRTUALIZATION_? * * @return * - \ref NVML_SUCCESS if \a virtualMode is set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a virtualMode is NULL * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_SUPPORTED if setting of virtualization mode is not supported. * - \ref NVML_ERROR_NO_PERMISSION if setting of virtualization mode is not allowed for this client. */ nvmlReturn_t DECLDIR nvmlDeviceSetVirtualizationMode(nvmlDevice_t device, nvmlGpuVirtualizationMode_t virtualMode); /** * Get the vGPU heterogeneous mode for the device. * * When in heterogeneous mode, a vGPU can concurrently host timesliced vGPUs with differing framebuffer sizes. * * On successful return, the function returns \a pHeterogeneousMode->mode with the current vGPU heterogeneous mode. * \a pHeterogeneousMode->version is the version number of the structure nvmlVgpuHeterogeneousMode_t, the caller should * set the correct version number to retrieve the vGPU heterogeneous mode. * \a pHeterogeneousMode->mode can either be \ref NVML_FEATURE_ENABLED or \ref NVML_FEATURE_DISABLED. * * @param device The identifier of the target device * @param pHeterogeneousMode Pointer to the caller-provided structure of nvmlVgpuHeterogeneousMode_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a pHeterogeneousMode is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If MIG is enabled or \a device doesn't support this feature * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pHeterogeneousMode is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuHeterogeneousMode(nvmlDevice_t device, nvmlVgpuHeterogeneousMode_t *pHeterogeneousMode); /** * Enable or disable vGPU heterogeneous mode for the device. * * When in heterogeneous mode, a vGPU can concurrently host timesliced vGPUs with differing framebuffer sizes. * * API would return an appropriate error code upon unsuccessful activation. For example, the heterogeneous mode * set will fail with error \ref NVML_ERROR_IN_USE if any vGPU instance is active on the device. The caller of this API * is expected to shutdown the vGPU VMs and retry setting the \a mode. * On KVM platform, setting heterogeneous mode is allowed, if no MDEV device is created on the device, else will fail * with same error \ref NVML_ERROR_IN_USE. * On successful return, the function updates the vGPU heterogeneous mode with the user provided \a pHeterogeneousMode->mode. * \a pHeterogeneousMode->version is the version number of the structure nvmlVgpuHeterogeneousMode_t, the caller should * set the correct version number to set the vGPU heterogeneous mode. * * @param device Identifier of the target device * @param pHeterogeneousMode Pointer to the caller-provided structure of nvmlVgpuHeterogeneousMode_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device or \a pHeterogeneousMode is NULL or \a pHeterogeneousMode->mode is invalid * - \ref NVML_ERROR_IN_USE If the \a device is in use * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_NOT_SUPPORTED If MIG is enabled or \a device doesn't support this feature * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pHeterogeneousMode is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetVgpuHeterogeneousMode(nvmlDevice_t device, const nvmlVgpuHeterogeneousMode_t *pHeterogeneousMode); /** * Query the placement ID of active vGPU instance. * * When in vGPU heterogeneous mode, this function returns a valid placement ID as \a pPlacement->placementId * else NVML_INVALID_VGPU_PLACEMENT_ID is returned. * \a pPlacement->version is the version number of the structure nvmlVgpuPlacementId_t, the caller should * set the correct version number to get placement id of the vGPU instance \a vgpuInstance. * * @param vgpuInstance Identifier of the target vGPU instance * @param pPlacement Pointer to vGPU placement ID structure \a nvmlVgpuPlacementId_t * * @return * - \ref NVML_SUCCESS If information is successfully retrieved * - \ref NVML_ERROR_NOT_FOUND If \a vgpuInstance does not match a valid active vGPU instance * - \ref NVML_ERROR_INVALID_ARGUMENT If \a vgpuInstance is invalid or \a pPlacement is NULL * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pPlacement is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetPlacementId(nvmlVgpuInstance_t vgpuInstance, nvmlVgpuPlacementId_t *pPlacement); /** * Query the supported vGPU placement ID of the vGPU type. * * The function returns an array of supported vGPU placement IDs for the specified vGPU type ID in the buffer provided * by the caller at \a pPlacementList->placementIds. The required memory for the placementIds array must be allocated * based on the maximum number of vGPU type instances, which is retrievable through \ref nvmlVgpuTypeGetMaxInstances(). * If the provided count by the caller is insufficient, the function will return NVML_ERROR_INSUFFICIENT_SIZE along with * the number of required entries in \a pPlacementList->count. The caller should then reallocate a buffer with the size * of pPlacementList->count * sizeof(pPlacementList->placementIds) and invoke the function again. * * To obtain a list of homogeneous placement IDs, the caller needs to set \a pPlacementList->mode to NVML_VGPU_PGPU_HOMOGENEOUS_MODE. * For heterogeneous placement IDs, \a pPlacementList->mode should be set to NVML_VGPU_PGPU_HETEROGENEOUS_MODE. * By default, a list of heterogeneous placement IDs is returned. * * @param device Identifier of the target device * @param vgpuTypeId Handle to vGPU type. The vGPU type ID * @param pPlacementList Pointer to the vGPU placement structure \a nvmlVgpuPlacementList_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device or \a vgpuTypeId is invalid or \a pPlacementList is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If \a device or \a vgpuTypeId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pPlacementList is invalid * - \ref NVML_ERROR_INSUFFICIENT_SIZE If the buffer is small, element count is returned in \a pPlacementList->count * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuTypeSupportedPlacements(nvmlDevice_t device, nvmlVgpuTypeId_t vgpuTypeId, nvmlVgpuPlacementList_t *pPlacementList); /** * Query the creatable vGPU placement ID of the vGPU type. * * An array of creatable vGPU placement IDs for the vGPU type ID indicated by \a vgpuTypeId is returned in the * caller-supplied buffer of \a pPlacementList->placementIds. Memory needed for the placementIds array should be * allocated based on maximum instances of a vGPU type which can be queried via \ref nvmlVgpuTypeGetMaxInstances(). * If the provided count by the caller is insufficient, the function will return NVML_ERROR_INSUFFICIENT_SIZE along with * the number of required entries in \a pPlacementList->count. The caller should then reallocate a buffer with the size * of pPlacementList->count * sizeof(pPlacementList->placementIds) and invoke the function again. * * The creatable vGPU placement IDs may differ over time, as there may be restrictions on what type of vGPU the * vGPU instance is running. * * @param device The identifier of the target device * @param vgpuTypeId Handle to vGPU type. The vGPU type ID * @param pPlacementList Pointer to the list of vGPU placement structure \a nvmlVgpuPlacementList_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device or \a vgpuTypeId is invalid or \a pPlacementList is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If MIG is enabled or \a device or \a vgpuTypeId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pPlacementList is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuTypeCreatablePlacements(nvmlDevice_t device, nvmlVgpuTypeId_t vgpuTypeId, nvmlVgpuPlacementList_t *pPlacementList); /** * Retrieve the static GSP heap size of the vGPU type in bytes * * @param vgpuTypeId Handle to vGPU type * @param gspHeapSize Reference to return the GSP heap size value * @return * - \ref NVML_SUCCESS Successful completion * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a vgpuTypeId is invalid, or \a gspHeapSize is NULL * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetGspHeapSize(nvmlVgpuTypeId_t vgpuTypeId, unsigned long long *gspHeapSize); /** * Retrieve the static framebuffer reservation of the vGPU type in bytes * * @param vgpuTypeId Handle to vGPU type * @param fbReservation Reference to return the framebuffer reservation * @return * - \ref NVML_SUCCESS Successful completion * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a vgpuTypeId is invalid, or \a fbReservation is NULL * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetFbReservation(nvmlVgpuTypeId_t vgpuTypeId, unsigned long long *fbReservation); /** * Retrieve the currently used runtime state size of the vGPU instance * * This size represents the maximum in-memory data size utilized by a vGPU instance during standard operation. * This measurement is exclusive of frame buffer (FB) data size assigned to the vGPU instance. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param pState Pointer to the vGPU runtime state's structure \a nvmlVgpuRuntimeState_t * * @return * - \ref NVML_SUCCESS If information is successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a vgpuInstance is invalid, or \a pState is NULL * - \ref NVML_ERROR_NOT_FOUND If \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pState is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetRuntimeStateSize(nvmlVgpuInstance_t vgpuInstance, nvmlVgpuRuntimeState_t *pState); /** * Set the desirable vGPU capability of a device * * Refer to the \a nvmlDeviceVgpuCapability_t structure for the specific capabilities that can be set. * See \ref nvmlEnableState_t for available state. * * @param device The identifier of the target device * @param capability Specifies the \a nvmlDeviceVgpuCapability_t to be set * @param state The target capability mode * * @return * - \ref NVML_SUCCESS Successful completion * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid, or \a capability is invalid, or \a state is invalid * - \ref NVML_ERROR_NOT_SUPPORTED The API is not supported in current state, or \a device not in vGPU mode * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetVgpuCapabilities(nvmlDevice_t device, nvmlDeviceVgpuCapability_t capability, nvmlEnableState_t state); /** * Retrieve the vGPU Software licensable features. * * Identifies whether the system supports vGPU Software Licensing. If it does, return the list of licensable feature(s) * and their current license status. * * @param device Identifier of the target device * @param pGridLicensableFeatures Pointer to structure in which vGPU software licensable features are returned * * @return * - \ref NVML_SUCCESS if licensable features are successfully retrieved * - \ref NVML_ERROR_INVALID_ARGUMENT if \a pGridLicensableFeatures is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetGridLicensableFeatures_v4(nvmlDevice_t device, nvmlGridLicensableFeatures_t *pGridLicensableFeatures); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlVgpu vGPU Management * @{ * * This chapter describes APIs supporting NVIDIA vGPU. */ /***************************************************************************************************/ /** * Retrieve the requested vGPU driver capability. * * Refer to the \a nvmlVgpuDriverCapability_t structure for the specific capabilities that can be queried. * The return value in \a capResult should be treated as a boolean, with a non-zero value indicating that the capability * is supported. * * For Maxwell &tm; or newer fully supported devices. * * @param capability Specifies the \a nvmlVgpuDriverCapability_t to be queried * @param capResult A boolean for the queried capability indicating that feature is supported * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a capability is invalid, or \a capResult is NULL * - \ref NVML_ERROR_NOT_SUPPORTED the API is not supported in current state or \a devices not in vGPU mode * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlGetVgpuDriverCapabilities(nvmlVgpuDriverCapability_t capability, unsigned int *capResult); /** * Retrieve the requested vGPU capability for GPU. * * Refer to the \a nvmlDeviceVgpuCapability_t structure for the specific capabilities that can be queried. * The return value in \a capResult reports a non-zero value indicating that the capability * is supported, and also reports the capability's data based on the queried capability. * * For Maxwell &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param capability Specifies the \a nvmlDeviceVgpuCapability_t to be queried * @param capResult Specifies that the queried capability is supported, and also returns capability's data * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a capability is invalid, or \a capResult is NULL * - \ref NVML_ERROR_NOT_SUPPORTED the API is not supported in current state or \a device not in vGPU mode * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuCapabilities(nvmlDevice_t device, nvmlDeviceVgpuCapability_t capability, unsigned int *capResult); /** * Retrieve the supported vGPU types on a physical GPU (device). * * An array of supported vGPU types for the physical GPU indicated by \a device is returned in the caller-supplied buffer * pointed at by \a vgpuTypeIds. The element count of nvmlVgpuTypeId_t array is passed in \a vgpuCount, and \a vgpuCount * is used to return the number of vGPU types written to the buffer. * * If the supplied buffer is not large enough to accommodate the vGPU type array, the function returns * NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlVgpuTypeId_t array required in \a vgpuCount. * To query the number of vGPU types supported for the GPU, call this function with *vgpuCount = 0. * The code will return NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if no vGPU types are supported. * * @param device The identifier of the target device * @param vgpuCount Pointer to caller-supplied array size, and returns number of vGPU types * @param vgpuTypeIds Pointer to caller-supplied array in which to return list of vGPU types * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_INSUFFICIENT_SIZE \a vgpuTypeIds buffer is too small, array element count is returned in \a vgpuCount * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuCount is NULL or \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if vGPU is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedVgpus(nvmlDevice_t device, unsigned int *vgpuCount, nvmlVgpuTypeId_t *vgpuTypeIds); /** * Retrieve the currently creatable vGPU types on a physical GPU (device). * * An array of creatable vGPU types for the physical GPU indicated by \a device is returned in the caller-supplied buffer * pointed at by \a vgpuTypeIds. The element count of nvmlVgpuTypeId_t array is passed in \a vgpuCount, and \a vgpuCount * is used to return the number of vGPU types written to the buffer. * * The creatable vGPU types for a device may differ over time, as there may be restrictions on what type of vGPU types * can concurrently run on a device. For example, if only one vGPU type is allowed at a time on a device, then the creatable * list will be restricted to whatever vGPU type is already running on the device. * * If the supplied buffer is not large enough to accommodate the vGPU type array, the function returns * NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlVgpuTypeId_t array required in \a vgpuCount. * To query the number of vGPU types that can be created for the GPU, call this function with *vgpuCount = 0. * The code will return NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if no vGPU types are creatable. * * @param device The identifier of the target device * @param vgpuCount Pointer to caller-supplied array size, and returns number of vGPU types * @param vgpuTypeIds Pointer to caller-supplied array in which to return list of vGPU types * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_INSUFFICIENT_SIZE \a vgpuTypeIds buffer is too small, array element count is returned in \a vgpuCount * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuCount is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if vGPU is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCreatableVgpus(nvmlDevice_t device, unsigned int *vgpuCount, nvmlVgpuTypeId_t *vgpuTypeIds); /** * Retrieve the class of a vGPU type. It will not exceed 64 characters in length (including the NUL terminator). * See \ref nvmlConstants::NVML_DEVICE_NAME_BUFFER_SIZE. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param vgpuTypeClass Pointer to string array to return class in * @param size Size of string * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a vgpuTypeClass is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a size is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetClass(nvmlVgpuTypeId_t vgpuTypeId, char *vgpuTypeClass, unsigned int *size); /** * Retrieve the vGPU type name. * * The name is an alphanumeric string that denotes a particular vGPU, e.g. GRID M60-2Q. It will not * exceed 64 characters in length (including the NUL terminator). See \ref * nvmlConstants::NVML_DEVICE_NAME_BUFFER_SIZE. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param vgpuTypeName Pointer to buffer to return name * @param size Size of buffer * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a name is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a size is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetName(nvmlVgpuTypeId_t vgpuTypeId, char *vgpuTypeName, unsigned int *size); /** * Retrieve the GPU Instance Profile ID for the given vGPU type ID. * The API will return a valid GPU Instance Profile ID for the MIG capable vGPU types, else INVALID_GPU_INSTANCE_PROFILE_ID is * returned. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param gpuInstanceProfileId GPU Instance Profile ID * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_NOT_SUPPORTED if \a device is not in vGPU Host virtualization mode * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a gpuInstanceProfileId is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetGpuInstanceProfileId(nvmlVgpuTypeId_t vgpuTypeId, unsigned int *gpuInstanceProfileId); /** * Retrieve the device ID of a vGPU type. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param deviceID Device ID and vendor ID of the device contained in single 32 bit value * @param subsystemID Subsystem ID and subsystem vendor ID of the device contained in single 32 bit value * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a deviceId or \a subsystemID are NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetDeviceID(nvmlVgpuTypeId_t vgpuTypeId, unsigned long long *deviceID, unsigned long long *subsystemID); /** * Retrieve the vGPU framebuffer size in bytes. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param fbSize Pointer to framebuffer size in bytes * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a fbSize is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetFramebufferSize(nvmlVgpuTypeId_t vgpuTypeId, unsigned long long *fbSize); /** * Retrieve count of vGPU's supported display heads. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param numDisplayHeads Pointer to number of display heads * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a numDisplayHeads is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetNumDisplayHeads(nvmlVgpuTypeId_t vgpuTypeId, unsigned int *numDisplayHeads); /** * Retrieve vGPU display head's maximum supported resolution. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param displayIndex Zero-based index of display head * @param xdim Pointer to maximum number of pixels in X dimension * @param ydim Pointer to maximum number of pixels in Y dimension * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a xdim or \a ydim are NULL, or \a displayIndex * is out of range. * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetResolution(nvmlVgpuTypeId_t vgpuTypeId, unsigned int displayIndex, unsigned int *xdim, unsigned int *ydim); /** * Retrieve license requirements for a vGPU type * * The license type and version required to run the specified vGPU type is returned as an alphanumeric string, in the form * ",", for example "GRID-Virtual-PC,2.0". If a vGPU is runnable with* more than one type of license, * the licenses are delimited by a semicolon, for example "GRID-Virtual-PC,2.0;GRID-Virtual-WS,2.0;GRID-Virtual-WS-Ext,2.0". * * The total length of the returned string will not exceed 128 characters, including the NUL terminator. * See \ref nvmlVgpuConstants::NVML_GRID_LICENSE_BUFFER_SIZE. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param vgpuTypeLicenseString Pointer to buffer to return license info * @param size Size of \a vgpuTypeLicenseString buffer * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a vgpuTypeLicenseString is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a size is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetLicense(nvmlVgpuTypeId_t vgpuTypeId, char *vgpuTypeLicenseString, unsigned int size); /** * Retrieve the static frame rate limit value of the vGPU type * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param frameRateLimit Reference to return the frame rate limit value * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_NOT_SUPPORTED if frame rate limiter is turned off for the vGPU type * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a frameRateLimit is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetFrameRateLimit(nvmlVgpuTypeId_t vgpuTypeId, unsigned int *frameRateLimit); /** * Retrieve the maximum number of vGPU instances creatable on a device for given vGPU type * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param vgpuTypeId Handle to vGPU type * @param vgpuInstanceCount Pointer to get the max number of vGPU instances * that can be created on a deicve for given vgpuTypeId * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid or is not supported on target device, * or \a vgpuInstanceCount is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetMaxInstances(nvmlDevice_t device, nvmlVgpuTypeId_t vgpuTypeId, unsigned int *vgpuInstanceCount); /** * Retrieve the maximum number of vGPU instances supported per VM for given vGPU type * * For Kepler &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param vgpuInstanceCountPerVm Pointer to get the max number of vGPU instances supported per VM for given \a vgpuTypeId * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a vgpuInstanceCountPerVm is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetMaxInstancesPerVm(nvmlVgpuTypeId_t vgpuTypeId, unsigned int *vgpuInstanceCountPerVm); /** * Retrieve the BAR1 info for given vGPU type. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param bar1Info Pointer to the vGPU type BAR1 information structure \a nvmlVgpuTypeBar1Info_t * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a bar1Info is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetBAR1Info(nvmlVgpuTypeId_t vgpuTypeId, nvmlVgpuTypeBar1Info_t *bar1Info); /** * Retrieve the active vGPU instances on a device. * * An array of active vGPU instances is returned in the caller-supplied buffer pointed at by \a vgpuInstances. The * array element count is passed in \a vgpuCount, and \a vgpuCount is used to return the number of vGPU instances * written to the buffer. * * If the supplied buffer is not large enough to accommodate the vGPU instance array, the function returns * NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlVgpuInstance_t array required in \a vgpuCount. * To query the number of active vGPU instances, call this function with *vgpuCount = 0. The code will return * NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if no vGPU Types are supported. * * For Kepler &tm; or newer fully supported devices. * * @param device The identifier of the target device * @param vgpuCount Pointer which passes in the array size as well as get * back the number of types * @param vgpuInstances Pointer to array in which to return list of vGPU instances * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, or \a vgpuCount is NULL * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a size is too small * - \ref NVML_ERROR_NOT_SUPPORTED if vGPU is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetActiveVgpus(nvmlDevice_t device, unsigned int *vgpuCount, nvmlVgpuInstance_t *vgpuInstances); /** * Retrieve the VM ID associated with a vGPU instance. * * The VM ID is returned as a string, not exceeding 80 characters in length (including the NUL terminator). * See \ref nvmlConstants::NVML_DEVICE_UUID_BUFFER_SIZE. * * The format of the VM ID varies by platform, and is indicated by the type identifier returned in \a vmIdType. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param vmId Pointer to caller-supplied buffer to hold VM ID * @param size Size of buffer in bytes * @param vmIdType Pointer to hold VM ID type * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vmId or \a vmIdType is NULL, or \a vgpuInstance is 0 * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a size is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetVmID(nvmlVgpuInstance_t vgpuInstance, char *vmId, unsigned int size, nvmlVgpuVmIdType_t *vmIdType); /** * Retrieve the UUID of a vGPU instance. * * The UUID is a globally unique identifier associated with the vGPU, and is returned as a 5-part hexadecimal string, * not exceeding 80 characters in length (including the NULL terminator). * See \ref nvmlConstants::NVML_DEVICE_UUID_BUFFER_SIZE. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param uuid Pointer to caller-supplied buffer to hold vGPU UUID * @param size Size of buffer in bytes * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a uuid is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a size is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetUUID(nvmlVgpuInstance_t vgpuInstance, char *uuid, unsigned int size); /** * Retrieve the NVIDIA driver version installed in the VM associated with a vGPU. * * The version is returned as an alphanumeric string in the caller-supplied buffer \a version. The length of the version * string will not exceed 80 characters in length (including the NUL terminator). * See \ref nvmlConstants::NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE. * * nvmlVgpuInstanceGetVmDriverVersion() may be called at any time for a vGPU instance. The guest VM driver version is * returned as "Not Available" if no NVIDIA driver is installed in the VM, or the VM has not yet booted to the point where the * NVIDIA driver is loaded and initialized. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param version Caller-supplied buffer to return driver version string * @param length Size of \a version buffer * * @return * - \ref NVML_SUCCESS if \a version has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0 * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetVmDriverVersion(nvmlVgpuInstance_t vgpuInstance, char* version, unsigned int length); /** * Retrieve the framebuffer usage in bytes. * * Framebuffer usage is the amont of vGPU framebuffer memory that is currently in use by the VM. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance The identifier of the target instance * @param fbUsage Pointer to framebuffer usage in bytes * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a fbUsage is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetFbUsage(nvmlVgpuInstance_t vgpuInstance, unsigned long long *fbUsage); /** * @deprecated Use \ref nvmlVgpuInstanceGetLicenseInfo_v2. * * Retrieve the current licensing state of the vGPU instance. * * If the vGPU is currently licensed, \a licensed is set to 1, otherwise it is set to 0. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param licensed Reference to return the licensing status * * @return * - \ref NVML_SUCCESS if \a licensed has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a licensed is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ DEPRECATED(13.0) nvmlReturn_t DECLDIR nvmlVgpuInstanceGetLicenseStatus(nvmlVgpuInstance_t vgpuInstance, unsigned int *licensed); /** * Retrieve the vGPU type of a vGPU instance. * * Returns the vGPU type ID of vgpu assigned to the vGPU instance. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param vgpuTypeId Reference to return the vgpuTypeId * * @return * - \ref NVML_SUCCESS if \a vgpuTypeId has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a vgpuTypeId is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetType(nvmlVgpuInstance_t vgpuInstance, nvmlVgpuTypeId_t *vgpuTypeId); /** * Retrieve the frame rate limit set for the vGPU instance. * * Returns the value of the frame rate limit set for the vGPU instance * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param frameRateLimit Reference to return the frame rate limit * * @return * - \ref NVML_SUCCESS if \a frameRateLimit has been set * - \ref NVML_ERROR_NOT_SUPPORTED if frame rate limiter is turned off for the vGPU type * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a frameRateLimit is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetFrameRateLimit(nvmlVgpuInstance_t vgpuInstance, unsigned int *frameRateLimit); /** * Retrieve the current ECC mode of vGPU instance. * * @param vgpuInstance The identifier of the target vGPU instance * @param eccMode Reference in which to return the current ECC mode * * @return * - \ref NVML_SUCCESS if the vgpuInstance's ECC mode has been successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a mode is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_NOT_SUPPORTED if the vGPU doesn't support this feature * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetEccMode(nvmlVgpuInstance_t vgpuInstance, nvmlEnableState_t *eccMode); /** * Retrieve the encoder capacity of a vGPU instance, as a percentage of maximum encoder capacity with valid values in the range 0-100. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param encoderCapacity Reference to an unsigned int for the encoder capacity * * @return * - \ref NVML_SUCCESS if \a encoderCapacity has been retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a encoderQueryType is invalid * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetEncoderCapacity(nvmlVgpuInstance_t vgpuInstance, unsigned int *encoderCapacity); /** * Set the encoder capacity of a vGPU instance, as a percentage of maximum encoder capacity with valid values in the range 0-100. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param encoderCapacity Unsigned int for the encoder capacity value * * @return * - \ref NVML_SUCCESS if \a encoderCapacity has been set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a encoderCapacity is out of range of 0-100. * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceSetEncoderCapacity(nvmlVgpuInstance_t vgpuInstance, unsigned int encoderCapacity); /** * Retrieves the current encoder statistics of a vGPU Instance * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param sessionCount Reference to an unsigned int for count of active encoder sessions * @param averageFps Reference to an unsigned int for trailing average FPS of all active sessions * @param averageLatency Reference to an unsigned int for encode latency in microseconds * * @return * - \ref NVML_SUCCESS if \a sessionCount, \a averageFps and \a averageLatency is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a sessionCount , or \a averageFps or \a averageLatency is NULL * or \a vgpuInstance is 0. * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetEncoderStats(nvmlVgpuInstance_t vgpuInstance, unsigned int *sessionCount, unsigned int *averageFps, unsigned int *averageLatency); /** * Retrieves information about all active encoder sessions on a vGPU Instance. * * An array of active encoder sessions is returned in the caller-supplied buffer pointed at by \a sessionInfo. The * array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions * written to the buffer. * * If the supplied buffer is not large enough to accommodate the active session array, the function returns * NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlEncoderSessionInfo_t array required in \a sessionCount. * To query the number of active encoder sessions, call this function with *sessionCount = 0. The code will return * NVML_SUCCESS with number of active encoder sessions updated in *sessionCount. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param sessionCount Reference to caller supplied array size, and returns * the number of sessions. * @param sessionInfo Reference to caller supplied array in which the list * of session information us returned. * * @return * - \ref NVML_SUCCESS if \a sessionInfo is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a sessionCount is too small, array element count is returned in \a sessionCount * - \ref NVML_ERROR_INVALID_ARGUMENT if \a sessionCount is NULL, or \a vgpuInstance is 0. * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetEncoderSessions(nvmlVgpuInstance_t vgpuInstance, unsigned int *sessionCount, nvmlEncoderSessionInfo_t *sessionInfo); /** * Retrieves the active frame buffer capture sessions statistics of a vGPU Instance * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param fbcStats Reference to nvmlFBCStats_t structure containing NvFBC stats * * @return * - \ref NVML_SUCCESS if \a fbcStats is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a fbcStats is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetFBCStats(nvmlVgpuInstance_t vgpuInstance, nvmlFBCStats_t *fbcStats); /** * Retrieves information about active frame buffer capture sessions on a vGPU Instance. * * An array of active FBC sessions is returned in the caller-supplied buffer pointed at by \a sessionInfo. The * array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions * written to the buffer. * * If the supplied buffer is not large enough to accommodate the active session array, the function returns * NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlFBCSessionInfo_t array required in \a sessionCount. * To query the number of active FBC sessions, call this function with *sessionCount = 0. The code will return * NVML_SUCCESS with number of active FBC sessions updated in *sessionCount. * * For Maxwell &tm; or newer fully supported devices. * * @note hResolution, vResolution, averageFPS and averageLatency data for a FBC session returned in \a sessionInfo may * be zero if there are no new frames captured since the session started. * * @param vgpuInstance Identifier of the target vGPU instance * @param sessionCount Reference to caller supplied array size, and returns the number of sessions. * @param sessionInfo Reference in which to return the session information * * @return * - \ref NVML_SUCCESS if \a sessionInfo is fetched * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a sessionCount is NULL. * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a sessionCount is too small, array element count is returned in \a sessionCount * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetFBCSessions(nvmlVgpuInstance_t vgpuInstance, unsigned int *sessionCount, nvmlFBCSessionInfo_t *sessionInfo); /** * Retrieve the GPU Instance ID for the given vGPU Instance. * The API will return a valid GPU Instance ID for MIG backed vGPU Instance, else INVALID_GPU_INSTANCE_ID is returned. * * For Kepler &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param gpuInstanceId GPU Instance ID * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a gpuInstanceId is NULL. * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetGpuInstanceId(nvmlVgpuInstance_t vgpuInstance, unsigned int *gpuInstanceId); /** * Retrieves the PCI Id of the given vGPU Instance i.e. the PCI Id of the GPU as seen inside the VM. * * The vGPU PCI id is returned as "00000000:00:00.0" if NVIDIA driver is not installed on the vGPU instance. * * @param vgpuInstance Identifier of the target vGPU instance * @param vgpuPciId Caller-supplied buffer to return vGPU PCI Id string * @param length Size of the vgpuPciId buffer * * @return * - \ref NVML_SUCCESS if vGPU PCI Id is sucessfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a vgpuPciId is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_DRIVER_NOT_LOADED if NVIDIA driver is not running on the vGPU instance * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a length is too small, \a length is set to required length * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetGpuPciId(nvmlVgpuInstance_t vgpuInstance, char *vgpuPciId, unsigned int *length); /** * Retrieve the requested capability for a given vGPU type. Refer to the \a nvmlVgpuCapability_t structure * for the specific capabilities that can be queried. The return value in \a capResult should be treated as * a boolean, with a non-zero value indicating that the capability is supported. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuTypeId Handle to vGPU type * @param capability Specifies the \a nvmlVgpuCapability_t to be queried * @param capResult A boolean for the queried capability indicating that feature is supported * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuTypeId is invalid, or \a capability is invalid, or \a capResult is NULL * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetCapabilities(nvmlVgpuTypeId_t vgpuTypeId, nvmlVgpuCapability_t capability, unsigned int *capResult); /** * Retrieve the MDEV UUID of a vGPU instance. * * The MDEV UUID is a globally unique identifier of the mdev device assigned to the VM, and is returned as a 5-part hexadecimal string, * not exceeding 80 characters in length (including the NULL terminator). * MDEV UUID is displayed only on KVM platform. * See \ref nvmlConstants::NVML_DEVICE_UUID_BUFFER_SIZE. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param mdevUuid Pointer to caller-supplied buffer to hold MDEV UUID * @param size Size of buffer in bytes * * @return * - \ref NVML_SUCCESS successful completion * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_NOT_SUPPORTED on any hypervisor other than KVM * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a mdevUuid is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a size is too small * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetMdevUUID(nvmlVgpuInstance_t vgpuInstance, char *mdevUuid, unsigned int size); /** * Query the currently creatable vGPU types on a specific GPU Instance. * * The function returns an array of vGPU types that can be created for a specified GPU instance. This array is stored * in a caller-supplied buffer, with the buffer's element count passed through \a pVgpus->vgpuCount. The number of * vGPU types written to the buffer is indicated by \a pVgpus->vgpuCount. If the buffer is too small to hold the vGPU * type array, the function returns NVML_ERROR_INSUFFICIENT_SIZE and updates \a pVgpus->vgpuCount with the required * element count. * * To determine the creatable vGPUs for a GPU Instance, invoke this function with \a pVgpus->vgpuCount set to 0 and * \a pVgpus->vgpuTypeIds as NULL. This will result in NVML_ERROR_INSUFFICIENT_SIZE being returned, along with the * count value in \a pVgpus->vgpuCount. * * The creatable vGPU types may differ over time, as there may be restrictions on what type of vGPUs can concurrently * run on the device. * * @param gpuInstance The GPU instance handle * @param pVgpus Pointer to the caller-provided structure of nvmlVgpuTypeIdInfo_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, or \a pVgpus is NULL * or GPU Instance Id is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU * - \ref NVML_ERROR_INSUFFICIENT_SIZE If \a pVgpus->vgpuTypeIds buffer is small * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pVgpus is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetCreatableVgpus(nvmlGpuInstance_t gpuInstance, nvmlVgpuTypeIdInfo_t *pVgpus); /** * Retrieve the maximum number of vGPU instances per GPU instance for given vGPU type * * @param pMaxInstance Pointer to the caller-provided structure of nvmlVgpuTypeMaxInstance_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a pMaxInstance is NULL or \a pMaxInstance->vgpuTypeId is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU or non-MIG vGPU type * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pMaxInstance is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuTypeGetMaxInstancesPerGpuInstance(nvmlVgpuTypeMaxInstance_t *pMaxInstance); /** * Retrieve the active vGPU instances within a GPU instance. * * An array of active vGPU instances is returned in the caller-supplied buffer pointed * at by \a pVgpuInstanceInfo->vgpuInstances. The array element count is passed in * \a pVgpuInstanceInfo->vgpuCount, and \a pVgpuInstanceInfo->vgpuCount is used to return * the number of vGPU instances written to the buffer. * * If the supplied buffer is not large enough to accommodate the vGPU instance array, * the function returns NVML_ERROR_INSUFFICIENT_SIZE, with the element count of * nvmlVgpuInstance_t array required in \a pVgpuInstanceInfo->vgpuCount. To query the * number of active vGPU instances, call this function with pVgpuInstanceInfo->vgpuCount = 0 * and pVgpuInstanceInfo->vgpuTypeIds = NULL. The code will return NVML_ERROR_INSUFFICIENT_SIZE, * or NVML_SUCCESS if no vGPU Types are active. * * @param gpuInstance The GPU instance handle * @param pVgpuInstanceInfo Pointer to the vGPU instance information structure \a nvmlActiveVgpuInstanceInfo_t * * @return * - \ref NVML_SUCCESS Successful completion * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, or \a pVgpuInstanceInfo is NULL * or GPU Instance Id is invalid * - \ref NVML_ERROR_INSUFFICIENT_SIZE \a pVgpuInstanceInfo->vgpuTypeIds buffer is too small, * array element count is returned in \a pVgpuInstanceInfo->vgpuCount * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pVgpuInstanceInfo is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetActiveVgpus(nvmlGpuInstance_t gpuInstance, nvmlActiveVgpuInstanceInfo_t *pVgpuInstanceInfo); /** * Set vGPU scheduler state for the given GPU instance * * %GB20X_OR_NEWER% * * Scheduler state and params will be allowed to set only when no VM is running within the GPU instance. * In \a nvmlVgpuSchedulerState_t, IFF enableARRMode is enabled then provide the avgFactor and frequency * as input. If enableARRMode is disabled then provide timeslice as input. * * The scheduler state change won't persist across module load/unload and GPU Instance creation/deletion. * * @param gpuInstance The GPU instance handle * @param pScheduler Pointer to the caller-provided structure of nvmlVgpuSchedulerState_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, or \a pScheduler is NULL * or GPU Instance Id is invalid * - \ref NVML_ERROR_RESET_REQUIRED If setting the state failed with fatal error, reboot is required * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU or if any vGPU instance exists * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pScheduler is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceSetVgpuSchedulerState(nvmlGpuInstance_t gpuInstance, nvmlVgpuSchedulerState_t *pScheduler); /** * Returns the vGPU scheduler state for the given GPU instance. * The information returned in \a nvmlVgpuSchedulerStateInfo_t is not relevant if the BEST EFFORT policy is set. * * %GB20X_OR_NEWER% * * @param gpuInstance The GPU instance handle * @param pSchedulerStateInfo Reference in which \a pSchedulerStateInfo is returned * * @return * - \ref NVML_SUCCESS vGPU scheduler state is successfully obtained * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, or \a pSchedulerStateInfo is NULL * or GPU Instance Id is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pSchedulerStateInfo is invalid * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetVgpuSchedulerState(nvmlGpuInstance_t gpuInstance, nvmlVgpuSchedulerStateInfo_t *pSchedulerStateInfo); /** * Returns the vGPU scheduler logs for the given GPU instance. * \a pSchedulerLogInfo points to a caller-allocated structure to contain the logs. The number of elements returned will * never exceed \a NVML_SCHEDULER_SW_MAX_LOG_ENTRIES. * * To get the entire logs, call the function atleast 5 times a second. * * %GB20X_OR_NEWER% * * @param gpuInstance The GPU instance handle * @param pSchedulerLogInfo Reference in which \a pSchedulerLogInfo is written * * @return * - \ref NVML_SUCCESS vGPU scheduler logs are successfully obtained * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, or \a pSchedulerLogInfo is NULL * or GPU Instance Id is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pSchedulerLogInfo is invalid * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetVgpuSchedulerLog(nvmlGpuInstance_t gpuInstance, nvmlVgpuSchedulerLogInfo_t *pSchedulerLogInfo); /** * Query the creatable vGPU placement ID of the vGPU type within a GPU instance. * * %GB20X_OR_NEWER% * * An array of creatable vGPU placement IDs for the vGPU type ID indicated by \a pCreatablePlacementInfo->vgpuTypeId * is returned in the caller-supplied buffer of \a pCreatablePlacementInfo->placementIds. Memory needed for the * placementIds array should be allocated based on maximum instances of a vGPU type per GPU instance which can be * queried via \ref nvmlVgpuTypeGetMaxInstancesPerGpuInstance(). * If the provided count by the caller is insufficient, the function will return NVML_ERROR_INSUFFICIENT_SIZE along with * the number of required entries in \a pCreatablePlacementInfo->count. The caller should then reallocate a buffer with the size * of pCreatablePlacementInfo->count * sizeof(pCreatablePlacementInfo->placementIds) and invoke the function again. * The creatable vGPU placement IDs may differ over time, as there may be restrictions on what type of vGPU the * vGPU instance is running. * * @param gpuInstance The GPU instance handle * @param pCreatablePlacementInfo Pointer to the list of vGPU creatable placement structure \a nvmlVgpuCreatablePlacementInfo_t * * @return * - \ref NVML_SUCCESS Successful completion * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, or \a pCreatablePlacementInfo is NULL * or GPU Instance Id is invalid * - \ref NVML_ERROR_INSUFFICIENT_SIZE If the buffer is small, element count is returned in \a pCreatablePlacementInfo->count * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pCreatablePlacementInfo is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU or vGPU heterogeneous mode is not enabled * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetVgpuTypeCreatablePlacements(nvmlGpuInstance_t gpuInstance, nvmlVgpuCreatablePlacementInfo_t *pCreatablePlacementInfo); /** * Get the vGPU heterogeneous mode for the GPU instance. * * When in heterogeneous mode, a vGPU can concurrently host timesliced vGPUs with differing framebuffer sizes. * * On successful return, the function returns \a pHeterogeneousMode->mode with the current vGPU heterogeneous mode. * \a pHeterogeneousMode->version is the version number of the structure nvmlVgpuHeterogeneousMode_t, the caller should * set the correct version number to retrieve the vGPU heterogeneous mode. * \a pHeterogeneousMode->mode can either be \ref NVML_FEATURE_ENABLED or \ref NVML_FEATURE_DISABLED. * * %GB20X_OR_NEWER% * * @param gpuInstance The GPU instance handle * @param pHeterogeneousMode Pointer to the caller-provided structure of nvmlVgpuHeterogeneousMode_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, or \a pHeterogeneousMode is NULL * or GPU Instance Id is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU or not in MIG mode * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pHeterogeneousMode is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetVgpuHeterogeneousMode(nvmlGpuInstance_t gpuInstance, nvmlVgpuHeterogeneousMode_t *pHeterogeneousMode); /** * Enable or disable vGPU heterogeneous mode for the GPU instance. * * When in heterogeneous mode, a vGPU can concurrently host timesliced vGPUs with differing framebuffer sizes. * * API would return an appropriate error code upon unsuccessful activation. For example, the heterogeneous mode * set will fail with error \ref NVML_ERROR_IN_USE if any vGPU instance is active within the GPU instance. * The caller of this API is expected to shutdown the vGPU VMs and retry setting the \a mode. * On successful return, the function updates the vGPU heterogeneous mode with the user provided \a pHeterogeneousMode->mode. * \a pHeterogeneousMode->version is the version number of the structure nvmlVgpuHeterogeneousMode_t, the caller should * set the correct version number to set the vGPU heterogeneous mode. * * @param gpuInstance The GPU instance handle * @param pHeterogeneousMode Pointer to the caller-provided structure of nvmlVgpuHeterogeneousMode_t * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is NULL or invalid, * or \a pHeterogeneousMode is NULL or \a pHeterogeneousMode->mode is invalid * or GPU Instance Id is invalid * - \ref NVML_ERROR_IN_USE If the \a gpuInstance is in use * - \ref NVML_ERROR_NOT_SUPPORTED If not on a vGPU host or an unsupported GPU * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a pHeterogeneousMode is invalid * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlGpuInstanceSetVgpuHeterogeneousMode(nvmlGpuInstance_t gpuInstance, const nvmlVgpuHeterogeneousMode_t *pHeterogeneousMode); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlVgpuMigration vGPU Migration * This chapter describes operations that are associated with vGPU Migration. * @{ */ /***************************************************************************************************/ /** * Structure representing range of vGPU versions. */ typedef struct nvmlVgpuVersion_st { unsigned int minVersion; //!< Minimum vGPU version. unsigned int maxVersion; //!< Maximum vGPU version. } nvmlVgpuVersion_t; /** * vGPU metadata structure. */ typedef struct nvmlVgpuMetadata_st { unsigned int version; //!< Current version of the structure unsigned int revision; //!< Current revision of the structure nvmlVgpuGuestInfoState_t guestInfoState; //!< Current state of Guest-dependent fields char guestDriverVersion[NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE]; //!< Version of driver installed in guest char hostDriverVersion[NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE]; //!< Version of driver installed in host unsigned int reserved[6]; //!< Reserved for internal use unsigned int vgpuVirtualizationCaps; //!< vGPU virtualization capabilities bitfield unsigned int guestVgpuVersion; //!< vGPU version of guest driver unsigned int opaqueDataSize; //!< Size of opaque data field in bytes char opaqueData[4]; //!< Opaque data } nvmlVgpuMetadata_t; /** * Physical GPU metadata structure */ typedef struct nvmlVgpuPgpuMetadata_st { unsigned int version; //!< Current version of the structure unsigned int revision; //!< Current revision of the structure char hostDriverVersion[NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE]; //!< Host driver version unsigned int pgpuVirtualizationCaps; //!< Pgpu virtualization capabilities bitfield unsigned int reserved[5]; //!< Reserved for internal use nvmlVgpuVersion_t hostSupportedVgpuRange; //!< vGPU version range supported by host driver unsigned int opaqueDataSize; //!< Size of opaque data field in bytes char opaqueData[4]; //!< Opaque data } nvmlVgpuPgpuMetadata_t; /** * vGPU VM compatibility codes */ typedef enum nvmlVgpuVmCompatibility_enum { NVML_VGPU_VM_COMPATIBILITY_NONE = 0x0, //!< vGPU is not runnable NVML_VGPU_VM_COMPATIBILITY_COLD = 0x1, //!< vGPU is runnable from a cold / powered-off state (ACPI S5) NVML_VGPU_VM_COMPATIBILITY_HIBERNATE = 0x2, //!< vGPU is runnable from a hibernated state (ACPI S4) NVML_VGPU_VM_COMPATIBILITY_SLEEP = 0x4, //!< vGPU is runnable from a sleeped state (ACPI S3) NVML_VGPU_VM_COMPATIBILITY_LIVE = 0x8 //!< vGPU is runnable from a live/paused (ACPI S0) } nvmlVgpuVmCompatibility_t; /** * vGPU-pGPU compatibility limit codes */ typedef enum nvmlVgpuPgpuCompatibilityLimitCode_enum { NVML_VGPU_COMPATIBILITY_LIMIT_NONE = 0x0, //!< Compatibility is not limited. NVML_VGPU_COMPATIBILITY_LIMIT_HOST_DRIVER = 0x1, //!< ompatibility is limited by host driver version. NVML_VGPU_COMPATIBILITY_LIMIT_GUEST_DRIVER = 0x2, //!< Compatibility is limited by guest driver version. NVML_VGPU_COMPATIBILITY_LIMIT_GPU = 0x4, //!< Compatibility is limited by GPU hardware. NVML_VGPU_COMPATIBILITY_LIMIT_OTHER = 0x80000000 //!< Compatibility is limited by an undefined factor. } nvmlVgpuPgpuCompatibilityLimitCode_t; /** * vGPU-pGPU compatibility structure */ typedef struct nvmlVgpuPgpuCompatibility_st { nvmlVgpuVmCompatibility_t vgpuVmCompatibility; //!< Compatibility of vGPU VM. See \ref nvmlVgpuVmCompatibility_t nvmlVgpuPgpuCompatibilityLimitCode_t compatibilityLimitCode; //!< Limiting factor for vGPU-pGPU compatibility. See \ref nvmlVgpuPgpuCompatibilityLimitCode_t } nvmlVgpuPgpuCompatibility_t; /** * Returns vGPU metadata structure for a running vGPU. The structure contains information about the vGPU and its associated VM * such as the currently installed NVIDIA guest driver version, together with host driver version and an opaque data section * containing internal state. * * nvmlVgpuInstanceGetMetadata() may be called at any time for a vGPU instance. Some fields in the returned structure are * dependent on information obtained from the guest VM, which may not yet have reached a state where that information * is available. The current state of these dependent fields is reflected in the info structure's \ref nvmlVgpuGuestInfoState_t field. * * The VMM may choose to read and save the vGPU's VM info as persistent metadata associated with the VM, and provide * it to Virtual GPU Manager when creating a vGPU for subsequent instances of the VM. * * The caller passes in a buffer via \a vgpuMetadata, with the size of the buffer in \a bufferSize. If the vGPU Metadata structure * is too large to fit in the supplied buffer, the function returns NVML_ERROR_INSUFFICIENT_SIZE with the size needed * in \a bufferSize. * * @param vgpuInstance vGPU instance handle * @param vgpuMetadata Pointer to caller-supplied buffer into which vGPU metadata is written * @param bufferSize Size of vgpuMetadata buffer * * @return * - \ref NVML_SUCCESS vGPU metadata structure was successfully returned * - \ref NVML_ERROR_INSUFFICIENT_SIZE vgpuMetadata buffer is too small, required size is returned in \a bufferSize * - \ref NVML_ERROR_INVALID_ARGUMENT if \a bufferSize is NULL or \a vgpuInstance is 0; if \a vgpuMetadata is NULL and the value of \a bufferSize is not 0. * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetMetadata(nvmlVgpuInstance_t vgpuInstance, nvmlVgpuMetadata_t *vgpuMetadata, unsigned int *bufferSize); /** * Returns a vGPU metadata structure for the physical GPU indicated by \a device. The structure contains information about * the GPU and the currently installed NVIDIA host driver version that's controlling it, together with an opaque data section * containing internal state. * * The caller passes in a buffer via \a pgpuMetadata, with the size of the buffer in \a bufferSize. If the \a pgpuMetadata * structure is too large to fit in the supplied buffer, the function returns NVML_ERROR_INSUFFICIENT_SIZE with the size needed * in \a bufferSize. * * @param device The identifier of the target device * @param pgpuMetadata Pointer to caller-supplied buffer into which \a pgpuMetadata is written * @param bufferSize Pointer to size of \a pgpuMetadata buffer * * @return * - \ref NVML_SUCCESS GPU metadata structure was successfully returned * - \ref NVML_ERROR_INSUFFICIENT_SIZE pgpuMetadata buffer is too small, required size is returned in \a bufferSize * - \ref NVML_ERROR_INVALID_ARGUMENT if \a bufferSize is NULL or \a device is invalid; if \a pgpuMetadata is NULL and the value of \a bufferSize is not 0. * - \ref NVML_ERROR_NOT_SUPPORTED vGPU is not supported by the system * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuMetadata(nvmlDevice_t device, nvmlVgpuPgpuMetadata_t *pgpuMetadata, unsigned int *bufferSize); /** * Takes a vGPU instance metadata structure read from \ref nvmlVgpuInstanceGetMetadata(), and a vGPU metadata structure for a * physical GPU read from \ref nvmlDeviceGetVgpuMetadata(), and returns compatibility information of the vGPU instance and the * physical GPU. * * The caller passes in a buffer via \a compatibilityInfo, into which a compatibility information structure is written. The * structure defines the states in which the vGPU / VM may be booted on the physical GPU. If the vGPU / VM compatibility * with the physical GPU is limited, a limit code indicates the factor limiting compatability. * (see \ref nvmlVgpuPgpuCompatibilityLimitCode_t for details). * * Note: vGPU compatibility does not take into account dynamic capacity conditions that may limit a system's ability to * boot a given vGPU or associated VM. * * @param vgpuMetadata Pointer to caller-supplied vGPU metadata structure * @param pgpuMetadata Pointer to caller-supplied GPU metadata structure * @param compatibilityInfo Pointer to caller-supplied buffer to hold compatibility info * * @return * - \ref NVML_SUCCESS vGPU metadata structure was successfully returned * - \ref NVML_ERROR_INVALID_ARGUMENT If \a vgpuMetadata or \a pgpuMetadata or \a bufferSize are NULL * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlGetVgpuCompatibility(nvmlVgpuMetadata_t *vgpuMetadata, nvmlVgpuPgpuMetadata_t *pgpuMetadata, nvmlVgpuPgpuCompatibility_t *compatibilityInfo); /** * Returns the properties of the physical GPU indicated by the device in an ascii-encoded string format. * * The caller passes in a buffer via \a pgpuMetadata, with the size of the buffer in \a bufferSize. If the * string is too large to fit in the supplied buffer, the function returns NVML_ERROR_INSUFFICIENT_SIZE with the size needed * in \a bufferSize. * * @param device The identifier of the target device * @param pgpuMetadata Pointer to caller-supplied buffer into which \a pgpuMetadata is written * @param bufferSize Pointer to size of \a pgpuMetadata buffer * * @return * - \ref NVML_SUCCESS GPU metadata structure was successfully returned * - \ref NVML_ERROR_INSUFFICIENT_SIZE \a pgpuMetadata buffer is too small, required size is returned in \a bufferSize * - \ref NVML_ERROR_INVALID_ARGUMENT If \a bufferSize is NULL or \a device is invalid; if \a pgpuMetadata is NULL and the value of \a bufferSize is not 0. * - \ref NVML_ERROR_NOT_SUPPORTED If vGPU is not supported by the system * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetPgpuMetadataString(nvmlDevice_t device, char *pgpuMetadata, unsigned int *bufferSize); /** * Returns the vGPU Software scheduler logs. * \a pSchedulerLog points to a caller-allocated structure to contain the logs. The number of elements returned will * never exceed \a NVML_SCHEDULER_SW_MAX_LOG_ENTRIES. * * To get the entire logs, call the function atleast 5 times a second. * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target \a device * @param pSchedulerLog Reference in which \a pSchedulerLog is written * * @return * - \ref NVML_SUCCESS vGPU scheduler logs were successfully obtained * - \ref NVML_ERROR_INVALID_ARGUMENT If \a pSchedulerLog is NULL or \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If MIG is enabled or \a device not in vGPU host mode * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuSchedulerLog(nvmlDevice_t device, nvmlVgpuSchedulerLog_t *pSchedulerLog); /** * Returns the vGPU scheduler state. * The information returned in \a nvmlVgpuSchedulerGetState_t is not relevant if the BEST EFFORT policy is set. * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target \a device * @param pSchedulerState Reference in which \a pSchedulerState is returned * * @return * - \ref NVML_SUCCESS vGPU scheduler state is successfully obtained * - \ref NVML_ERROR_INVALID_ARGUMENT If \a pSchedulerState is NULL or \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If MIG is enabled or \a device not in vGPU host mode * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuSchedulerState(nvmlDevice_t device, nvmlVgpuSchedulerGetState_t *pSchedulerState); /** * Returns the vGPU scheduler capabilities. * The list of supported vGPU schedulers returned in \a nvmlVgpuSchedulerCapabilities_t is from * the NVML_VGPU_SCHEDULER_POLICY_*. This list enumerates the supported scheduler policies * if the engine is Graphics type. * The other values in \a nvmlVgpuSchedulerCapabilities_t are also applicable if the engine is * Graphics type. For other engine types, it is BEST EFFORT policy. * If ARR is supported and enabled, scheduling frequency and averaging factor are applicable * else timeSlice is applicable. * * For Pascal &tm; or newer fully supported devices. * * @param device The identifier of the target \a device * @param pCapabilities Reference in which \a pCapabilities is written * * @return * - \ref NVML_SUCCESS vGPU scheduler capabilities were successfully obtained * - \ref NVML_ERROR_INVALID_ARGUMENT If \a pCapabilities is NULL or \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED The API is not supported in current state or \a device not in vGPU host mode * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuSchedulerCapabilities(nvmlDevice_t device, nvmlVgpuSchedulerCapabilities_t *pCapabilities); /** * Sets the vGPU scheduler state. * * For Pascal &tm; or newer fully supported devices. * * The scheduler state change won't persist across module load/unload. * Scheduler state and params will be allowed to set only when no VM is running. * In \a nvmlVgpuSchedulerSetState_t, IFF enableARRMode is enabled then * provide avgFactorForARR and frequency as input. If enableARRMode is disabled * then provide timeslice as input. * * @param device The identifier of the target \a device * @param pSchedulerState vGPU \a pSchedulerState to set * * @return * - \ref NVML_SUCCESS vGPU scheduler state has been successfully set * - \ref NVML_ERROR_INVALID_ARGUMENT If \a pSchedulerState is NULL or \a device is invalid * - \ref NVML_ERROR_RESET_REQUIRED If setting \a pSchedulerState failed with fatal error, * reboot is required to overcome from this error. * - \ref NVML_ERROR_NOT_SUPPORTED If MIG is enabled or \a device not in vGPU host mode * or if any vGPU instance currently exists on the \a device * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceSetVgpuSchedulerState(nvmlDevice_t device, nvmlVgpuSchedulerSetState_t *pSchedulerState); /* * Virtual GPU (vGPU) version * * The NVIDIA vGPU Manager and the guest drivers are tagged with a range of supported vGPU versions. This determines the range of NVIDIA guest driver versions that * are compatible for vGPU feature support with a given NVIDIA vGPU Manager. For vGPU feature support, the range of supported versions for the NVIDIA vGPU Manager * and the guest driver must overlap. Otherwise, the guest driver fails to load in the VM. * * When the NVIDIA guest driver loads, either when the VM is booted or when the driver is installed or upgraded, a negotiation occurs between the guest driver * and the NVIDIA vGPU Manager to select the highest mutually compatible vGPU version. The negotiated vGPU version stays the same across VM migration. */ /** * Query the ranges of supported vGPU versions. * * This function gets the linear range of supported vGPU versions that is preset for the NVIDIA vGPU Manager and the range set by an administrator. * If the preset range has not been overridden by \ref nvmlSetVgpuVersion, both ranges are the same. * * The caller passes pointers to the following \ref nvmlVgpuVersion_t structures, into which the NVIDIA vGPU Manager writes the ranges: * 1. \a supported structure that represents the preset range of vGPU versions supported by the NVIDIA vGPU Manager. * 2. \a current structure that represents the range of supported vGPU versions set by an administrator. By default, this range is the same as the preset range. * * @param supported Pointer to the structure in which the preset range of vGPU versions supported by the NVIDIA vGPU Manager is written * @param current Pointer to the structure in which the range of supported vGPU versions set by an administrator is written * * @return * - \ref NVML_SUCCESS The vGPU version range structures were successfully obtained. * - \ref NVML_ERROR_NOT_SUPPORTED The API is not supported. * - \ref NVML_ERROR_INVALID_ARGUMENT The \a supported parameter or the \a current parameter is NULL. * - \ref NVML_ERROR_UNKNOWN An error occurred while the data was being fetched. */ nvmlReturn_t DECLDIR nvmlGetVgpuVersion(nvmlVgpuVersion_t *supported, nvmlVgpuVersion_t *current); /** * Override the preset range of vGPU versions supported by the NVIDIA vGPU Manager with a range set by an administrator. * * This function configures the NVIDIA vGPU Manager with a range of supported vGPU versions set by an administrator. This range must be a subset of the * preset range that the NVIDIA vGPU Manager supports. The custom range set by an administrator takes precedence over the preset range and is advertised to * the guest VM for negotiating the vGPU version. See \ref nvmlGetVgpuVersion for details of how to query the preset range of versions supported. * * This function takes a pointer to vGPU version range structure \ref nvmlVgpuVersion_t as input to override the preset vGPU version range that the NVIDIA vGPU Manager supports. * * After host system reboot or driver reload, the range of supported versions reverts to the range that is preset for the NVIDIA vGPU Manager. * * @note 1. The range set by the administrator must be a subset of the preset range that the NVIDIA vGPU Manager supports. Otherwise, an error is returned. * 2. If the range of supported guest driver versions does not overlap the range set by the administrator, the guest driver fails to load. * 3. If the range of supported guest driver versions overlaps the range set by the administrator, the guest driver will load with a negotiated * vGPU version that is the maximum value in the overlapping range. * 4. No VMs must be running on the host when this function is called. If a VM is running on the host, the call to this function fails. * * @param vgpuVersion Pointer to a caller-supplied range of supported vGPU versions. * * @return * - \ref NVML_SUCCESS The preset range of supported vGPU versions was successfully overridden. * - \ref NVML_ERROR_NOT_SUPPORTED The API is not supported. * - \ref NVML_ERROR_IN_USE The range was not overridden because a VM is running on the host. * - \ref NVML_ERROR_INVALID_ARGUMENT The \a vgpuVersion parameter specifies a range that is outside the range supported by the NVIDIA vGPU Manager or if \a vgpuVersion is NULL. */ nvmlReturn_t DECLDIR nvmlSetVgpuVersion(nvmlVgpuVersion_t *vgpuVersion); /** @} */ // @defgroup nvmlVgpuMigration vGPU Migration /***************************************************************************************************/ /** @defgroup nvmlUtil vGPU Utilization and Accounting * This chapter describes operations that are associated with vGPU Utilization and Accounting. * @{ */ /***************************************************************************************************/ /** * Retrieves current utilization for vGPUs on a physical GPU (device). * * For Kepler &tm; or newer fully supported devices. * * Reads recent utilization of GPU SM (3D/Compute), framebuffer, video encoder, and video decoder for vGPU instances running * on a device. Utilization values are returned as an array of utilization sample structures in the caller-supplied buffer * pointed at by \a utilizationSamples. One utilization sample structure is returned per vGPU instance, and includes the * CPU timestamp at which the samples were recorded. Individual utilization values are returned as "unsigned int" values * in nvmlValue_t unions. The function sets the caller-supplied \a sampleValType to NVML_VALUE_TYPE_UNSIGNED_INT to * indicate the returned value type. * * To read utilization values, first determine the size of buffer required to hold the samples by invoking the function with * \a utilizationSamples set to NULL. The function will return NVML_ERROR_INSUFFICIENT_SIZE, with the current vGPU instance * count in \a vgpuInstanceSamplesCount, or NVML_SUCCESS if the current vGPU instance count is zero. The caller should allocate * a buffer of size vgpuInstanceSamplesCount * sizeof(nvmlVgpuInstanceUtilizationSample_t). Invoke the function again with * the allocated buffer passed in \a utilizationSamples, and \a vgpuInstanceSamplesCount set to the number of entries the * buffer is sized for. * * On successful return, the function updates \a vgpuInstanceSampleCount with the number of vGPU utilization sample * structures that were actually written. This may differ from a previously read value as vGPU instances are created or * destroyed. * * lastSeenTimeStamp represents the CPU timestamp in microseconds at which utilization samples were last read. Set it to 0 * to read utilization based on all the samples maintained by the driver's internal sample buffer. Set lastSeenTimeStamp * to a timeStamp retrieved from a previous query to read utilization since the previous query. * * @param device The identifier for the target device * @param lastSeenTimeStamp Return only samples with timestamp greater than lastSeenTimeStamp. * @param sampleValType Pointer to caller-supplied buffer to hold the type of returned sample values * @param vgpuInstanceSamplesCount Pointer to caller-supplied array size, and returns number of vGPU instances * @param utilizationSamples Pointer to caller-supplied buffer in which vGPU utilization samples are returned * @return * - \ref NVML_SUCCESS if utilization samples are successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a vgpuInstanceSamplesCount or \a sampleValType is * NULL, or a sample count of 0 is passed with a non-NULL \a utilizationSamples * - \ref NVML_ERROR_INSUFFICIENT_SIZE if supplied \a vgpuInstanceSamplesCount is too small to return samples for all * vGPU instances currently executing on the device * - \ref NVML_ERROR_NOT_SUPPORTED if vGPU is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_FOUND if sample entries are not found * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuUtilization(nvmlDevice_t device, unsigned long long lastSeenTimeStamp, nvmlValueType_t *sampleValType, unsigned int *vgpuInstanceSamplesCount, nvmlVgpuInstanceUtilizationSample_t *utilizationSamples); /** * Retrieves recent utilization for vGPU instances running on a physical GPU (device). * * For Kepler &tm; or newer fully supported devices. * * Reads recent utilization of GPU SM (3D/Compute), framebuffer, video encoder, video decoder, jpeg decoder, and OFA for vGPU * instances running on a device. Utilization values are returned as an array of utilization sample structures in the caller-supplied * buffer pointed at by \a vgpuUtilInfo->vgpuUtilArray. One utilization sample structure is returned per vGPU instance, and includes the * CPU timestamp at which the samples were recorded. Individual utilization values are returned as "unsigned int" values * in nvmlValue_t unions. The function sets the caller-supplied \a vgpuUtilInfo->sampleValType to NVML_VALUE_TYPE_UNSIGNED_INT to * indicate the returned value type. * * To read utilization values, first determine the size of buffer required to hold the samples by invoking the function with * \a vgpuUtilInfo->vgpuUtilArray set to NULL. The function will return NVML_ERROR_INSUFFICIENT_SIZE, with the current vGPU instance * count in \a vgpuUtilInfo->vgpuInstanceCount, or NVML_SUCCESS if the current vGPU instance count is zero. The caller should allocate * a buffer of size vgpuUtilInfo->vgpuInstanceCount * sizeof(nvmlVgpuInstanceUtilizationInfo_t). Invoke the function again with * the allocated buffer passed in \a vgpuUtilInfo->vgpuUtilArray, and \a vgpuUtilInfo->vgpuInstanceCount set to the number of entries the * buffer is sized for. * * On successful return, the function updates \a vgpuUtilInfo->vgpuInstanceCount with the number of vGPU utilization sample * structures that were actually written. This may differ from a previously read value as vGPU instances are created or * destroyed. * * \a vgpuUtilInfo->lastSeenTimeStamp represents the CPU timestamp in microseconds at which utilization samples were last read. Set it to 0 * to read utilization based on all the samples maintained by the driver's internal sample buffer. Set \a vgpuUtilInfo->lastSeenTimeStamp * to a timeStamp retrieved from a previous query to read utilization since the previous query. * * @param device The identifier for the target device * @param vgpuUtilInfo Pointer to the caller-provided structure of nvmlVgpuInstancesUtilizationInfo_t * @return * - \ref NVML_SUCCESS If utilization samples are successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid, \a vgpuUtilInfo is NULL, or \a vgpuUtilInfo->vgpuInstanceCount is 0 * - \ref NVML_ERROR_NOT_SUPPORTED If vGPU is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a vgpuUtilInfo is invalid * - \ref NVML_ERROR_INSUFFICIENT_SIZE If \a vgpuUtilInfo->vgpuUtilArray is NULL, or the buffer size of vgpuUtilInfo->vgpuInstanceCount is too small. * The caller should check the current vGPU instance count from the returned vgpuUtilInfo->vgpuInstanceCount, and call * the function again with a buffer of size vgpuUtilInfo->vgpuInstanceCount * sizeof(nvmlVgpuInstanceUtilizationInfo_t) * - \ref NVML_ERROR_NOT_FOUND If sample entries are not found * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuInstancesUtilizationInfo(nvmlDevice_t device, nvmlVgpuInstancesUtilizationInfo_t *vgpuUtilInfo); /** * Retrieves current utilization for processes running on vGPUs on a physical GPU (device). * * For Maxwell &tm; or newer fully supported devices. * * Reads recent utilization of GPU SM (3D/Compute), framebuffer, video encoder, and video decoder for processes running on * vGPU instances active on a device. Utilization values are returned as an array of utilization sample structures in the * caller-supplied buffer pointed at by \a utilizationSamples. One utilization sample structure is returned per process running * on vGPU instances, that had some non-zero utilization during the last sample period. It includes the CPU timestamp at which * the samples were recorded. Individual utilization values are returned as "unsigned int" values. * * To read utilization values, first determine the size of buffer required to hold the samples by invoking the function with * \a utilizationSamples set to NULL. The function will return NVML_ERROR_INSUFFICIENT_SIZE, with the current vGPU instance * count in \a vgpuProcessSamplesCount. The caller should allocate a buffer of size * vgpuProcessSamplesCount * sizeof(nvmlVgpuProcessUtilizationSample_t). Invoke the function again with * the allocated buffer passed in \a utilizationSamples, and \a vgpuProcessSamplesCount set to the number of entries the * buffer is sized for. * * On successful return, the function updates \a vgpuSubProcessSampleCount with the number of vGPU sub process utilization sample * structures that were actually written. This may differ from a previously read value depending on the number of processes that are active * in any given sample period. * * lastSeenTimeStamp represents the CPU timestamp in microseconds at which utilization samples were last read. Set it to 0 * to read utilization based on all the samples maintained by the driver's internal sample buffer. Set lastSeenTimeStamp * to a timeStamp retrieved from a previous query to read utilization since the previous query. * * @param device The identifier for the target device * @param lastSeenTimeStamp Return only samples with timestamp greater than lastSeenTimeStamp. * @param vgpuProcessSamplesCount Pointer to caller-supplied array size, and returns number of processes running on vGPU instances * @param utilizationSamples Pointer to caller-supplied buffer in which vGPU sub process utilization samples are returned * @return * - \ref NVML_SUCCESS if utilization samples are successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a vgpuProcessSamplesCount or a sample count of 0 is * passed with a non-NULL \a utilizationSamples * - \ref NVML_ERROR_INSUFFICIENT_SIZE if supplied \a vgpuProcessSamplesCount is too small to return samples for all * vGPU instances currently executing on the device * - \ref NVML_ERROR_NOT_SUPPORTED if vGPU is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_FOUND if sample entries are not found * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuProcessUtilization(nvmlDevice_t device, unsigned long long lastSeenTimeStamp, unsigned int *vgpuProcessSamplesCount, nvmlVgpuProcessUtilizationSample_t *utilizationSamples); /** * Retrieves recent utilization for processes running on vGPU instances on a physical GPU (device). * * For Maxwell &tm; or newer fully supported devices. * * Reads recent utilization of GPU SM (3D/Compute), framebuffer, video encoder, video decoder, jpeg decoder, and OFA for processes running * on vGPU instances active on a device. Utilization values are returned as an array of utilization sample structures in the caller-supplied * buffer pointed at by \a vgpuProcUtilInfo->vgpuProcUtilArray. One utilization sample structure is returned per process running * on vGPU instances, that had some non-zero utilization during the last sample period. It includes the CPU timestamp at which * the samples were recorded. Individual utilization values are returned as "unsigned int" values. * * To read utilization values, first determine the size of buffer required to hold the samples by invoking the function with * \a vgpuProcUtilInfo->vgpuProcUtilArray set to NULL. The function will return NVML_ERROR_INSUFFICIENT_SIZE, with the current processes' count * running on vGPU instances in \a vgpuProcUtilInfo->vgpuProcessCount. The caller should allocate a buffer of size * vgpuProcUtilInfo->vgpuProcessCount * sizeof(nvmlVgpuProcessUtilizationSample_t). Invoke the function again with the allocated buffer passed * in \a vgpuProcUtilInfo->vgpuProcUtilArray, and \a vgpuProcUtilInfo->vgpuProcessCount set to the number of entries the buffer is sized for. * * On successful return, the function updates \a vgpuProcUtilInfo->vgpuProcessCount with the number of vGPU sub process utilization sample * structures that were actually written. This may differ from a previously read value depending on the number of processes that are active * in any given sample period. * * vgpuProcUtilInfo->lastSeenTimeStamp represents the CPU timestamp in microseconds at which utilization samples were last read. Set it to 0 * to read utilization based on all the samples maintained by the driver's internal sample buffer. Set vgpuProcUtilInfo->lastSeenTimeStamp * to a timeStamp retrieved from a previous query to read utilization since the previous query. * * @param device The identifier for the target device * @param vgpuProcUtilInfo Pointer to the caller-provided structure of nvmlVgpuProcessesUtilizationInfo_t * @return * - \ref NVML_SUCCESS If utilization samples are successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid, or \a vgpuProcUtilInfo is null * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the version of \a vgpuProcUtilInfo is invalid * - \ref NVML_ERROR_INSUFFICIENT_SIZE If \a vgpuProcUtilInfo->vgpuProcUtilArray is null, or supplied \a vgpuProcUtilInfo->vgpuProcessCount * is too small to return samples for all processes on vGPU instances currently executing on the device. * The caller should check the current processes count from the returned \a vgpuProcUtilInfo->vgpuProcessCount, * and call the function again with a buffer of size * vgpuProcUtilInfo->vgpuProcessCount * sizeof(nvmlVgpuProcessUtilizationSample_t) * - \ref NVML_ERROR_NOT_SUPPORTED If vGPU is not supported by the device * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_NOT_FOUND If sample entries are not found * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuProcessesUtilizationInfo(nvmlDevice_t device, nvmlVgpuProcessesUtilizationInfo_t *vgpuProcUtilInfo); /** * Queries the state of per process accounting mode on vGPU. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance The identifier of the target vGPU instance * @param mode Reference in which to return the current accounting mode * * @return * - \ref NVML_SUCCESS if the mode has been successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a mode is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_NOT_SUPPORTED if the vGPU doesn't support this feature * - \ref NVML_ERROR_DRIVER_NOT_LOADED if NVIDIA driver is not running on the vGPU instance * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetAccountingMode(nvmlVgpuInstance_t vgpuInstance, nvmlEnableState_t *mode); /** * Queries list of processes running on vGPU that can be queried for accounting stats. The list of processes * returned can be in running or terminated state. * * For Maxwell &tm; or newer fully supported devices. * * To just query the maximum number of processes that can be queried, call this function with *count = 0 and * pids=NULL. The return code will be NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if list is empty. * * For more details see \ref nvmlVgpuInstanceGetAccountingStats. * * @note In case of PID collision some processes might not be accessible before the circular buffer is full. * * @param vgpuInstance The identifier of the target vGPU instance * @param count Reference in which to provide the \a pids array size, and * to return the number of elements ready to be queried * @param pids Reference in which to return list of process ids * * @return * - \ref NVML_SUCCESS if pids were successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a count is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_NOT_SUPPORTED if the vGPU doesn't support this feature or accounting mode is disabled * - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a count is too small (\a count is set to expected value) * - \ref NVML_ERROR_UNKNOWN on any unexpected error * * @see nvmlVgpuInstanceGetAccountingPids */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetAccountingPids(nvmlVgpuInstance_t vgpuInstance, unsigned int *count, unsigned int *pids); /** * Queries process's accounting stats. * * For Maxwell &tm; or newer fully supported devices. * * Accounting stats capture GPU utilization and other statistics across the lifetime of a process, and * can be queried during life time of the process or after its termination. * The time field in \ref nvmlAccountingStats_t is reported as 0 during the lifetime of the process and * updated to actual running time after its termination. * Accounting stats are kept in a circular buffer, newly created processes overwrite information about old * processes. * * See \ref nvmlAccountingStats_t for description of each returned metric. * List of processes that can be queried can be retrieved from \ref nvmlVgpuInstanceGetAccountingPids. * * @note Accounting Mode needs to be on. See \ref nvmlVgpuInstanceGetAccountingMode. * @note Only compute and graphics applications stats can be queried. Monitoring applications stats can't be * queried since they don't contribute to GPU utilization. * @note In case of pid collision stats of only the latest process (that terminated last) will be reported * * @param vgpuInstance The identifier of the target vGPU instance * @param pid Process Id of the target process to query stats for * @param stats Reference in which to return the process's accounting stats * * @return * - \ref NVML_SUCCESS if stats have been successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a stats is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * or \a stats is not found * - \ref NVML_ERROR_NOT_SUPPORTED if the vGPU doesn't support this feature or accounting mode is disabled * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetAccountingStats(nvmlVgpuInstance_t vgpuInstance, unsigned int pid, nvmlAccountingStats_t *stats); /** * Clears accounting information of the vGPU instance that have already terminated. * * For Maxwell &tm; or newer fully supported devices. * Requires root/admin permissions. * * @note Accounting Mode needs to be on. See \ref nvmlVgpuInstanceGetAccountingMode. * @note Only compute and graphics applications stats are reported and can be cleared since monitoring applications * stats don't contribute to GPU utilization. * * @param vgpuInstance The identifier of the target vGPU instance * * @return * - \ref NVML_SUCCESS if accounting information has been cleared * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is invalid * - \ref NVML_ERROR_NO_PERMISSION if the user doesn't have permission to perform this operation * - \ref NVML_ERROR_NOT_SUPPORTED if the vGPU doesn't support this feature or accounting mode is disabled * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceClearAccountingPids(nvmlVgpuInstance_t vgpuInstance); /** * Query the license information of the vGPU instance. * * For Maxwell &tm; or newer fully supported devices. * * @param vgpuInstance Identifier of the target vGPU instance * @param licenseInfo Pointer to vGPU license information structure * * @return * - \ref NVML_SUCCESS if information is successfully retrieved * - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a licenseInfo is NULL * - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system * - \ref NVML_ERROR_DRIVER_NOT_LOADED if NVIDIA driver is not running on the vGPU instance * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetLicenseInfo_v2(nvmlVgpuInstance_t vgpuInstance, nvmlVgpuLicenseInfo_t *licenseInfo); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlExcludedGpuQueries Excluded GPU Queries * This chapter describes NVML operations that are associated with excluded GPUs. * @{ */ /***************************************************************************************************/ /** * Excluded GPU device information **/ typedef struct nvmlExcludedDeviceInfo_st { nvmlPciInfo_t pciInfo; //!< The PCI information for the excluded GPU char uuid[NVML_DEVICE_UUID_BUFFER_SIZE]; //!< The ASCII string UUID for the excluded GPU } nvmlExcludedDeviceInfo_t; /** * Retrieves the number of excluded GPU devices in the system. * * For all products. * * @param deviceCount Reference in which to return the number of excluded devices * * @return * - \ref NVML_SUCCESS if \a deviceCount has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a deviceCount is NULL */ nvmlReturn_t DECLDIR nvmlGetExcludedDeviceCount(unsigned int *deviceCount); /** * Acquire the device information for an excluded GPU device, based on its index. * * For all products. * * Valid indices are derived from the \a deviceCount returned by * \ref nvmlGetExcludedDeviceCount(). For example, if \a deviceCount is 2 the valid indices * are 0 and 1, corresponding to GPU 0 and GPU 1. * * @param index The index of the target GPU, >= 0 and < \a deviceCount * @param info Reference in which to return the device information * * @return * - \ref NVML_SUCCESS if \a device has been set * - \ref NVML_ERROR_INVALID_ARGUMENT if \a index is invalid or \a info is NULL * * @see nvmlGetExcludedDeviceCount */ nvmlReturn_t DECLDIR nvmlGetExcludedDeviceInfoByIndex(unsigned int index, nvmlExcludedDeviceInfo_t *info); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlGPUPRMAccess PRM Access * This chapter describes NVML operations that are associated with PRM register reads * @{ */ /***************************************************************************************************/ #define NVML_PRM_DATA_MAX_SIZE 496 /** * Main PRM input structure */ typedef struct { /* I/O parameters */ unsigned dataSize; //!< Size of the input TLV data. unsigned status; //!< OUT: status of the PRM command union { /* Input data in TLV format */ unsigned char inData[NVML_PRM_DATA_MAX_SIZE]; //!< IN: Input data in TLV format /* Output data in TLV format */ unsigned char outData[NVML_PRM_DATA_MAX_SIZE]; //!< OUT: Output PRM data in TLV format }; } nvmlPRMTLV_v1_t; /** * Read or write a GPU PRM register. The input is assumed to be in TLV format in * network byte order. * * %BLACKWELL_OR_NEWER% * * Supported on Linux only. * * @param device Identifer of target GPU device * @param buffer Structure holding the input data in TLV format as well as * the PRM register contents in TLV format (in the case of a successful * read operation). * Note: the input data and any returned data shall be in network byte order. * * @return * - \ref NVML_SUCCESS on success * - \ref NVML_ERROR_INVALID_ARGUMENT if \p device or \p buffer are invalid * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to perform this operation * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the version specified in \p buffer is not supported */ nvmlReturn_t DECLDIR nvmlDeviceReadWritePRM_v1(nvmlDevice_t device, nvmlPRMTLV_v1_t *buffer); /** @} */ /***************************************************************************************************/ /** @defgroup nvmlMultiInstanceGPU Multi Instance GPU Management * This chapter describes NVML operations that are associated with Multi Instance GPU management. * @{ */ /***************************************************************************************************/ /** * Disable Multi Instance GPU mode. */ #define NVML_DEVICE_MIG_DISABLE 0x0 /** * Enable Multi Instance GPU mode. */ #define NVML_DEVICE_MIG_ENABLE 0x1 /** * GPU instance profiles. * * These macros should be passed to \ref nvmlDeviceGetGpuInstanceProfileInfo to retrieve the * detailed information about a GPU instance such as profile ID, engine counts. */ #define NVML_GPU_INSTANCE_PROFILE_1_SLICE 0x0 #define NVML_GPU_INSTANCE_PROFILE_2_SLICE 0x1 #define NVML_GPU_INSTANCE_PROFILE_3_SLICE 0x2 #define NVML_GPU_INSTANCE_PROFILE_4_SLICE 0x3 #define NVML_GPU_INSTANCE_PROFILE_7_SLICE 0x4 #define NVML_GPU_INSTANCE_PROFILE_8_SLICE 0x5 #define NVML_GPU_INSTANCE_PROFILE_6_SLICE 0x6 // 1_SLICE profile with at least one (if supported at all) of Decoder, Encoder, JPEG, OFA engines. #define NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV1 0x7 // 2_SLICE profile with at least one (if supported at all) of Decoder, Encoder, JPEG, OFA engines. #define NVML_GPU_INSTANCE_PROFILE_2_SLICE_REV1 0x8 // 1_SLICE profile with twice the amount of memory resources. #define NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV2 0x9 // 1_SLICE gfx capable profile #define NVML_GPU_INSTANCE_PROFILE_1_SLICE_GFX 0x0A // 2_SLICE gfx capable profile #define NVML_GPU_INSTANCE_PROFILE_2_SLICE_GFX 0x0B // 4_SLICE gfx capable profile #define NVML_GPU_INSTANCE_PROFILE_4_SLICE_GFX 0x0C // 1_SLICE profile with none of Decode, Encoder, JPEG, OFA engines. #define NVML_GPU_INSTANCE_PROFILE_1_SLICE_NO_ME 0x0D // 2_SLICE profile with none of Decode, Encoder, JPEG, OFA engines. #define NVML_GPU_INSTANCE_PROFILE_2_SLICE_NO_ME 0x0E // 1_SLICE profile with all of GPU Decode, Encoder, JPEG, OFA engines. // Allocation of instance of this profile prevents allocation of // all but _NO_ME profiles. #define NVML_GPU_INSTANCE_PROFILE_1_SLICE_ALL_ME 0x0F // 2_SLICE profile with all of GPU Decode, Encoder, JPEG, OFA engines. // Allocation of instance of this profile prevents allocation of // all but _NO_ME profiles. #define NVML_GPU_INSTANCE_PROFILE_2_SLICE_ALL_ME 0x10 #define NVML_GPU_INSTANCE_PROFILE_COUNT 0x11 /** * MIG GPU instance profile capability. * * Bit field values representing MIG profile capabilities * \ref nvmlGpuInstanceProfileInfo_v3_t.capabilities */ #define NVML_GPU_INSTANCE_PROFILE_CAPS_P2P 0x1 #define NVML_GPU_INTSTANCE_PROFILE_CAPS_P2P 0x1 //!< Deprecated, do not use #define NVML_GPU_INSTANCE_PROFILE_CAPS_GFX 0x2 /** * MIG compute instance profile capability. * * Bit field values representing MIG profile capabilities * \ref nvmlComputeInstanceProfileInfo_v3_t.capabilities */ #define NVML_COMPUTE_INSTANCE_PROFILE_CAPS_GFX 0x1 typedef struct nvmlGpuInstancePlacement_st { unsigned int start; //!< Index of first occupied memory slice unsigned int size; //!< Number of memory slices occupied } nvmlGpuInstancePlacement_t; /** * GPU instance profile information. */ typedef struct nvmlGpuInstanceProfileInfo_st { unsigned int id; //!< Unique profile ID within the device unsigned int isP2pSupported; //!< Peer-to-Peer support unsigned int sliceCount; //!< GPU Slice count unsigned int instanceCount; //!< GPU instance count unsigned int multiprocessorCount; //!< Streaming Multiprocessor count unsigned int copyEngineCount; //!< Copy Engine count unsigned int decoderCount; //!< Decoder Engine count unsigned int encoderCount; //!< Encoder Engine count unsigned int jpegCount; //!< JPEG Engine count unsigned int ofaCount; //!< OFA Engine count unsigned long long memorySizeMB; //!< Memory size in MBytes } nvmlGpuInstanceProfileInfo_t; /** * GPU instance profile information (v2). * * Version 2 adds the \ref nvmlGpuInstanceProfileInfo_v2_t.version field * to the start of the structure, and the \ref nvmlGpuInstanceProfileInfo_v2_t.name * field to the end. This structure is not backwards-compatible with * \ref nvmlGpuInstanceProfileInfo_t. */ typedef struct nvmlGpuInstanceProfileInfo_v2_st { unsigned int version; //!< Structure version identifier (set to \ref nvmlGpuInstanceProfileInfo_v2) unsigned int id; //!< Unique profile ID within the device unsigned int isP2pSupported; //!< Peer-to-Peer support unsigned int sliceCount; //!< GPU Slice count unsigned int instanceCount; //!< GPU instance count unsigned int multiprocessorCount; //!< Streaming Multiprocessor count unsigned int copyEngineCount; //!< Copy Engine count unsigned int decoderCount; //!< Decoder Engine count unsigned int encoderCount; //!< Encoder Engine count unsigned int jpegCount; //!< JPEG Engine count unsigned int ofaCount; //!< OFA Engine count unsigned long long memorySizeMB; //!< Memory size in MBytes char name[NVML_DEVICE_NAME_V2_BUFFER_SIZE]; //!< Profile name } nvmlGpuInstanceProfileInfo_v2_t; /** * Version identifier value for \ref nvmlGpuInstanceProfileInfo_v2_t.version. */ #define nvmlGpuInstanceProfileInfo_v2 NVML_STRUCT_VERSION(GpuInstanceProfileInfo, 2) /** * GPU instance profile information (v3). * * Version 3 removes isP2pSupported field and adds the \ref nvmlGpuInstanceProfileInfo_v3_t.capabilities * field \ref nvmlGpuInstanceProfileInfo_t. */ typedef struct nvmlGpuInstanceProfileInfo_v3_st { unsigned int version; //!< Structure version identifier (set to \ref nvmlGpuInstanceProfileInfo_v3) unsigned int id; //!< Unique profile ID within the device unsigned int sliceCount; //!< GPU Slice count unsigned int instanceCount; //!< GPU instance count unsigned int multiprocessorCount; //!< Streaming Multiprocessor count unsigned int copyEngineCount; //!< Copy Engine count unsigned int decoderCount; //!< Decoder Engine count unsigned int encoderCount; //!< Encoder Engine count unsigned int jpegCount; //!< JPEG Engine count unsigned int ofaCount; //!< OFA Engine count unsigned long long memorySizeMB; //!< Memory size in MBytes char name[NVML_DEVICE_NAME_V2_BUFFER_SIZE]; //!< Profile name unsigned int capabilities; //!< Additional capabilities } nvmlGpuInstanceProfileInfo_v3_t; /** * Version identifier value for \ref nvmlGpuInstanceProfileInfo_v3_t.version. */ #define nvmlGpuInstanceProfileInfo_v3 NVML_STRUCT_VERSION(GpuInstanceProfileInfo, 3) typedef struct nvmlGpuInstanceInfo_st { nvmlDevice_t device; //!< Parent device unsigned int id; //!< Unique instance ID within the device unsigned int profileId; //!< Unique profile ID within the device nvmlGpuInstancePlacement_t placement; //!< Placement for this instance } nvmlGpuInstanceInfo_t; /** * Compute instance profiles. * * These macros should be passed to \ref nvmlGpuInstanceGetComputeInstanceProfileInfo to retrieve the * detailed information about a compute instance such as profile ID, engine counts */ #define NVML_COMPUTE_INSTANCE_PROFILE_1_SLICE 0x0 #define NVML_COMPUTE_INSTANCE_PROFILE_2_SLICE 0x1 #define NVML_COMPUTE_INSTANCE_PROFILE_3_SLICE 0x2 #define NVML_COMPUTE_INSTANCE_PROFILE_4_SLICE 0x3 #define NVML_COMPUTE_INSTANCE_PROFILE_7_SLICE 0x4 #define NVML_COMPUTE_INSTANCE_PROFILE_8_SLICE 0x5 #define NVML_COMPUTE_INSTANCE_PROFILE_6_SLICE 0x6 #define NVML_COMPUTE_INSTANCE_PROFILE_1_SLICE_REV1 0x7 #define NVML_COMPUTE_INSTANCE_PROFILE_COUNT 0x8 #define NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_SHARED 0x0 //!< All the engines except multiprocessors would be shared #define NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_COUNT 0x1 typedef struct nvmlComputeInstancePlacement_st { unsigned int start; //!< Index of first occupied compute slice unsigned int size; //!< Number of compute slices occupied } nvmlComputeInstancePlacement_t; /** * Compute instance profile information. */ typedef struct nvmlComputeInstanceProfileInfo_st { unsigned int id; //!< Unique profile ID within the GPU instance unsigned int sliceCount; //!< GPU Slice count unsigned int instanceCount; //!< Compute instance count unsigned int multiprocessorCount; //!< Streaming Multiprocessor count unsigned int sharedCopyEngineCount; //!< Shared Copy Engine count unsigned int sharedDecoderCount; //!< Shared Decoder Engine count unsigned int sharedEncoderCount; //!< Shared Encoder Engine count unsigned int sharedJpegCount; //!< Shared JPEG Engine count unsigned int sharedOfaCount; //!< Shared OFA Engine count } nvmlComputeInstanceProfileInfo_t; /** * Compute instance profile information (v2). * * Version 2 adds the \ref nvmlComputeInstanceProfileInfo_v2_t.version field * to the start of the structure, and the \ref nvmlComputeInstanceProfileInfo_v2_t.name * field to the end. This structure is not backwards-compatible with * \ref nvmlComputeInstanceProfileInfo_t. */ typedef struct nvmlComputeInstanceProfileInfo_v2_st { unsigned int version; //!< Structure version identifier (set to \ref nvmlComputeInstanceProfileInfo_v2) unsigned int id; //!< Unique profile ID within the GPU instance unsigned int sliceCount; //!< GPU Slice count unsigned int instanceCount; //!< Compute instance count unsigned int multiprocessorCount; //!< Streaming Multiprocessor count unsigned int sharedCopyEngineCount; //!< Shared Copy Engine count unsigned int sharedDecoderCount; //!< Shared Decoder Engine count unsigned int sharedEncoderCount; //!< Shared Encoder Engine count unsigned int sharedJpegCount; //!< Shared JPEG Engine count unsigned int sharedOfaCount; //!< Shared OFA Engine count char name[NVML_DEVICE_NAME_V2_BUFFER_SIZE]; //!< Profile name } nvmlComputeInstanceProfileInfo_v2_t; /** * Version identifier value for \ref nvmlComputeInstanceProfileInfo_v2_t.version. */ #define nvmlComputeInstanceProfileInfo_v2 NVML_STRUCT_VERSION(ComputeInstanceProfileInfo, 2) /** * Compute instance profile information (v3). * * Version 3 adds the \ref nvmlComputeInstanceProfileInfo_v3_t.capabilities field * \ref nvmlComputeInstanceProfileInfo_t. */ typedef struct nvmlComputeInstanceProfileInfo_v3_st { unsigned int version; //!< Structure version identifier (set to \ref nvmlComputeInstanceProfileInfo_v3) unsigned int id; //!< Unique profile ID within the GPU instance unsigned int sliceCount; //!< GPU Slice count unsigned int instanceCount; //!< Compute instance count unsigned int multiprocessorCount; //!< Streaming Multiprocessor count unsigned int sharedCopyEngineCount; //!< Shared Copy Engine count unsigned int sharedDecoderCount; //!< Shared Decoder Engine count unsigned int sharedEncoderCount; //!< Shared Encoder Engine count unsigned int sharedJpegCount; //!< Shared JPEG Engine count unsigned int sharedOfaCount; //!< Shared OFA Engine count char name[NVML_DEVICE_NAME_V2_BUFFER_SIZE]; //!< Profile name unsigned int capabilities; //!< Additional capabilities } nvmlComputeInstanceProfileInfo_v3_t; /** * Version identifier value for \ref nvmlComputeInstanceProfileInfo_v3_t.version. */ #define nvmlComputeInstanceProfileInfo_v3 NVML_STRUCT_VERSION(ComputeInstanceProfileInfo, 3) typedef struct nvmlComputeInstanceInfo_st { nvmlDevice_t device; //!< Parent device nvmlGpuInstance_t gpuInstance; //!< Parent GPU instance unsigned int id; //!< Unique instance ID within the GPU instance unsigned int profileId; //!< Unique profile ID within the GPU instance nvmlComputeInstancePlacement_t placement; //!< Placement for this instance within the GPU instance's compute slice range {0, sliceCount} } nvmlComputeInstanceInfo_t; typedef struct { struct nvmlComputeInstance_st* handle; } nvmlComputeInstance_t; /** * Set MIG mode for the device. * * For Ampere &tm; or newer fully supported devices. * Requires root user. * * This mode determines whether a GPU instance can be created. * * This API may unbind or reset the device to activate the requested mode. Thus, the attributes associated with the * device, such as minor number, might change. The caller of this API is expected to query such attributes again. * * On certain platforms like pass-through virtualization, where reset functionality may not be exposed directly, VM * reboot is required. \a activationStatus would return \ref NVML_ERROR_RESET_REQUIRED for such cases. * * \a activationStatus would return the appropriate error code upon unsuccessful activation. For example, if device * unbind fails because the device isn't idle, \ref NVML_ERROR_IN_USE would be returned. The caller of this API * is expected to idle the device and retry setting the \a mode. * * @note On Windows, only disabling MIG mode is supported. \a activationStatus would return \ref * NVML_ERROR_NOT_SUPPORTED as GPU reset is not supported on Windows through this API. * * @param device The identifier of the target device * @param mode The mode to be set, \ref NVML_DEVICE_MIG_DISABLE or * \ref NVML_DEVICE_MIG_ENABLE * @param activationStatus The activationStatus status * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device,\a mode or \a activationStatus are invalid * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support MIG mode */ nvmlReturn_t DECLDIR nvmlDeviceSetMigMode(nvmlDevice_t device, unsigned int mode, nvmlReturn_t *activationStatus); /** * Get MIG mode for the device. * * For Ampere &tm; or newer fully supported devices. * * Changing MIG modes may require device unbind or reset. The "pending" MIG mode refers to the target mode following the * next activation trigger. * * @param device The identifier of the target device * @param currentMode Returns the current mode, \ref NVML_DEVICE_MIG_DISABLE or * \ref NVML_DEVICE_MIG_ENABLE * @param pendingMode Returns the pending mode, \ref NVML_DEVICE_MIG_DISABLE or * \ref NVML_DEVICE_MIG_ENABLE * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a currentMode or \a pendingMode are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support MIG mode * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMigMode(nvmlDevice_t device, unsigned int *currentMode, unsigned int *pendingMode); /** * Get GPU instance profile information * * Information provided by this API is immutable throughout the lifetime of a MIG mode. * * @note This API can be used to enumerate all MIG profiles supported by NVML in a forward compatible * way by invoking it on \a profile values starting from 0, until the API returns \ref NVML_ERROR_INVALID_ARGUMENT. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * @param profile One of the NVML_GPU_INSTANCE_PROFILE_* * @param info Returns detailed profile information * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profile or \a info are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support MIG or \a profile isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstanceProfileInfo(nvmlDevice_t device, unsigned int profile, nvmlGpuInstanceProfileInfo_t *info); /** * Versioned wrapper around \ref nvmlDeviceGetGpuInstanceProfileInfo that accepts a versioned * \ref nvmlGpuInstanceProfileInfo_v2_t or later output structure. * * @note The caller must set the \ref nvmlGpuInstanceProfileInfo_v2_t.version field to the * appropriate version prior to calling this function. For example: * \code * nvmlGpuInstanceProfileInfo_v2_t profileInfo = * { .version = nvmlGpuInstanceProfileInfo_v2 }; * nvmlReturn_t result = nvmlDeviceGetGpuInstanceProfileInfoV(device, * profile, * &profileInfo); * \endcode * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * @param profile One of the NVML_GPU_INSTANCE_PROFILE_* * @param info Returns detailed profile information * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profile, \a info, or \a info->version are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled or \a profile isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstanceProfileInfoV(nvmlDevice_t device, unsigned int profile, nvmlGpuInstanceProfileInfo_v2_t *info); /** * GPU instance profile query function that accepts profile ID, instead of profile name. * It accepts a versioned \ref nvmlGpuInstanceProfileInfo_v2_t or later output structure. * * @note The caller must set the \ref nvmlGpuInstanceProfileInfo_v2_t.version field to the * appropriate version prior to calling this function. For example: * \code * nvmlGpuInstanceProfileInfo_v2_t profileInfo = * { .version = nvmlGpuInstanceProfileInfo_v2 }; * nvmlReturn_t result = nvmlDeviceGetGpuInstanceProfileInfoV(device, * profile, * &profileInfo); * \endcode * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device The identifier of the target device * @param profileId One of the profile IDs. * @param info Returns detailed profile information * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profileId, \a info, or \a info->version are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled or \a profile isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstanceProfileInfoByIdV(nvmlDevice_t device, unsigned int profileId, nvmlGpuInstanceProfileInfo_v2_t *info); /** * Get GPU instance placements. * * A placement represents the location of a GPU instance within a device. This API only returns all the possible * placements for the given profile regardless of whether MIG is enabled or not. * A created GPU instance occupies memory slices described by its placement. Creation of new GPU instance will * fail if there is overlap with the already occupied memory slices. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param device The identifier of the target device * @param profileId The GPU instance profile ID. See \ref nvmlDeviceGetGpuInstanceProfileInfo * @param placements Returns placements allowed for the profile. Can be NULL to discover number * of allowed placements for this profile. If non-NULL must be large enough * to accommodate the placements supported by the profile. * @param count Returns number of allowed placemenets for the profile. * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profileId or \a count are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support MIG or \a profileId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstancePossiblePlacements_v2(nvmlDevice_t device, unsigned int profileId, nvmlGpuInstancePlacement_t *placements, unsigned int *count); /** * Get GPU instance profile capacity. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param device The identifier of the target device * @param profileId The GPU instance profile ID. See \ref nvmlDeviceGetGpuInstanceProfileInfo * @param count Returns remaining instance count for the profile ID * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profileId or \a count are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled or \a profileId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstanceRemainingCapacity(nvmlDevice_t device, unsigned int profileId, unsigned int *count); /** * Create GPU instance. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * If the parent device is unbound, reset or the GPU instance is destroyed explicitly, the GPU instance handle would * become invalid. The GPU instance must be recreated to acquire a valid handle. * * @param device The identifier of the target device * @param profileId The GPU instance profile ID. See \ref nvmlDeviceGetGpuInstanceProfileInfo * @param gpuInstance Returns the GPU instance handle * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profile, \a profileId or \a gpuInstance are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled or in vGPU guest * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_INSUFFICIENT_RESOURCES If the requested GPU instance could not be created */ nvmlReturn_t DECLDIR nvmlDeviceCreateGpuInstance(nvmlDevice_t device, unsigned int profileId, nvmlGpuInstance_t *gpuInstance); /** * Create GPU instance with the specified placement. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * If the parent device is unbound, reset or the GPU instance is destroyed explicitly, the GPU instance handle would * become invalid. The GPU instance must be recreated to acquire a valid handle. * * @param device The identifier of the target device * @param profileId The GPU instance profile ID. See \ref nvmlDeviceGetGpuInstanceProfileInfo * @param placement The requested placement. See \ref nvmlDeviceGetGpuInstancePossiblePlacements_v2 * @param gpuInstance Returns the GPU instance handle * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profile, \a profileId, \a placement or \a gpuInstance * are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled or in vGPU guest * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_INSUFFICIENT_RESOURCES If the requested GPU instance could not be created */ nvmlReturn_t DECLDIR nvmlDeviceCreateGpuInstanceWithPlacement(nvmlDevice_t device, unsigned int profileId, const nvmlGpuInstancePlacement_t *placement, nvmlGpuInstance_t *gpuInstance); /** * Destroy GPU instance. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param gpuInstance The GPU instance handle * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance is invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled or in vGPU guest * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_IN_USE If the GPU instance is in use. This error would be returned if processes * (e.g. CUDA application) or compute instances are active on the * GPU instance. */ nvmlReturn_t DECLDIR nvmlGpuInstanceDestroy(nvmlGpuInstance_t gpuInstance); /** * Get GPU instances for given profile ID. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param device The identifier of the target device * @param profileId The GPU instance profile ID. See \ref nvmlDeviceGetGpuInstanceProfileInfo * @param gpuInstances Returns pre-exiting GPU instances, the buffer must be large enough to * accommodate the instances supported by the profile. * See \ref nvmlDeviceGetGpuInstanceProfileInfo * @param count The count of returned GPU instances * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a profileId, \a gpuInstances or \a count are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstances(nvmlDevice_t device, unsigned int profileId, nvmlGpuInstance_t *gpuInstances, unsigned int *count); /** * Get GPU instances for given instance ID. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param device The identifier of the target device * @param id The GPU instance ID * @param gpuInstance Returns GPU instance * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a id or \a gpuInstance are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_NOT_FOUND If the GPU instance is not found. */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstanceById(nvmlDevice_t device, unsigned int id, nvmlGpuInstance_t *gpuInstance); /** * Get GPU instance information. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param gpuInstance The GPU instance handle * @param info Return GPU instance information * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance or \a info are invalid * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetInfo(nvmlGpuInstance_t gpuInstance, nvmlGpuInstanceInfo_t *info); /** * Get compute instance profile information. * * Information provided by this API is immutable throughout the lifetime of a MIG mode. * * @note This API can be used to enumerate all MIG profiles supported by NVML in a forward compatible * way by invoking it on \a profile values starting from 0, until the API returns \ref NVML_ERROR_INVALID_ARGUMENT. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param gpuInstance The identifier of the target GPU instance * @param profile One of the NVML_COMPUTE_INSTANCE_PROFILE_* * @param engProfile One of the NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_* * @param info Returns detailed profile information * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance, \a profile, \a engProfile or \a info are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a profile isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetComputeInstanceProfileInfo(nvmlGpuInstance_t gpuInstance, unsigned int profile, unsigned int engProfile, nvmlComputeInstanceProfileInfo_t *info); /** * Versioned wrapper around \ref nvmlGpuInstanceGetComputeInstanceProfileInfo that accepts a versioned * \ref nvmlComputeInstanceProfileInfo_v2_t or later output structure. * * @note The caller must set the \ref nvmlGpuInstanceProfileInfo_v2_t.version field to the * appropriate version prior to calling this function. For example: * \code * nvmlComputeInstanceProfileInfo_v2_t profileInfo = * { .version = nvmlComputeInstanceProfileInfo_v2 }; * nvmlReturn_t result = nvmlGpuInstanceGetComputeInstanceProfileInfoV(gpuInstance, * profile, * engProfile, * &profileInfo); * \endcode * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param gpuInstance The identifier of the target GPU instance * @param profile One of the NVML_COMPUTE_INSTANCE_PROFILE_* * @param engProfile One of the NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_* * @param info Returns detailed profile information * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance, \a profile, \a engProfile, \a info, or \a info->version are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a profile isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetComputeInstanceProfileInfoV(nvmlGpuInstance_t gpuInstance, unsigned int profile, unsigned int engProfile, nvmlComputeInstanceProfileInfo_v2_t *info); /** * Get compute instance profile capacity. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param gpuInstance The identifier of the target GPU instance * @param profileId The compute instance profile ID. * See \ref nvmlGpuInstanceGetComputeInstanceProfileInfo * @param count Returns remaining instance count for the profile ID * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance, \a profileId or \a availableCount are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a profileId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetComputeInstanceRemainingCapacity(nvmlGpuInstance_t gpuInstance, unsigned int profileId, unsigned int *count); /** * Get compute instance placements. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * A placement represents the location of a compute instance within a GPU instance. This API only returns all the possible * placements for the given profile. * A created compute instance occupies compute slices described by its placement. Creation of new compute instance will * fail if there is overlap with the already occupied compute slices. * * @param gpuInstance The identifier of the target GPU instance * @param profileId The compute instance profile ID. See \ref nvmlGpuInstanceGetComputeInstanceProfileInfo * @param placements Returns placements allowed for the profile. Can be NULL to discover number * of allowed placements for this profile. If non-NULL must be large enough * to accommodate the placements supported by the profile. * @param count Returns number of allowed placemenets for the profile. * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance, \a profileId or \a count are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled or \a profileId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetComputeInstancePossiblePlacements(nvmlGpuInstance_t gpuInstance, unsigned int profileId, nvmlComputeInstancePlacement_t *placements, unsigned int *count); /** * Create compute instance. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * If the parent device is unbound, reset or the parent GPU instance is destroyed or the compute instance is destroyed * explicitly, the compute instance handle would become invalid. The compute instance must be recreated to acquire * a valid handle. * * @param gpuInstance The identifier of the target GPU instance * @param profileId The compute instance profile ID. * See \ref nvmlGpuInstanceGetComputeInstanceProfileInfo * @param computeInstance Returns the compute instance handle * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance, \a profile, \a profileId or \a computeInstance * are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a profileId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_INSUFFICIENT_RESOURCES If the requested compute instance could not be created */ nvmlReturn_t DECLDIR nvmlGpuInstanceCreateComputeInstance(nvmlGpuInstance_t gpuInstance, unsigned int profileId, nvmlComputeInstance_t *computeInstance); /** * Create compute instance with the specified placement. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * If the parent device is unbound, reset or the parent GPU instance is destroyed or the compute instance is destroyed * explicitly, the compute instance handle would become invalid. The compute instance must be recreated to acquire * a valid handle. * * @param gpuInstance The identifier of the target GPU instance * @param profileId The compute instance profile ID. * See \ref nvmlGpuInstanceGetComputeInstanceProfileInfo * @param placement The requested placement. See \ref nvmlGpuInstanceGetComputeInstancePossiblePlacements * @param computeInstance Returns the compute instance handle * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance, \a profile, \a profileId or \a computeInstance * are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a profileId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_INSUFFICIENT_RESOURCES If the requested compute instance could not be created */ nvmlReturn_t DECLDIR nvmlGpuInstanceCreateComputeInstanceWithPlacement(nvmlGpuInstance_t gpuInstance, unsigned int profileId, const nvmlComputeInstancePlacement_t *placement, nvmlComputeInstance_t *computeInstance); /** * Destroy compute instance. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param computeInstance The compute instance handle * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a computeInstance is invalid * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_IN_USE If the compute instance is in use. This error would be returned if * processes (e.g. CUDA application) are active on the compute instance. */ nvmlReturn_t DECLDIR nvmlComputeInstanceDestroy(nvmlComputeInstance_t computeInstance); /** * Get compute instances for given profile ID. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param gpuInstance The identifier of the target GPU instance * @param profileId The compute instance profile ID. * See \ref nvmlGpuInstanceGetComputeInstanceProfileInfo * @param computeInstances Returns pre-exiting compute instances, the buffer must be large enough to * accommodate the instances supported by the profile. * See \ref nvmlGpuInstanceGetComputeInstanceProfileInfo * @param count The count of returned compute instances * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a gpuInstance, \a profileId, \a computeInstances or \a count * are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a profileId isn't supported * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetComputeInstances(nvmlGpuInstance_t gpuInstance, unsigned int profileId, nvmlComputeInstance_t *computeInstances, unsigned int *count); /** * Get compute instance for given instance ID. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * Requires privileged user. * * @param gpuInstance The identifier of the target GPU instance * @param id The compute instance ID * @param computeInstance Returns compute instance * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device, \a ID or \a computeInstance are invalid * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't have MIG mode enabled * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation * - \ref NVML_ERROR_NOT_FOUND If the compute instance is not found. */ nvmlReturn_t DECLDIR nvmlGpuInstanceGetComputeInstanceById(nvmlGpuInstance_t gpuInstance, unsigned int id, nvmlComputeInstance_t *computeInstance); /** * Get compute instance information. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param computeInstance The compute instance handle * @param info Return compute instance information * * @return * - \ref NVML_SUCCESS Upon success * - \ref NVML_ERROR_UNINITIALIZED If library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a computeInstance or \a info are invalid * - \ref NVML_ERROR_NO_PERMISSION If user doesn't have permission to perform the operation */ nvmlReturn_t DECLDIR nvmlComputeInstanceGetInfo_v2(nvmlComputeInstance_t computeInstance, nvmlComputeInstanceInfo_t *info); /** * Test if the given handle refers to a MIG device. * * A MIG device handle is an NVML abstraction which maps to a MIG compute instance. * These overloaded references can be used (with some restrictions) interchangeably * with a GPU device handle to execute queries at a per-compute instance granularity. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device NVML handle to test * @param isMigDevice True when handle refers to a MIG device * * @return * - \ref NVML_SUCCESS if \a device status was successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device handle or \a isMigDevice reference is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this check is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceIsMigDeviceHandle(nvmlDevice_t device, unsigned int *isMigDevice); /** * Get GPU instance ID for the given MIG device handle. * * GPU instance IDs are unique per device and remain valid until the GPU instance is destroyed. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device Target MIG device handle * @param id GPU instance ID * * @return * - \ref NVML_SUCCESS if instance ID was successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a id reference is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstanceId(nvmlDevice_t device, unsigned int *id); /** * Get compute instance ID for the given MIG device handle. * * Compute instance IDs are unique per GPU instance and remain valid until the compute instance * is destroyed. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device Target MIG device handle * @param id Compute instance ID * * @return * - \ref NVML_SUCCESS if instance ID was successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a id reference is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetComputeInstanceId(nvmlDevice_t device, unsigned int *id); /** * Get the maximum number of MIG devices that can exist under a given parent NVML device. * * Returns zero if MIG is not supported or enabled. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device Target device handle * @param count Count of MIG devices * * @return * - \ref NVML_SUCCESS if \a count was successfully retrieved * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a count reference is invalid * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMaxMigDeviceCount(nvmlDevice_t device, unsigned int *count); /** * Get MIG device handle for the given index under its parent NVML device. * * If the compute instance is destroyed either explicitly or by destroying, * resetting or unbinding the parent GPU instance or the GPU device itself * the MIG device handle would remain invalid and must be requested again * using this API. Handles may be reused and their properties can change in * the process. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param device Reference to the parent GPU device handle * @param index Index of the MIG device * @param migDevice Reference to the MIG device handle * * @return * - \ref NVML_SUCCESS if \a migDevice handle was successfully created * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a index or \a migDevice reference is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_NOT_FOUND if no valid MIG device was found at \a index * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetMigDeviceHandleByIndex(nvmlDevice_t device, unsigned int index, nvmlDevice_t *migDevice); /** * Get parent device handle from a MIG device handle. * * For Ampere &tm; or newer fully supported devices. * Supported on Linux only. * * @param migDevice MIG device handle * @param device Device handle * * @return * - \ref NVML_SUCCESS if \a device handle was successfully created * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a migDevice or \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetDeviceHandleFromMigDeviceHandle(nvmlDevice_t migDevice, nvmlDevice_t *device); /** @} */ // @defgroup nvmlMultiInstanceGPU /***************************************************************************************************/ /** @defgroup GPM NVML GPM * @{ */ /***************************************************************************************************/ /** @defgroup nvmlGpmEnums GPM Enums * @{ */ /***************************************************************************************************/ /** * GPM Metric Identifiers */ typedef enum { NVML_GPM_METRIC_GRAPHICS_UTIL = 1, //!< Percentage of time any compute/graphics app was active on the GPU. 0.0 - 100.0 NVML_GPM_METRIC_SM_UTIL = 2, //!< Percentage of SMs that were busy. 0.0 - 100.0 NVML_GPM_METRIC_SM_OCCUPANCY = 3, //!< Percentage of warps that were active vs theoretical maximum. 0.0 - 100.0 NVML_GPM_METRIC_INTEGER_UTIL = 4, //!< Percentage of time the GPU's SMs were doing integer operations. 0.0 - 100.0 NVML_GPM_METRIC_ANY_TENSOR_UTIL = 5, //!< Percentage of time the GPU's SMs were doing ANY tensor operations. 0.0 - 100.0 NVML_GPM_METRIC_DFMA_TENSOR_UTIL = 6, //!< Percentage of time the GPU's SMs were doing DFMA tensor operations. 0.0 - 100.0 NVML_GPM_METRIC_HMMA_TENSOR_UTIL = 7, //!< Percentage of time the GPU's SMs were doing HMMA tensor operations. 0.0 - 100.0 NVML_GPM_METRIC_IMMA_TENSOR_UTIL = 9, //!< Percentage of time the GPU's SMs were doing IMMA tensor operations. 0.0 - 100.0 NVML_GPM_METRIC_DRAM_BW_UTIL = 10, //!< Percentage of DRAM bw used vs theoretical maximum. 0.0 - 100.0 */ NVML_GPM_METRIC_FP64_UTIL = 11, //!< Percentage of time the GPU's SMs were doing non-tensor FP64 math. 0.0 - 100.0 NVML_GPM_METRIC_FP32_UTIL = 12, //!< Percentage of time the GPU's SMs were doing non-tensor FP32 math. 0.0 - 100.0 NVML_GPM_METRIC_FP16_UTIL = 13, //!< Percentage of time the GPU's SMs were doing non-tensor FP16 math. 0.0 - 100.0 NVML_GPM_METRIC_PCIE_TX_PER_SEC = 20, //!< PCIe traffic from this GPU in MiB/sec NVML_GPM_METRIC_PCIE_RX_PER_SEC = 21, //!< PCIe traffic to this GPU in MiB/sec NVML_GPM_METRIC_NVDEC_0_UTIL = 30, //!< Percent utilization of NVDEC 0. 0.0 - 100.0 NVML_GPM_METRIC_NVDEC_1_UTIL = 31, //!< Percent utilization of NVDEC 1. 0.0 - 100.0 NVML_GPM_METRIC_NVDEC_2_UTIL = 32, //!< Percent utilization of NVDEC 2. 0.0 - 100.0 NVML_GPM_METRIC_NVDEC_3_UTIL = 33, //!< Percent utilization of NVDEC 3. 0.0 - 100.0 NVML_GPM_METRIC_NVDEC_4_UTIL = 34, //!< Percent utilization of NVDEC 4. 0.0 - 100.0 NVML_GPM_METRIC_NVDEC_5_UTIL = 35, //!< Percent utilization of NVDEC 5. 0.0 - 100.0 NVML_GPM_METRIC_NVDEC_6_UTIL = 36, //!< Percent utilization of NVDEC 6. 0.0 - 100.0 NVML_GPM_METRIC_NVDEC_7_UTIL = 37, //!< Percent utilization of NVDEC 7. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_0_UTIL = 40, //!< Percent utilization of NVJPG 0. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_1_UTIL = 41, //!< Percent utilization of NVJPG 1. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_2_UTIL = 42, //!< Percent utilization of NVJPG 2. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_3_UTIL = 43, //!< Percent utilization of NVJPG 3. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_4_UTIL = 44, //!< Percent utilization of NVJPG 4. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_5_UTIL = 45, //!< Percent utilization of NVJPG 5. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_6_UTIL = 46, //!< Percent utilization of NVJPG 6. 0.0 - 100.0 NVML_GPM_METRIC_NVJPG_7_UTIL = 47, //!< Percent utilization of NVJPG 7. 0.0 - 100.0 NVML_GPM_METRIC_NVOFA_0_UTIL = 50, //!< Percent utilization of NVOFA 0. 0.0 - 100.0 NVML_GPM_METRIC_NVOFA_1_UTIL = 51, //!< Percent utilization of NVOFA 1. 0.0 - 100.0 NVML_GPM_METRIC_NVLINK_TOTAL_RX_PER_SEC = 60, //!< NvLink read bandwidth for all links in MiB/sec NVML_GPM_METRIC_NVLINK_TOTAL_TX_PER_SEC = 61, //!< NvLink write bandwidth for all links in MiB/sec NVML_GPM_METRIC_NVLINK_L0_RX_PER_SEC = 62, //!< NvLink read bandwidth for link 0 in MiB/sec NVML_GPM_METRIC_NVLINK_L0_TX_PER_SEC = 63, //!< NvLink write bandwidth for link 0 in MiB/sec NVML_GPM_METRIC_NVLINK_L1_RX_PER_SEC = 64, //!< NvLink read bandwidth for link 1 in MiB/sec NVML_GPM_METRIC_NVLINK_L1_TX_PER_SEC = 65, //!< NvLink write bandwidth for link 1 in MiB/sec NVML_GPM_METRIC_NVLINK_L2_RX_PER_SEC = 66, //!< NvLink read bandwidth for link 2 in MiB/sec NVML_GPM_METRIC_NVLINK_L2_TX_PER_SEC = 67, //!< NvLink write bandwidth for link 2 in MiB/sec NVML_GPM_METRIC_NVLINK_L3_RX_PER_SEC = 68, //!< NvLink read bandwidth for link 3 in MiB/sec NVML_GPM_METRIC_NVLINK_L3_TX_PER_SEC = 69, //!< NvLink write bandwidth for link 3 in MiB/sec NVML_GPM_METRIC_NVLINK_L4_RX_PER_SEC = 70, //!< NvLink read bandwidth for link 4 in MiB/sec NVML_GPM_METRIC_NVLINK_L4_TX_PER_SEC = 71, //!< NvLink write bandwidth for link 4 in MiB/sec NVML_GPM_METRIC_NVLINK_L5_RX_PER_SEC = 72, //!< NvLink read bandwidth for link 5 in MiB/sec NVML_GPM_METRIC_NVLINK_L5_TX_PER_SEC = 73, //!< NvLink write bandwidth for link 5 in MiB/sec NVML_GPM_METRIC_NVLINK_L6_RX_PER_SEC = 74, //!< NvLink read bandwidth for link 6 in MiB/sec NVML_GPM_METRIC_NVLINK_L6_TX_PER_SEC = 75, //!< NvLink write bandwidth for link 6 in MiB/sec NVML_GPM_METRIC_NVLINK_L7_RX_PER_SEC = 76, //!< NvLink read bandwidth for link 7 in MiB/sec NVML_GPM_METRIC_NVLINK_L7_TX_PER_SEC = 77, //!< NvLink write bandwidth for link 7 in MiB/sec NVML_GPM_METRIC_NVLINK_L8_RX_PER_SEC = 78, //!< NvLink read bandwidth for link 8 in MiB/sec NVML_GPM_METRIC_NVLINK_L8_TX_PER_SEC = 79, //!< NvLink write bandwidth for link 8 in MiB/sec NVML_GPM_METRIC_NVLINK_L9_RX_PER_SEC = 80, //!< NvLink read bandwidth for link 9 in MiB/sec NVML_GPM_METRIC_NVLINK_L9_TX_PER_SEC = 81, //!< NvLink write bandwidth for link 9 in MiB/sec NVML_GPM_METRIC_NVLINK_L10_RX_PER_SEC = 82, //!< NvLink read bandwidth for link 10 in MiB/sec NVML_GPM_METRIC_NVLINK_L10_TX_PER_SEC = 83, //!< NvLink write bandwidth for link 10 in MiB/sec NVML_GPM_METRIC_NVLINK_L11_RX_PER_SEC = 84, //!< NvLink read bandwidth for link 11 in MiB/sec NVML_GPM_METRIC_NVLINK_L11_TX_PER_SEC = 85, //!< NvLink write bandwidth for link 11 in MiB/sec NVML_GPM_METRIC_NVLINK_L12_RX_PER_SEC = 86, //!< NvLink read bandwidth for link 12 in MiB/sec NVML_GPM_METRIC_NVLINK_L12_TX_PER_SEC = 87, //!< NvLink write bandwidth for link 12 in MiB/sec NVML_GPM_METRIC_NVLINK_L13_RX_PER_SEC = 88, //!< NvLink read bandwidth for link 13 in MiB/sec NVML_GPM_METRIC_NVLINK_L13_TX_PER_SEC = 89, //!< NvLink write bandwidth for link 13 in MiB/sec NVML_GPM_METRIC_NVLINK_L14_RX_PER_SEC = 90, //!< NvLink read bandwidth for link 14 in MiB/sec NVML_GPM_METRIC_NVLINK_L14_TX_PER_SEC = 91, //!< NvLink write bandwidth for link 14 in MiB/sec NVML_GPM_METRIC_NVLINK_L15_RX_PER_SEC = 92, //!< NvLink read bandwidth for link 15 in MiB/sec NVML_GPM_METRIC_NVLINK_L15_TX_PER_SEC = 93, //!< NvLink write bandwidth for link 15 in MiB/sec NVML_GPM_METRIC_NVLINK_L16_RX_PER_SEC = 94, //!< NvLink read bandwidth for link 16 in MiB/sec NVML_GPM_METRIC_NVLINK_L16_TX_PER_SEC = 95, //!< NvLink write bandwidth for link 16 in MiB/sec NVML_GPM_METRIC_NVLINK_L17_RX_PER_SEC = 96, //!< NvLink read bandwidth for link 17 in MiB/sec NVML_GPM_METRIC_NVLINK_L17_TX_PER_SEC = 97, //!< NvLink write bandwidth for link 17 in MiB/sec //Put new metrics for BLACKWELL here... NVML_GPM_METRIC_C2C_TOTAL_TX_PER_SEC = 100, NVML_GPM_METRIC_C2C_TOTAL_RX_PER_SEC = 101, NVML_GPM_METRIC_C2C_DATA_TX_PER_SEC = 102, NVML_GPM_METRIC_C2C_DATA_RX_PER_SEC = 103, NVML_GPM_METRIC_C2C_LINK0_TOTAL_TX_PER_SEC = 104, NVML_GPM_METRIC_C2C_LINK0_TOTAL_RX_PER_SEC = 105, NVML_GPM_METRIC_C2C_LINK0_DATA_TX_PER_SEC = 106, NVML_GPM_METRIC_C2C_LINK0_DATA_RX_PER_SEC = 107, NVML_GPM_METRIC_C2C_LINK1_TOTAL_TX_PER_SEC = 108, NVML_GPM_METRIC_C2C_LINK1_TOTAL_RX_PER_SEC = 109, NVML_GPM_METRIC_C2C_LINK1_DATA_TX_PER_SEC = 110, NVML_GPM_METRIC_C2C_LINK1_DATA_RX_PER_SEC = 111, NVML_GPM_METRIC_C2C_LINK2_TOTAL_TX_PER_SEC = 112, NVML_GPM_METRIC_C2C_LINK2_TOTAL_RX_PER_SEC = 113, NVML_GPM_METRIC_C2C_LINK2_DATA_TX_PER_SEC = 114, NVML_GPM_METRIC_C2C_LINK2_DATA_RX_PER_SEC = 115, NVML_GPM_METRIC_C2C_LINK3_TOTAL_TX_PER_SEC = 116, NVML_GPM_METRIC_C2C_LINK3_TOTAL_RX_PER_SEC = 117, NVML_GPM_METRIC_C2C_LINK3_DATA_TX_PER_SEC = 118, NVML_GPM_METRIC_C2C_LINK3_DATA_RX_PER_SEC = 119, NVML_GPM_METRIC_C2C_LINK4_TOTAL_TX_PER_SEC = 120, NVML_GPM_METRIC_C2C_LINK4_TOTAL_RX_PER_SEC = 121, NVML_GPM_METRIC_C2C_LINK4_DATA_TX_PER_SEC = 122, NVML_GPM_METRIC_C2C_LINK4_DATA_RX_PER_SEC = 123, NVML_GPM_METRIC_C2C_LINK5_TOTAL_TX_PER_SEC = 124, NVML_GPM_METRIC_C2C_LINK5_TOTAL_RX_PER_SEC = 125, NVML_GPM_METRIC_C2C_LINK5_DATA_TX_PER_SEC = 126, NVML_GPM_METRIC_C2C_LINK5_DATA_RX_PER_SEC = 127, NVML_GPM_METRIC_C2C_LINK6_TOTAL_TX_PER_SEC = 128, NVML_GPM_METRIC_C2C_LINK6_TOTAL_RX_PER_SEC = 129, NVML_GPM_METRIC_C2C_LINK6_DATA_TX_PER_SEC = 130, NVML_GPM_METRIC_C2C_LINK6_DATA_RX_PER_SEC = 131, NVML_GPM_METRIC_C2C_LINK7_TOTAL_TX_PER_SEC = 132, NVML_GPM_METRIC_C2C_LINK7_TOTAL_RX_PER_SEC = 133, NVML_GPM_METRIC_C2C_LINK7_DATA_TX_PER_SEC = 134, NVML_GPM_METRIC_C2C_LINK7_DATA_RX_PER_SEC = 135, NVML_GPM_METRIC_C2C_LINK8_TOTAL_TX_PER_SEC = 136, NVML_GPM_METRIC_C2C_LINK8_TOTAL_RX_PER_SEC = 137, NVML_GPM_METRIC_C2C_LINK8_DATA_TX_PER_SEC = 138, NVML_GPM_METRIC_C2C_LINK8_DATA_RX_PER_SEC = 139, NVML_GPM_METRIC_C2C_LINK9_TOTAL_TX_PER_SEC = 140, NVML_GPM_METRIC_C2C_LINK9_TOTAL_RX_PER_SEC = 141, NVML_GPM_METRIC_C2C_LINK9_DATA_TX_PER_SEC = 142, NVML_GPM_METRIC_C2C_LINK9_DATA_RX_PER_SEC = 143, NVML_GPM_METRIC_C2C_LINK10_TOTAL_TX_PER_SEC = 144, NVML_GPM_METRIC_C2C_LINK10_TOTAL_RX_PER_SEC = 145, NVML_GPM_METRIC_C2C_LINK10_DATA_TX_PER_SEC = 146, NVML_GPM_METRIC_C2C_LINK10_DATA_RX_PER_SEC = 147, NVML_GPM_METRIC_C2C_LINK11_TOTAL_TX_PER_SEC = 148, NVML_GPM_METRIC_C2C_LINK11_TOTAL_RX_PER_SEC = 149, NVML_GPM_METRIC_C2C_LINK11_DATA_TX_PER_SEC = 150, NVML_GPM_METRIC_C2C_LINK11_DATA_RX_PER_SEC = 151, NVML_GPM_METRIC_C2C_LINK12_TOTAL_TX_PER_SEC = 152, NVML_GPM_METRIC_C2C_LINK12_TOTAL_RX_PER_SEC = 153, NVML_GPM_METRIC_C2C_LINK12_DATA_TX_PER_SEC = 154, NVML_GPM_METRIC_C2C_LINK12_DATA_RX_PER_SEC = 155, NVML_GPM_METRIC_C2C_LINK13_TOTAL_TX_PER_SEC = 156, NVML_GPM_METRIC_C2C_LINK13_TOTAL_RX_PER_SEC = 157, NVML_GPM_METRIC_C2C_LINK13_DATA_TX_PER_SEC = 158, NVML_GPM_METRIC_C2C_LINK13_DATA_RX_PER_SEC = 159, NVML_GPM_METRIC_HOSTMEM_CACHE_HIT = 160, NVML_GPM_METRIC_HOSTMEM_CACHE_MISS = 161, NVML_GPM_METRIC_PEERMEM_CACHE_HIT = 162, NVML_GPM_METRIC_PEERMEM_CACHE_MISS = 163, NVML_GPM_METRIC_DRAM_CACHE_HIT = 164, NVML_GPM_METRIC_DRAM_CACHE_MISS = 165, NVML_GPM_METRIC_NVENC_0_UTIL = 166, NVML_GPM_METRIC_NVENC_1_UTIL = 167, NVML_GPM_METRIC_NVENC_2_UTIL = 168, NVML_GPM_METRIC_NVENC_3_UTIL = 169, NVML_GPM_METRIC_GR0_CTXSW_CYCLES_ELAPSED = 170, NVML_GPM_METRIC_GR0_CTXSW_CYCLES_ACTIVE = 171, NVML_GPM_METRIC_GR0_CTXSW_REQUESTS = 172, NVML_GPM_METRIC_GR0_CTXSW_CYCLES_PER_REQ = 173, NVML_GPM_METRIC_GR0_CTXSW_ACTIVE_PCT = 174, NVML_GPM_METRIC_GR1_CTXSW_CYCLES_ELAPSED = 175, NVML_GPM_METRIC_GR1_CTXSW_CYCLES_ACTIVE = 176, NVML_GPM_METRIC_GR1_CTXSW_REQUESTS = 177, NVML_GPM_METRIC_GR1_CTXSW_CYCLES_PER_REQ = 178, NVML_GPM_METRIC_GR1_CTXSW_ACTIVE_PCT = 179, NVML_GPM_METRIC_GR2_CTXSW_CYCLES_ELAPSED = 180, NVML_GPM_METRIC_GR2_CTXSW_CYCLES_ACTIVE = 181, NVML_GPM_METRIC_GR2_CTXSW_REQUESTS = 182, NVML_GPM_METRIC_GR2_CTXSW_CYCLES_PER_REQ = 183, NVML_GPM_METRIC_GR2_CTXSW_ACTIVE_PCT = 184, NVML_GPM_METRIC_GR3_CTXSW_CYCLES_ELAPSED = 185, NVML_GPM_METRIC_GR3_CTXSW_CYCLES_ACTIVE = 186, NVML_GPM_METRIC_GR3_CTXSW_REQUESTS = 187, NVML_GPM_METRIC_GR3_CTXSW_CYCLES_PER_REQ = 188, NVML_GPM_METRIC_GR3_CTXSW_ACTIVE_PCT = 189, NVML_GPM_METRIC_GR4_CTXSW_CYCLES_ELAPSED = 190, NVML_GPM_METRIC_GR4_CTXSW_CYCLES_ACTIVE = 191, NVML_GPM_METRIC_GR4_CTXSW_REQUESTS = 192, NVML_GPM_METRIC_GR4_CTXSW_CYCLES_PER_REQ = 193, NVML_GPM_METRIC_GR4_CTXSW_ACTIVE_PCT = 194, NVML_GPM_METRIC_GR5_CTXSW_CYCLES_ELAPSED = 195, NVML_GPM_METRIC_GR5_CTXSW_CYCLES_ACTIVE = 196, NVML_GPM_METRIC_GR5_CTXSW_REQUESTS = 197, NVML_GPM_METRIC_GR5_CTXSW_CYCLES_PER_REQ = 198, NVML_GPM_METRIC_GR5_CTXSW_ACTIVE_PCT = 199, NVML_GPM_METRIC_GR6_CTXSW_CYCLES_ELAPSED = 200, NVML_GPM_METRIC_GR6_CTXSW_CYCLES_ACTIVE = 201, NVML_GPM_METRIC_GR6_CTXSW_REQUESTS = 202, NVML_GPM_METRIC_GR6_CTXSW_CYCLES_PER_REQ = 203, NVML_GPM_METRIC_GR6_CTXSW_ACTIVE_PCT = 204, NVML_GPM_METRIC_GR7_CTXSW_CYCLES_ELAPSED = 205, NVML_GPM_METRIC_GR7_CTXSW_CYCLES_ACTIVE = 206, NVML_GPM_METRIC_GR7_CTXSW_REQUESTS = 207, NVML_GPM_METRIC_GR7_CTXSW_CYCLES_PER_REQ = 208, NVML_GPM_METRIC_GR7_CTXSW_ACTIVE_PCT = 209, NVML_GPM_METRIC_MAX = 210, //!< Maximum value above +1. Note that changing this should also change NVML_GPM_METRICS_GET_VERSION due to struct size change } nvmlGpmMetricId_t; /** @} */ // @defgroup nvmlGpmEnums /***************************************************************************************************/ /** @defgroup nvmlGpmStructs GPM Structs * @{ */ /***************************************************************************************************/ /** * Handle to an allocated GPM sample allocated with nvmlGpmSampleAlloc(). Free this with nvmlGpmSampleFree(). */ typedef struct { struct nvmlGpmSample_st* handle; } nvmlGpmSample_t; /** * GPM metric information. */ typedef struct { unsigned int metricId; //!< IN: NVML_GPM_METRIC_? define of which metric to retrieve nvmlReturn_t nvmlReturn; //!< OUT: Status of this metric. If this is nonzero, then value is not valid double value; //!< OUT: Value of this metric. Is only valid if nvmlReturn is 0 (NVML_SUCCESS) struct { char *shortName; char *longName; char *unit; } metricInfo; //!< OUT: Metric name and unit. Those can be NULL if not defined } nvmlGpmMetric_t; /** * GPM buffer information. */ typedef struct { unsigned int version; //!< IN: Set to NVML_GPM_METRICS_GET_VERSION unsigned int numMetrics; //!< IN: How many metrics to retrieve in metrics[] nvmlGpmSample_t sample1; //!< IN: Sample buffer nvmlGpmSample_t sample2; //!< IN: Sample buffer nvmlGpmMetric_t metrics[NVML_GPM_METRIC_MAX]; //!< IN/OUT: Array of metrics. Set metricId on call. See nvmlReturn and value on return } nvmlGpmMetricsGet_t; #define NVML_GPM_METRICS_GET_VERSION 1 /** * GPM device information. */ typedef struct { unsigned int version; //!< IN: Set to NVML_GPM_SUPPORT_VERSION unsigned int isSupportedDevice; //!< OUT: Indicates device support } nvmlGpmSupport_t; #define NVML_GPM_SUPPORT_VERSION 1 /** @} */ // @defgroup nvmlGPMStructs /***************************************************************************************************/ /** @defgroup nvmlGpmFunctions GPM Functions * @{ */ /***************************************************************************************************/ /** * Calculate GPM metrics from two samples. * * For Hopper &tm; or newer fully supported devices. * * To retrieve metrics, the user must first allocate the two sample buffers at \a metricsGet->sample1 * and \a metricsGet->sample2 by calling \a nvmlGpmSampleAlloc(). Next, the user should fill in the ID of each metric * in \a metricsGet->metrics[i].metricId and specify the total number of metrics to retrieve in \a metricsGet->numMetrics, * The version should be set to NVML_GPM_METRICS_GET_VERSION in \a metricsGet->version. The user then calls the * \a nvmlGpmSampleGet() API twice to obtain 2 samples of counters. \note that the interval between these * two \a nvmlGpmSampleGet() calls should be greater than 100ms due to the internal sample refresh rate. * Finally, the user calls \a nvmlGpmMetricsGet to retrieve the metrics, which will be stored at \a metricsGet->metrics * * @param metricsGet IN/OUT: populated \a nvmlGpmMetricsGet_t struct * * @return * - \ref NVML_SUCCESS on success * - Nonzero NVML_ERROR_? enum on error */ nvmlReturn_t DECLDIR nvmlGpmMetricsGet(nvmlGpmMetricsGet_t *metricsGet); /** * Free an allocated sample buffer that was allocated with \ref nvmlGpmSampleAlloc() * * For Hopper &tm; or newer fully supported devices. * * @param gpmSample Sample to free * * @return * - \ref NVML_SUCCESS on success * - \ref NVML_ERROR_INVALID_ARGUMENT if an invalid pointer is provided */ nvmlReturn_t DECLDIR nvmlGpmSampleFree(nvmlGpmSample_t gpmSample); /** * Allocate a sample buffer to be used with NVML GPM . You will need to allocate * at least two of these buffers to use with the NVML GPM feature * * For Hopper &tm; or newer fully supported devices. * * @param gpmSample Where the allocated sample will be stored * * @return * - \ref NVML_SUCCESS on success * - \ref NVML_ERROR_INVALID_ARGUMENT if an invalid pointer is provided * - \ref NVML_ERROR_MEMORY if system memory is insufficient */ nvmlReturn_t DECLDIR nvmlGpmSampleAlloc(nvmlGpmSample_t *gpmSample); /** * Read a sample of GPM metrics into the provided \a gpmSample buffer. After * two samples are gathered, you can call nvmlGpmMetricGet on those samples to * retrive metrics * * For Hopper &tm; or newer fully supported devices. * * @note The interval between two \a nvmlGpmSampleGet() calls should be greater than 100ms due to * the internal sample refresh rate. * * @param device Device to get samples for * @param gpmSample Buffer to read samples into * * @return * - \ref NVML_SUCCESS on success * - Nonzero NVML_ERROR_? enum on error */ nvmlReturn_t DECLDIR nvmlGpmSampleGet(nvmlDevice_t device, nvmlGpmSample_t gpmSample); /** * Read a sample of GPM metrics into the provided \a gpmSample buffer for a MIG GPU Instance. * * After two samples are gathered, you can call nvmlGpmMetricGet on those * samples to retrive metrics * * For Hopper &tm; or newer fully supported devices. * * @note The interval between two \a nvmlGpmMigSampleGet() calls should be greater than 100ms due to * the internal sample refresh rate. * * @param device Device to get samples for * @param gpuInstanceId MIG GPU Instance ID * @param gpmSample Buffer to read samples into * * @return * - \ref NVML_SUCCESS on success * - Nonzero NVML_ERROR_? enum on error */ nvmlReturn_t DECLDIR nvmlGpmMigSampleGet(nvmlDevice_t device, unsigned int gpuInstanceId, nvmlGpmSample_t gpmSample); /** * Indicate whether the supplied device supports GPM * * For Hopper &tm; or newer fully supported devices. * * @param device NVML device to query for * @param gpmSupport Structure to indicate GPM support \a nvmlGpmSupport_t. Indicates * GPM support per system for the supplied device * * @return * - NVML_SUCCESS on success * - Nonzero NVML_ERROR_? enum if there is an error in processing the query */ nvmlReturn_t DECLDIR nvmlGpmQueryDeviceSupport(nvmlDevice_t device, nvmlGpmSupport_t *gpmSupport); /* GPM Stream State */ /** * Get GPM stream state. * * For Hopper &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param device The identifier of the target device * @param state Returns GPM stream state * NVML_FEATURE_DISABLED or NVML_FEATURE_ENABLED * * @return * - \ref NVML_SUCCESS if \a current GPM stream state were successfully queried * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a state is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlGpmQueryIfStreamingEnabled(nvmlDevice_t device, unsigned int *state); /** * Set GPM stream state. * * For Hopper &tm; or newer fully supported devices. * Supported on Linux, Windows TCC. * * @param device The identifier of the target device * @param state GPM stream state, * NVML_FEATURE_DISABLED or NVML_FEATURE_ENABLED * * @return * - \ref NVML_SUCCESS if \a current GPM stream state is successfully set * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid * - \ref NVML_ERROR_NOT_SUPPORTED if this query is not supported by the device */ nvmlReturn_t DECLDIR nvmlGpmSetStreamingEnabled(nvmlDevice_t device, unsigned int state); /** @} */ // @defgroup nvmlGpmFunctions /** @} */ // @defgroup GPM #define NVML_DEV_CAP_EGM (1 << 0) // Extended GPU memory /** * Device capabilities */ typedef struct { unsigned int version; //!< the API version number unsigned int capMask; //!< OUT: Bit mask of capabilities. } nvmlDeviceCapabilities_v1_t; typedef nvmlDeviceCapabilities_v1_t nvmlDeviceCapabilities_t; #define nvmlDeviceCapabilities_v1 NVML_STRUCT_VERSION(DeviceCapabilities, 1) /** * Get device capabilities * * See \ref nvmlDeviceCapabilities_v1_t for more information on the struct. * * @param device The identifier of the target device * @param caps Returns GPU's capabilities * * @return * - \ref NVML_SUCCESS If the query is success * - \ref NVML_ERROR_UNINITIALIZED If the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT If \a device is invalid or \a counters is NULL * - \ref NVML_ERROR_NOT_SUPPORTED If the device does not support this feature * - \ref NVML_ERROR_GPU_IS_LOST If the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH If the provided version is invalid/unsupported * - \ref NVML_ERROR_UNKNOWN On any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetCapabilities(nvmlDevice_t device, nvmlDeviceCapabilities_t *caps); /* * Generic bitmask to hold 255 bits, represented by 8 elements of 32 bits */ #define NVML_255_MASK_BITS_PER_ELEM 32 #define NVML_255_MASK_NUM_ELEMS 8 #define NVML_255_MASK_BIT_SET(index, nvmlMask) \ nvmlMask.mask[index / NVML_255_MASK_BITS_PER_ELEM] |= (1 << (index % NVML_255_MASK_BITS_PER_ELEM)) #define NVML_255_MASK_BIT_GET(index, nvmlMask) \ nvmlMask.mask[index / NVML_255_MASK_BITS_PER_ELEM] & (1 << (index % NVML_255_MASK_BITS_PER_ELEM)) #define NVML_255_MASK_BIT_SET_PTR(index, nvmlMask) \ nvmlMask->mask[index / NVML_255_MASK_BITS_PER_ELEM] |= (1 << (index % NVML_255_MASK_BITS_PER_ELEM)) #define NVML_255_MASK_BIT_GET_PTR(index, nvmlMask) \ nvmlMask->mask[index / NVML_255_MASK_BITS_PER_ELEM] & (1 << (index % NVML_255_MASK_BITS_PER_ELEM)) typedef struct { unsigned int mask[NVML_255_MASK_NUM_ELEMS]; //profileId is used and * the rest of the structure is ignored. * * @return * - \ref NVML_SUCCESS if the Desired Profile was successfully set * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or structure was NULL * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change the profile number * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device * **/ nvmlReturn_t DECLDIR nvmlDevicePowerSmoothingActivatePresetProfile(nvmlDevice_t device, nvmlPowerSmoothingProfile_t *profile); /** * Update the value of a specific profile parameter contained within \ref nvmlPowerSmoothingProfile_v1_t. * Requires root/admin permissions. * * %BLACKWELL_OR_NEWER% * * NVML_POWER_SMOOTHING_PROFILE_PARAM_PERCENT_TMP_FLOOR expects a value as a percentage from 00.00-100.00% * NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_UP_RATE expects a value in W/s * NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_RATE expects a value in W/s * NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_HYSTERESIS expects a value in ms * * @param device The identifier of the target device * @param profile Reference to \ref nvmlPowerSmoothingProfile_v1_t struct * * @return * - \ref NVML_SUCCESS if the Active Profile was successfully set * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or profile parameter/value was invalid * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change any profile parameters * - \ref NVML_ERROR_ARGUMENT_VERSION_MISMATCH if the structure version is not supported * **/ nvmlReturn_t DECLDIR nvmlDevicePowerSmoothingUpdatePresetProfileParam(nvmlDevice_t device, nvmlPowerSmoothingProfile_t *profile); /** * Enable or disable the Power Smoothing Feature. * Requires root/admin permissions. * * %BLACKWELL_OR_NEWER% * * See \ref nvmlEnableState_t for details on allowed states * * @param device The identifier of the target device * @param state Reference to \ref nvmlPowerSmoothingState_v1_t * * @return * - \ref NVML_SUCCESS if the feature state was successfully set * - \ref NVML_ERROR_INVALID_ARGUMENT if device is invalid or state is NULL * - \ref NVML_ERROR_NO_PERMISSION if user does not have permission to change feature state * - \ref NVML_ERROR_NOT_SUPPORTED if this feature is not supported by the device * **/ nvmlReturn_t DECLDIR nvmlDevicePowerSmoothingSetState(nvmlDevice_t device, nvmlPowerSmoothingState_t *state); /** @} */ // @defgroup /** * Retrieves the counts of SRAM unique uncorrected ECC errors * * %BLACKWELL_OR_NEWER% * * Reads SRAM unique uncorrected ECC error counts. The total number of unique errors is returned by * \a errorCounts->entryCount. Error counts are returned as an array of in the caller-supplied buffer pointed at by * \a errorCounts->entries. Each error count entry holds the location/address of the unique error, the error count and * whether the error is parity or not. * * To read SRAM unique uncorrected ECC error counts, first determine the size of buffer required to hold the error * counts by invoking the function with \a errorCounts->entries set to NULL. The required array size is returned in * \a errorCounts->entryCount. The caller should allocate a buffer of size "errorCounts->entryCount * * sizeof(nvmlEccSramUniqueUncorrectedErrorCounts_t)". Invoke the function again with the allocated buffer passed in * \a errorCounts->entries. This time \a errorCounts->entryCount will be taken as the entry array size that caller * allocates for \a errorCounts->entries. * * On successful return of the second query, the function updates \a errorCounts->entries with all unique errors. This * may fail if \a errorCounts->entryCount is smaller than the actual number of unique errors. This can happen in cases * like new errors occur since the previous query of \a errorCounts->entryCount. No matter the query succeeds or not, * the latest number of unique errors will be returned in \a errorCounts->entryCount. * * @note The query is only supported when ECC mode is enabled. * * @param device The identifier of the target device * @param errorCounts Pointer to caller-supplied array which returns the unique error count entries * * @return * - \ref NVML_SUCCESS if \a utilization has been populated * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid, \a errorCounts->entryCount is NULL * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature or ECC mods is not enabled * - \ref NVML_ERROR_INSUFFICIENT_SIZE if the allocated error entry array is not big enough * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible * - \ref NVML_ERROR_UNKNOWN on any unexpected error */ nvmlReturn_t DECLDIR nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts(nvmlDevice_t device, nvmlEccSramUniqueUncorrectedErrorCounts_t *errorCounts); /** * NVML API versioning support */ #ifdef NVML_NO_UNVERSIONED_FUNC_DEFS nvmlReturn_t DECLDIR nvmlInit(void); nvmlReturn_t DECLDIR nvmlDeviceGetCount(unsigned int *deviceCount); nvmlReturn_t DECLDIR nvmlDeviceGetHandleByIndex(unsigned int index, nvmlDevice_t *device); nvmlReturn_t DECLDIR nvmlDeviceGetHandleByPciBusId(const char *pciBusId, nvmlDevice_t *device); nvmlReturn_t DECLDIR nvmlDeviceGetPciInfo(nvmlDevice_t device, nvmlPciInfo_t *pci); nvmlReturn_t DECLDIR nvmlDeviceGetPciInfo_v2(nvmlDevice_t device, nvmlPciInfo_t *pci); nvmlReturn_t DECLDIR nvmlDeviceGetNvLinkRemotePciInfo(nvmlDevice_t device, unsigned int link, nvmlPciInfo_t *pci); nvmlReturn_t DECLDIR nvmlDeviceGetGridLicensableFeatures(nvmlDevice_t device, nvmlGridLicensableFeatures_t *pGridLicensableFeatures); nvmlReturn_t DECLDIR nvmlDeviceGetGridLicensableFeatures_v2(nvmlDevice_t device, nvmlGridLicensableFeatures_t *pGridLicensableFeatures); nvmlReturn_t DECLDIR nvmlDeviceGetGridLicensableFeatures_v3(nvmlDevice_t device, nvmlGridLicensableFeatures_t *pGridLicensableFeatures); nvmlReturn_t DECLDIR nvmlDeviceRemoveGpu(nvmlPciInfo_t *pciInfo); nvmlReturn_t DECLDIR nvmlEventSetWait(nvmlEventSet_t set, nvmlEventData_t * data, unsigned int timeoutms); nvmlReturn_t DECLDIR nvmlDeviceGetAttributes(nvmlDevice_t device, nvmlDeviceAttributes_t *attributes); nvmlReturn_t DECLDIR nvmlComputeInstanceGetInfo(nvmlComputeInstance_t computeInstance, nvmlComputeInstanceInfo_t *info); nvmlReturn_t DECLDIR nvmlDeviceGetComputeRunningProcesses(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_v1_t *infos); nvmlReturn_t DECLDIR nvmlDeviceGetComputeRunningProcesses_v2(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_v2_t *infos); nvmlReturn_t DECLDIR nvmlDeviceGetGraphicsRunningProcesses(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_v1_t *infos); nvmlReturn_t DECLDIR nvmlDeviceGetGraphicsRunningProcesses_v2(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_v2_t *infos); nvmlReturn_t DECLDIR nvmlDeviceGetMPSComputeRunningProcesses(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_v1_t *infos); nvmlReturn_t DECLDIR nvmlDeviceGetMPSComputeRunningProcesses_v2(nvmlDevice_t device, unsigned int *infoCount, nvmlProcessInfo_v2_t *infos); nvmlReturn_t DECLDIR nvmlDeviceGetGpuInstancePossiblePlacements(nvmlDevice_t device, unsigned int profileId, nvmlGpuInstancePlacement_t *placements, unsigned int *count); nvmlReturn_t DECLDIR nvmlVgpuInstanceGetLicenseInfo(nvmlVgpuInstance_t vgpuInstance, nvmlVgpuLicenseInfo_t *licenseInfo); nvmlReturn_t DECLDIR nvmlDeviceGetDriverModel(nvmlDevice_t device, nvmlDriverModel_t *current, nvmlDriverModel_t *pending); #endif // #ifdef NVML_NO_UNVERSIONED_FUNC_DEFS #if defined(NVML_NO_UNVERSIONED_FUNC_DEFS) // We don't define APIs to run new versions if this guard is present so there is // no need to undef #elif defined(__NVML_API_VERSION_INTERNAL) #undef nvmlDeviceGetGraphicsRunningProcesses #undef nvmlDeviceGetComputeRunningProcesses #undef nvmlDeviceGetMPSComputeRunningProcesses #undef nvmlDeviceGetAttributes #undef nvmlComputeInstanceGetInfo #undef nvmlEventSetWait #undef nvmlDeviceGetGridLicensableFeatures #undef nvmlDeviceRemoveGpu #undef nvmlDeviceGetNvLinkRemotePciInfo #undef nvmlDeviceGetPciInfo #undef nvmlDeviceGetCount #undef nvmlDeviceGetHandleByIndex #undef nvmlDeviceGetHandleByPciBusId #undef nvmlInit #undef nvmlBlacklistDeviceInfo_t #undef nvmlGetBlacklistDeviceCount #undef nvmlGetBlacklistDeviceInfoByIndex #undef nvmlDeviceGetGpuInstancePossiblePlacements #undef nvmlVgpuInstanceGetLicenseInfo #undef nvmlDeviceGetDriverModel #undef nvmlDeviceSetPowerManagementLimit #endif #ifdef __cplusplus } #endif #endif NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/refcount.go000066400000000000000000000014251520540370700266630ustar00rootroot00000000000000/** # Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ package nvml type refcount int func (r *refcount) IncOnNoError(err error) { if err == nil { (*r)++ } } func (r *refcount) DecOnNoError(err error) { if err == nil && (*r) > 0 { (*r)-- } } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/return.go000066400000000000000000000060101520540370700263500ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml import ( "fmt" ) // nvml.ErrorString() func (l *library) ErrorString(r Return) string { return r.Error() } // String returns the string representation of a Return. func (r Return) String() string { return r.Error() } // Error returns the string representation of a Return. func (r Return) Error() string { return errorStringFunc(r) } // Assigned to nvml.ErrorString if the system nvml library is in use. var errorStringFunc = defaultErrorStringFunc // defaultErrorStringFunc provides a basic nvmlErrorString implementation. // This allows the nvml.ErrorString function to be used even if the NVML library // is not loaded. var defaultErrorStringFunc = func(r Return) string { switch r { case SUCCESS: return "SUCCESS" case ERROR_UNINITIALIZED: return "ERROR_UNINITIALIZED" case ERROR_INVALID_ARGUMENT: return "ERROR_INVALID_ARGUMENT" case ERROR_NOT_SUPPORTED: return "ERROR_NOT_SUPPORTED" case ERROR_NO_PERMISSION: return "ERROR_NO_PERMISSION" case ERROR_ALREADY_INITIALIZED: return "ERROR_ALREADY_INITIALIZED" case ERROR_NOT_FOUND: return "ERROR_NOT_FOUND" case ERROR_INSUFFICIENT_SIZE: return "ERROR_INSUFFICIENT_SIZE" case ERROR_INSUFFICIENT_POWER: return "ERROR_INSUFFICIENT_POWER" case ERROR_DRIVER_NOT_LOADED: return "ERROR_DRIVER_NOT_LOADED" case ERROR_TIMEOUT: return "ERROR_TIMEOUT" case ERROR_IRQ_ISSUE: return "ERROR_IRQ_ISSUE" case ERROR_LIBRARY_NOT_FOUND: return "ERROR_LIBRARY_NOT_FOUND" case ERROR_FUNCTION_NOT_FOUND: return "ERROR_FUNCTION_NOT_FOUND" case ERROR_CORRUPTED_INFOROM: return "ERROR_CORRUPTED_INFOROM" case ERROR_GPU_IS_LOST: return "ERROR_GPU_IS_LOST" case ERROR_RESET_REQUIRED: return "ERROR_RESET_REQUIRED" case ERROR_OPERATING_SYSTEM: return "ERROR_OPERATING_SYSTEM" case ERROR_LIB_RM_VERSION_MISMATCH: return "ERROR_LIB_RM_VERSION_MISMATCH" case ERROR_IN_USE: return "ERROR_IN_USE" case ERROR_MEMORY: return "ERROR_MEMORY" case ERROR_NO_DATA: return "ERROR_NO_DATA" case ERROR_VGPU_ECC_NOT_SUPPORTED: return "ERROR_VGPU_ECC_NOT_SUPPORTED" case ERROR_INSUFFICIENT_RESOURCES: return "ERROR_INSUFFICIENT_RESOURCES" case ERROR_FREQ_NOT_SUPPORTED: return "ERROR_FREQ_NOT_SUPPORTED" case ERROR_ARGUMENT_VERSION_MISMATCH: return "ERROR_ARGUMENT_VERSION_MISMATCH" case ERROR_DEPRECATED: return "ERROR_DEPRECATED" case ERROR_UNKNOWN: return "ERROR_UNKNOWN" default: return fmt.Sprintf("unknown return value: %d", r) } } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/system.go000066400000000000000000000124611520540370700263640ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml // nvml.SystemGetDriverVersion() func (l *library) SystemGetDriverVersion() (string, Return) { Version := make([]byte, SYSTEM_DRIVER_VERSION_BUFFER_SIZE) ret := nvmlSystemGetDriverVersion(&Version[0], SYSTEM_DRIVER_VERSION_BUFFER_SIZE) return string(Version[:clen(Version)]), ret } // nvml.SystemGetNVMLVersion() func (l *library) SystemGetNVMLVersion() (string, Return) { Version := make([]byte, SYSTEM_NVML_VERSION_BUFFER_SIZE) ret := nvmlSystemGetNVMLVersion(&Version[0], SYSTEM_NVML_VERSION_BUFFER_SIZE) return string(Version[:clen(Version)]), ret } // nvml.SystemGetCudaDriverVersion() func (l *library) SystemGetCudaDriverVersion() (int, Return) { var CudaDriverVersion int32 ret := nvmlSystemGetCudaDriverVersion(&CudaDriverVersion) return int(CudaDriverVersion), ret } // nvml.SystemGetCudaDriverVersion_v2() func (l *library) SystemGetCudaDriverVersion_v2() (int, Return) { var CudaDriverVersion int32 ret := nvmlSystemGetCudaDriverVersion_v2(&CudaDriverVersion) return int(CudaDriverVersion), ret } // nvml.SystemGetProcessName() func (l *library) SystemGetProcessName(pid int) (string, Return) { name := make([]byte, SYSTEM_PROCESS_NAME_BUFFER_SIZE) ret := nvmlSystemGetProcessName(uint32(pid), &name[0], SYSTEM_PROCESS_NAME_BUFFER_SIZE) return string(name[:clen(name)]), ret } // nvml.SystemGetHicVersion() func (l *library) SystemGetHicVersion() ([]HwbcEntry, Return) { var hwbcCount uint32 = 1 // Will be reduced upon returning for { hwbcEntries := make([]HwbcEntry, hwbcCount) ret := nvmlSystemGetHicVersion(&hwbcCount, &hwbcEntries[0]) if ret == SUCCESS { return hwbcEntries[:hwbcCount], ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } hwbcCount *= 2 } } // nvml.SystemGetTopologyGpuSet() func (l *library) SystemGetTopologyGpuSet(cpuNumber int) ([]Device, Return) { var count uint32 ret := nvmlSystemGetTopologyGpuSet(uint32(cpuNumber), &count, nil) if ret != SUCCESS { return nil, ret } if count == 0 { return []Device{}, ret } deviceArray := make([]nvmlDevice, count) ret = nvmlSystemGetTopologyGpuSet(uint32(cpuNumber), &count, &deviceArray[0]) return convertSlice[nvmlDevice, Device](deviceArray), ret } // nvml.SystemGetConfComputeCapabilities() func (l *library) SystemGetConfComputeCapabilities() (ConfComputeSystemCaps, Return) { var capabilities ConfComputeSystemCaps ret := nvmlSystemGetConfComputeCapabilities(&capabilities) return capabilities, ret } // nvml.SystemGetConfComputeState() func (l *library) SystemGetConfComputeState() (ConfComputeSystemState, Return) { var state ConfComputeSystemState ret := nvmlSystemGetConfComputeState(&state) return state, ret } // nvml.SystemGetConfComputeGpusReadyState() func (l *library) SystemGetConfComputeGpusReadyState() (uint32, Return) { var isAcceptingWork uint32 ret := nvmlSystemGetConfComputeGpusReadyState(&isAcceptingWork) return isAcceptingWork, ret } // nvml.SystemSetConfComputeGpusReadyState() func (l *library) SystemSetConfComputeGpusReadyState(isAcceptingWork uint32) Return { return nvmlSystemSetConfComputeGpusReadyState(isAcceptingWork) } // nvml.SystemSetNvlinkBwMode() func (l *library) SystemSetNvlinkBwMode(nvlinkBwMode uint32) Return { return nvmlSystemSetNvlinkBwMode(nvlinkBwMode) } // nvml.SystemGetNvlinkBwMode() func (l *library) SystemGetNvlinkBwMode() (uint32, Return) { var nvlinkBwMode uint32 ret := nvmlSystemGetNvlinkBwMode(&nvlinkBwMode) return nvlinkBwMode, ret } // nvml.SystemGetConfComputeKeyRotationThresholdInfo() func (l *library) SystemGetConfComputeKeyRotationThresholdInfo() (ConfComputeGetKeyRotationThresholdInfo, Return) { var keyRotationThresholdInfo ConfComputeGetKeyRotationThresholdInfo keyRotationThresholdInfo.Version = STRUCT_VERSION(keyRotationThresholdInfo, 1) ret := nvmlSystemGetConfComputeKeyRotationThresholdInfo(&keyRotationThresholdInfo) return keyRotationThresholdInfo, ret } // nvml.SystemGetConfComputeSettings() func (l *library) SystemGetConfComputeSettings() (SystemConfComputeSettings, Return) { var settings SystemConfComputeSettings settings.Version = STRUCT_VERSION(settings, 1) ret := nvmlSystemGetConfComputeSettings(&settings) return settings, ret } // nvml.SystemSetConfComputeKeyRotationThresholdInfo() func (l *library) SystemSetConfComputeKeyRotationThresholdInfo(keyRotationThresholdInfo ConfComputeSetKeyRotationThresholdInfo) Return { return nvmlSystemSetConfComputeKeyRotationThresholdInfo(&keyRotationThresholdInfo) } // nvml.SystemGetDriverBranch() func (l *library) SystemGetDriverBranch() (SystemDriverBranchInfo, Return) { var branchInfo SystemDriverBranchInfo branchInfo.Version = STRUCT_VERSION(branchInfo, 1) ret := nvmlSystemGetDriverBranch(&branchInfo, SYSTEM_DRIVER_VERSION_BUFFER_SIZE) return branchInfo, ret } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/types_gen.go000066400000000000000000000676761520540370700270570ustar00rootroot00000000000000// Code generated by cmd/cgo -godefs; DO NOT EDIT. // cgo -godefs types.go package nvml import "unsafe" type nvmlDevice struct { Handle *_Ctype_struct_nvmlDevice_st } type nvmlGpuInstance struct { Handle *_Ctype_struct_nvmlGpuInstance_st } type PciInfoExt_v1 struct { Version uint32 Domain uint32 Bus uint32 Device uint32 PciDeviceId uint32 PciSubSystemId uint32 BaseClass uint32 SubClass uint32 BusId [32]uint8 } type PciInfoExt struct { Version uint32 Domain uint32 Bus uint32 Device uint32 PciDeviceId uint32 PciSubSystemId uint32 BaseClass uint32 SubClass uint32 BusId [32]uint8 } type PciInfo struct { BusIdLegacy [16]uint8 Domain uint32 Bus uint32 Device uint32 PciDeviceId uint32 PciSubSystemId uint32 BusId [32]uint8 } type EccErrorCounts struct { L1Cache uint64 L2Cache uint64 DeviceMemory uint64 RegisterFile uint64 } type Utilization struct { Gpu uint32 Memory uint32 } type Memory struct { Total uint64 Free uint64 Used uint64 } type Memory_v2 struct { Version uint32 Total uint64 Reserved uint64 Free uint64 Used uint64 } type BAR1Memory struct { Bar1Total uint64 Bar1Free uint64 Bar1Used uint64 } type ProcessInfo_v1 struct { Pid uint32 UsedGpuMemory uint64 } type ProcessInfo_v2 struct { Pid uint32 UsedGpuMemory uint64 GpuInstanceId uint32 ComputeInstanceId uint32 } type ProcessInfo struct { Pid uint32 UsedGpuMemory uint64 GpuInstanceId uint32 ComputeInstanceId uint32 } type ProcessDetail_v1 struct { Pid uint32 UsedGpuMemory uint64 GpuInstanceId uint32 ComputeInstanceId uint32 UsedGpuCcProtectedMemory uint64 } type ProcessDetailList_v1 struct { Version uint32 Mode uint32 NumProcArrayEntries uint32 ProcArray *ProcessDetail_v1 } type ProcessDetailList struct { Version uint32 Mode uint32 NumProcArrayEntries uint32 ProcArray *ProcessDetail_v1 } type DeviceAttributes struct { MultiprocessorCount uint32 SharedCopyEngineCount uint32 SharedDecoderCount uint32 SharedEncoderCount uint32 SharedJpegCount uint32 SharedOfaCount uint32 GpuInstanceSliceCount uint32 ComputeInstanceSliceCount uint32 MemorySizeMB uint64 } type C2cModeInfo_v1 struct { IsC2cEnabled uint32 } type DeviceAddressingMode_v1 struct { Version uint32 Value uint32 } type DeviceAddressingMode struct { Version uint32 Value uint32 } type RepairStatus_v1 struct { Version uint32 BChannelRepairPending uint32 BTpcRepairPending uint32 } type RepairStatus struct { Version uint32 BChannelRepairPending uint32 BTpcRepairPending uint32 } type RowRemapperHistogramValues struct { Max uint32 High uint32 Partial uint32 Low uint32 None uint32 } type NvLinkUtilizationControl struct { Units uint32 Pktfilter uint32 } type BridgeChipInfo struct { Type uint32 FwVersion uint32 } type BridgeChipHierarchy struct { BridgeCount uint8 BridgeChipInfo [128]BridgeChipInfo } const sizeofValue = unsafe.Sizeof([8]byte{}) type Value [sizeofValue]byte type Sample struct { TimeStamp uint64 SampleValue [8]byte } type ViolationTime struct { ReferenceTime uint64 ViolationTime uint64 } type GpuThermalSettings struct { Count uint32 Sensor [3]_Ctype_struct___28 } type CoolerInfo_v1 struct { Version uint32 Index uint32 SignalType uint32 Target uint32 } type CoolerInfo struct { Version uint32 Index uint32 SignalType uint32 Target uint32 } const sizeofUUIDValue = unsafe.Sizeof([41]byte{}) type UUIDValue [sizeofUUIDValue]byte type UUID_v1 struct { Version uint32 Type uint32 Value [41]byte Pad_cgo_0 [3]byte } type UUID struct { Version uint32 Type uint32 Value [41]byte Pad_cgo_0 [3]byte } type Pdi_v1 struct { Version uint32 Value uint64 } type Pdi struct { Version uint32 Value uint64 } type DramEncryptionInfo_v1 struct { Version uint32 EncryptionState uint32 } type DramEncryptionInfo struct { Version uint32 EncryptionState uint32 } type MarginTemperature_v1 struct { Version uint32 MarginTemperature int32 } type MarginTemperature struct { Version uint32 MarginTemperature int32 } type ClkMonFaultInfo struct { ClkApiDomain uint32 ClkDomainFaultMask uint32 } type ClkMonStatus struct { BGlobalStatus uint32 ClkMonListSize uint32 ClkMonList [32]ClkMonFaultInfo } type ClockOffset_v1 struct { Version uint32 Type uint32 Pstate uint32 ClockOffsetMHz int32 MinClockOffsetMHz int32 MaxClockOffsetMHz int32 } type ClockOffset struct { Version uint32 Type uint32 Pstate uint32 ClockOffsetMHz int32 MinClockOffsetMHz int32 MaxClockOffsetMHz int32 } type FanSpeedInfo_v1 struct { Version uint32 Fan uint32 Speed uint32 } type FanSpeedInfo struct { Version uint32 Fan uint32 Speed uint32 } type DevicePerfModes_v1 struct { Version uint32 Str [2048]uint8 } type DevicePerfModes struct { Version uint32 Str [2048]uint8 } type DeviceCurrentClockFreqs_v1 struct { Version uint32 Str [2048]uint8 } type DeviceCurrentClockFreqs struct { Version uint32 Str [2048]uint8 } type DevicePowerMizerModes_v1 struct { CurrentMode uint32 Mode uint32 SupportedPowerMizerModes uint32 } type ProcessUtilizationSample struct { Pid uint32 TimeStamp uint64 SmUtil uint32 MemUtil uint32 EncUtil uint32 DecUtil uint32 } type ProcessUtilizationInfo_v1 struct { TimeStamp uint64 Pid uint32 SmUtil uint32 MemUtil uint32 EncUtil uint32 DecUtil uint32 JpgUtil uint32 OfaUtil uint32 Pad_cgo_0 [4]byte } type ProcessesUtilizationInfo_v1 struct { Version uint32 ProcessSamplesCount uint32 LastSeenTimeStamp uint64 ProcUtilArray *ProcessUtilizationInfo_v1 } type ProcessesUtilizationInfo struct { Version uint32 ProcessSamplesCount uint32 LastSeenTimeStamp uint64 ProcUtilArray *ProcessUtilizationInfo_v1 } type EccSramErrorStatus_v1 struct { Version uint32 AggregateUncParity uint64 AggregateUncSecDed uint64 AggregateCor uint64 VolatileUncParity uint64 VolatileUncSecDed uint64 VolatileCor uint64 AggregateUncBucketL2 uint64 AggregateUncBucketSm uint64 AggregateUncBucketPcie uint64 AggregateUncBucketMcu uint64 AggregateUncBucketOther uint64 BThresholdExceeded uint32 Pad_cgo_0 [4]byte } type EccSramErrorStatus struct { Version uint32 AggregateUncParity uint64 AggregateUncSecDed uint64 AggregateCor uint64 VolatileUncParity uint64 VolatileUncSecDed uint64 VolatileCor uint64 AggregateUncBucketL2 uint64 AggregateUncBucketSm uint64 AggregateUncBucketPcie uint64 AggregateUncBucketMcu uint64 AggregateUncBucketOther uint64 BThresholdExceeded uint32 Pad_cgo_0 [4]byte } type PlatformInfo_v1 struct { Version uint32 IbGuid [16]uint8 RackGuid [16]uint8 ChassisPhysicalSlotNumber uint8 ComputeSlotIndex uint8 NodeIndex uint8 PeerType uint8 ModuleId uint8 Pad_cgo_0 [3]byte } type PlatformInfo_v2 struct { Version uint32 IbGuid [16]uint8 ChassisSerialNumber [16]uint8 SlotNumber uint8 TrayIndex uint8 HostId uint8 PeerType uint8 ModuleId uint8 Pad_cgo_0 [3]byte } type PlatformInfo struct { Version uint32 IbGuid [16]uint8 ChassisSerialNumber [16]uint8 SlotNumber uint8 TrayIndex uint8 HostId uint8 PeerType uint8 ModuleId uint8 Pad_cgo_0 [3]byte } type EccSramUniqueUncorrectedErrorEntry_v1 struct { Unit uint32 Location uint32 Sublocation uint32 Extlocation uint32 Address uint32 IsParity uint32 Count uint32 } type EccSramUniqueUncorrectedErrorCounts_v1 struct { Version uint32 EntryCount uint32 Entries *EccSramUniqueUncorrectedErrorEntry_v1 } type EccSramUniqueUncorrectedErrorCounts struct { Version uint32 EntryCount uint32 Entries *EccSramUniqueUncorrectedErrorEntry_v1 } type DeviceArchitecture uint32 type BusType uint32 type FanControlPolicy uint32 type PowerSource uint32 type GpuDynamicPstatesInfo struct { Flags uint32 Utilization [8]_Ctype_struct___23 } type PowerScopeType byte type PowerValue_v2 struct { Version uint32 PowerScope uint8 PowerValueMw uint32 } type nvmlVgpuTypeId uint32 type nvmlVgpuInstance uint32 type VgpuHeterogeneousMode_v1 struct { Version uint32 Mode uint32 } type VgpuHeterogeneousMode struct { Version uint32 Mode uint32 } type VgpuPlacementId_v1 struct { Version uint32 PlacementId uint32 } type VgpuPlacementId struct { Version uint32 PlacementId uint32 } type VgpuPlacementList_v1 struct { Version uint32 PlacementSize uint32 Count uint32 PlacementIds *uint32 } type VgpuPlacementList_v2 struct { Version uint32 PlacementSize uint32 Count uint32 PlacementIds *uint32 Mode uint32 Pad_cgo_0 [4]byte } type VgpuPlacementList struct { Version uint32 PlacementSize uint32 Count uint32 PlacementIds *uint32 Mode uint32 Pad_cgo_0 [4]byte } type VgpuTypeBar1Info_v1 struct { Version uint32 Bar1Size uint64 } type VgpuTypeBar1Info struct { Version uint32 Bar1Size uint64 } type VgpuInstanceUtilizationSample struct { VgpuInstance uint32 TimeStamp uint64 SmUtil [8]byte MemUtil [8]byte EncUtil [8]byte DecUtil [8]byte } type VgpuInstanceUtilizationInfo_v1 struct { TimeStamp uint64 VgpuInstance uint32 Pad_cgo_0 [4]byte SmUtil [8]byte MemUtil [8]byte EncUtil [8]byte DecUtil [8]byte JpgUtil [8]byte OfaUtil [8]byte } type VgpuInstancesUtilizationInfo_v1 struct { Version uint32 SampleValType uint32 VgpuInstanceCount uint32 LastSeenTimeStamp uint64 VgpuUtilArray *VgpuInstanceUtilizationInfo_v1 } type VgpuInstancesUtilizationInfo struct { Version uint32 SampleValType uint32 VgpuInstanceCount uint32 LastSeenTimeStamp uint64 VgpuUtilArray *VgpuInstanceUtilizationInfo_v1 } type VgpuProcessUtilizationSample struct { VgpuInstance uint32 Pid uint32 ProcessName [64]uint8 TimeStamp uint64 SmUtil uint32 MemUtil uint32 EncUtil uint32 DecUtil uint32 } type VgpuProcessUtilizationInfo_v1 struct { ProcessName [64]uint8 TimeStamp uint64 VgpuInstance uint32 Pid uint32 SmUtil uint32 MemUtil uint32 EncUtil uint32 DecUtil uint32 JpgUtil uint32 OfaUtil uint32 } type VgpuProcessesUtilizationInfo_v1 struct { Version uint32 VgpuProcessCount uint32 LastSeenTimeStamp uint64 VgpuProcUtilArray *VgpuProcessUtilizationInfo_v1 } type VgpuProcessesUtilizationInfo struct { Version uint32 VgpuProcessCount uint32 LastSeenTimeStamp uint64 VgpuProcUtilArray *VgpuProcessUtilizationInfo_v1 } type VgpuRuntimeState_v1 struct { Version uint32 Size uint64 } type VgpuRuntimeState struct { Version uint32 Size uint64 } const sizeofVgpuSchedulerParams = unsafe.Sizeof([8]byte{}) type VgpuSchedulerParams [sizeofVgpuSchedulerParams]byte type VgpuSchedulerLogEntry struct { Timestamp uint64 TimeRunTotal uint64 TimeRun uint64 SwRunlistId uint32 TargetTimeSlice uint64 CumulativePreemptionTime uint64 } type VgpuSchedulerLog struct { EngineId uint32 SchedulerPolicy uint32 ArrMode uint32 SchedulerParams [8]byte EntriesCount uint32 LogEntries [200]VgpuSchedulerLogEntry } type VgpuSchedulerGetState struct { SchedulerPolicy uint32 ArrMode uint32 SchedulerParams [8]byte } const sizeofVgpuSchedulerSetParams = unsafe.Sizeof([8]byte{}) type VgpuSchedulerSetParams [sizeofVgpuSchedulerSetParams]byte type VgpuSchedulerSetState struct { SchedulerPolicy uint32 EnableARRMode uint32 SchedulerParams [8]byte } type VgpuSchedulerCapabilities struct { SupportedSchedulers [3]uint32 MaxTimeslice uint32 MinTimeslice uint32 IsArrModeSupported uint32 MaxFrequencyForARR uint32 MinFrequencyForARR uint32 MaxAvgFactorForARR uint32 MinAvgFactorForARR uint32 } type VgpuLicenseExpiry struct { Year uint32 Month uint16 Day uint16 Hour uint16 Min uint16 Sec uint16 Status uint8 Pad_cgo_0 [1]byte } type VgpuLicenseInfo struct { IsLicensed uint8 LicenseExpiry VgpuLicenseExpiry CurrentState uint32 } type GridLicenseExpiry struct { Year uint32 Month uint16 Day uint16 Hour uint16 Min uint16 Sec uint16 Status uint8 Pad_cgo_0 [1]byte } type GridLicensableFeature struct { FeatureCode uint32 FeatureState uint32 LicenseInfo [128]uint8 ProductName [128]uint8 FeatureEnabled uint32 LicenseExpiry GridLicenseExpiry } type GridLicensableFeatures struct { IsGridLicenseSupported int32 LicensableFeaturesCount uint32 GridLicensableFeatures [3]GridLicensableFeature } type VgpuTypeIdInfo_v1 struct { Version uint32 VgpuCount uint32 VgpuTypeIds *uint32 } type VgpuTypeIdInfo struct { Version uint32 VgpuCount uint32 VgpuTypeIds *uint32 } type VgpuTypeMaxInstance_v1 struct { Version uint32 VgpuTypeId uint32 MaxInstancePerGI uint32 } type VgpuTypeMaxInstance struct { Version uint32 VgpuTypeId uint32 MaxInstancePerGI uint32 } type ActiveVgpuInstanceInfo_v1 struct { Version uint32 VgpuCount uint32 VgpuInstances *uint32 } type ActiveVgpuInstanceInfo struct { Version uint32 VgpuCount uint32 VgpuInstances *uint32 } type VgpuSchedulerState_v1 struct { Version uint32 EngineId uint32 SchedulerPolicy uint32 EnableARRMode uint32 SchedulerParams [8]byte } type VgpuSchedulerState struct { Version uint32 EngineId uint32 SchedulerPolicy uint32 EnableARRMode uint32 SchedulerParams [8]byte } type VgpuSchedulerStateInfo_v1 struct { Version uint32 EngineId uint32 SchedulerPolicy uint32 ArrMode uint32 SchedulerParams [8]byte } type VgpuSchedulerStateInfo struct { Version uint32 EngineId uint32 SchedulerPolicy uint32 ArrMode uint32 SchedulerParams [8]byte } type VgpuSchedulerLogInfo_v1 struct { Version uint32 EngineId uint32 SchedulerPolicy uint32 ArrMode uint32 SchedulerParams [8]byte EntriesCount uint32 LogEntries [200]VgpuSchedulerLogEntry } type VgpuSchedulerLogInfo struct { Version uint32 EngineId uint32 SchedulerPolicy uint32 ArrMode uint32 SchedulerParams [8]byte EntriesCount uint32 LogEntries [200]VgpuSchedulerLogEntry } type VgpuCreatablePlacementInfo_v1 struct { Version uint32 VgpuTypeId uint32 Count uint32 PlacementIds *uint32 PlacementSize uint32 Pad_cgo_0 [4]byte } type VgpuCreatablePlacementInfo struct { Version uint32 VgpuTypeId uint32 Count uint32 PlacementIds *uint32 PlacementSize uint32 Pad_cgo_0 [4]byte } type NvLinkPowerThres struct { LowPwrThreshold uint32 } type FieldValue struct { FieldId uint32 ScopeId uint32 Timestamp int64 LatencyUsec int64 ValueType uint32 NvmlReturn uint32 Value [8]byte } type nvmlUnit struct { Handle *_Ctype_struct_nvmlUnit_st } type HwbcEntry struct { HwbcId uint32 FirmwareVersion [32]uint8 } type LedState struct { Cause [256]uint8 Color uint32 } type UnitInfo struct { Name [96]uint8 Id [96]uint8 Serial [96]uint8 FirmwareVersion [96]uint8 } type PSUInfo struct { State [256]uint8 Current uint32 Voltage uint32 Power uint32 } type UnitFanInfo struct { Speed uint32 State uint32 } type UnitFanSpeeds struct { Fans [24]UnitFanInfo Count uint32 } type nvmlEventSet struct { Handle *_Ctype_struct_nvmlEventSet_st } type nvmlEventData struct { Device nvmlDevice EventType uint64 EventData uint64 GpuInstanceId uint32 ComputeInstanceId uint32 } type SystemEventSet struct { Handle *_Ctype_struct_nvmlSystemEventSet_st } type SystemEventSetCreateRequest_v1 struct { Version uint32 Set SystemEventSet } type SystemEventSetCreateRequest struct { Version uint32 Set SystemEventSet } type SystemEventSetFreeRequest_v1 struct { Version uint32 Set SystemEventSet } type SystemEventSetFreeRequest struct { Version uint32 Set SystemEventSet } type SystemRegisterEventRequest_v1 struct { Version uint32 EventTypes uint64 Set SystemEventSet } type SystemRegisterEventRequest struct { Version uint32 EventTypes uint64 Set SystemEventSet } type SystemEventData_v1 struct { EventType uint64 GpuId uint32 Pad_cgo_0 [4]byte } type SystemEventSetWaitRequest_v1 struct { Version uint32 Timeoutms uint32 Set SystemEventSet Data *SystemEventData_v1 DataSize uint32 NumEvent uint32 } type SystemEventSetWaitRequest struct { Version uint32 Timeoutms uint32 Set SystemEventSet Data *SystemEventData_v1 DataSize uint32 NumEvent uint32 } type AccountingStats struct { GpuUtilization uint32 MemoryUtilization uint32 MaxMemoryUsage uint64 Time uint64 StartTime uint64 IsRunning uint32 Reserved [5]uint32 } type EncoderSessionInfo struct { SessionId uint32 Pid uint32 VgpuInstance uint32 CodecType uint32 HResolution uint32 VResolution uint32 AverageFps uint32 AverageLatency uint32 } type FBCStats struct { SessionsCount uint32 AverageFPS uint32 AverageLatency uint32 } type FBCSessionInfo struct { SessionId uint32 Pid uint32 VgpuInstance uint32 DisplayOrdinal uint32 SessionType uint32 SessionFlags uint32 HMaxResolution uint32 VMaxResolution uint32 HResolution uint32 VResolution uint32 AverageFPS uint32 AverageLatency uint32 } type ConfComputeSystemCaps struct { CpuCaps uint32 GpusCaps uint32 } type ConfComputeSystemState struct { Environment uint32 CcFeature uint32 DevToolsMode uint32 } type SystemConfComputeSettings_v1 struct { Version uint32 Environment uint32 CcFeature uint32 DevToolsMode uint32 MultiGpuMode uint32 } type SystemConfComputeSettings struct { Version uint32 Environment uint32 CcFeature uint32 DevToolsMode uint32 MultiGpuMode uint32 } type ConfComputeMemSizeInfo struct { ProtectedMemSizeKib uint64 UnprotectedMemSizeKib uint64 } type ConfComputeGpuCertificate struct { CertChainSize uint32 AttestationCertChainSize uint32 CertChain [4096]uint8 AttestationCertChain [5120]uint8 } type ConfComputeGpuAttestationReport struct { IsCecAttestationReportPresent uint32 AttestationReportSize uint32 CecAttestationReportSize uint32 Nonce [32]uint8 AttestationReport [8192]uint8 CecAttestationReport [4096]uint8 } type ConfComputeSetKeyRotationThresholdInfo_v1 struct { Version uint32 MaxAttackerAdvantage uint64 } type ConfComputeSetKeyRotationThresholdInfo struct { Version uint32 MaxAttackerAdvantage uint64 } type ConfComputeGetKeyRotationThresholdInfo_v1 struct { Version uint32 AttackerAdvantage uint64 } type ConfComputeGetKeyRotationThresholdInfo struct { Version uint32 AttackerAdvantage uint64 } type GpuFabricState byte type GpuFabricInfo struct { ClusterUuid [16]uint8 Status uint32 CliqueId uint32 State uint8 Pad_cgo_0 [3]byte } type GpuFabricInfo_v2 struct { Version uint32 ClusterUuid [16]uint8 Status uint32 CliqueId uint32 State uint8 HealthMask uint32 } type GpuFabricInfo_v3 struct { Version uint32 ClusterUuid [16]uint8 Status uint32 CliqueId uint32 State uint8 HealthMask uint32 HealthSummary uint8 Pad_cgo_0 [3]byte } type GpuFabricInfoV struct { Version uint32 ClusterUuid [16]uint8 Status uint32 CliqueId uint32 State uint8 HealthMask uint32 HealthSummary uint8 Pad_cgo_0 [3]byte } type SystemDriverBranchInfo_v1 struct { Version uint32 Branch [80]uint8 } type SystemDriverBranchInfo struct { Version uint32 Branch [80]uint8 } type AffinityScope uint32 type Temperature_v1 struct { Version uint32 SensorType uint32 Temperature int32 } type Temperature struct { Version uint32 SensorType uint32 Temperature int32 } type NvlinkSupportedBwModes_v1 struct { Version uint32 BwModes [23]uint8 TotalBwModes uint8 } type NvlinkSupportedBwModes struct { Version uint32 BwModes [23]uint8 TotalBwModes uint8 } type NvlinkGetBwMode_v1 struct { Version uint32 BIsBest uint32 BwMode uint8 Pad_cgo_0 [3]byte } type NvlinkGetBwMode struct { Version uint32 BIsBest uint32 BwMode uint8 Pad_cgo_0 [3]byte } type NvlinkSetBwMode_v1 struct { Version uint32 BSetBest uint32 BwMode uint8 Pad_cgo_0 [3]byte } type NvlinkSetBwMode struct { Version uint32 BSetBest uint32 BwMode uint8 Pad_cgo_0 [3]byte } type NvLinkInfo_v1 struct { Version uint32 IsNvleEnabled uint32 } type NvlinkFirmwareVersion struct { UcodeType uint8 Major uint32 Minor uint32 SubMinor uint32 } type NvlinkFirmwareInfo struct { FirmwareVersion [100]NvlinkFirmwareVersion NumValidEntries uint32 } type NvLinkInfo_v2 struct { Version uint32 IsNvleEnabled uint32 FirmwareInfo NvlinkFirmwareInfo } type NvLinkInfo struct { Version uint32 IsNvleEnabled uint32 FirmwareInfo NvlinkFirmwareInfo } type VgpuVersion struct { MinVersion uint32 MaxVersion uint32 } type nvmlVgpuMetadata struct { Version uint32 Revision uint32 GuestInfoState uint32 GuestDriverVersion [80]uint8 HostDriverVersion [80]uint8 Reserved [6]uint32 VgpuVirtualizationCaps uint32 GuestVgpuVersion uint32 OpaqueDataSize uint32 OpaqueData [4]uint8 } type nvmlVgpuPgpuMetadata struct { Version uint32 Revision uint32 HostDriverVersion [80]uint8 PgpuVirtualizationCaps uint32 Reserved [5]uint32 HostSupportedVgpuRange VgpuVersion OpaqueDataSize uint32 OpaqueData [4]uint8 } type VgpuPgpuCompatibility struct { VgpuVmCompatibility uint32 CompatibilityLimitCode uint32 } type ExcludedDeviceInfo struct { PciInfo PciInfo Uuid [80]uint8 } type PRMTLV_v1 struct { DataSize uint32 Status uint32 InData [496]uint8 } type GpuInstancePlacement struct { Start uint32 Size uint32 } type GpuInstanceProfileInfo struct { Id uint32 IsP2pSupported uint32 SliceCount uint32 InstanceCount uint32 MultiprocessorCount uint32 CopyEngineCount uint32 DecoderCount uint32 EncoderCount uint32 JpegCount uint32 OfaCount uint32 MemorySizeMB uint64 } type GpuInstanceProfileInfo_v2 struct { Version uint32 Id uint32 IsP2pSupported uint32 SliceCount uint32 InstanceCount uint32 MultiprocessorCount uint32 CopyEngineCount uint32 DecoderCount uint32 EncoderCount uint32 JpegCount uint32 OfaCount uint32 MemorySizeMB uint64 Name [96]uint8 } type GpuInstanceProfileInfo_v3 struct { Version uint32 Id uint32 SliceCount uint32 InstanceCount uint32 MultiprocessorCount uint32 CopyEngineCount uint32 DecoderCount uint32 EncoderCount uint32 JpegCount uint32 OfaCount uint32 MemorySizeMB uint64 Name [96]uint8 Capabilities uint32 Pad_cgo_0 [4]byte } type nvmlGpuInstanceInfo struct { Device nvmlDevice Id uint32 ProfileId uint32 Placement GpuInstancePlacement } type ComputeInstancePlacement struct { Start uint32 Size uint32 } type ComputeInstanceProfileInfo struct { Id uint32 SliceCount uint32 InstanceCount uint32 MultiprocessorCount uint32 SharedCopyEngineCount uint32 SharedDecoderCount uint32 SharedEncoderCount uint32 SharedJpegCount uint32 SharedOfaCount uint32 } type ComputeInstanceProfileInfo_v2 struct { Version uint32 Id uint32 SliceCount uint32 InstanceCount uint32 MultiprocessorCount uint32 SharedCopyEngineCount uint32 SharedDecoderCount uint32 SharedEncoderCount uint32 SharedJpegCount uint32 SharedOfaCount uint32 Name [96]uint8 } type ComputeInstanceProfileInfo_v3 struct { Version uint32 Id uint32 SliceCount uint32 InstanceCount uint32 MultiprocessorCount uint32 SharedCopyEngineCount uint32 SharedDecoderCount uint32 SharedEncoderCount uint32 SharedJpegCount uint32 SharedOfaCount uint32 Name [96]uint8 Capabilities uint32 } type nvmlComputeInstanceInfo struct { Device nvmlDevice GpuInstance nvmlGpuInstance Id uint32 ProfileId uint32 Placement ComputeInstancePlacement } type nvmlComputeInstance struct { Handle *_Ctype_struct_nvmlComputeInstance_st } type nvmlGpmSample struct { Handle *_Ctype_struct_nvmlGpmSample_st } type GpmMetric struct { MetricId uint32 NvmlReturn uint32 Value float64 MetricInfo _Ctype_struct___19 } type nvmlGpmMetricsGetType struct { Version uint32 NumMetrics uint32 Sample1 nvmlGpmSample Sample2 nvmlGpmSample Metrics [210]GpmMetric } type GpmSupport struct { Version uint32 IsSupportedDevice uint32 } type DeviceCapabilities_v1 struct { Version uint32 CapMask uint32 } type DeviceCapabilities struct { Version uint32 CapMask uint32 } type Mask255 struct { Mask [8]uint32 } type WorkloadPowerProfileInfo_v1 struct { Version uint32 ProfileId uint32 Priority uint32 ConflictingMask Mask255 } type WorkloadPowerProfileInfo struct { Version uint32 ProfileId uint32 Priority uint32 ConflictingMask Mask255 } type WorkloadPowerProfileProfilesInfo_v1 struct { Version uint32 PerfProfilesMask Mask255 PerfProfile [255]WorkloadPowerProfileInfo } type WorkloadPowerProfileProfilesInfo struct { Version uint32 PerfProfilesMask Mask255 PerfProfile [255]WorkloadPowerProfileInfo } type WorkloadPowerProfileCurrentProfiles_v1 struct { Version uint32 PerfProfilesMask Mask255 RequestedProfilesMask Mask255 EnforcedProfilesMask Mask255 } type WorkloadPowerProfileCurrentProfiles struct { Version uint32 PerfProfilesMask Mask255 RequestedProfilesMask Mask255 EnforcedProfilesMask Mask255 } type WorkloadPowerProfileRequestedProfiles_v1 struct { Version uint32 RequestedProfilesMask Mask255 } type WorkloadPowerProfileRequestedProfiles struct { Version uint32 RequestedProfilesMask Mask255 } type PowerSmoothingProfile_v1 struct { Version uint32 ProfileId uint32 ParamId uint32 Value float64 } type PowerSmoothingProfile struct { Version uint32 ProfileId uint32 ParamId uint32 Value float64 } type PowerSmoothingState_v1 struct { Version uint32 State uint32 } type PowerSmoothingState struct { Version uint32 State uint32 } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/unit.go000066400000000000000000000061071520540370700260170ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml // nvml.UnitGetCount() func (l *library) UnitGetCount() (int, Return) { var UnitCount uint32 ret := nvmlUnitGetCount(&UnitCount) return int(UnitCount), ret } // nvml.UnitGetHandleByIndex() func (l *library) UnitGetHandleByIndex(index int) (Unit, Return) { var unit nvmlUnit ret := nvmlUnitGetHandleByIndex(uint32(index), &unit) return unit, ret } // nvml.UnitGetUnitInfo() func (l *library) UnitGetUnitInfo(unit Unit) (UnitInfo, Return) { return unit.GetUnitInfo() } func (unit nvmlUnit) GetUnitInfo() (UnitInfo, Return) { var info UnitInfo ret := nvmlUnitGetUnitInfo(unit, &info) return info, ret } // nvml.UnitGetLedState() func (l *library) UnitGetLedState(unit Unit) (LedState, Return) { return unit.GetLedState() } func (unit nvmlUnit) GetLedState() (LedState, Return) { var state LedState ret := nvmlUnitGetLedState(unit, &state) return state, ret } // nvml.UnitGetPsuInfo() func (l *library) UnitGetPsuInfo(unit Unit) (PSUInfo, Return) { return unit.GetPsuInfo() } func (unit nvmlUnit) GetPsuInfo() (PSUInfo, Return) { var psu PSUInfo ret := nvmlUnitGetPsuInfo(unit, &psu) return psu, ret } // nvml.UnitGetTemperature() func (l *library) UnitGetTemperature(unit Unit, ttype int) (uint32, Return) { return unit.GetTemperature(ttype) } func (unit nvmlUnit) GetTemperature(ttype int) (uint32, Return) { var temp uint32 ret := nvmlUnitGetTemperature(unit, uint32(ttype), &temp) return temp, ret } // nvml.UnitGetFanSpeedInfo() func (l *library) UnitGetFanSpeedInfo(unit Unit) (UnitFanSpeeds, Return) { return unit.GetFanSpeedInfo() } func (unit nvmlUnit) GetFanSpeedInfo() (UnitFanSpeeds, Return) { var fanSpeeds UnitFanSpeeds ret := nvmlUnitGetFanSpeedInfo(unit, &fanSpeeds) return fanSpeeds, ret } // nvml.UnitGetDevices() func (l *library) UnitGetDevices(unit Unit) ([]Device, Return) { return unit.GetDevices() } func (unit nvmlUnit) GetDevices() ([]Device, Return) { var deviceCount uint32 = 1 // Will be reduced upon returning for { devices := make([]nvmlDevice, deviceCount) ret := nvmlUnitGetDevices(unit, &deviceCount, &devices[0]) if ret == SUCCESS { return convertSlice[nvmlDevice, Device](devices[:deviceCount]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } deviceCount *= 2 } } // nvml.UnitSetLedState() func (l *library) UnitSetLedState(unit Unit, color LedColor) Return { return unit.SetLedState(color) } func (unit nvmlUnit) SetLedState(color LedColor) Return { return nvmlUnitSetLedState(unit, color) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/vgpu.go000066400000000000000000000426061520540370700260250ustar00rootroot00000000000000// Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nvml import ( "unsafe" ) // nvml.VgpuMetadata type VgpuMetadata struct { nvmlVgpuMetadata OpaqueData []byte } // nvml.VgpuPgpuMetadata type VgpuPgpuMetadata struct { nvmlVgpuPgpuMetadata OpaqueData []byte } // nvml.VgpuTypeGetClass() func (l *library) VgpuTypeGetClass(vgpuTypeId VgpuTypeId) (string, Return) { return vgpuTypeId.GetClass() } func (vgpuTypeId nvmlVgpuTypeId) GetClass() (string, Return) { var size uint32 = DEVICE_NAME_BUFFER_SIZE vgpuTypeClass := make([]byte, DEVICE_NAME_BUFFER_SIZE) ret := nvmlVgpuTypeGetClass(vgpuTypeId, &vgpuTypeClass[0], &size) return string(vgpuTypeClass[:clen(vgpuTypeClass)]), ret } // nvml.VgpuTypeGetName() func (l *library) VgpuTypeGetName(vgpuTypeId VgpuTypeId) (string, Return) { return vgpuTypeId.GetName() } func (vgpuTypeId nvmlVgpuTypeId) GetName() (string, Return) { var size uint32 = DEVICE_NAME_BUFFER_SIZE vgpuTypeName := make([]byte, DEVICE_NAME_BUFFER_SIZE) ret := nvmlVgpuTypeGetName(vgpuTypeId, &vgpuTypeName[0], &size) return string(vgpuTypeName[:clen(vgpuTypeName)]), ret } // nvml.VgpuTypeGetGpuInstanceProfileId() func (l *library) VgpuTypeGetGpuInstanceProfileId(vgpuTypeId VgpuTypeId) (uint32, Return) { return vgpuTypeId.GetGpuInstanceProfileId() } func (vgpuTypeId nvmlVgpuTypeId) GetGpuInstanceProfileId() (uint32, Return) { var size uint32 ret := nvmlVgpuTypeGetGpuInstanceProfileId(vgpuTypeId, &size) return size, ret } // nvml.VgpuTypeGetDeviceID() func (l *library) VgpuTypeGetDeviceID(vgpuTypeId VgpuTypeId) (uint64, uint64, Return) { return vgpuTypeId.GetDeviceID() } func (vgpuTypeId nvmlVgpuTypeId) GetDeviceID() (uint64, uint64, Return) { var deviceID, subsystemID uint64 ret := nvmlVgpuTypeGetDeviceID(vgpuTypeId, &deviceID, &subsystemID) return deviceID, subsystemID, ret } // nvml.VgpuTypeGetFramebufferSize() func (l *library) VgpuTypeGetFramebufferSize(vgpuTypeId VgpuTypeId) (uint64, Return) { return vgpuTypeId.GetFramebufferSize() } func (vgpuTypeId nvmlVgpuTypeId) GetFramebufferSize() (uint64, Return) { var fbSize uint64 ret := nvmlVgpuTypeGetFramebufferSize(vgpuTypeId, &fbSize) return fbSize, ret } // nvml.VgpuTypeGetNumDisplayHeads() func (l *library) VgpuTypeGetNumDisplayHeads(vgpuTypeId VgpuTypeId) (int, Return) { return vgpuTypeId.GetNumDisplayHeads() } func (vgpuTypeId nvmlVgpuTypeId) GetNumDisplayHeads() (int, Return) { var numDisplayHeads uint32 ret := nvmlVgpuTypeGetNumDisplayHeads(vgpuTypeId, &numDisplayHeads) return int(numDisplayHeads), ret } // nvml.VgpuTypeGetResolution() func (l *library) VgpuTypeGetResolution(vgpuTypeId VgpuTypeId, displayIndex int) (uint32, uint32, Return) { return vgpuTypeId.GetResolution(displayIndex) } func (vgpuTypeId nvmlVgpuTypeId) GetResolution(displayIndex int) (uint32, uint32, Return) { var xdim, ydim uint32 ret := nvmlVgpuTypeGetResolution(vgpuTypeId, uint32(displayIndex), &xdim, &ydim) return xdim, ydim, ret } // nvml.VgpuTypeGetLicense() func (l *library) VgpuTypeGetLicense(vgpuTypeId VgpuTypeId) (string, Return) { return vgpuTypeId.GetLicense() } func (vgpuTypeId nvmlVgpuTypeId) GetLicense() (string, Return) { vgpuTypeLicenseString := make([]byte, GRID_LICENSE_BUFFER_SIZE) ret := nvmlVgpuTypeGetLicense(vgpuTypeId, &vgpuTypeLicenseString[0], GRID_LICENSE_BUFFER_SIZE) return string(vgpuTypeLicenseString[:clen(vgpuTypeLicenseString)]), ret } // nvml.VgpuTypeGetFrameRateLimit() func (l *library) VgpuTypeGetFrameRateLimit(vgpuTypeId VgpuTypeId) (uint32, Return) { return vgpuTypeId.GetFrameRateLimit() } func (vgpuTypeId nvmlVgpuTypeId) GetFrameRateLimit() (uint32, Return) { var frameRateLimit uint32 ret := nvmlVgpuTypeGetFrameRateLimit(vgpuTypeId, &frameRateLimit) return frameRateLimit, ret } // nvml.VgpuTypeGetMaxInstances() func (l *library) VgpuTypeGetMaxInstances(device Device, vgpuTypeId VgpuTypeId) (int, Return) { return vgpuTypeId.GetMaxInstances(device) } func (device nvmlDevice) VgpuTypeGetMaxInstances(vgpuTypeId VgpuTypeId) (int, Return) { return vgpuTypeId.GetMaxInstances(device) } func (vgpuTypeId nvmlVgpuTypeId) GetMaxInstances(device Device) (int, Return) { var vgpuInstanceCount uint32 ret := nvmlVgpuTypeGetMaxInstances(nvmlDeviceHandle(device), vgpuTypeId, &vgpuInstanceCount) return int(vgpuInstanceCount), ret } // nvml.VgpuTypeGetMaxInstancesPerVm() func (l *library) VgpuTypeGetMaxInstancesPerVm(vgpuTypeId VgpuTypeId) (int, Return) { return vgpuTypeId.GetMaxInstancesPerVm() } func (vgpuTypeId nvmlVgpuTypeId) GetMaxInstancesPerVm() (int, Return) { var vgpuInstanceCountPerVm uint32 ret := nvmlVgpuTypeGetMaxInstancesPerVm(vgpuTypeId, &vgpuInstanceCountPerVm) return int(vgpuInstanceCountPerVm), ret } // nvml.VgpuInstanceGetVmID() func (l *library) VgpuInstanceGetVmID(vgpuInstance VgpuInstance) (string, VgpuVmIdType, Return) { return vgpuInstance.GetVmID() } func (vgpuInstance nvmlVgpuInstance) GetVmID() (string, VgpuVmIdType, Return) { var vmIdType VgpuVmIdType vmId := make([]byte, DEVICE_UUID_BUFFER_SIZE) ret := nvmlVgpuInstanceGetVmID(vgpuInstance, &vmId[0], DEVICE_UUID_BUFFER_SIZE, &vmIdType) return string(vmId[:clen(vmId)]), vmIdType, ret } // nvml.VgpuInstanceGetUUID() func (l *library) VgpuInstanceGetUUID(vgpuInstance VgpuInstance) (string, Return) { return vgpuInstance.GetUUID() } func (vgpuInstance nvmlVgpuInstance) GetUUID() (string, Return) { uuid := make([]byte, DEVICE_UUID_BUFFER_SIZE) ret := nvmlVgpuInstanceGetUUID(vgpuInstance, &uuid[0], DEVICE_UUID_BUFFER_SIZE) return string(uuid[:clen(uuid)]), ret } // nvml.VgpuInstanceGetVmDriverVersion() func (l *library) VgpuInstanceGetVmDriverVersion(vgpuInstance VgpuInstance) (string, Return) { return vgpuInstance.GetVmDriverVersion() } func (vgpuInstance nvmlVgpuInstance) GetVmDriverVersion() (string, Return) { version := make([]byte, SYSTEM_DRIVER_VERSION_BUFFER_SIZE) ret := nvmlVgpuInstanceGetVmDriverVersion(vgpuInstance, &version[0], SYSTEM_DRIVER_VERSION_BUFFER_SIZE) return string(version[:clen(version)]), ret } // nvml.VgpuInstanceGetFbUsage() func (l *library) VgpuInstanceGetFbUsage(vgpuInstance VgpuInstance) (uint64, Return) { return vgpuInstance.GetFbUsage() } func (vgpuInstance nvmlVgpuInstance) GetFbUsage() (uint64, Return) { var fbUsage uint64 ret := nvmlVgpuInstanceGetFbUsage(vgpuInstance, &fbUsage) return fbUsage, ret } // nvml.VgpuInstanceGetLicenseInfo() func (l *library) VgpuInstanceGetLicenseInfo(vgpuInstance VgpuInstance) (VgpuLicenseInfo, Return) { return vgpuInstance.GetLicenseInfo() } func (vgpuInstance nvmlVgpuInstance) GetLicenseInfo() (VgpuLicenseInfo, Return) { var licenseInfo VgpuLicenseInfo ret := nvmlVgpuInstanceGetLicenseInfo(vgpuInstance, &licenseInfo) return licenseInfo, ret } // nvml.VgpuInstanceGetLicenseStatus() // // Deprecated: Use VgpuInstanceGetLicenseInfo instead. func (l *library) VgpuInstanceGetLicenseStatus(vgpuInstance VgpuInstance) (int, Return) { return vgpuInstance.GetLicenseStatus() } func (vgpuInstance nvmlVgpuInstance) GetLicenseStatus() (int, Return) { var licensed uint32 ret := nvmlVgpuInstanceGetLicenseStatus(vgpuInstance, &licensed) return int(licensed), ret } // nvml.VgpuInstanceGetType() func (l *library) VgpuInstanceGetType(vgpuInstance VgpuInstance) (VgpuTypeId, Return) { return vgpuInstance.GetType() } func (vgpuInstance nvmlVgpuInstance) GetType() (VgpuTypeId, Return) { var vgpuTypeId nvmlVgpuTypeId ret := nvmlVgpuInstanceGetType(vgpuInstance, &vgpuTypeId) return vgpuTypeId, ret } // nvml.VgpuInstanceGetFrameRateLimit() func (l *library) VgpuInstanceGetFrameRateLimit(vgpuInstance VgpuInstance) (uint32, Return) { return vgpuInstance.GetFrameRateLimit() } func (vgpuInstance nvmlVgpuInstance) GetFrameRateLimit() (uint32, Return) { var frameRateLimit uint32 ret := nvmlVgpuInstanceGetFrameRateLimit(vgpuInstance, &frameRateLimit) return frameRateLimit, ret } // nvml.VgpuInstanceGetEccMode() func (l *library) VgpuInstanceGetEccMode(vgpuInstance VgpuInstance) (EnableState, Return) { return vgpuInstance.GetEccMode() } func (vgpuInstance nvmlVgpuInstance) GetEccMode() (EnableState, Return) { var eccMode EnableState ret := nvmlVgpuInstanceGetEccMode(vgpuInstance, &eccMode) return eccMode, ret } // nvml.VgpuInstanceGetEncoderCapacity() func (l *library) VgpuInstanceGetEncoderCapacity(vgpuInstance VgpuInstance) (int, Return) { return vgpuInstance.GetEncoderCapacity() } func (vgpuInstance nvmlVgpuInstance) GetEncoderCapacity() (int, Return) { var encoderCapacity uint32 ret := nvmlVgpuInstanceGetEncoderCapacity(vgpuInstance, &encoderCapacity) return int(encoderCapacity), ret } // nvml.VgpuInstanceSetEncoderCapacity() func (l *library) VgpuInstanceSetEncoderCapacity(vgpuInstance VgpuInstance, encoderCapacity int) Return { return vgpuInstance.SetEncoderCapacity(encoderCapacity) } func (vgpuInstance nvmlVgpuInstance) SetEncoderCapacity(encoderCapacity int) Return { return nvmlVgpuInstanceSetEncoderCapacity(vgpuInstance, uint32(encoderCapacity)) } // nvml.VgpuInstanceGetEncoderStats() func (l *library) VgpuInstanceGetEncoderStats(vgpuInstance VgpuInstance) (int, uint32, uint32, Return) { return vgpuInstance.GetEncoderStats() } func (vgpuInstance nvmlVgpuInstance) GetEncoderStats() (int, uint32, uint32, Return) { var sessionCount, averageFps, averageLatency uint32 ret := nvmlVgpuInstanceGetEncoderStats(vgpuInstance, &sessionCount, &averageFps, &averageLatency) return int(sessionCount), averageFps, averageLatency, ret } // nvml.VgpuInstanceGetEncoderSessions() func (l *library) VgpuInstanceGetEncoderSessions(vgpuInstance VgpuInstance) (int, EncoderSessionInfo, Return) { return vgpuInstance.GetEncoderSessions() } func (vgpuInstance nvmlVgpuInstance) GetEncoderSessions() (int, EncoderSessionInfo, Return) { var sessionCount uint32 var sessionInfo EncoderSessionInfo ret := nvmlVgpuInstanceGetEncoderSessions(vgpuInstance, &sessionCount, &sessionInfo) return int(sessionCount), sessionInfo, ret } // nvml.VgpuInstanceGetFBCStats() func (l *library) VgpuInstanceGetFBCStats(vgpuInstance VgpuInstance) (FBCStats, Return) { return vgpuInstance.GetFBCStats() } func (vgpuInstance nvmlVgpuInstance) GetFBCStats() (FBCStats, Return) { var fbcStats FBCStats ret := nvmlVgpuInstanceGetFBCStats(vgpuInstance, &fbcStats) return fbcStats, ret } // nvml.VgpuInstanceGetFBCSessions() func (l *library) VgpuInstanceGetFBCSessions(vgpuInstance VgpuInstance) (int, FBCSessionInfo, Return) { return vgpuInstance.GetFBCSessions() } func (vgpuInstance nvmlVgpuInstance) GetFBCSessions() (int, FBCSessionInfo, Return) { var sessionCount uint32 var sessionInfo FBCSessionInfo ret := nvmlVgpuInstanceGetFBCSessions(vgpuInstance, &sessionCount, &sessionInfo) return int(sessionCount), sessionInfo, ret } // nvml.VgpuInstanceGetGpuInstanceId() func (l *library) VgpuInstanceGetGpuInstanceId(vgpuInstance VgpuInstance) (int, Return) { return vgpuInstance.GetGpuInstanceId() } func (vgpuInstance nvmlVgpuInstance) GetGpuInstanceId() (int, Return) { var gpuInstanceId uint32 ret := nvmlVgpuInstanceGetGpuInstanceId(vgpuInstance, &gpuInstanceId) return int(gpuInstanceId), ret } // nvml.VgpuInstanceGetGpuPciId() func (l *library) VgpuInstanceGetGpuPciId(vgpuInstance VgpuInstance) (string, Return) { return vgpuInstance.GetGpuPciId() } func (vgpuInstance nvmlVgpuInstance) GetGpuPciId() (string, Return) { var length uint32 = 1 // Will be reduced upon returning for { vgpuPciId := make([]byte, length) ret := nvmlVgpuInstanceGetGpuPciId(vgpuInstance, &vgpuPciId[0], &length) if ret == SUCCESS { return string(vgpuPciId[:clen(vgpuPciId)]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return "", ret } length *= 2 } } // nvml.VgpuInstanceGetMetadata() func (l *library) VgpuInstanceGetMetadata(vgpuInstance VgpuInstance) (VgpuMetadata, Return) { return vgpuInstance.GetMetadata() } func (vgpuInstance nvmlVgpuInstance) GetMetadata() (VgpuMetadata, Return) { var vgpuMetadata VgpuMetadata opaqueDataSize := unsafe.Sizeof(vgpuMetadata.nvmlVgpuMetadata.OpaqueData) vgpuMetadataSize := unsafe.Sizeof(vgpuMetadata.nvmlVgpuMetadata) - opaqueDataSize for { bufferSize := uint32(vgpuMetadataSize + opaqueDataSize) buffer := make([]byte, bufferSize) nvmlVgpuMetadataPtr := (*nvmlVgpuMetadata)(unsafe.Pointer(&buffer[0])) ret := nvmlVgpuInstanceGetMetadata(vgpuInstance, nvmlVgpuMetadataPtr, &bufferSize) if ret == SUCCESS { vgpuMetadata.nvmlVgpuMetadata = *nvmlVgpuMetadataPtr vgpuMetadata.OpaqueData = buffer[vgpuMetadataSize:bufferSize] return vgpuMetadata, ret } if ret != ERROR_INSUFFICIENT_SIZE { return vgpuMetadata, ret } opaqueDataSize = 2 * opaqueDataSize } } // nvml.VgpuInstanceGetAccountingMode() func (l *library) VgpuInstanceGetAccountingMode(vgpuInstance VgpuInstance) (EnableState, Return) { return vgpuInstance.GetAccountingMode() } func (vgpuInstance nvmlVgpuInstance) GetAccountingMode() (EnableState, Return) { var mode EnableState ret := nvmlVgpuInstanceGetAccountingMode(vgpuInstance, &mode) return mode, ret } // nvml.VgpuInstanceGetAccountingPids() func (l *library) VgpuInstanceGetAccountingPids(vgpuInstance VgpuInstance) ([]int, Return) { return vgpuInstance.GetAccountingPids() } func (vgpuInstance nvmlVgpuInstance) GetAccountingPids() ([]int, Return) { var count uint32 = 1 // Will be reduced upon returning for { pids := make([]uint32, count) ret := nvmlVgpuInstanceGetAccountingPids(vgpuInstance, &count, &pids[0]) if ret == SUCCESS { return uint32SliceToIntSlice(pids[:count]), ret } if ret != ERROR_INSUFFICIENT_SIZE { return nil, ret } count *= 2 } } // nvml.VgpuInstanceGetAccountingStats() func (l *library) VgpuInstanceGetAccountingStats(vgpuInstance VgpuInstance, pid int) (AccountingStats, Return) { return vgpuInstance.GetAccountingStats(pid) } func (vgpuInstance nvmlVgpuInstance) GetAccountingStats(pid int) (AccountingStats, Return) { var stats AccountingStats ret := nvmlVgpuInstanceGetAccountingStats(vgpuInstance, uint32(pid), &stats) return stats, ret } // nvml.GetVgpuCompatibility() func (l *library) GetVgpuCompatibility(vgpuMetadata *VgpuMetadata, pgpuMetadata *VgpuPgpuMetadata) (VgpuPgpuCompatibility, Return) { var compatibilityInfo VgpuPgpuCompatibility ret := nvmlGetVgpuCompatibility(&vgpuMetadata.nvmlVgpuMetadata, &pgpuMetadata.nvmlVgpuPgpuMetadata, &compatibilityInfo) return compatibilityInfo, ret } // nvml.GetVgpuVersion() func (l *library) GetVgpuVersion() (VgpuVersion, VgpuVersion, Return) { var supported, current VgpuVersion ret := nvmlGetVgpuVersion(&supported, ¤t) return supported, current, ret } // nvml.SetVgpuVersion() func (l *library) SetVgpuVersion(vgpuVersion *VgpuVersion) Return { return nvmlSetVgpuVersion(vgpuVersion) } // nvml.VgpuInstanceClearAccountingPids() func (l *library) VgpuInstanceClearAccountingPids(vgpuInstance VgpuInstance) Return { return vgpuInstance.ClearAccountingPids() } func (vgpuInstance nvmlVgpuInstance) ClearAccountingPids() Return { return nvmlVgpuInstanceClearAccountingPids(vgpuInstance) } // nvml.VgpuInstanceGetMdevUUID() func (l *library) VgpuInstanceGetMdevUUID(vgpuInstance VgpuInstance) (string, Return) { return vgpuInstance.GetMdevUUID() } func (vgpuInstance nvmlVgpuInstance) GetMdevUUID() (string, Return) { mdevUUID := make([]byte, DEVICE_UUID_BUFFER_SIZE) ret := nvmlVgpuInstanceGetMdevUUID(vgpuInstance, &mdevUUID[0], DEVICE_UUID_BUFFER_SIZE) return string(mdevUUID[:clen(mdevUUID)]), ret } // nvml.VgpuTypeGetCapabilities() func (l *library) VgpuTypeGetCapabilities(vgpuTypeId VgpuTypeId, capability VgpuCapability) (bool, Return) { return vgpuTypeId.GetCapabilities(capability) } func (vgpuTypeId nvmlVgpuTypeId) GetCapabilities(capability VgpuCapability) (bool, Return) { var capResult uint32 ret := nvmlVgpuTypeGetCapabilities(vgpuTypeId, capability, &capResult) return (capResult != 0), ret } // nvml.GetVgpuDriverCapabilities() func (l *library) GetVgpuDriverCapabilities(capability VgpuDriverCapability) (bool, Return) { var capResult uint32 ret := nvmlGetVgpuDriverCapabilities(capability, &capResult) return (capResult != 0), ret } // nvml.VgpuTypeGetBAR1Info() func (l *library) VgpuTypeGetBAR1Info(vgpuTypeId VgpuTypeId) (VgpuTypeBar1Info, Return) { return vgpuTypeId.GetBAR1Info() } func (vgpuTypeId nvmlVgpuTypeId) GetBAR1Info() (VgpuTypeBar1Info, Return) { var bar1Info VgpuTypeBar1Info bar1Info.Version = STRUCT_VERSION(bar1Info, 1) ret := nvmlVgpuTypeGetBAR1Info(vgpuTypeId, &bar1Info) return bar1Info, ret } // nvml.VgpuInstanceGetRuntimeStateSize() func (l *library) VgpuInstanceGetRuntimeStateSize(vgpuInstance VgpuInstance) (VgpuRuntimeState, Return) { return vgpuInstance.GetRuntimeStateSize() } func (vgpuInstance nvmlVgpuInstance) GetRuntimeStateSize() (VgpuRuntimeState, Return) { var pState VgpuRuntimeState pState.Version = STRUCT_VERSION(pState, 1) ret := nvmlVgpuInstanceGetRuntimeStateSize(vgpuInstance, &pState) return pState, ret } // nvml.VgpuTypeGetMaxInstancesPerGpuInstance() func (l *library) VgpuTypeGetMaxInstancesPerGpuInstance(maxInstance *VgpuTypeMaxInstance) Return { return nvmlVgpuTypeGetMaxInstancesPerGpuInstance(maxInstance) } NVIDIA-mig-parted-47bc938/vendor/github.com/NVIDIA/go-nvml/pkg/nvml/zz_generated.api.go000066400000000000000000002166341520540370700303010ustar00rootroot00000000000000/** # Copyright 2024 NVIDIA CORPORATION # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. **/ // Generated Code; DO NOT EDIT. package nvml // The variables below represent package level methods from the library type. var ( ComputeInstanceDestroy = libnvml.ComputeInstanceDestroy ComputeInstanceGetInfo = libnvml.ComputeInstanceGetInfo DeviceClearAccountingPids = libnvml.DeviceClearAccountingPids DeviceClearCpuAffinity = libnvml.DeviceClearCpuAffinity DeviceClearEccErrorCounts = libnvml.DeviceClearEccErrorCounts DeviceClearFieldValues = libnvml.DeviceClearFieldValues DeviceCreateGpuInstance = libnvml.DeviceCreateGpuInstance DeviceCreateGpuInstanceWithPlacement = libnvml.DeviceCreateGpuInstanceWithPlacement DeviceDiscoverGpus = libnvml.DeviceDiscoverGpus DeviceFreezeNvLinkUtilizationCounter = libnvml.DeviceFreezeNvLinkUtilizationCounter DeviceGetAPIRestriction = libnvml.DeviceGetAPIRestriction DeviceGetAccountingBufferSize = libnvml.DeviceGetAccountingBufferSize DeviceGetAccountingMode = libnvml.DeviceGetAccountingMode DeviceGetAccountingPids = libnvml.DeviceGetAccountingPids DeviceGetAccountingStats = libnvml.DeviceGetAccountingStats DeviceGetActiveVgpus = libnvml.DeviceGetActiveVgpus DeviceGetAdaptiveClockInfoStatus = libnvml.DeviceGetAdaptiveClockInfoStatus DeviceGetAddressingMode = libnvml.DeviceGetAddressingMode DeviceGetApplicationsClock = libnvml.DeviceGetApplicationsClock DeviceGetArchitecture = libnvml.DeviceGetArchitecture DeviceGetAttributes = libnvml.DeviceGetAttributes DeviceGetAutoBoostedClocksEnabled = libnvml.DeviceGetAutoBoostedClocksEnabled DeviceGetBAR1MemoryInfo = libnvml.DeviceGetBAR1MemoryInfo DeviceGetBoardId = libnvml.DeviceGetBoardId DeviceGetBoardPartNumber = libnvml.DeviceGetBoardPartNumber DeviceGetBrand = libnvml.DeviceGetBrand DeviceGetBridgeChipInfo = libnvml.DeviceGetBridgeChipInfo DeviceGetBusType = libnvml.DeviceGetBusType DeviceGetC2cModeInfoV = libnvml.DeviceGetC2cModeInfoV DeviceGetCapabilities = libnvml.DeviceGetCapabilities DeviceGetClkMonStatus = libnvml.DeviceGetClkMonStatus DeviceGetClock = libnvml.DeviceGetClock DeviceGetClockInfo = libnvml.DeviceGetClockInfo DeviceGetClockOffsets = libnvml.DeviceGetClockOffsets DeviceGetComputeInstanceId = libnvml.DeviceGetComputeInstanceId DeviceGetComputeMode = libnvml.DeviceGetComputeMode DeviceGetComputeRunningProcesses = libnvml.DeviceGetComputeRunningProcesses DeviceGetConfComputeGpuAttestationReport = libnvml.DeviceGetConfComputeGpuAttestationReport DeviceGetConfComputeGpuCertificate = libnvml.DeviceGetConfComputeGpuCertificate DeviceGetConfComputeMemSizeInfo = libnvml.DeviceGetConfComputeMemSizeInfo DeviceGetConfComputeProtectedMemoryUsage = libnvml.DeviceGetConfComputeProtectedMemoryUsage DeviceGetCoolerInfo = libnvml.DeviceGetCoolerInfo DeviceGetCount = libnvml.DeviceGetCount DeviceGetCpuAffinity = libnvml.DeviceGetCpuAffinity DeviceGetCpuAffinityWithinScope = libnvml.DeviceGetCpuAffinityWithinScope DeviceGetCreatableVgpus = libnvml.DeviceGetCreatableVgpus DeviceGetCudaComputeCapability = libnvml.DeviceGetCudaComputeCapability DeviceGetCurrPcieLinkGeneration = libnvml.DeviceGetCurrPcieLinkGeneration DeviceGetCurrPcieLinkWidth = libnvml.DeviceGetCurrPcieLinkWidth DeviceGetCurrentClockFreqs = libnvml.DeviceGetCurrentClockFreqs DeviceGetCurrentClocksEventReasons = libnvml.DeviceGetCurrentClocksEventReasons DeviceGetCurrentClocksThrottleReasons = libnvml.DeviceGetCurrentClocksThrottleReasons DeviceGetDecoderUtilization = libnvml.DeviceGetDecoderUtilization DeviceGetDefaultApplicationsClock = libnvml.DeviceGetDefaultApplicationsClock DeviceGetDefaultEccMode = libnvml.DeviceGetDefaultEccMode DeviceGetDetailedEccErrors = libnvml.DeviceGetDetailedEccErrors DeviceGetDeviceHandleFromMigDeviceHandle = libnvml.DeviceGetDeviceHandleFromMigDeviceHandle DeviceGetDisplayActive = libnvml.DeviceGetDisplayActive DeviceGetDisplayMode = libnvml.DeviceGetDisplayMode DeviceGetDramEncryptionMode = libnvml.DeviceGetDramEncryptionMode DeviceGetDriverModel = libnvml.DeviceGetDriverModel DeviceGetDriverModel_v2 = libnvml.DeviceGetDriverModel_v2 DeviceGetDynamicPstatesInfo = libnvml.DeviceGetDynamicPstatesInfo DeviceGetEccMode = libnvml.DeviceGetEccMode DeviceGetEncoderCapacity = libnvml.DeviceGetEncoderCapacity DeviceGetEncoderSessions = libnvml.DeviceGetEncoderSessions DeviceGetEncoderStats = libnvml.DeviceGetEncoderStats DeviceGetEncoderUtilization = libnvml.DeviceGetEncoderUtilization DeviceGetEnforcedPowerLimit = libnvml.DeviceGetEnforcedPowerLimit DeviceGetFBCSessions = libnvml.DeviceGetFBCSessions DeviceGetFBCStats = libnvml.DeviceGetFBCStats DeviceGetFanControlPolicy_v2 = libnvml.DeviceGetFanControlPolicy_v2 DeviceGetFanSpeed = libnvml.DeviceGetFanSpeed DeviceGetFanSpeedRPM = libnvml.DeviceGetFanSpeedRPM DeviceGetFanSpeed_v2 = libnvml.DeviceGetFanSpeed_v2 DeviceGetFieldValues = libnvml.DeviceGetFieldValues DeviceGetGpcClkMinMaxVfOffset = libnvml.DeviceGetGpcClkMinMaxVfOffset DeviceGetGpcClkVfOffset = libnvml.DeviceGetGpcClkVfOffset DeviceGetGpuFabricInfo = libnvml.DeviceGetGpuFabricInfo DeviceGetGpuFabricInfoV = libnvml.DeviceGetGpuFabricInfoV DeviceGetGpuInstanceById = libnvml.DeviceGetGpuInstanceById DeviceGetGpuInstanceId = libnvml.DeviceGetGpuInstanceId DeviceGetGpuInstancePossiblePlacements = libnvml.DeviceGetGpuInstancePossiblePlacements DeviceGetGpuInstanceProfileInfo = libnvml.DeviceGetGpuInstanceProfileInfo DeviceGetGpuInstanceProfileInfoByIdV = libnvml.DeviceGetGpuInstanceProfileInfoByIdV DeviceGetGpuInstanceProfileInfoV = libnvml.DeviceGetGpuInstanceProfileInfoV DeviceGetGpuInstanceRemainingCapacity = libnvml.DeviceGetGpuInstanceRemainingCapacity DeviceGetGpuInstances = libnvml.DeviceGetGpuInstances DeviceGetGpuMaxPcieLinkGeneration = libnvml.DeviceGetGpuMaxPcieLinkGeneration DeviceGetGpuOperationMode = libnvml.DeviceGetGpuOperationMode DeviceGetGraphicsRunningProcesses = libnvml.DeviceGetGraphicsRunningProcesses DeviceGetGridLicensableFeatures = libnvml.DeviceGetGridLicensableFeatures DeviceGetGspFirmwareMode = libnvml.DeviceGetGspFirmwareMode DeviceGetGspFirmwareVersion = libnvml.DeviceGetGspFirmwareVersion DeviceGetHandleByIndex = libnvml.DeviceGetHandleByIndex DeviceGetHandleByPciBusId = libnvml.DeviceGetHandleByPciBusId DeviceGetHandleBySerial = libnvml.DeviceGetHandleBySerial DeviceGetHandleByUUID = libnvml.DeviceGetHandleByUUID DeviceGetHandleByUUIDV = libnvml.DeviceGetHandleByUUIDV DeviceGetHostVgpuMode = libnvml.DeviceGetHostVgpuMode DeviceGetIndex = libnvml.DeviceGetIndex DeviceGetInforomConfigurationChecksum = libnvml.DeviceGetInforomConfigurationChecksum DeviceGetInforomImageVersion = libnvml.DeviceGetInforomImageVersion DeviceGetInforomVersion = libnvml.DeviceGetInforomVersion DeviceGetIrqNum = libnvml.DeviceGetIrqNum DeviceGetJpgUtilization = libnvml.DeviceGetJpgUtilization DeviceGetLastBBXFlushTime = libnvml.DeviceGetLastBBXFlushTime DeviceGetMPSComputeRunningProcesses = libnvml.DeviceGetMPSComputeRunningProcesses DeviceGetMarginTemperature = libnvml.DeviceGetMarginTemperature DeviceGetMaxClockInfo = libnvml.DeviceGetMaxClockInfo DeviceGetMaxCustomerBoostClock = libnvml.DeviceGetMaxCustomerBoostClock DeviceGetMaxMigDeviceCount = libnvml.DeviceGetMaxMigDeviceCount DeviceGetMaxPcieLinkGeneration = libnvml.DeviceGetMaxPcieLinkGeneration DeviceGetMaxPcieLinkWidth = libnvml.DeviceGetMaxPcieLinkWidth DeviceGetMemClkMinMaxVfOffset = libnvml.DeviceGetMemClkMinMaxVfOffset DeviceGetMemClkVfOffset = libnvml.DeviceGetMemClkVfOffset DeviceGetMemoryAffinity = libnvml.DeviceGetMemoryAffinity DeviceGetMemoryBusWidth = libnvml.DeviceGetMemoryBusWidth DeviceGetMemoryErrorCounter = libnvml.DeviceGetMemoryErrorCounter DeviceGetMemoryInfo = libnvml.DeviceGetMemoryInfo DeviceGetMemoryInfo_v2 = libnvml.DeviceGetMemoryInfo_v2 DeviceGetMigDeviceHandleByIndex = libnvml.DeviceGetMigDeviceHandleByIndex DeviceGetMigMode = libnvml.DeviceGetMigMode DeviceGetMinMaxClockOfPState = libnvml.DeviceGetMinMaxClockOfPState DeviceGetMinMaxFanSpeed = libnvml.DeviceGetMinMaxFanSpeed DeviceGetMinorNumber = libnvml.DeviceGetMinorNumber DeviceGetModuleId = libnvml.DeviceGetModuleId DeviceGetMultiGpuBoard = libnvml.DeviceGetMultiGpuBoard DeviceGetName = libnvml.DeviceGetName DeviceGetNumFans = libnvml.DeviceGetNumFans DeviceGetNumGpuCores = libnvml.DeviceGetNumGpuCores DeviceGetNumaNodeId = libnvml.DeviceGetNumaNodeId DeviceGetNvLinkCapability = libnvml.DeviceGetNvLinkCapability DeviceGetNvLinkErrorCounter = libnvml.DeviceGetNvLinkErrorCounter DeviceGetNvLinkInfo = libnvml.DeviceGetNvLinkInfo DeviceGetNvLinkRemoteDeviceType = libnvml.DeviceGetNvLinkRemoteDeviceType DeviceGetNvLinkRemotePciInfo = libnvml.DeviceGetNvLinkRemotePciInfo DeviceGetNvLinkState = libnvml.DeviceGetNvLinkState DeviceGetNvLinkUtilizationControl = libnvml.DeviceGetNvLinkUtilizationControl DeviceGetNvLinkUtilizationCounter = libnvml.DeviceGetNvLinkUtilizationCounter DeviceGetNvLinkVersion = libnvml.DeviceGetNvLinkVersion DeviceGetNvlinkBwMode = libnvml.DeviceGetNvlinkBwMode DeviceGetNvlinkSupportedBwModes = libnvml.DeviceGetNvlinkSupportedBwModes DeviceGetOfaUtilization = libnvml.DeviceGetOfaUtilization DeviceGetP2PStatus = libnvml.DeviceGetP2PStatus DeviceGetPciInfo = libnvml.DeviceGetPciInfo DeviceGetPciInfoExt = libnvml.DeviceGetPciInfoExt DeviceGetPcieLinkMaxSpeed = libnvml.DeviceGetPcieLinkMaxSpeed DeviceGetPcieReplayCounter = libnvml.DeviceGetPcieReplayCounter DeviceGetPcieSpeed = libnvml.DeviceGetPcieSpeed DeviceGetPcieThroughput = libnvml.DeviceGetPcieThroughput DeviceGetPdi = libnvml.DeviceGetPdi DeviceGetPerformanceModes = libnvml.DeviceGetPerformanceModes DeviceGetPerformanceState = libnvml.DeviceGetPerformanceState DeviceGetPersistenceMode = libnvml.DeviceGetPersistenceMode DeviceGetPgpuMetadataString = libnvml.DeviceGetPgpuMetadataString DeviceGetPlatformInfo = libnvml.DeviceGetPlatformInfo DeviceGetPowerManagementDefaultLimit = libnvml.DeviceGetPowerManagementDefaultLimit DeviceGetPowerManagementLimit = libnvml.DeviceGetPowerManagementLimit DeviceGetPowerManagementLimitConstraints = libnvml.DeviceGetPowerManagementLimitConstraints DeviceGetPowerManagementMode = libnvml.DeviceGetPowerManagementMode DeviceGetPowerMizerMode_v1 = libnvml.DeviceGetPowerMizerMode_v1 DeviceGetPowerSource = libnvml.DeviceGetPowerSource DeviceGetPowerState = libnvml.DeviceGetPowerState DeviceGetPowerUsage = libnvml.DeviceGetPowerUsage DeviceGetProcessUtilization = libnvml.DeviceGetProcessUtilization DeviceGetProcessesUtilizationInfo = libnvml.DeviceGetProcessesUtilizationInfo DeviceGetRemappedRows = libnvml.DeviceGetRemappedRows DeviceGetRepairStatus = libnvml.DeviceGetRepairStatus DeviceGetRetiredPages = libnvml.DeviceGetRetiredPages DeviceGetRetiredPagesPendingStatus = libnvml.DeviceGetRetiredPagesPendingStatus DeviceGetRetiredPages_v2 = libnvml.DeviceGetRetiredPages_v2 DeviceGetRowRemapperHistogram = libnvml.DeviceGetRowRemapperHistogram DeviceGetRunningProcessDetailList = libnvml.DeviceGetRunningProcessDetailList DeviceGetSamples = libnvml.DeviceGetSamples DeviceGetSerial = libnvml.DeviceGetSerial DeviceGetSramEccErrorStatus = libnvml.DeviceGetSramEccErrorStatus DeviceGetSramUniqueUncorrectedEccErrorCounts = libnvml.DeviceGetSramUniqueUncorrectedEccErrorCounts DeviceGetSupportedClocksEventReasons = libnvml.DeviceGetSupportedClocksEventReasons DeviceGetSupportedClocksThrottleReasons = libnvml.DeviceGetSupportedClocksThrottleReasons DeviceGetSupportedEventTypes = libnvml.DeviceGetSupportedEventTypes DeviceGetSupportedGraphicsClocks = libnvml.DeviceGetSupportedGraphicsClocks DeviceGetSupportedMemoryClocks = libnvml.DeviceGetSupportedMemoryClocks DeviceGetSupportedPerformanceStates = libnvml.DeviceGetSupportedPerformanceStates DeviceGetSupportedVgpus = libnvml.DeviceGetSupportedVgpus DeviceGetTargetFanSpeed = libnvml.DeviceGetTargetFanSpeed DeviceGetTemperature = libnvml.DeviceGetTemperature DeviceGetTemperatureThreshold = libnvml.DeviceGetTemperatureThreshold DeviceGetTemperatureV = libnvml.DeviceGetTemperatureV DeviceGetThermalSettings = libnvml.DeviceGetThermalSettings DeviceGetTopologyCommonAncestor = libnvml.DeviceGetTopologyCommonAncestor DeviceGetTopologyNearestGpus = libnvml.DeviceGetTopologyNearestGpus DeviceGetTotalEccErrors = libnvml.DeviceGetTotalEccErrors DeviceGetTotalEnergyConsumption = libnvml.DeviceGetTotalEnergyConsumption DeviceGetUUID = libnvml.DeviceGetUUID DeviceGetUtilizationRates = libnvml.DeviceGetUtilizationRates DeviceGetVbiosVersion = libnvml.DeviceGetVbiosVersion DeviceGetVgpuCapabilities = libnvml.DeviceGetVgpuCapabilities DeviceGetVgpuHeterogeneousMode = libnvml.DeviceGetVgpuHeterogeneousMode DeviceGetVgpuInstancesUtilizationInfo = libnvml.DeviceGetVgpuInstancesUtilizationInfo DeviceGetVgpuMetadata = libnvml.DeviceGetVgpuMetadata DeviceGetVgpuProcessUtilization = libnvml.DeviceGetVgpuProcessUtilization DeviceGetVgpuProcessesUtilizationInfo = libnvml.DeviceGetVgpuProcessesUtilizationInfo DeviceGetVgpuSchedulerCapabilities = libnvml.DeviceGetVgpuSchedulerCapabilities DeviceGetVgpuSchedulerLog = libnvml.DeviceGetVgpuSchedulerLog DeviceGetVgpuSchedulerState = libnvml.DeviceGetVgpuSchedulerState DeviceGetVgpuTypeCreatablePlacements = libnvml.DeviceGetVgpuTypeCreatablePlacements DeviceGetVgpuTypeSupportedPlacements = libnvml.DeviceGetVgpuTypeSupportedPlacements DeviceGetVgpuUtilization = libnvml.DeviceGetVgpuUtilization DeviceGetViolationStatus = libnvml.DeviceGetViolationStatus DeviceGetVirtualizationMode = libnvml.DeviceGetVirtualizationMode DeviceIsMigDeviceHandle = libnvml.DeviceIsMigDeviceHandle DeviceModifyDrainState = libnvml.DeviceModifyDrainState DeviceOnSameBoard = libnvml.DeviceOnSameBoard DevicePowerSmoothingActivatePresetProfile = libnvml.DevicePowerSmoothingActivatePresetProfile DevicePowerSmoothingSetState = libnvml.DevicePowerSmoothingSetState DevicePowerSmoothingUpdatePresetProfileParam = libnvml.DevicePowerSmoothingUpdatePresetProfileParam DeviceQueryDrainState = libnvml.DeviceQueryDrainState DeviceReadWritePRM_v1 = libnvml.DeviceReadWritePRM_v1 DeviceRegisterEvents = libnvml.DeviceRegisterEvents DeviceRemoveGpu = libnvml.DeviceRemoveGpu DeviceRemoveGpu_v2 = libnvml.DeviceRemoveGpu_v2 DeviceResetApplicationsClocks = libnvml.DeviceResetApplicationsClocks DeviceResetGpuLockedClocks = libnvml.DeviceResetGpuLockedClocks DeviceResetMemoryLockedClocks = libnvml.DeviceResetMemoryLockedClocks DeviceResetNvLinkErrorCounters = libnvml.DeviceResetNvLinkErrorCounters DeviceResetNvLinkUtilizationCounter = libnvml.DeviceResetNvLinkUtilizationCounter DeviceSetAPIRestriction = libnvml.DeviceSetAPIRestriction DeviceSetAccountingMode = libnvml.DeviceSetAccountingMode DeviceSetApplicationsClocks = libnvml.DeviceSetApplicationsClocks DeviceSetAutoBoostedClocksEnabled = libnvml.DeviceSetAutoBoostedClocksEnabled DeviceSetClockOffsets = libnvml.DeviceSetClockOffsets DeviceSetComputeMode = libnvml.DeviceSetComputeMode DeviceSetConfComputeUnprotectedMemSize = libnvml.DeviceSetConfComputeUnprotectedMemSize DeviceSetCpuAffinity = libnvml.DeviceSetCpuAffinity DeviceSetDefaultAutoBoostedClocksEnabled = libnvml.DeviceSetDefaultAutoBoostedClocksEnabled DeviceSetDefaultFanSpeed_v2 = libnvml.DeviceSetDefaultFanSpeed_v2 DeviceSetDramEncryptionMode = libnvml.DeviceSetDramEncryptionMode DeviceSetDriverModel = libnvml.DeviceSetDriverModel DeviceSetEccMode = libnvml.DeviceSetEccMode DeviceSetFanControlPolicy = libnvml.DeviceSetFanControlPolicy DeviceSetFanSpeed_v2 = libnvml.DeviceSetFanSpeed_v2 DeviceSetGpcClkVfOffset = libnvml.DeviceSetGpcClkVfOffset DeviceSetGpuLockedClocks = libnvml.DeviceSetGpuLockedClocks DeviceSetGpuOperationMode = libnvml.DeviceSetGpuOperationMode DeviceSetMemClkVfOffset = libnvml.DeviceSetMemClkVfOffset DeviceSetMemoryLockedClocks = libnvml.DeviceSetMemoryLockedClocks DeviceSetMigMode = libnvml.DeviceSetMigMode DeviceSetNvLinkDeviceLowPowerThreshold = libnvml.DeviceSetNvLinkDeviceLowPowerThreshold DeviceSetNvLinkUtilizationControl = libnvml.DeviceSetNvLinkUtilizationControl DeviceSetNvlinkBwMode = libnvml.DeviceSetNvlinkBwMode DeviceSetPersistenceMode = libnvml.DeviceSetPersistenceMode DeviceSetPowerManagementLimit = libnvml.DeviceSetPowerManagementLimit DeviceSetPowerManagementLimit_v2 = libnvml.DeviceSetPowerManagementLimit_v2 DeviceSetTemperatureThreshold = libnvml.DeviceSetTemperatureThreshold DeviceSetVgpuCapabilities = libnvml.DeviceSetVgpuCapabilities DeviceSetVgpuHeterogeneousMode = libnvml.DeviceSetVgpuHeterogeneousMode DeviceSetVgpuSchedulerState = libnvml.DeviceSetVgpuSchedulerState DeviceSetVirtualizationMode = libnvml.DeviceSetVirtualizationMode DeviceValidateInforom = libnvml.DeviceValidateInforom DeviceWorkloadPowerProfileClearRequestedProfiles = libnvml.DeviceWorkloadPowerProfileClearRequestedProfiles DeviceWorkloadPowerProfileGetCurrentProfiles = libnvml.DeviceWorkloadPowerProfileGetCurrentProfiles DeviceWorkloadPowerProfileGetProfilesInfo = libnvml.DeviceWorkloadPowerProfileGetProfilesInfo DeviceWorkloadPowerProfileSetRequestedProfiles = libnvml.DeviceWorkloadPowerProfileSetRequestedProfiles ErrorString = libnvml.ErrorString EventSetCreate = libnvml.EventSetCreate EventSetFree = libnvml.EventSetFree EventSetWait = libnvml.EventSetWait Extensions = libnvml.Extensions GetExcludedDeviceCount = libnvml.GetExcludedDeviceCount GetExcludedDeviceInfoByIndex = libnvml.GetExcludedDeviceInfoByIndex GetVgpuCompatibility = libnvml.GetVgpuCompatibility GetVgpuDriverCapabilities = libnvml.GetVgpuDriverCapabilities GetVgpuVersion = libnvml.GetVgpuVersion GpmMetricsGet = libnvml.GpmMetricsGet GpmMetricsGetV = libnvml.GpmMetricsGetV GpmMigSampleGet = libnvml.GpmMigSampleGet GpmQueryDeviceSupport = libnvml.GpmQueryDeviceSupport GpmQueryDeviceSupportV = libnvml.GpmQueryDeviceSupportV GpmQueryIfStreamingEnabled = libnvml.GpmQueryIfStreamingEnabled GpmSampleAlloc = libnvml.GpmSampleAlloc GpmSampleFree = libnvml.GpmSampleFree GpmSampleGet = libnvml.GpmSampleGet GpmSetStreamingEnabled = libnvml.GpmSetStreamingEnabled GpuInstanceCreateComputeInstance = libnvml.GpuInstanceCreateComputeInstance GpuInstanceCreateComputeInstanceWithPlacement = libnvml.GpuInstanceCreateComputeInstanceWithPlacement GpuInstanceDestroy = libnvml.GpuInstanceDestroy GpuInstanceGetActiveVgpus = libnvml.GpuInstanceGetActiveVgpus GpuInstanceGetComputeInstanceById = libnvml.GpuInstanceGetComputeInstanceById GpuInstanceGetComputeInstancePossiblePlacements = libnvml.GpuInstanceGetComputeInstancePossiblePlacements GpuInstanceGetComputeInstanceProfileInfo = libnvml.GpuInstanceGetComputeInstanceProfileInfo GpuInstanceGetComputeInstanceProfileInfoV = libnvml.GpuInstanceGetComputeInstanceProfileInfoV GpuInstanceGetComputeInstanceRemainingCapacity = libnvml.GpuInstanceGetComputeInstanceRemainingCapacity GpuInstanceGetComputeInstances = libnvml.GpuInstanceGetComputeInstances GpuInstanceGetCreatableVgpus = libnvml.GpuInstanceGetCreatableVgpus GpuInstanceGetInfo = libnvml.GpuInstanceGetInfo GpuInstanceGetVgpuHeterogeneousMode = libnvml.GpuInstanceGetVgpuHeterogeneousMode GpuInstanceGetVgpuSchedulerLog = libnvml.GpuInstanceGetVgpuSchedulerLog GpuInstanceGetVgpuSchedulerState = libnvml.GpuInstanceGetVgpuSchedulerState GpuInstanceGetVgpuTypeCreatablePlacements = libnvml.GpuInstanceGetVgpuTypeCreatablePlacements GpuInstanceSetVgpuHeterogeneousMode = libnvml.GpuInstanceSetVgpuHeterogeneousMode GpuInstanceSetVgpuSchedulerState = libnvml.GpuInstanceSetVgpuSchedulerState Init = libnvml.Init InitWithFlags = libnvml.InitWithFlags SetVgpuVersion = libnvml.SetVgpuVersion Shutdown = libnvml.Shutdown SystemEventSetCreate = libnvml.SystemEventSetCreate SystemEventSetFree = libnvml.SystemEventSetFree SystemEventSetWait = libnvml.SystemEventSetWait SystemGetConfComputeCapabilities = libnvml.SystemGetConfComputeCapabilities SystemGetConfComputeGpusReadyState = libnvml.SystemGetConfComputeGpusReadyState SystemGetConfComputeKeyRotationThresholdInfo = libnvml.SystemGetConfComputeKeyRotationThresholdInfo SystemGetConfComputeSettings = libnvml.SystemGetConfComputeSettings SystemGetConfComputeState = libnvml.SystemGetConfComputeState SystemGetCudaDriverVersion = libnvml.SystemGetCudaDriverVersion SystemGetCudaDriverVersion_v2 = libnvml.SystemGetCudaDriverVersion_v2 SystemGetDriverBranch = libnvml.SystemGetDriverBranch SystemGetDriverVersion = libnvml.SystemGetDriverVersion SystemGetHicVersion = libnvml.SystemGetHicVersion SystemGetNVMLVersion = libnvml.SystemGetNVMLVersion SystemGetNvlinkBwMode = libnvml.SystemGetNvlinkBwMode SystemGetProcessName = libnvml.SystemGetProcessName SystemGetTopologyGpuSet = libnvml.SystemGetTopologyGpuSet SystemRegisterEvents = libnvml.SystemRegisterEvents SystemSetConfComputeGpusReadyState = libnvml.SystemSetConfComputeGpusReadyState SystemSetConfComputeKeyRotationThresholdInfo = libnvml.SystemSetConfComputeKeyRotationThresholdInfo SystemSetNvlinkBwMode = libnvml.SystemSetNvlinkBwMode UnitGetCount = libnvml.UnitGetCount UnitGetDevices = libnvml.UnitGetDevices UnitGetFanSpeedInfo = libnvml.UnitGetFanSpeedInfo UnitGetHandleByIndex = libnvml.UnitGetHandleByIndex UnitGetLedState = libnvml.UnitGetLedState UnitGetPsuInfo = libnvml.UnitGetPsuInfo UnitGetTemperature = libnvml.UnitGetTemperature UnitGetUnitInfo = libnvml.UnitGetUnitInfo UnitSetLedState = libnvml.UnitSetLedState VgpuInstanceClearAccountingPids = libnvml.VgpuInstanceClearAccountingPids VgpuInstanceGetAccountingMode = libnvml.VgpuInstanceGetAccountingMode VgpuInstanceGetAccountingPids = libnvml.VgpuInstanceGetAccountingPids VgpuInstanceGetAccountingStats = libnvml.VgpuInstanceGetAccountingStats VgpuInstanceGetEccMode = libnvml.VgpuInstanceGetEccMode VgpuInstanceGetEncoderCapacity = libnvml.VgpuInstanceGetEncoderCapacity VgpuInstanceGetEncoderSessions = libnvml.VgpuInstanceGetEncoderSessions VgpuInstanceGetEncoderStats = libnvml.VgpuInstanceGetEncoderStats VgpuInstanceGetFBCSessions = libnvml.VgpuInstanceGetFBCSessions VgpuInstanceGetFBCStats = libnvml.VgpuInstanceGetFBCStats VgpuInstanceGetFbUsage = libnvml.VgpuInstanceGetFbUsage VgpuInstanceGetFrameRateLimit = libnvml.VgpuInstanceGetFrameRateLimit VgpuInstanceGetGpuInstanceId = libnvml.VgpuInstanceGetGpuInstanceId VgpuInstanceGetGpuPciId = libnvml.VgpuInstanceGetGpuPciId VgpuInstanceGetLicenseInfo = libnvml.VgpuInstanceGetLicenseInfo VgpuInstanceGetLicenseStatus = libnvml.VgpuInstanceGetLicenseStatus VgpuInstanceGetMdevUUID = libnvml.VgpuInstanceGetMdevUUID VgpuInstanceGetMetadata = libnvml.VgpuInstanceGetMetadata VgpuInstanceGetRuntimeStateSize = libnvml.VgpuInstanceGetRuntimeStateSize VgpuInstanceGetType = libnvml.VgpuInstanceGetType VgpuInstanceGetUUID = libnvml.VgpuInstanceGetUUID VgpuInstanceGetVmDriverVersion = libnvml.VgpuInstanceGetVmDriverVersion VgpuInstanceGetVmID = libnvml.VgpuInstanceGetVmID VgpuInstanceSetEncoderCapacity = libnvml.VgpuInstanceSetEncoderCapacity VgpuTypeGetBAR1Info = libnvml.VgpuTypeGetBAR1Info VgpuTypeGetCapabilities = libnvml.VgpuTypeGetCapabilities VgpuTypeGetClass = libnvml.VgpuTypeGetClass VgpuTypeGetDeviceID = libnvml.VgpuTypeGetDeviceID VgpuTypeGetFrameRateLimit = libnvml.VgpuTypeGetFrameRateLimit VgpuTypeGetFramebufferSize = libnvml.VgpuTypeGetFramebufferSize VgpuTypeGetGpuInstanceProfileId = libnvml.VgpuTypeGetGpuInstanceProfileId VgpuTypeGetLicense = libnvml.VgpuTypeGetLicense VgpuTypeGetMaxInstances = libnvml.VgpuTypeGetMaxInstances VgpuTypeGetMaxInstancesPerGpuInstance = libnvml.VgpuTypeGetMaxInstancesPerGpuInstance VgpuTypeGetMaxInstancesPerVm = libnvml.VgpuTypeGetMaxInstancesPerVm VgpuTypeGetName = libnvml.VgpuTypeGetName VgpuTypeGetNumDisplayHeads = libnvml.VgpuTypeGetNumDisplayHeads VgpuTypeGetResolution = libnvml.VgpuTypeGetResolution ) // Interface represents the interface for the library type. // //go:generate moq -out mock/interface.go -pkg mock . Interface:Interface type Interface interface { ComputeInstanceDestroy(ComputeInstance) Return ComputeInstanceGetInfo(ComputeInstance) (ComputeInstanceInfo, Return) DeviceClearAccountingPids(Device) Return DeviceClearCpuAffinity(Device) Return DeviceClearEccErrorCounts(Device, EccCounterType) Return DeviceClearFieldValues(Device, []FieldValue) Return DeviceCreateGpuInstance(Device, *GpuInstanceProfileInfo) (GpuInstance, Return) DeviceCreateGpuInstanceWithPlacement(Device, *GpuInstanceProfileInfo, *GpuInstancePlacement) (GpuInstance, Return) DeviceDiscoverGpus() (PciInfo, Return) DeviceFreezeNvLinkUtilizationCounter(Device, int, int, EnableState) Return DeviceGetAPIRestriction(Device, RestrictedAPI) (EnableState, Return) DeviceGetAccountingBufferSize(Device) (int, Return) DeviceGetAccountingMode(Device) (EnableState, Return) DeviceGetAccountingPids(Device) ([]int, Return) DeviceGetAccountingStats(Device, uint32) (AccountingStats, Return) DeviceGetActiveVgpus(Device) ([]VgpuInstance, Return) DeviceGetAdaptiveClockInfoStatus(Device) (uint32, Return) DeviceGetAddressingMode(Device) (DeviceAddressingMode, Return) DeviceGetApplicationsClock(Device, ClockType) (uint32, Return) DeviceGetArchitecture(Device) (DeviceArchitecture, Return) DeviceGetAttributes(Device) (DeviceAttributes, Return) DeviceGetAutoBoostedClocksEnabled(Device) (EnableState, EnableState, Return) DeviceGetBAR1MemoryInfo(Device) (BAR1Memory, Return) DeviceGetBoardId(Device) (uint32, Return) DeviceGetBoardPartNumber(Device) (string, Return) DeviceGetBrand(Device) (BrandType, Return) DeviceGetBridgeChipInfo(Device) (BridgeChipHierarchy, Return) DeviceGetBusType(Device) (BusType, Return) DeviceGetC2cModeInfoV(Device) C2cModeInfoHandler DeviceGetCapabilities(Device) (DeviceCapabilities, Return) DeviceGetClkMonStatus(Device) (ClkMonStatus, Return) DeviceGetClock(Device, ClockType, ClockId) (uint32, Return) DeviceGetClockInfo(Device, ClockType) (uint32, Return) DeviceGetClockOffsets(Device) (ClockOffset, Return) DeviceGetComputeInstanceId(Device) (int, Return) DeviceGetComputeMode(Device) (ComputeMode, Return) DeviceGetComputeRunningProcesses(Device) ([]ProcessInfo, Return) DeviceGetConfComputeGpuAttestationReport(Device, *ConfComputeGpuAttestationReport) Return DeviceGetConfComputeGpuCertificate(Device) (ConfComputeGpuCertificate, Return) DeviceGetConfComputeMemSizeInfo(Device) (ConfComputeMemSizeInfo, Return) DeviceGetConfComputeProtectedMemoryUsage(Device) (Memory, Return) DeviceGetCoolerInfo(Device) (CoolerInfo, Return) DeviceGetCount() (int, Return) DeviceGetCpuAffinity(Device, int) ([]uint, Return) DeviceGetCpuAffinityWithinScope(Device, int, AffinityScope) ([]uint, Return) DeviceGetCreatableVgpus(Device) ([]VgpuTypeId, Return) DeviceGetCudaComputeCapability(Device) (int, int, Return) DeviceGetCurrPcieLinkGeneration(Device) (int, Return) DeviceGetCurrPcieLinkWidth(Device) (int, Return) DeviceGetCurrentClockFreqs(Device) (DeviceCurrentClockFreqs, Return) DeviceGetCurrentClocksEventReasons(Device) (uint64, Return) DeviceGetCurrentClocksThrottleReasons(Device) (uint64, Return) DeviceGetDecoderUtilization(Device) (uint32, uint32, Return) DeviceGetDefaultApplicationsClock(Device, ClockType) (uint32, Return) DeviceGetDefaultEccMode(Device) (EnableState, Return) DeviceGetDetailedEccErrors(Device, MemoryErrorType, EccCounterType) (EccErrorCounts, Return) DeviceGetDeviceHandleFromMigDeviceHandle(Device) (Device, Return) DeviceGetDisplayActive(Device) (EnableState, Return) DeviceGetDisplayMode(Device) (EnableState, Return) DeviceGetDramEncryptionMode(Device) (DramEncryptionInfo, DramEncryptionInfo, Return) DeviceGetDriverModel(Device) (DriverModel, DriverModel, Return) DeviceGetDriverModel_v2(Device) (DriverModel, DriverModel, Return) DeviceGetDynamicPstatesInfo(Device) (GpuDynamicPstatesInfo, Return) DeviceGetEccMode(Device) (EnableState, EnableState, Return) DeviceGetEncoderCapacity(Device, EncoderType) (int, Return) DeviceGetEncoderSessions(Device) ([]EncoderSessionInfo, Return) DeviceGetEncoderStats(Device) (int, uint32, uint32, Return) DeviceGetEncoderUtilization(Device) (uint32, uint32, Return) DeviceGetEnforcedPowerLimit(Device) (uint32, Return) DeviceGetFBCSessions(Device) ([]FBCSessionInfo, Return) DeviceGetFBCStats(Device) (FBCStats, Return) DeviceGetFanControlPolicy_v2(Device, int) (FanControlPolicy, Return) DeviceGetFanSpeed(Device) (uint32, Return) DeviceGetFanSpeedRPM(Device) (FanSpeedInfo, Return) DeviceGetFanSpeed_v2(Device, int) (uint32, Return) DeviceGetFieldValues(Device, []FieldValue) Return DeviceGetGpcClkMinMaxVfOffset(Device) (int, int, Return) DeviceGetGpcClkVfOffset(Device) (int, Return) DeviceGetGpuFabricInfo(Device) (GpuFabricInfo, Return) DeviceGetGpuFabricInfoV(Device) GpuFabricInfoHandler DeviceGetGpuInstanceById(Device, int) (GpuInstance, Return) DeviceGetGpuInstanceId(Device) (int, Return) DeviceGetGpuInstancePossiblePlacements(Device, *GpuInstanceProfileInfo) ([]GpuInstancePlacement, Return) DeviceGetGpuInstanceProfileInfo(Device, int) (GpuInstanceProfileInfo, Return) DeviceGetGpuInstanceProfileInfoByIdV(Device, int) GpuInstanceProfileInfoByIdHandler DeviceGetGpuInstanceProfileInfoV(Device, int) GpuInstanceProfileInfoHandler DeviceGetGpuInstanceRemainingCapacity(Device, *GpuInstanceProfileInfo) (int, Return) DeviceGetGpuInstances(Device, *GpuInstanceProfileInfo) ([]GpuInstance, Return) DeviceGetGpuMaxPcieLinkGeneration(Device) (int, Return) DeviceGetGpuOperationMode(Device) (GpuOperationMode, GpuOperationMode, Return) DeviceGetGraphicsRunningProcesses(Device) ([]ProcessInfo, Return) DeviceGetGridLicensableFeatures(Device) (GridLicensableFeatures, Return) DeviceGetGspFirmwareMode(Device) (bool, bool, Return) DeviceGetGspFirmwareVersion(Device) (string, Return) DeviceGetHandleByIndex(int) (Device, Return) DeviceGetHandleByPciBusId(string) (Device, Return) DeviceGetHandleBySerial(string) (Device, Return) DeviceGetHandleByUUID(string) (Device, Return) DeviceGetHandleByUUIDV(*UUID) (Device, Return) DeviceGetHostVgpuMode(Device) (HostVgpuMode, Return) DeviceGetIndex(Device) (int, Return) DeviceGetInforomConfigurationChecksum(Device) (uint32, Return) DeviceGetInforomImageVersion(Device) (string, Return) DeviceGetInforomVersion(Device, InforomObject) (string, Return) DeviceGetIrqNum(Device) (int, Return) DeviceGetJpgUtilization(Device) (uint32, uint32, Return) DeviceGetLastBBXFlushTime(Device) (uint64, uint, Return) DeviceGetMPSComputeRunningProcesses(Device) ([]ProcessInfo, Return) DeviceGetMarginTemperature(Device) (MarginTemperature, Return) DeviceGetMaxClockInfo(Device, ClockType) (uint32, Return) DeviceGetMaxCustomerBoostClock(Device, ClockType) (uint32, Return) DeviceGetMaxMigDeviceCount(Device) (int, Return) DeviceGetMaxPcieLinkGeneration(Device) (int, Return) DeviceGetMaxPcieLinkWidth(Device) (int, Return) DeviceGetMemClkMinMaxVfOffset(Device) (int, int, Return) DeviceGetMemClkVfOffset(Device) (int, Return) DeviceGetMemoryAffinity(Device, int, AffinityScope) ([]uint, Return) DeviceGetMemoryBusWidth(Device) (uint32, Return) DeviceGetMemoryErrorCounter(Device, MemoryErrorType, EccCounterType, MemoryLocation) (uint64, Return) DeviceGetMemoryInfo(Device) (Memory, Return) DeviceGetMemoryInfo_v2(Device) (Memory_v2, Return) DeviceGetMigDeviceHandleByIndex(Device, int) (Device, Return) DeviceGetMigMode(Device) (int, int, Return) DeviceGetMinMaxClockOfPState(Device, ClockType, Pstates) (uint32, uint32, Return) DeviceGetMinMaxFanSpeed(Device) (int, int, Return) DeviceGetMinorNumber(Device) (int, Return) DeviceGetModuleId(Device) (int, Return) DeviceGetMultiGpuBoard(Device) (int, Return) DeviceGetName(Device) (string, Return) DeviceGetNumFans(Device) (int, Return) DeviceGetNumGpuCores(Device) (int, Return) DeviceGetNumaNodeId(Device) (int, Return) DeviceGetNvLinkCapability(Device, int, NvLinkCapability) (uint32, Return) DeviceGetNvLinkErrorCounter(Device, int, NvLinkErrorCounter) (uint64, Return) DeviceGetNvLinkInfo(Device) NvLinkInfoHandler DeviceGetNvLinkRemoteDeviceType(Device, int) (IntNvLinkDeviceType, Return) DeviceGetNvLinkRemotePciInfo(Device, int) (PciInfo, Return) DeviceGetNvLinkState(Device, int) (EnableState, Return) DeviceGetNvLinkUtilizationControl(Device, int, int) (NvLinkUtilizationControl, Return) DeviceGetNvLinkUtilizationCounter(Device, int, int) (uint64, uint64, Return) DeviceGetNvLinkVersion(Device, int) (uint32, Return) DeviceGetNvlinkBwMode(Device) (NvlinkGetBwMode, Return) DeviceGetNvlinkSupportedBwModes(Device) (NvlinkSupportedBwModes, Return) DeviceGetOfaUtilization(Device) (uint32, uint32, Return) DeviceGetP2PStatus(Device, Device, GpuP2PCapsIndex) (GpuP2PStatus, Return) DeviceGetPciInfo(Device) (PciInfo, Return) DeviceGetPciInfoExt(Device) (PciInfoExt, Return) DeviceGetPcieLinkMaxSpeed(Device) (uint32, Return) DeviceGetPcieReplayCounter(Device) (int, Return) DeviceGetPcieSpeed(Device) (int, Return) DeviceGetPcieThroughput(Device, PcieUtilCounter) (uint32, Return) DeviceGetPdi(Device) (Pdi, Return) DeviceGetPerformanceModes(Device) (DevicePerfModes, Return) DeviceGetPerformanceState(Device) (Pstates, Return) DeviceGetPersistenceMode(Device) (EnableState, Return) DeviceGetPgpuMetadataString(Device) (string, Return) DeviceGetPlatformInfo(Device) (PlatformInfo, Return) DeviceGetPowerManagementDefaultLimit(Device) (uint32, Return) DeviceGetPowerManagementLimit(Device) (uint32, Return) DeviceGetPowerManagementLimitConstraints(Device) (uint32, uint32, Return) DeviceGetPowerManagementMode(Device) (EnableState, Return) DeviceGetPowerMizerMode_v1(Device) (DevicePowerMizerModes_v1, Return) DeviceGetPowerSource(Device) (PowerSource, Return) DeviceGetPowerState(Device) (Pstates, Return) DeviceGetPowerUsage(Device) (uint32, Return) DeviceGetProcessUtilization(Device, uint64) ([]ProcessUtilizationSample, Return) DeviceGetProcessesUtilizationInfo(Device) (ProcessesUtilizationInfo, Return) DeviceGetRemappedRows(Device) (int, int, bool, bool, Return) DeviceGetRepairStatus(Device) (RepairStatus, Return) DeviceGetRetiredPages(Device, PageRetirementCause) ([]uint64, Return) DeviceGetRetiredPagesPendingStatus(Device) (EnableState, Return) DeviceGetRetiredPages_v2(Device, PageRetirementCause) ([]uint64, []uint64, Return) DeviceGetRowRemapperHistogram(Device) (RowRemapperHistogramValues, Return) DeviceGetRunningProcessDetailList(Device) (ProcessDetailList, Return) DeviceGetSamples(Device, SamplingType, uint64) (ValueType, []Sample, Return) DeviceGetSerial(Device) (string, Return) DeviceGetSramEccErrorStatus(Device) (EccSramErrorStatus, Return) DeviceGetSramUniqueUncorrectedEccErrorCounts(Device, *EccSramUniqueUncorrectedErrorCounts) Return DeviceGetSupportedClocksEventReasons(Device) (uint64, Return) DeviceGetSupportedClocksThrottleReasons(Device) (uint64, Return) DeviceGetSupportedEventTypes(Device) (uint64, Return) DeviceGetSupportedGraphicsClocks(Device, int) (int, uint32, Return) DeviceGetSupportedMemoryClocks(Device) (int, uint32, Return) DeviceGetSupportedPerformanceStates(Device) ([]Pstates, Return) DeviceGetSupportedVgpus(Device) ([]VgpuTypeId, Return) DeviceGetTargetFanSpeed(Device, int) (int, Return) DeviceGetTemperature(Device, TemperatureSensors) (uint32, Return) DeviceGetTemperatureThreshold(Device, TemperatureThresholds) (uint32, Return) DeviceGetTemperatureV(Device) TemperatureHandler DeviceGetThermalSettings(Device, uint32) (GpuThermalSettings, Return) DeviceGetTopologyCommonAncestor(Device, Device) (GpuTopologyLevel, Return) DeviceGetTopologyNearestGpus(Device, GpuTopologyLevel) ([]Device, Return) DeviceGetTotalEccErrors(Device, MemoryErrorType, EccCounterType) (uint64, Return) DeviceGetTotalEnergyConsumption(Device) (uint64, Return) DeviceGetUUID(Device) (string, Return) DeviceGetUtilizationRates(Device) (Utilization, Return) DeviceGetVbiosVersion(Device) (string, Return) DeviceGetVgpuCapabilities(Device, DeviceVgpuCapability) (bool, Return) DeviceGetVgpuHeterogeneousMode(Device) (VgpuHeterogeneousMode, Return) DeviceGetVgpuInstancesUtilizationInfo(Device) (VgpuInstancesUtilizationInfo, Return) DeviceGetVgpuMetadata(Device) (VgpuPgpuMetadata, Return) DeviceGetVgpuProcessUtilization(Device, uint64) ([]VgpuProcessUtilizationSample, Return) DeviceGetVgpuProcessesUtilizationInfo(Device) (VgpuProcessesUtilizationInfo, Return) DeviceGetVgpuSchedulerCapabilities(Device) (VgpuSchedulerCapabilities, Return) DeviceGetVgpuSchedulerLog(Device) (VgpuSchedulerLog, Return) DeviceGetVgpuSchedulerState(Device) (VgpuSchedulerGetState, Return) DeviceGetVgpuTypeCreatablePlacements(Device, VgpuTypeId) (VgpuPlacementList, Return) DeviceGetVgpuTypeSupportedPlacements(Device, VgpuTypeId) (VgpuPlacementList, Return) DeviceGetVgpuUtilization(Device, uint64) (ValueType, []VgpuInstanceUtilizationSample, Return) DeviceGetViolationStatus(Device, PerfPolicyType) (ViolationTime, Return) DeviceGetVirtualizationMode(Device) (GpuVirtualizationMode, Return) DeviceIsMigDeviceHandle(Device) (bool, Return) DeviceModifyDrainState(*PciInfo, EnableState) Return DeviceOnSameBoard(Device, Device) (int, Return) DevicePowerSmoothingActivatePresetProfile(Device, *PowerSmoothingProfile) Return DevicePowerSmoothingSetState(Device, *PowerSmoothingState) Return DevicePowerSmoothingUpdatePresetProfileParam(Device, *PowerSmoothingProfile) Return DeviceQueryDrainState(*PciInfo) (EnableState, Return) DeviceReadWritePRM_v1(Device, *PRMTLV_v1) Return DeviceRegisterEvents(Device, uint64, EventSet) Return DeviceRemoveGpu(*PciInfo) Return DeviceRemoveGpu_v2(*PciInfo, DetachGpuState, PcieLinkState) Return DeviceResetApplicationsClocks(Device) Return DeviceResetGpuLockedClocks(Device) Return DeviceResetMemoryLockedClocks(Device) Return DeviceResetNvLinkErrorCounters(Device, int) Return DeviceResetNvLinkUtilizationCounter(Device, int, int) Return DeviceSetAPIRestriction(Device, RestrictedAPI, EnableState) Return DeviceSetAccountingMode(Device, EnableState) Return DeviceSetApplicationsClocks(Device, uint32, uint32) Return DeviceSetAutoBoostedClocksEnabled(Device, EnableState) Return DeviceSetClockOffsets(Device, ClockOffset) Return DeviceSetComputeMode(Device, ComputeMode) Return DeviceSetConfComputeUnprotectedMemSize(Device, uint64) Return DeviceSetCpuAffinity(Device) Return DeviceSetDefaultAutoBoostedClocksEnabled(Device, EnableState, uint32) Return DeviceSetDefaultFanSpeed_v2(Device, int) Return DeviceSetDramEncryptionMode(Device, *DramEncryptionInfo) Return DeviceSetDriverModel(Device, DriverModel, uint32) Return DeviceSetEccMode(Device, EnableState) Return DeviceSetFanControlPolicy(Device, int, FanControlPolicy) Return DeviceSetFanSpeed_v2(Device, int, int) Return DeviceSetGpcClkVfOffset(Device, int) Return DeviceSetGpuLockedClocks(Device, uint32, uint32) Return DeviceSetGpuOperationMode(Device, GpuOperationMode) Return DeviceSetMemClkVfOffset(Device, int) Return DeviceSetMemoryLockedClocks(Device, uint32, uint32) Return DeviceSetMigMode(Device, int) (Return, Return) DeviceSetNvLinkDeviceLowPowerThreshold(Device, *NvLinkPowerThres) Return DeviceSetNvLinkUtilizationControl(Device, int, int, *NvLinkUtilizationControl, bool) Return DeviceSetNvlinkBwMode(Device, *NvlinkSetBwMode) Return DeviceSetPersistenceMode(Device, EnableState) Return DeviceSetPowerManagementLimit(Device, uint32) Return DeviceSetPowerManagementLimit_v2(Device, *PowerValue_v2) Return DeviceSetTemperatureThreshold(Device, TemperatureThresholds, int) Return DeviceSetVgpuCapabilities(Device, DeviceVgpuCapability, EnableState) Return DeviceSetVgpuHeterogeneousMode(Device, VgpuHeterogeneousMode) Return DeviceSetVgpuSchedulerState(Device, *VgpuSchedulerSetState) Return DeviceSetVirtualizationMode(Device, GpuVirtualizationMode) Return DeviceValidateInforom(Device) Return DeviceWorkloadPowerProfileClearRequestedProfiles(Device, *WorkloadPowerProfileRequestedProfiles) Return DeviceWorkloadPowerProfileGetCurrentProfiles(Device) (WorkloadPowerProfileCurrentProfiles, Return) DeviceWorkloadPowerProfileGetProfilesInfo(Device) (WorkloadPowerProfileProfilesInfo, Return) DeviceWorkloadPowerProfileSetRequestedProfiles(Device, *WorkloadPowerProfileRequestedProfiles) Return ErrorString(Return) string EventSetCreate() (EventSet, Return) EventSetFree(EventSet) Return EventSetWait(EventSet, uint32) (EventData, Return) Extensions() ExtendedInterface GetExcludedDeviceCount() (int, Return) GetExcludedDeviceInfoByIndex(int) (ExcludedDeviceInfo, Return) GetVgpuCompatibility(*VgpuMetadata, *VgpuPgpuMetadata) (VgpuPgpuCompatibility, Return) GetVgpuDriverCapabilities(VgpuDriverCapability) (bool, Return) GetVgpuVersion() (VgpuVersion, VgpuVersion, Return) GpmMetricsGet(*GpmMetricsGetType) Return GpmMetricsGetV(*GpmMetricsGetType) GpmMetricsGetVType GpmMigSampleGet(Device, int, GpmSample) Return GpmQueryDeviceSupport(Device) (GpmSupport, Return) GpmQueryDeviceSupportV(Device) GpmSupportV GpmQueryIfStreamingEnabled(Device) (uint32, Return) GpmSampleAlloc() (GpmSample, Return) GpmSampleFree(GpmSample) Return GpmSampleGet(Device, GpmSample) Return GpmSetStreamingEnabled(Device, uint32) Return GpuInstanceCreateComputeInstance(GpuInstance, *ComputeInstanceProfileInfo) (ComputeInstance, Return) GpuInstanceCreateComputeInstanceWithPlacement(GpuInstance, *ComputeInstanceProfileInfo, *ComputeInstancePlacement) (ComputeInstance, Return) GpuInstanceDestroy(GpuInstance) Return GpuInstanceGetActiveVgpus(GpuInstance) (ActiveVgpuInstanceInfo, Return) GpuInstanceGetComputeInstanceById(GpuInstance, int) (ComputeInstance, Return) GpuInstanceGetComputeInstancePossiblePlacements(GpuInstance, *ComputeInstanceProfileInfo) ([]ComputeInstancePlacement, Return) GpuInstanceGetComputeInstanceProfileInfo(GpuInstance, int, int) (ComputeInstanceProfileInfo, Return) GpuInstanceGetComputeInstanceProfileInfoV(GpuInstance, int, int) ComputeInstanceProfileInfoHandler GpuInstanceGetComputeInstanceRemainingCapacity(GpuInstance, *ComputeInstanceProfileInfo) (int, Return) GpuInstanceGetComputeInstances(GpuInstance, *ComputeInstanceProfileInfo) ([]ComputeInstance, Return) GpuInstanceGetCreatableVgpus(GpuInstance) (VgpuTypeIdInfo, Return) GpuInstanceGetInfo(GpuInstance) (GpuInstanceInfo, Return) GpuInstanceGetVgpuHeterogeneousMode(GpuInstance) (VgpuHeterogeneousMode, Return) GpuInstanceGetVgpuSchedulerLog(GpuInstance) (VgpuSchedulerLogInfo, Return) GpuInstanceGetVgpuSchedulerState(GpuInstance) (VgpuSchedulerStateInfo, Return) GpuInstanceGetVgpuTypeCreatablePlacements(GpuInstance) (VgpuCreatablePlacementInfo, Return) GpuInstanceSetVgpuHeterogeneousMode(GpuInstance, *VgpuHeterogeneousMode) Return GpuInstanceSetVgpuSchedulerState(GpuInstance, *VgpuSchedulerState) Return Init() Return InitWithFlags(uint32) Return SetVgpuVersion(*VgpuVersion) Return Shutdown() Return SystemEventSetCreate(*SystemEventSetCreateRequest) Return SystemEventSetFree(*SystemEventSetFreeRequest) Return SystemEventSetWait(*SystemEventSetWaitRequest) Return SystemGetConfComputeCapabilities() (ConfComputeSystemCaps, Return) SystemGetConfComputeGpusReadyState() (uint32, Return) SystemGetConfComputeKeyRotationThresholdInfo() (ConfComputeGetKeyRotationThresholdInfo, Return) SystemGetConfComputeSettings() (SystemConfComputeSettings, Return) SystemGetConfComputeState() (ConfComputeSystemState, Return) SystemGetCudaDriverVersion() (int, Return) SystemGetCudaDriverVersion_v2() (int, Return) SystemGetDriverBranch() (SystemDriverBranchInfo, Return) SystemGetDriverVersion() (string, Return) SystemGetHicVersion() ([]HwbcEntry, Return) SystemGetNVMLVersion() (string, Return) SystemGetNvlinkBwMode() (uint32, Return) SystemGetProcessName(int) (string, Return) SystemGetTopologyGpuSet(int) ([]Device, Return) SystemRegisterEvents(*SystemRegisterEventRequest) Return SystemSetConfComputeGpusReadyState(uint32) Return SystemSetConfComputeKeyRotationThresholdInfo(ConfComputeSetKeyRotationThresholdInfo) Return SystemSetNvlinkBwMode(uint32) Return UnitGetCount() (int, Return) UnitGetDevices(Unit) ([]Device, Return) UnitGetFanSpeedInfo(Unit) (UnitFanSpeeds, Return) UnitGetHandleByIndex(int) (Unit, Return) UnitGetLedState(Unit) (LedState, Return) UnitGetPsuInfo(Unit) (PSUInfo, Return) UnitGetTemperature(Unit, int) (uint32, Return) UnitGetUnitInfo(Unit) (UnitInfo, Return) UnitSetLedState(Unit, LedColor) Return VgpuInstanceClearAccountingPids(VgpuInstance) Return VgpuInstanceGetAccountingMode(VgpuInstance) (EnableState, Return) VgpuInstanceGetAccountingPids(VgpuInstance) ([]int, Return) VgpuInstanceGetAccountingStats(VgpuInstance, int) (AccountingStats, Return) VgpuInstanceGetEccMode(VgpuInstance) (EnableState, Return) VgpuInstanceGetEncoderCapacity(VgpuInstance) (int, Return) VgpuInstanceGetEncoderSessions(VgpuInstance) (int, EncoderSessionInfo, Return) VgpuInstanceGetEncoderStats(VgpuInstance) (int, uint32, uint32, Return) VgpuInstanceGetFBCSessions(VgpuInstance) (int, FBCSessionInfo, Return) VgpuInstanceGetFBCStats(VgpuInstance) (FBCStats, Return) VgpuInstanceGetFbUsage(VgpuInstance) (uint64, Return) VgpuInstanceGetFrameRateLimit(VgpuInstance) (uint32, Return) VgpuInstanceGetGpuInstanceId(VgpuInstance) (int, Return) VgpuInstanceGetGpuPciId(VgpuInstance) (string, Return) VgpuInstanceGetLicenseInfo(VgpuInstance) (VgpuLicenseInfo, Return) VgpuInstanceGetLicenseStatus(VgpuInstance) (int, Return) VgpuInstanceGetMdevUUID(VgpuInstance) (string, Return) VgpuInstanceGetMetadata(VgpuInstance) (VgpuMetadata, Return) VgpuInstanceGetRuntimeStateSize(VgpuInstance) (VgpuRuntimeState, Return) VgpuInstanceGetType(VgpuInstance) (VgpuTypeId, Return) VgpuInstanceGetUUID(VgpuInstance) (string, Return) VgpuInstanceGetVmDriverVersion(VgpuInstance) (string, Return) VgpuInstanceGetVmID(VgpuInstance) (string, VgpuVmIdType, Return) VgpuInstanceSetEncoderCapacity(VgpuInstance, int) Return VgpuTypeGetBAR1Info(VgpuTypeId) (VgpuTypeBar1Info, Return) VgpuTypeGetCapabilities(VgpuTypeId, VgpuCapability) (bool, Return) VgpuTypeGetClass(VgpuTypeId) (string, Return) VgpuTypeGetDeviceID(VgpuTypeId) (uint64, uint64, Return) VgpuTypeGetFrameRateLimit(VgpuTypeId) (uint32, Return) VgpuTypeGetFramebufferSize(VgpuTypeId) (uint64, Return) VgpuTypeGetGpuInstanceProfileId(VgpuTypeId) (uint32, Return) VgpuTypeGetLicense(VgpuTypeId) (string, Return) VgpuTypeGetMaxInstances(Device, VgpuTypeId) (int, Return) VgpuTypeGetMaxInstancesPerGpuInstance(*VgpuTypeMaxInstance) Return VgpuTypeGetMaxInstancesPerVm(VgpuTypeId) (int, Return) VgpuTypeGetName(VgpuTypeId) (string, Return) VgpuTypeGetNumDisplayHeads(VgpuTypeId) (int, Return) VgpuTypeGetResolution(VgpuTypeId, int) (uint32, uint32, Return) } // Device represents the interface for the nvmlDevice type. // //go:generate moq -out mock/device.go -pkg mock . Device:Device type Device interface { ClearAccountingPids() Return ClearCpuAffinity() Return ClearEccErrorCounts(EccCounterType) Return ClearFieldValues([]FieldValue) Return CreateGpuInstance(*GpuInstanceProfileInfo) (GpuInstance, Return) CreateGpuInstanceWithPlacement(*GpuInstanceProfileInfo, *GpuInstancePlacement) (GpuInstance, Return) FreezeNvLinkUtilizationCounter(int, int, EnableState) Return GetAPIRestriction(RestrictedAPI) (EnableState, Return) GetAccountingBufferSize() (int, Return) GetAccountingMode() (EnableState, Return) GetAccountingPids() ([]int, Return) GetAccountingStats(uint32) (AccountingStats, Return) GetActiveVgpus() ([]VgpuInstance, Return) GetAdaptiveClockInfoStatus() (uint32, Return) GetAddressingMode() (DeviceAddressingMode, Return) GetApplicationsClock(ClockType) (uint32, Return) GetArchitecture() (DeviceArchitecture, Return) GetAttributes() (DeviceAttributes, Return) GetAutoBoostedClocksEnabled() (EnableState, EnableState, Return) GetBAR1MemoryInfo() (BAR1Memory, Return) GetBoardId() (uint32, Return) GetBoardPartNumber() (string, Return) GetBrand() (BrandType, Return) GetBridgeChipInfo() (BridgeChipHierarchy, Return) GetBusType() (BusType, Return) GetC2cModeInfoV() C2cModeInfoHandler GetCapabilities() (DeviceCapabilities, Return) GetClkMonStatus() (ClkMonStatus, Return) GetClock(ClockType, ClockId) (uint32, Return) GetClockInfo(ClockType) (uint32, Return) GetClockOffsets() (ClockOffset, Return) GetComputeInstanceId() (int, Return) GetComputeMode() (ComputeMode, Return) GetComputeRunningProcesses() ([]ProcessInfo, Return) GetConfComputeGpuAttestationReport(*ConfComputeGpuAttestationReport) Return GetConfComputeGpuCertificate() (ConfComputeGpuCertificate, Return) GetConfComputeMemSizeInfo() (ConfComputeMemSizeInfo, Return) GetConfComputeProtectedMemoryUsage() (Memory, Return) GetCoolerInfo() (CoolerInfo, Return) GetCpuAffinity(int) ([]uint, Return) GetCpuAffinityWithinScope(int, AffinityScope) ([]uint, Return) GetCreatableVgpus() ([]VgpuTypeId, Return) GetCudaComputeCapability() (int, int, Return) GetCurrPcieLinkGeneration() (int, Return) GetCurrPcieLinkWidth() (int, Return) GetCurrentClockFreqs() (DeviceCurrentClockFreqs, Return) GetCurrentClocksEventReasons() (uint64, Return) GetCurrentClocksThrottleReasons() (uint64, Return) GetDecoderUtilization() (uint32, uint32, Return) GetDefaultApplicationsClock(ClockType) (uint32, Return) GetDefaultEccMode() (EnableState, Return) GetDetailedEccErrors(MemoryErrorType, EccCounterType) (EccErrorCounts, Return) GetDeviceHandleFromMigDeviceHandle() (Device, Return) GetDisplayActive() (EnableState, Return) GetDisplayMode() (EnableState, Return) GetDramEncryptionMode() (DramEncryptionInfo, DramEncryptionInfo, Return) GetDriverModel() (DriverModel, DriverModel, Return) GetDriverModel_v2() (DriverModel, DriverModel, Return) GetDynamicPstatesInfo() (GpuDynamicPstatesInfo, Return) GetEccMode() (EnableState, EnableState, Return) GetEncoderCapacity(EncoderType) (int, Return) GetEncoderSessions() ([]EncoderSessionInfo, Return) GetEncoderStats() (int, uint32, uint32, Return) GetEncoderUtilization() (uint32, uint32, Return) GetEnforcedPowerLimit() (uint32, Return) GetFBCSessions() ([]FBCSessionInfo, Return) GetFBCStats() (FBCStats, Return) GetFanControlPolicy_v2(int) (FanControlPolicy, Return) GetFanSpeed() (uint32, Return) GetFanSpeedRPM() (FanSpeedInfo, Return) GetFanSpeed_v2(int) (uint32, Return) GetFieldValues([]FieldValue) Return GetGpcClkMinMaxVfOffset() (int, int, Return) GetGpcClkVfOffset() (int, Return) GetGpuFabricInfo() (GpuFabricInfo, Return) GetGpuFabricInfoV() GpuFabricInfoHandler GetGpuInstanceById(int) (GpuInstance, Return) GetGpuInstanceId() (int, Return) GetGpuInstancePossiblePlacements(*GpuInstanceProfileInfo) ([]GpuInstancePlacement, Return) GetGpuInstanceProfileInfo(int) (GpuInstanceProfileInfo, Return) GetGpuInstanceProfileInfoByIdV(int) GpuInstanceProfileInfoByIdHandler GetGpuInstanceProfileInfoV(int) GpuInstanceProfileInfoHandler GetGpuInstanceRemainingCapacity(*GpuInstanceProfileInfo) (int, Return) GetGpuInstances(*GpuInstanceProfileInfo) ([]GpuInstance, Return) GetGpuMaxPcieLinkGeneration() (int, Return) GetGpuOperationMode() (GpuOperationMode, GpuOperationMode, Return) GetGraphicsRunningProcesses() ([]ProcessInfo, Return) GetGridLicensableFeatures() (GridLicensableFeatures, Return) GetGspFirmwareMode() (bool, bool, Return) GetGspFirmwareVersion() (string, Return) GetHostVgpuMode() (HostVgpuMode, Return) GetIndex() (int, Return) GetInforomConfigurationChecksum() (uint32, Return) GetInforomImageVersion() (string, Return) GetInforomVersion(InforomObject) (string, Return) GetIrqNum() (int, Return) GetJpgUtilization() (uint32, uint32, Return) GetLastBBXFlushTime() (uint64, uint, Return) GetMPSComputeRunningProcesses() ([]ProcessInfo, Return) GetMarginTemperature() (MarginTemperature, Return) GetMaxClockInfo(ClockType) (uint32, Return) GetMaxCustomerBoostClock(ClockType) (uint32, Return) GetMaxMigDeviceCount() (int, Return) GetMaxPcieLinkGeneration() (int, Return) GetMaxPcieLinkWidth() (int, Return) GetMemClkMinMaxVfOffset() (int, int, Return) GetMemClkVfOffset() (int, Return) GetMemoryAffinity(int, AffinityScope) ([]uint, Return) GetMemoryBusWidth() (uint32, Return) GetMemoryErrorCounter(MemoryErrorType, EccCounterType, MemoryLocation) (uint64, Return) GetMemoryInfo() (Memory, Return) GetMemoryInfo_v2() (Memory_v2, Return) GetMigDeviceHandleByIndex(int) (Device, Return) GetMigMode() (int, int, Return) GetMinMaxClockOfPState(ClockType, Pstates) (uint32, uint32, Return) GetMinMaxFanSpeed() (int, int, Return) GetMinorNumber() (int, Return) GetModuleId() (int, Return) GetMultiGpuBoard() (int, Return) GetName() (string, Return) GetNumFans() (int, Return) GetNumGpuCores() (int, Return) GetNumaNodeId() (int, Return) GetNvLinkCapability(int, NvLinkCapability) (uint32, Return) GetNvLinkErrorCounter(int, NvLinkErrorCounter) (uint64, Return) GetNvLinkInfo() NvLinkInfoHandler GetNvLinkRemoteDeviceType(int) (IntNvLinkDeviceType, Return) GetNvLinkRemotePciInfo(int) (PciInfo, Return) GetNvLinkState(int) (EnableState, Return) GetNvLinkUtilizationControl(int, int) (NvLinkUtilizationControl, Return) GetNvLinkUtilizationCounter(int, int) (uint64, uint64, Return) GetNvLinkVersion(int) (uint32, Return) GetNvlinkBwMode() (NvlinkGetBwMode, Return) GetNvlinkSupportedBwModes() (NvlinkSupportedBwModes, Return) GetOfaUtilization() (uint32, uint32, Return) GetP2PStatus(Device, GpuP2PCapsIndex) (GpuP2PStatus, Return) GetPciInfo() (PciInfo, Return) GetPciInfoExt() (PciInfoExt, Return) GetPcieLinkMaxSpeed() (uint32, Return) GetPcieReplayCounter() (int, Return) GetPcieSpeed() (int, Return) GetPcieThroughput(PcieUtilCounter) (uint32, Return) GetPdi() (Pdi, Return) GetPerformanceModes() (DevicePerfModes, Return) GetPerformanceState() (Pstates, Return) GetPersistenceMode() (EnableState, Return) GetPgpuMetadataString() (string, Return) GetPlatformInfo() (PlatformInfo, Return) GetPowerManagementDefaultLimit() (uint32, Return) GetPowerManagementLimit() (uint32, Return) GetPowerManagementLimitConstraints() (uint32, uint32, Return) GetPowerManagementMode() (EnableState, Return) GetPowerMizerMode_v1() (DevicePowerMizerModes_v1, Return) GetPowerSource() (PowerSource, Return) GetPowerState() (Pstates, Return) GetPowerUsage() (uint32, Return) GetProcessUtilization(uint64) ([]ProcessUtilizationSample, Return) GetProcessesUtilizationInfo() (ProcessesUtilizationInfo, Return) GetRemappedRows() (int, int, bool, bool, Return) GetRepairStatus() (RepairStatus, Return) GetRetiredPages(PageRetirementCause) ([]uint64, Return) GetRetiredPagesPendingStatus() (EnableState, Return) GetRetiredPages_v2(PageRetirementCause) ([]uint64, []uint64, Return) GetRowRemapperHistogram() (RowRemapperHistogramValues, Return) GetRunningProcessDetailList() (ProcessDetailList, Return) GetSamples(SamplingType, uint64) (ValueType, []Sample, Return) GetSerial() (string, Return) GetSramEccErrorStatus() (EccSramErrorStatus, Return) GetSramUniqueUncorrectedEccErrorCounts(*EccSramUniqueUncorrectedErrorCounts) Return GetSupportedClocksEventReasons() (uint64, Return) GetSupportedClocksThrottleReasons() (uint64, Return) GetSupportedEventTypes() (uint64, Return) GetSupportedGraphicsClocks(int) (int, uint32, Return) GetSupportedMemoryClocks() (int, uint32, Return) GetSupportedPerformanceStates() ([]Pstates, Return) GetSupportedVgpus() ([]VgpuTypeId, Return) GetTargetFanSpeed(int) (int, Return) GetTemperature(TemperatureSensors) (uint32, Return) GetTemperatureThreshold(TemperatureThresholds) (uint32, Return) GetTemperatureV() TemperatureHandler GetThermalSettings(uint32) (GpuThermalSettings, Return) GetTopologyCommonAncestor(Device) (GpuTopologyLevel, Return) GetTopologyNearestGpus(GpuTopologyLevel) ([]Device, Return) GetTotalEccErrors(MemoryErrorType, EccCounterType) (uint64, Return) GetTotalEnergyConsumption() (uint64, Return) GetUUID() (string, Return) GetUtilizationRates() (Utilization, Return) GetVbiosVersion() (string, Return) GetVgpuCapabilities(DeviceVgpuCapability) (bool, Return) GetVgpuHeterogeneousMode() (VgpuHeterogeneousMode, Return) GetVgpuInstancesUtilizationInfo() (VgpuInstancesUtilizationInfo, Return) GetVgpuMetadata() (VgpuPgpuMetadata, Return) GetVgpuProcessUtilization(uint64) ([]VgpuProcessUtilizationSample, Return) GetVgpuProcessesUtilizationInfo() (VgpuProcessesUtilizationInfo, Return) GetVgpuSchedulerCapabilities() (VgpuSchedulerCapabilities, Return) GetVgpuSchedulerLog() (VgpuSchedulerLog, Return) GetVgpuSchedulerState() (VgpuSchedulerGetState, Return) GetVgpuTypeCreatablePlacements(VgpuTypeId) (VgpuPlacementList, Return) GetVgpuTypeSupportedPlacements(VgpuTypeId) (VgpuPlacementList, Return) GetVgpuUtilization(uint64) (ValueType, []VgpuInstanceUtilizationSample, Return) GetViolationStatus(PerfPolicyType) (ViolationTime, Return) GetVirtualizationMode() (GpuVirtualizationMode, Return) GpmMigSampleGet(int, GpmSample) Return GpmQueryDeviceSupport() (GpmSupport, Return) GpmQueryDeviceSupportV() GpmSupportV GpmQueryIfStreamingEnabled() (uint32, Return) GpmSampleGet(GpmSample) Return GpmSetStreamingEnabled(uint32) Return IsMigDeviceHandle() (bool, Return) OnSameBoard(Device) (int, Return) PowerSmoothingActivatePresetProfile(*PowerSmoothingProfile) Return PowerSmoothingSetState(*PowerSmoothingState) Return PowerSmoothingUpdatePresetProfileParam(*PowerSmoothingProfile) Return ReadWritePRM_v1(*PRMTLV_v1) Return RegisterEvents(uint64, EventSet) Return ResetApplicationsClocks() Return ResetGpuLockedClocks() Return ResetMemoryLockedClocks() Return ResetNvLinkErrorCounters(int) Return ResetNvLinkUtilizationCounter(int, int) Return SetAPIRestriction(RestrictedAPI, EnableState) Return SetAccountingMode(EnableState) Return SetApplicationsClocks(uint32, uint32) Return SetAutoBoostedClocksEnabled(EnableState) Return SetClockOffsets(ClockOffset) Return SetComputeMode(ComputeMode) Return SetConfComputeUnprotectedMemSize(uint64) Return SetCpuAffinity() Return SetDefaultAutoBoostedClocksEnabled(EnableState, uint32) Return SetDefaultFanSpeed_v2(int) Return SetDramEncryptionMode(*DramEncryptionInfo) Return SetDriverModel(DriverModel, uint32) Return SetEccMode(EnableState) Return SetFanControlPolicy(int, FanControlPolicy) Return SetFanSpeed_v2(int, int) Return SetGpcClkVfOffset(int) Return SetGpuLockedClocks(uint32, uint32) Return SetGpuOperationMode(GpuOperationMode) Return SetMemClkVfOffset(int) Return SetMemoryLockedClocks(uint32, uint32) Return SetMigMode(int) (Return, Return) SetNvLinkDeviceLowPowerThreshold(*NvLinkPowerThres) Return SetNvLinkUtilizationControl(int, int, *NvLinkUtilizationControl, bool) Return SetNvlinkBwMode(*NvlinkSetBwMode) Return SetPersistenceMode(EnableState) Return SetPowerManagementLimit(uint32) Return SetPowerManagementLimit_v2(*PowerValue_v2) Return SetTemperatureThreshold(TemperatureThresholds, int) Return SetVgpuCapabilities(DeviceVgpuCapability, EnableState) Return SetVgpuHeterogeneousMode(VgpuHeterogeneousMode) Return SetVgpuSchedulerState(*VgpuSchedulerSetState) Return SetVirtualizationMode(GpuVirtualizationMode) Return ValidateInforom() Return VgpuTypeGetMaxInstances(VgpuTypeId) (int, Return) WorkloadPowerProfileClearRequestedProfiles(*WorkloadPowerProfileRequestedProfiles) Return WorkloadPowerProfileGetCurrentProfiles() (WorkloadPowerProfileCurrentProfiles, Return) WorkloadPowerProfileGetProfilesInfo() (WorkloadPowerProfileProfilesInfo, Return) WorkloadPowerProfileSetRequestedProfiles(*WorkloadPowerProfileRequestedProfiles) Return } // GpuInstance represents the interface for the nvmlGpuInstance type. // //go:generate moq -out mock/gpuinstance.go -pkg mock . GpuInstance:GpuInstance type GpuInstance interface { CreateComputeInstance(*ComputeInstanceProfileInfo) (ComputeInstance, Return) CreateComputeInstanceWithPlacement(*ComputeInstanceProfileInfo, *ComputeInstancePlacement) (ComputeInstance, Return) Destroy() Return GetActiveVgpus() (ActiveVgpuInstanceInfo, Return) GetComputeInstanceById(int) (ComputeInstance, Return) GetComputeInstancePossiblePlacements(*ComputeInstanceProfileInfo) ([]ComputeInstancePlacement, Return) GetComputeInstanceProfileInfo(int, int) (ComputeInstanceProfileInfo, Return) GetComputeInstanceProfileInfoV(int, int) ComputeInstanceProfileInfoHandler GetComputeInstanceRemainingCapacity(*ComputeInstanceProfileInfo) (int, Return) GetComputeInstances(*ComputeInstanceProfileInfo) ([]ComputeInstance, Return) GetCreatableVgpus() (VgpuTypeIdInfo, Return) GetInfo() (GpuInstanceInfo, Return) GetVgpuHeterogeneousMode() (VgpuHeterogeneousMode, Return) GetVgpuSchedulerLog() (VgpuSchedulerLogInfo, Return) GetVgpuSchedulerState() (VgpuSchedulerStateInfo, Return) GetVgpuTypeCreatablePlacements() (VgpuCreatablePlacementInfo, Return) SetVgpuHeterogeneousMode(*VgpuHeterogeneousMode) Return SetVgpuSchedulerState(*VgpuSchedulerState) Return } // ComputeInstance represents the interface for the nvmlComputeInstance type. // //go:generate moq -out mock/computeinstance.go -pkg mock . ComputeInstance:ComputeInstance type ComputeInstance interface { Destroy() Return GetInfo() (ComputeInstanceInfo, Return) } // EventSet represents the interface for the nvmlEventSet type. // //go:generate moq -out mock/eventset.go -pkg mock . EventSet:EventSet type EventSet interface { Free() Return Wait(uint32) (EventData, Return) } // GpmSample represents the interface for the nvmlGpmSample type. // //go:generate moq -out mock/gpmsample.go -pkg mock . GpmSample:GpmSample type GpmSample interface { Free() Return Get(Device) Return MigGet(Device, int) Return } // Unit represents the interface for the nvmlUnit type. // //go:generate moq -out mock/unit.go -pkg mock . Unit:Unit type Unit interface { GetDevices() ([]Device, Return) GetFanSpeedInfo() (UnitFanSpeeds, Return) GetLedState() (LedState, Return) GetPsuInfo() (PSUInfo, Return) GetTemperature(int) (uint32, Return) GetUnitInfo() (UnitInfo, Return) SetLedState(LedColor) Return } // VgpuInstance represents the interface for the nvmlVgpuInstance type. // //go:generate moq -out mock/vgpuinstance.go -pkg mock . VgpuInstance:VgpuInstance type VgpuInstance interface { ClearAccountingPids() Return GetAccountingMode() (EnableState, Return) GetAccountingPids() ([]int, Return) GetAccountingStats(int) (AccountingStats, Return) GetEccMode() (EnableState, Return) GetEncoderCapacity() (int, Return) GetEncoderSessions() (int, EncoderSessionInfo, Return) GetEncoderStats() (int, uint32, uint32, Return) GetFBCSessions() (int, FBCSessionInfo, Return) GetFBCStats() (FBCStats, Return) GetFbUsage() (uint64, Return) GetFrameRateLimit() (uint32, Return) GetGpuInstanceId() (int, Return) GetGpuPciId() (string, Return) GetLicenseInfo() (VgpuLicenseInfo, Return) GetLicenseStatus() (int, Return) GetMdevUUID() (string, Return) GetMetadata() (VgpuMetadata, Return) GetRuntimeStateSize() (VgpuRuntimeState, Return) GetType() (VgpuTypeId, Return) GetUUID() (string, Return) GetVmDriverVersion() (string, Return) GetVmID() (string, VgpuVmIdType, Return) SetEncoderCapacity(int) Return } // VgpuTypeId represents the interface for the nvmlVgpuTypeId type. // //go:generate moq -out mock/vgputypeid.go -pkg mock . VgpuTypeId:VgpuTypeId type VgpuTypeId interface { GetBAR1Info() (VgpuTypeBar1Info, Return) GetCapabilities(VgpuCapability) (bool, Return) GetClass() (string, Return) GetCreatablePlacements(Device) (VgpuPlacementList, Return) GetDeviceID() (uint64, uint64, Return) GetFrameRateLimit() (uint32, Return) GetFramebufferSize() (uint64, Return) GetGpuInstanceProfileId() (uint32, Return) GetLicense() (string, Return) GetMaxInstances(Device) (int, Return) GetMaxInstancesPerVm() (int, Return) GetName() (string, Return) GetNumDisplayHeads() (int, Return) GetResolution(int) (uint32, uint32, Return) GetSupportedPlacements(Device) (VgpuPlacementList, Return) } NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/000077500000000000000000000000001520540370700217115ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/000077500000000000000000000000001520540370700240045ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/000077500000000000000000000000001520540370700244155ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/LICENSE000066400000000000000000000240411520540370700254230ustar00rootroot00000000000000Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: You must give any other recipients of the Work or Derivative Works a copy of this License; and You must cause any modified files to carry prominent notices stating that You changed the files; and You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/NOTICE000066400000000000000000000001761520540370700253250ustar00rootroot00000000000000CoreOS Project Copyright 2018 CoreOS, Inc This product includes software developed at CoreOS, Inc. (http://www.coreos.com/). NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/dbus/000077500000000000000000000000001520540370700253525ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/dbus/dbus.go000066400000000000000000000173351520540370700266470ustar00rootroot00000000000000// Copyright 2015 CoreOS, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package dbus provides integration with the systemd D-Bus API. // See http://www.freedesktop.org/wiki/Software/systemd/dbus/ package dbus import ( "context" "encoding/hex" "fmt" "os" "strconv" "strings" "sync" "github.com/godbus/dbus/v5" ) const ( alpha = `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ` num = `0123456789` alphanum = alpha + num signalBuffer = 100 ) // needsEscape checks whether a byte in a potential dbus ObjectPath needs to be escaped func needsEscape(i int, b byte) bool { // Escape everything that is not a-z-A-Z-0-9 // Also escape 0-9 if it's the first character return strings.IndexByte(alphanum, b) == -1 || (i == 0 && strings.IndexByte(num, b) != -1) } // PathBusEscape sanitizes a constituent string of a dbus ObjectPath using the // rules that systemd uses for serializing special characters. func PathBusEscape(path string) string { // Special case the empty string if len(path) == 0 { return "_" } n := []byte{} for i := 0; i < len(path); i++ { c := path[i] if needsEscape(i, c) { e := fmt.Sprintf("_%x", c) n = append(n, []byte(e)...) } else { n = append(n, c) } } return string(n) } // pathBusUnescape is the inverse of PathBusEscape. func pathBusUnescape(path string) string { if path == "_" { return "" } n := []byte{} for i := 0; i < len(path); i++ { c := path[i] if c == '_' && i+2 < len(path) { res, err := hex.DecodeString(path[i+1 : i+3]) if err == nil { n = append(n, res...) } i += 2 } else { n = append(n, c) } } return string(n) } // Conn is a connection to systemd's dbus endpoint. type Conn struct { // sysconn/sysobj are only used to call dbus methods sysconn *dbus.Conn sysobj dbus.BusObject // sigconn/sigobj are only used to receive dbus signals sigconn *dbus.Conn sigobj dbus.BusObject jobListener struct { jobs map[dbus.ObjectPath][]chan<- string sync.Mutex } subStateSubscriber struct { updateCh chan<- *SubStateUpdate errCh chan<- error sync.Mutex ignore map[dbus.ObjectPath]int64 cleanIgnore int64 } propertiesSubscriber struct { updateCh chan<- *PropertiesUpdate errCh chan<- error sync.Mutex } } // Deprecated: use NewWithContext instead. func New() (*Conn, error) { return NewWithContext(context.Background()) } // NewWithContext establishes a connection to any available bus and authenticates. // Callers should call Close() when done with the connection. func NewWithContext(ctx context.Context) (*Conn, error) { conn, err := NewSystemConnectionContext(ctx) if err != nil && os.Geteuid() == 0 { return NewSystemdConnectionContext(ctx) } return conn, err } // Deprecated: use NewSystemConnectionContext instead. func NewSystemConnection() (*Conn, error) { return NewSystemConnectionContext(context.Background()) } // NewSystemConnectionContext establishes a connection to the system bus and authenticates. // Callers should call Close() when done with the connection. func NewSystemConnectionContext(ctx context.Context) (*Conn, error) { return NewConnection(func() (*dbus.Conn, error) { return dbusAuthHelloConnection(ctx, dbus.SystemBusPrivate) }) } // Deprecated: use NewUserConnectionContext instead. func NewUserConnection() (*Conn, error) { return NewUserConnectionContext(context.Background()) } // NewUserConnectionContext establishes a connection to the session bus and // authenticates. This can be used to connect to systemd user instances. // Callers should call Close() when done with the connection. func NewUserConnectionContext(ctx context.Context) (*Conn, error) { return NewConnection(func() (*dbus.Conn, error) { return dbusAuthHelloConnection(ctx, dbus.SessionBusPrivate) }) } // Deprecated: use NewSystemdConnectionContext instead. func NewSystemdConnection() (*Conn, error) { return NewSystemdConnectionContext(context.Background()) } // NewSystemdConnectionContext establishes a private, direct connection to systemd. // This can be used for communicating with systemd without a dbus daemon. // Callers should call Close() when done with the connection. func NewSystemdConnectionContext(ctx context.Context) (*Conn, error) { return NewConnection(func() (*dbus.Conn, error) { // We skip Hello when talking directly to systemd. return dbusAuthConnection(ctx, func(opts ...dbus.ConnOption) (*dbus.Conn, error) { return dbus.Dial("unix:path=/run/systemd/private", opts...) }) }) } // Close closes an established connection. func (c *Conn) Close() { c.sysconn.Close() c.sigconn.Close() } // Connected returns whether conn is connected func (c *Conn) Connected() bool { return c.sysconn.Connected() && c.sigconn.Connected() } // NewConnection establishes a connection to a bus using a caller-supplied function. // This allows connecting to remote buses through a user-supplied mechanism. // The supplied function may be called multiple times, and should return independent connections. // The returned connection must be fully initialised: the org.freedesktop.DBus.Hello call must have succeeded, // and any authentication should be handled by the function. func NewConnection(dialBus func() (*dbus.Conn, error)) (*Conn, error) { sysconn, err := dialBus() if err != nil { return nil, err } sigconn, err := dialBus() if err != nil { sysconn.Close() return nil, err } c := &Conn{ sysconn: sysconn, sysobj: systemdObject(sysconn), sigconn: sigconn, sigobj: systemdObject(sigconn), } c.subStateSubscriber.ignore = make(map[dbus.ObjectPath]int64) c.jobListener.jobs = make(map[dbus.ObjectPath][]chan<- string) // Setup the listeners on jobs so that we can get completions c.sigconn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "type='signal', interface='org.freedesktop.systemd1.Manager', member='JobRemoved'") c.dispatch() return c, nil } // GetManagerProperty returns the value of a property on the org.freedesktop.systemd1.Manager // interface. The value is returned in its string representation, as defined at // https://developer.gnome.org/glib/unstable/gvariant-text.html. func (c *Conn) GetManagerProperty(prop string) (string, error) { variant, err := c.sysobj.GetProperty("org.freedesktop.systemd1.Manager." + prop) if err != nil { return "", err } return variant.String(), nil } func dbusAuthConnection(ctx context.Context, createBus func(opts ...dbus.ConnOption) (*dbus.Conn, error)) (*dbus.Conn, error) { conn, err := createBus(dbus.WithContext(ctx)) if err != nil { return nil, err } // Only use EXTERNAL method, and hardcode the uid (not username) // to avoid a username lookup (which requires a dynamically linked // libc) methods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(os.Getuid()))} err = conn.Auth(methods) if err != nil { conn.Close() return nil, err } return conn, nil } func dbusAuthHelloConnection(ctx context.Context, createBus func(opts ...dbus.ConnOption) (*dbus.Conn, error)) (*dbus.Conn, error) { conn, err := dbusAuthConnection(ctx, createBus) if err != nil { return nil, err } if err = conn.Hello(); err != nil { conn.Close() return nil, err } return conn, nil } func systemdObject(conn *dbus.Conn) dbus.BusObject { return conn.Object("org.freedesktop.systemd1", dbus.ObjectPath("/org/freedesktop/systemd1")) } NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/dbus/methods.go000066400000000000000000000775141520540370700273620ustar00rootroot00000000000000// Copyright 2015, 2018 CoreOS, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dbus import ( "context" "errors" "fmt" "path" "strconv" "github.com/godbus/dbus/v5" ) // Who specifies which process to send a signal to via the [Conn.KillUnitWithTarget]. type Who string const ( // All sends the signal to all processes in the unit. All Who = "all" // Main sends the signal to the main process of the unit. Main Who = "main" // Control sends the signal to the control process of the unit. Control Who = "control" ) func (c *Conn) jobComplete(signal *dbus.Signal) { var id uint32 var job dbus.ObjectPath var unit string var result string _ = dbus.Store(signal.Body, &id, &job, &unit, &result) c.jobListener.Lock() for _, out := range c.jobListener.jobs[job] { out <- result } delete(c.jobListener.jobs, job) c.jobListener.Unlock() } func (c *Conn) startJob(ctx context.Context, ch chan<- string, job string, args ...any) (int, error) { if ch != nil { c.jobListener.Lock() defer c.jobListener.Unlock() } var p dbus.ObjectPath err := c.sysobj.CallWithContext(ctx, job, 0, args...).Store(&p) if err != nil { return 0, err } if ch != nil { c.jobListener.jobs[p] = append(c.jobListener.jobs[p], ch) } // ignore error since 0 is fine if conversion fails jobID, _ := strconv.Atoi(path.Base(string(p))) return jobID, nil } // Deprecated: use StartUnitContext instead. func (c *Conn) StartUnit(name string, mode string, ch chan<- string) (int, error) { return c.StartUnitContext(context.Background(), name, mode, ch) } // StartUnitContext enqueues a start job and depending jobs, if any (unless otherwise // specified by the mode string). // // Takes the unit to activate, plus a mode string. The mode needs to be one of // replace, fail, isolate, ignore-dependencies, ignore-requirements. If // "replace" the call will start the unit and its dependencies, possibly // replacing already queued jobs that conflict with this. If "fail" the call // will start the unit and its dependencies, but will fail if this would change // an already queued job. If "isolate" the call will start the unit in question // and terminate all units that aren't dependencies of it. If // "ignore-dependencies" it will start a unit but ignore all its dependencies. // If "ignore-requirements" it will start a unit but only ignore the // requirement dependencies. It is not recommended to make use of the latter // two options. // // If the provided channel is non-nil, a result string will be sent to it upon // job completion: one of done, canceled, timeout, failed, dependency, skipped. // done indicates successful execution of a job. canceled indicates that a job // has been canceled before it finished execution. timeout indicates that the // job timeout was reached. failed indicates that the job failed. dependency // indicates that a job this job has been depending on failed and the job hence // has been removed too. skipped indicates that a job was skipped because it // didn't apply to the units current state. // // Important: It is the caller's responsibility to unblock the provided channel write, // either by reading from the channel or by using a buffered channel. Until the write // is unblocked, the Conn object cannot handle other jobs. // // If no error occurs, the ID of the underlying systemd job will be returned. There // does exist the possibility for no error to be returned, but for the returned job // ID to be 0. In this case, the actual underlying ID is not 0 and this datapoint // should not be considered authoritative. // // If an error does occur, it will be returned to the user alongside a job ID of 0. func (c *Conn) StartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.StartUnit", name, mode) } // Deprecated: use StopUnitContext instead. func (c *Conn) StopUnit(name string, mode string, ch chan<- string) (int, error) { return c.StopUnitContext(context.Background(), name, mode, ch) } // StopUnitContext is similar to StartUnitContext, but stops the specified unit // rather than starting it. func (c *Conn) StopUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.StopUnit", name, mode) } // Deprecated: use ReloadUnitContext instead. func (c *Conn) ReloadUnit(name string, mode string, ch chan<- string) (int, error) { return c.ReloadUnitContext(context.Background(), name, mode, ch) } // ReloadUnitContext reloads a unit. Reloading is done only if the unit // is already running, and fails otherwise. func (c *Conn) ReloadUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.ReloadUnit", name, mode) } // Deprecated: use RestartUnitContext instead. func (c *Conn) RestartUnit(name string, mode string, ch chan<- string) (int, error) { return c.RestartUnitContext(context.Background(), name, mode, ch) } // RestartUnitContext restarts a service. If a service is restarted that isn't // running it will be started. func (c *Conn) RestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.RestartUnit", name, mode) } // Deprecated: use TryRestartUnitContext instead. func (c *Conn) TryRestartUnit(name string, mode string, ch chan<- string) (int, error) { return c.TryRestartUnitContext(context.Background(), name, mode, ch) } // TryRestartUnitContext is like RestartUnitContext, except that a service that // isn't running is not affected by the restart. func (c *Conn) TryRestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.TryRestartUnit", name, mode) } // Deprecated: use ReloadOrRestartUnitContext instead. func (c *Conn) ReloadOrRestartUnit(name string, mode string, ch chan<- string) (int, error) { return c.ReloadOrRestartUnitContext(context.Background(), name, mode, ch) } // ReloadOrRestartUnitContext attempts a reload if the unit supports it and use // a restart otherwise. func (c *Conn) ReloadOrRestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.ReloadOrRestartUnit", name, mode) } // Deprecated: use ReloadOrTryRestartUnitContext instead. func (c *Conn) ReloadOrTryRestartUnit(name string, mode string, ch chan<- string) (int, error) { return c.ReloadOrTryRestartUnitContext(context.Background(), name, mode, ch) } // ReloadOrTryRestartUnitContext attempts a reload if the unit supports it, // and use a "Try" flavored restart otherwise. func (c *Conn) ReloadOrTryRestartUnitContext(ctx context.Context, name string, mode string, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.ReloadOrTryRestartUnit", name, mode) } // Deprecated: use StartTransientUnitContext instead. func (c *Conn) StartTransientUnit(name string, mode string, properties []Property, ch chan<- string) (int, error) { return c.StartTransientUnitContext(context.Background(), name, mode, properties, ch) } // StartTransientUnitContext may be used to create and start a transient unit, which // will be released as soon as it is not running or referenced anymore or the // system is rebooted. name is the unit name including suffix, and must be // unique. mode is the same as in StartUnitContext, properties contains properties // of the unit. func (c *Conn) StartTransientUnitContext(ctx context.Context, name string, mode string, properties []Property, ch chan<- string) (int, error) { return c.StartTransientUnitAux(ctx, name, mode, properties, make([]PropertyCollection, 0), ch) } // StartTransientUnitAux is the same as StartTransientUnitContext but allows passing // auxiliary units in the aux parameter. func (c *Conn) StartTransientUnitAux(ctx context.Context, name string, mode string, properties []Property, aux []PropertyCollection, ch chan<- string) (int, error) { return c.startJob(ctx, ch, "org.freedesktop.systemd1.Manager.StartTransientUnit", name, mode, properties, aux) } // Deprecated: use [Conn.KillUnitWithTarget] instead. func (c *Conn) KillUnit(name string, signal int32) { c.KillUnitContext(context.Background(), name, signal) } // KillUnitContext takes the unit name and a UNIX signal number to send. // All of the unit's processes are killed. // // Deprecated: use [Conn.KillUnitWithTarget] instead, with target argument set to [All]. func (c *Conn) KillUnitContext(ctx context.Context, name string, signal int32) { _ = c.KillUnitWithTarget(ctx, name, All, signal) } // KillUnitWithTarget sends a signal to the specified unit. // The target argument can be one of [All], [Main], or [Control]. func (c *Conn) KillUnitWithTarget(ctx context.Context, name string, target Who, signal int32) error { return c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.KillUnit", 0, name, string(target), signal).Store() } // Deprecated: use ResetFailedUnitContext instead. func (c *Conn) ResetFailedUnit(name string) error { return c.ResetFailedUnitContext(context.Background(), name) } // ResetFailedUnitContext resets the "failed" state of a specific unit. func (c *Conn) ResetFailedUnitContext(ctx context.Context, name string) error { return c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ResetFailedUnit", 0, name).Store() } // Deprecated: use SystemStateContext instead. func (c *Conn) SystemState() (*Property, error) { return c.SystemStateContext(context.Background()) } // SystemStateContext returns the systemd state. Equivalent to // systemctl is-system-running. func (c *Conn) SystemStateContext(ctx context.Context) (*Property, error) { var err error var prop dbus.Variant obj := c.sysconn.Object("org.freedesktop.systemd1", "/org/freedesktop/systemd1") err = obj.CallWithContext(ctx, "org.freedesktop.DBus.Properties.Get", 0, "org.freedesktop.systemd1.Manager", "SystemState").Store(&prop) if err != nil { return nil, err } return &Property{Name: "SystemState", Value: prop}, nil } // getProperties takes the unit path and returns all of its dbus object properties, for the given dbus interface. func (c *Conn) getProperties(ctx context.Context, path dbus.ObjectPath, dbusInterface string) (map[string]any, error) { var err error var props map[string]dbus.Variant if !path.IsValid() { return nil, fmt.Errorf("invalid unit name: %v", path) } obj := c.sysconn.Object("org.freedesktop.systemd1", path) err = obj.CallWithContext(ctx, "org.freedesktop.DBus.Properties.GetAll", 0, dbusInterface).Store(&props) if err != nil { return nil, err } out := make(map[string]any, len(props)) for k, v := range props { out[k] = v.Value() } return out, nil } // Deprecated: use GetUnitPropertiesContext instead. func (c *Conn) GetUnitProperties(unit string) (map[string]any, error) { return c.GetUnitPropertiesContext(context.Background(), unit) } // GetUnitPropertiesContext takes the (unescaped) unit name and returns all of // its dbus object properties. func (c *Conn) GetUnitPropertiesContext(ctx context.Context, unit string) (map[string]any, error) { path := unitPath(unit) return c.getProperties(ctx, path, "org.freedesktop.systemd1.Unit") } // Deprecated: use GetUnitPathPropertiesContext instead. func (c *Conn) GetUnitPathProperties(path dbus.ObjectPath) (map[string]any, error) { return c.GetUnitPathPropertiesContext(context.Background(), path) } // GetUnitPathPropertiesContext takes the (escaped) unit path and returns all // of its dbus object properties. func (c *Conn) GetUnitPathPropertiesContext(ctx context.Context, path dbus.ObjectPath) (map[string]any, error) { return c.getProperties(ctx, path, "org.freedesktop.systemd1.Unit") } // Deprecated: use GetAllPropertiesContext instead. func (c *Conn) GetAllProperties(unit string) (map[string]any, error) { return c.GetAllPropertiesContext(context.Background(), unit) } // GetAllPropertiesContext takes the (unescaped) unit name and returns all of // its dbus object properties. func (c *Conn) GetAllPropertiesContext(ctx context.Context, unit string) (map[string]any, error) { path := unitPath(unit) return c.getProperties(ctx, path, "") } func (c *Conn) getProperty(ctx context.Context, unit string, dbusInterface string, propertyName string) (*Property, error) { var err error var prop dbus.Variant path := unitPath(unit) if !path.IsValid() { return nil, errors.New("invalid unit name: " + unit) } obj := c.sysconn.Object("org.freedesktop.systemd1", path) err = obj.CallWithContext(ctx, "org.freedesktop.DBus.Properties.Get", 0, dbusInterface, propertyName).Store(&prop) if err != nil { return nil, err } return &Property{Name: propertyName, Value: prop}, nil } // Deprecated: use GetUnitPropertyContext instead. func (c *Conn) GetUnitProperty(unit string, propertyName string) (*Property, error) { return c.GetUnitPropertyContext(context.Background(), unit, propertyName) } // GetUnitPropertyContext takes an (unescaped) unit name, and a property name, // and returns the property value. func (c *Conn) GetUnitPropertyContext(ctx context.Context, unit string, propertyName string) (*Property, error) { return c.getProperty(ctx, unit, "org.freedesktop.systemd1.Unit", propertyName) } // Deprecated: use GetServicePropertyContext instead. func (c *Conn) GetServiceProperty(service string, propertyName string) (*Property, error) { return c.GetServicePropertyContext(context.Background(), service, propertyName) } // GetServicePropertyContext returns property for given service name and property name. func (c *Conn) GetServicePropertyContext(ctx context.Context, service string, propertyName string) (*Property, error) { return c.getProperty(ctx, service, "org.freedesktop.systemd1.Service", propertyName) } // Deprecated: use GetUnitTypePropertiesContext instead. func (c *Conn) GetUnitTypeProperties(unit string, unitType string) (map[string]any, error) { return c.GetUnitTypePropertiesContext(context.Background(), unit, unitType) } // GetUnitTypePropertiesContext returns the extra properties for a unit, specific to the unit type. // Valid values for unitType: Service, Socket, Target, Device, Mount, Automount, Snapshot, Timer, Swap, Path, Slice, Scope. // Returns "dbus.Error: Unknown interface" error if the unitType is not the correct type of the unit. func (c *Conn) GetUnitTypePropertiesContext(ctx context.Context, unit string, unitType string) (map[string]any, error) { path := unitPath(unit) return c.getProperties(ctx, path, "org.freedesktop.systemd1."+unitType) } // Deprecated: use SetUnitPropertiesContext instead. func (c *Conn) SetUnitProperties(name string, runtime bool, properties ...Property) error { return c.SetUnitPropertiesContext(context.Background(), name, runtime, properties...) } // SetUnitPropertiesContext may be used to modify certain unit properties at runtime. // Not all properties may be changed at runtime, but many resource management // settings (primarily those in systemd.cgroup(5)) may. The changes are applied // instantly, and stored on disk for future boots, unless runtime is true, in which // case the settings only apply until the next reboot. name is the name of the unit // to modify. properties are the settings to set, encoded as an array of property // name and value pairs. func (c *Conn) SetUnitPropertiesContext(ctx context.Context, name string, runtime bool, properties ...Property) error { return c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.SetUnitProperties", 0, name, runtime, properties).Store() } // Deprecated: use GetUnitTypePropertyContext instead. func (c *Conn) GetUnitTypeProperty(unit string, unitType string, propertyName string) (*Property, error) { return c.GetUnitTypePropertyContext(context.Background(), unit, unitType, propertyName) } // GetUnitTypePropertyContext takes a property name, a unit name, and a unit type, // and returns a property value. For valid values of unitType, see GetUnitTypePropertiesContext. func (c *Conn) GetUnitTypePropertyContext(ctx context.Context, unit string, unitType string, propertyName string) (*Property, error) { return c.getProperty(ctx, unit, "org.freedesktop.systemd1."+unitType, propertyName) } type UnitStatus struct { Name string // The primary unit name as string Description string // The human readable description string LoadState string // The load state (i.e. whether the unit file has been loaded successfully) ActiveState string // The active state (i.e. whether the unit is currently started or not) SubState string // The sub state (a more fine-grained version of the active state that is specific to the unit type, which the active state is not) Followed string // A unit that is being followed in its state by this unit, if there is any, otherwise the empty string. Path dbus.ObjectPath // The unit object path JobId uint32 // If there is a job queued for the job unit the numeric job id, 0 otherwise JobType string // The job type as string JobPath dbus.ObjectPath // The job object path } type storeFunc func(retvalues ...any) error // convertSlice converts a []any result into a slice of the target type T // using dbus.Store to handle the type conversion. func convertSlice[T any](result []any) ([]T, error) { converted := make([]T, len(result)) convertedInterface := make([]any, len(converted)) for i := range converted { convertedInterface[i] = &converted[i] } err := dbus.Store(result, convertedInterface...) if err != nil { return nil, err } return converted, nil } // storeSlice fetches D-Bus array results via the provided storeFunc // and converts them into a slice of the target type T. func storeSlice[T any](f storeFunc) ([]T, error) { var result []any err := f(&result) if err != nil { return nil, err } return convertSlice[T](result) } // GetUnitByPID returns the unit object path of the unit a process ID // belongs to. It takes a UNIX PID and returns the object path. The PID must // refer to an existing system process func (c *Conn) GetUnitByPID(ctx context.Context, pid uint32) (dbus.ObjectPath, error) { var result dbus.ObjectPath err := c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.GetUnitByPID", 0, pid).Store(&result) return result, err } // GetUnitNameByPID returns the name of the unit a process ID belongs to. It // takes a UNIX PID and returns the object path. The PID must refer to an // existing system process func (c *Conn) GetUnitNameByPID(ctx context.Context, pid uint32) (string, error) { path, err := c.GetUnitByPID(ctx, pid) if err != nil { return "", err } return unitName(path), nil } // Deprecated: use ListUnitsContext instead. func (c *Conn) ListUnits() ([]UnitStatus, error) { return c.ListUnitsContext(context.Background()) } // ListUnitsContext returns an array with all currently loaded units. Note that // units may be known by multiple names at the same time, and hence there might // be more unit names loaded than actual units behind them. // Also note that a unit is only loaded if it is active and/or enabled. // Units that are both disabled and inactive will thus not be returned. func (c *Conn) ListUnitsContext(ctx context.Context) ([]UnitStatus, error) { return storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ListUnits", 0).Store) } // Deprecated: use ListUnitsFilteredContext instead. func (c *Conn) ListUnitsFiltered(states []string) ([]UnitStatus, error) { return c.ListUnitsFilteredContext(context.Background(), states) } // ListUnitsFilteredContext returns an array with units filtered by state. // It takes a list of units' statuses to filter. func (c *Conn) ListUnitsFilteredContext(ctx context.Context, states []string) ([]UnitStatus, error) { return storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ListUnitsFiltered", 0, states).Store) } // Deprecated: use ListUnitsByPatternsContext instead. func (c *Conn) ListUnitsByPatterns(states []string, patterns []string) ([]UnitStatus, error) { return c.ListUnitsByPatternsContext(context.Background(), states, patterns) } // ListUnitsByPatternsContext returns an array with units. // It takes a list of units' statuses and names to filter. // Note that units may be known by multiple names at the same time, // and hence there might be more unit names loaded than actual units behind them. func (c *Conn) ListUnitsByPatternsContext(ctx context.Context, states []string, patterns []string) ([]UnitStatus, error) { return storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ListUnitsByPatterns", 0, states, patterns).Store) } // Deprecated: use ListUnitsByNamesContext instead. func (c *Conn) ListUnitsByNames(units []string) ([]UnitStatus, error) { return c.ListUnitsByNamesContext(context.Background(), units) } // ListUnitsByNamesContext returns an array with units. It takes a list of units' // names and returns an UnitStatus array. Comparing to ListUnitsByPatternsContext // method, this method returns statuses even for inactive or non-existing // units. Input array should contain exact unit names, but not patterns. // // Requires systemd v230 or higher. func (c *Conn) ListUnitsByNamesContext(ctx context.Context, units []string) ([]UnitStatus, error) { return storeSlice[UnitStatus](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ListUnitsByNames", 0, units).Store) } type UnitFile struct { Path string Type string } // Deprecated: use ListUnitFilesContext instead. func (c *Conn) ListUnitFiles() ([]UnitFile, error) { return c.ListUnitFilesContext(context.Background()) } // ListUnitFilesContext returns an array of all available units on disk. func (c *Conn) ListUnitFilesContext(ctx context.Context) ([]UnitFile, error) { return storeSlice[UnitFile](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ListUnitFiles", 0).Store) } // Deprecated: use ListUnitFilesByPatternsContext instead. func (c *Conn) ListUnitFilesByPatterns(states []string, patterns []string) ([]UnitFile, error) { return c.ListUnitFilesByPatternsContext(context.Background(), states, patterns) } // ListUnitFilesByPatternsContext returns an array of all available units on disk matched the patterns. func (c *Conn) ListUnitFilesByPatternsContext(ctx context.Context, states []string, patterns []string) ([]UnitFile, error) { return storeSlice[UnitFile](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ListUnitFilesByPatterns", 0, states, patterns).Store) } type LinkUnitFileChange EnableUnitFileChange // Deprecated: use LinkUnitFilesContext instead. func (c *Conn) LinkUnitFiles(files []string, runtime bool, force bool) ([]LinkUnitFileChange, error) { return c.LinkUnitFilesContext(context.Background(), files, runtime, force) } // LinkUnitFilesContext links unit files (that are located outside of the // usual unit search paths) into the unit search path. // // It takes a list of absolute paths to unit files to link and two // booleans. // // The first boolean controls whether the unit shall be // enabled for runtime only (true, /run), or persistently (false, // /etc). // // The second controls whether symlinks pointing to other units shall // be replaced if necessary. // // This call returns a list of the changes made. The list consists of // structures with three strings: the type of the change (one of symlink // or unlink), the file name of the symlink and the destination of the // symlink. func (c *Conn) LinkUnitFilesContext(ctx context.Context, files []string, runtime bool, force bool) ([]LinkUnitFileChange, error) { return storeSlice[LinkUnitFileChange](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.LinkUnitFiles", 0, files, runtime, force).Store) } // Deprecated: use EnableUnitFilesContext instead. func (c *Conn) EnableUnitFiles(files []string, runtime bool, force bool) (bool, []EnableUnitFileChange, error) { return c.EnableUnitFilesContext(context.Background(), files, runtime, force) } // EnableUnitFilesContext may be used to enable one or more units in the system // (by creating symlinks to them in /etc or /run). // // It takes a list of unit files to enable (either just file names or full // absolute paths if the unit files are residing outside the usual unit // search paths), and two booleans: the first controls whether the unit shall // be enabled for runtime only (true, /run), or persistently (false, /etc). // The second one controls whether symlinks pointing to other units shall // be replaced if necessary. // // This call returns one boolean and an array with the changes made. The // boolean signals whether the unit files contained any enablement // information (i.e. an [Install]) section. The changes list consists of // structures with three strings: the type of the change (one of symlink // or unlink), the file name of the symlink and the destination of the // symlink. func (c *Conn) EnableUnitFilesContext(ctx context.Context, files []string, runtime bool, force bool) (bool, []EnableUnitFileChange, error) { var carries_install_info bool var result []any err := c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.EnableUnitFiles", 0, files, runtime, force).Store(&carries_install_info, &result) if err != nil { return false, nil, err } changes, err := convertSlice[EnableUnitFileChange](result) if err != nil { return false, nil, err } return carries_install_info, changes, nil } type EnableUnitFileChange struct { Type string // Type of the change (one of symlink or unlink) Filename string // File name of the symlink Destination string // Destination of the symlink } // Deprecated: use DisableUnitFilesContext instead. func (c *Conn) DisableUnitFiles(files []string, runtime bool) ([]DisableUnitFileChange, error) { return c.DisableUnitFilesContext(context.Background(), files, runtime) } // DisableUnitFilesContext may be used to disable one or more units in the // system (by removing symlinks to them from /etc or /run). // // It takes a list of unit files to disable (either just file names or full // absolute paths if the unit files are residing outside the usual unit // search paths), and one boolean: whether the unit was enabled for runtime // only (true, /run), or persistently (false, /etc). // // This call returns an array with the changes made. The changes list // consists of structures with three strings: the type of the change (one of // symlink or unlink), the file name of the symlink and the destination of the // symlink. func (c *Conn) DisableUnitFilesContext(ctx context.Context, files []string, runtime bool) ([]DisableUnitFileChange, error) { return storeSlice[DisableUnitFileChange](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.DisableUnitFiles", 0, files, runtime).Store) } type DisableUnitFileChange struct { Type string // Type of the change (one of symlink or unlink) Filename string // File name of the symlink Destination string // Destination of the symlink } // Deprecated: use MaskUnitFilesContext instead. func (c *Conn) MaskUnitFiles(files []string, runtime bool, force bool) ([]MaskUnitFileChange, error) { return c.MaskUnitFilesContext(context.Background(), files, runtime, force) } // MaskUnitFilesContext masks one or more units in the system. // // The files argument contains a list of units to mask (either just file names // or full absolute paths if the unit files are residing outside the usual unit // search paths). // // The runtime argument is used to specify whether the unit was enabled for // runtime only (true, /run/systemd/..), or persistently (false, // /etc/systemd/..). func (c *Conn) MaskUnitFilesContext(ctx context.Context, files []string, runtime bool, force bool) ([]MaskUnitFileChange, error) { return storeSlice[MaskUnitFileChange](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.MaskUnitFiles", 0, files, runtime, force).Store) } type MaskUnitFileChange struct { Type string // Type of the change (one of symlink or unlink) Filename string // File name of the symlink Destination string // Destination of the symlink } // Deprecated: use UnmaskUnitFilesContext instead. func (c *Conn) UnmaskUnitFiles(files []string, runtime bool) ([]UnmaskUnitFileChange, error) { return c.UnmaskUnitFilesContext(context.Background(), files, runtime) } // UnmaskUnitFilesContext unmasks one or more units in the system. // // It takes the list of unit files to mask (either just file names or full // absolute paths if the unit files are residing outside the usual unit search // paths), and a boolean runtime flag to specify whether the unit was enabled // for runtime only (true, /run/systemd/..), or persistently (false, // /etc/systemd/..). func (c *Conn) UnmaskUnitFilesContext(ctx context.Context, files []string, runtime bool) ([]UnmaskUnitFileChange, error) { return storeSlice[UnmaskUnitFileChange](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.UnmaskUnitFiles", 0, files, runtime).Store) } type UnmaskUnitFileChange struct { Type string // Type of the change (one of symlink or unlink) Filename string // File name of the symlink Destination string // Destination of the symlink } // Deprecated: use ReloadContext instead. func (c *Conn) Reload() error { return c.ReloadContext(context.Background()) } // ReloadContext instructs systemd to scan for and reload unit files. This is // an equivalent to systemctl daemon-reload. func (c *Conn) ReloadContext(ctx context.Context) error { return c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.Reload", 0).Store() } func unitPath(name string) dbus.ObjectPath { return dbus.ObjectPath("/org/freedesktop/systemd1/unit/" + PathBusEscape(name)) } // unitName returns the unescaped base element of the supplied escaped path. func unitName(dpath dbus.ObjectPath) string { return pathBusUnescape(path.Base(string(dpath))) } // JobStatus holds a currently queued job definition. type JobStatus struct { Id uint32 // The numeric job id Unit string // The primary unit name for this job JobType string // The job type as string Status string // The job state as string JobPath dbus.ObjectPath // The job object path UnitPath dbus.ObjectPath // The unit object path } // Deprecated: use ListJobsContext instead. func (c *Conn) ListJobs() ([]JobStatus, error) { return c.ListJobsContext(context.Background()) } // ListJobsContext returns an array with all currently queued jobs. func (c *Conn) ListJobsContext(ctx context.Context) ([]JobStatus, error) { return storeSlice[JobStatus](c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ListJobs", 0).Store) } // FreezeUnit freezes the cgroup associated with the unit. // Note that FreezeUnit and [Conn.ThawUnit] are only supported on systems running with cgroup v2. func (c *Conn) FreezeUnit(ctx context.Context, unit string) error { return c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.FreezeUnit", 0, unit).Store() } // ThawUnit unfreezes the cgroup associated with the unit. func (c *Conn) ThawUnit(ctx context.Context, unit string) error { return c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.ThawUnit", 0, unit).Store() } // AttachProcessesToUnit moves existing processes, identified by pids, into an existing systemd unit. func (c *Conn) AttachProcessesToUnit(ctx context.Context, unit, subcgroup string, pids []uint32) error { return c.sysobj.CallWithContext(ctx, "org.freedesktop.systemd1.Manager.AttachProcessesToUnit", 0, unit, subcgroup, pids).Store() } NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/dbus/properties.go000066400000000000000000000207551520540370700301060ustar00rootroot00000000000000// Copyright 2015 CoreOS, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dbus import ( "github.com/godbus/dbus/v5" ) // From the systemd docs: // // The properties array of StartTransientUnit() may take many of the settings // that may also be configured in unit files. Not all parameters are currently // accepted though, but we plan to cover more properties with future release. // Currently you may set the Description, Slice and all dependency types of // units, as well as RemainAfterExit, ExecStart for service units, // TimeoutStopUSec and PIDs for scope units, and CPUAccounting, CPUShares, // BlockIOAccounting, BlockIOWeight, BlockIOReadBandwidth, // BlockIOWriteBandwidth, BlockIODeviceWeight, MemoryAccounting, MemoryLimit, // DevicePolicy, DeviceAllow for services/scopes/slices. These fields map // directly to their counterparts in unit files and as normal D-Bus object // properties. The exception here is the PIDs field of scope units which is // used for construction of the scope only and specifies the initial PIDs to // add to the scope object. type Property struct { Name string Value dbus.Variant } type PropertyCollection struct { Name string Properties []Property } type execStart struct { Path string // the binary path to execute Args []string // an array with all arguments to pass to the executed command, starting with argument 0 UncleanIsFailure bool // a boolean whether it should be considered a failure if the process exits uncleanly } // PropExecStart sets the ExecStart service property. The first argument is a // slice with the binary path to execute followed by the arguments to pass to // the executed command. See // http://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart= func PropExecStart(command []string, uncleanIsFailure bool) Property { execStarts := []execStart{ { Path: command[0], Args: command, UncleanIsFailure: uncleanIsFailure, }, } return Property{ Name: "ExecStart", Value: dbus.MakeVariant(execStarts), } } // PropRemainAfterExit sets the RemainAfterExit service property. See // http://www.freedesktop.org/software/systemd/man/systemd.service.html#RemainAfterExit= func PropRemainAfterExit(b bool) Property { return Property{ Name: "RemainAfterExit", Value: dbus.MakeVariant(b), } } // PropType sets the Type service property. See // http://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= func PropType(t string) Property { return Property{ Name: "Type", Value: dbus.MakeVariant(t), } } // PropDescription sets the Description unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit#Description= func PropDescription(desc string) Property { return Property{ Name: "Description", Value: dbus.MakeVariant(desc), } } func propDependency(name string, units []string) Property { return Property{ Name: name, Value: dbus.MakeVariant(units), } } // PropRequires sets the Requires unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires= func PropRequires(units ...string) Property { return propDependency("Requires", units) } // PropRequiresOverridable sets the RequiresOverridable unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiresOverridable= func PropRequiresOverridable(units ...string) Property { return propDependency("RequiresOverridable", units) } // PropRequisite sets the Requisite unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requisite= func PropRequisite(units ...string) Property { return propDependency("Requisite", units) } // PropRequisiteOverridable sets the RequisiteOverridable unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequisiteOverridable= func PropRequisiteOverridable(units ...string) Property { return propDependency("RequisiteOverridable", units) } // PropWants sets the Wants unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Wants= func PropWants(units ...string) Property { return propDependency("Wants", units) } // PropBindsTo sets the BindsTo unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#BindsTo= func PropBindsTo(units ...string) Property { return propDependency("BindsTo", units) } // PropRequiredBy sets the RequiredBy unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiredBy= func PropRequiredBy(units ...string) Property { return propDependency("RequiredBy", units) } // PropRequiredByOverridable sets the RequiredByOverridable unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiredByOverridable= func PropRequiredByOverridable(units ...string) Property { return propDependency("RequiredByOverridable", units) } // PropWantedBy sets the WantedBy unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#WantedBy= func PropWantedBy(units ...string) Property { return propDependency("WantedBy", units) } // PropBoundBy sets the BoundBy unit property. See // http://www.freedesktop.org/software/systemd/main/systemd.unit.html#BoundBy= func PropBoundBy(units ...string) Property { return propDependency("BoundBy", units) } // PropConflicts sets the Conflicts unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Conflicts= func PropConflicts(units ...string) Property { return propDependency("Conflicts", units) } // PropConflictedBy sets the ConflictedBy unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#ConflictedBy= func PropConflictedBy(units ...string) Property { return propDependency("ConflictedBy", units) } // PropBefore sets the Before unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before= func PropBefore(units ...string) Property { return propDependency("Before", units) } // PropAfter sets the After unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#After= func PropAfter(units ...string) Property { return propDependency("After", units) } // PropOnFailure sets the OnFailure unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#OnFailure= func PropOnFailure(units ...string) Property { return propDependency("OnFailure", units) } // PropTriggers sets the Triggers unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Triggers= func PropTriggers(units ...string) Property { return propDependency("Triggers", units) } // PropTriggeredBy sets the TriggeredBy unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#TriggeredBy= func PropTriggeredBy(units ...string) Property { return propDependency("TriggeredBy", units) } // PropPropagatesReloadTo sets the PropagatesReloadTo unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#PropagatesReloadTo= func PropPropagatesReloadTo(units ...string) Property { return propDependency("PropagatesReloadTo", units) } // PropRequiresMountsFor sets the RequiresMountsFor unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.unit.html#RequiresMountsFor= func PropRequiresMountsFor(units ...string) Property { return propDependency("RequiresMountsFor", units) } // PropSlice sets the Slice unit property. See // http://www.freedesktop.org/software/systemd/man/systemd.resource-control.html#Slice= func PropSlice(slice string) Property { return Property{ Name: "Slice", Value: dbus.MakeVariant(slice), } } // PropPids sets the PIDs field of scope units used in the initial construction // of the scope only and specifies the initial PIDs to add to the scope object. // See https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/#properties func PropPids(pids ...uint32) Property { return Property{ Name: "PIDs", Value: dbus.MakeVariant(pids), } } NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/dbus/set.go000066400000000000000000000024231520540370700264750ustar00rootroot00000000000000// Copyright 2015 CoreOS, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dbus import ( "sync" ) type set struct { data map[string]bool mu sync.Mutex } func (s *set) Add(value string) { s.mu.Lock() defer s.mu.Unlock() s.data[value] = true } func (s *set) Remove(value string) { s.mu.Lock() defer s.mu.Unlock() delete(s.data, value) } func (s *set) Contains(value string) (exists bool) { s.mu.Lock() defer s.mu.Unlock() _, exists = s.data[value] return } func (s *set) Length() int { s.mu.Lock() defer s.mu.Unlock() return len(s.data) } func (s *set) Values() (values []string) { s.mu.Lock() defer s.mu.Unlock() for val := range s.data { values = append(values, val) } return } func newSet() *set { return &set{data: make(map[string]bool)} } NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/dbus/subscription.go000066400000000000000000000253361520540370700304360ustar00rootroot00000000000000// Copyright 2015 CoreOS, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dbus import ( "context" "errors" "log" "time" "github.com/godbus/dbus/v5" ) const ( cleanIgnoreInterval = int64(10 * time.Second) ignoreInterval = int64(30 * time.Millisecond) ) // Subscribe sets up this connection to subscribe to all systemd dbus events. // This is required before calling SubscribeUnits. When the connection closes // systemd will automatically stop sending signals so there is no need to // explicitly call Unsubscribe(). func (c *Conn) Subscribe() error { c.sigconn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "type='signal',interface='org.freedesktop.systemd1.Manager',member='UnitNew'") c.sigconn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "type='signal',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged'") return c.sigobj.Call("org.freedesktop.systemd1.Manager.Subscribe", 0).Store() } // Unsubscribe this connection from systemd dbus events. func (c *Conn) Unsubscribe() error { return c.sigobj.Call("org.freedesktop.systemd1.Manager.Unsubscribe", 0).Store() } func (c *Conn) dispatch() { ch := make(chan *dbus.Signal, signalBuffer) c.sigconn.Signal(ch) go func() { for { signal, ok := <-ch if !ok { return } if signal.Name == "org.freedesktop.systemd1.Manager.JobRemoved" { c.jobComplete(signal) } if c.subStateSubscriber.updateCh == nil && c.propertiesSubscriber.updateCh == nil { continue } var unitPath dbus.ObjectPath switch signal.Name { case "org.freedesktop.systemd1.Manager.JobRemoved": unitName := signal.Body[2].(string) _ = c.sysobj.Call("org.freedesktop.systemd1.Manager.GetUnit", 0, unitName).Store(&unitPath) case "org.freedesktop.systemd1.Manager.UnitNew": unitPath = signal.Body[1].(dbus.ObjectPath) case "org.freedesktop.DBus.Properties.PropertiesChanged": if signal.Body[0].(string) == "org.freedesktop.systemd1.Unit" { unitPath = signal.Path if len(signal.Body) >= 2 { if changed, ok := signal.Body[1].(map[string]dbus.Variant); ok { c.sendPropertiesUpdate(unitPath, changed) } } } } if unitPath == dbus.ObjectPath("") { continue } c.sendSubStateUpdate(unitPath) } }() } // Deprecated: use SubscribeUnitsContext instead. func (c *Conn) SubscribeUnits(interval time.Duration) (<-chan map[string]*UnitStatus, <-chan error) { return c.SubscribeUnitsContext(context.Background(), interval) } // SubscribeUnitsContext returns two unbuffered channels which will receive all changed units every // interval. Deleted units are sent as nil. func (c *Conn) SubscribeUnitsContext(ctx context.Context, interval time.Duration) (<-chan map[string]*UnitStatus, <-chan error) { return c.SubscribeUnitsCustomContext(ctx, interval, 0, func(u1, u2 *UnitStatus) bool { return *u1 != *u2 }, nil) } // Deprecated: use SubscribeUnitsCustomContext instead. func (c *Conn) SubscribeUnitsCustom(interval time.Duration, buffer int, isChanged func(*UnitStatus, *UnitStatus) bool, filterUnit func(string) bool) (<-chan map[string]*UnitStatus, <-chan error) { return c.SubscribeUnitsCustomContext(context.Background(), interval, buffer, isChanged, filterUnit) } // SubscribeUnitsCustomContext is like [Conn.SubscribeUnitsContext] but lets you specify the buffer // size of the channels, the comparison function for detecting changes and a filter // function for cutting down on the noise that your channel receives. func (c *Conn) SubscribeUnitsCustomContext(ctx context.Context, interval time.Duration, buffer int, isChanged func(*UnitStatus, *UnitStatus) bool, filterUnit func(string) bool) (<-chan map[string]*UnitStatus, <-chan error) { old := make(map[string]*UnitStatus) statusChan := make(chan map[string]*UnitStatus, buffer) errChan := make(chan error, buffer) go func() { for { timerChan := time.After(interval) units, err := c.ListUnitsContext(ctx) if err == nil { cur := make(map[string]*UnitStatus) for i := range units { if filterUnit != nil && filterUnit(units[i].Name) { continue } cur[units[i].Name] = &units[i] } // add all new or changed units changed := make(map[string]*UnitStatus) for n, u := range cur { if oldU, ok := old[n]; !ok || isChanged(oldU, u) { changed[n] = u } delete(old, n) } // add all deleted units for oldN := range old { changed[oldN] = nil } old = cur if len(changed) != 0 { statusChan <- changed } } else { errChan <- err } select { case <-timerChan: continue case <-ctx.Done(): close(statusChan) close(errChan) return } } }() return statusChan, errChan } type SubStateUpdate struct { UnitName string SubState string } // SetSubStateSubscriber writes to updateCh when any unit's substate changes. // Although this writes to updateCh on every state change, the reported state // may be more recent than the change that generated it (due to an unavoidable // race in the systemd dbus interface). That is, this method provides a good // way to keep a current view of all units' states, but is not guaranteed to // show every state transition they go through. Furthermore, state changes // will only be written to the channel with non-blocking writes. If updateCh // is full, it attempts to write an error to errCh; if errCh is full, the error // passes silently. func (c *Conn) SetSubStateSubscriber(updateCh chan<- *SubStateUpdate, errCh chan<- error) { if c == nil { msg := "nil receiver" select { case errCh <- errors.New(msg): default: log.Printf("full error channel while reporting: %s\n", msg) } return } c.subStateSubscriber.Lock() defer c.subStateSubscriber.Unlock() c.subStateSubscriber.updateCh = updateCh c.subStateSubscriber.errCh = errCh } func (c *Conn) sendSubStateUpdate(unitPath dbus.ObjectPath) { c.subStateSubscriber.Lock() defer c.subStateSubscriber.Unlock() if c.subStateSubscriber.updateCh == nil { return } isIgnored := c.shouldIgnore(unitPath) defer c.cleanIgnore() if isIgnored { return } info, err := c.GetUnitPathProperties(unitPath) if err != nil { select { case c.subStateSubscriber.errCh <- err: default: log.Printf("full error channel while reporting: %s\n", err) } return } defer c.updateIgnore(unitPath, info) name, ok := info["Id"].(string) if !ok { msg := "failed to cast info.Id" select { case c.subStateSubscriber.errCh <- errors.New(msg): default: log.Printf("full error channel while reporting: %s\n", err) } return } substate, ok := info["SubState"].(string) if !ok { msg := "failed to cast info.SubState" select { case c.subStateSubscriber.errCh <- errors.New(msg): default: log.Printf("full error channel while reporting: %s\n", msg) } return } update := &SubStateUpdate{name, substate} select { case c.subStateSubscriber.updateCh <- update: default: msg := "update channel is full" select { case c.subStateSubscriber.errCh <- errors.New(msg): default: log.Printf("full error channel while reporting: %s\n", msg) } return } } // The ignore functions work around a wart in the systemd dbus interface. // Requesting the properties of an unloaded unit will cause systemd to send a // pair of UnitNew/UnitRemoved signals. Because we need to get a unit's // properties on UnitNew (as that's the only indication of a new unit coming up // for the first time), we would enter an infinite loop if we did not attempt // to detect and ignore these spurious signals. The signal themselves are // indistinguishable from relevant ones, so we (somewhat hackishly) ignore an // unloaded unit's signals for a short time after requesting its properties. // This means that we will miss e.g. a transient unit being restarted // *immediately* upon failure and also a transient unit being started // immediately after requesting its status (with systemctl status, for example, // because this causes a UnitNew signal to be sent which then causes us to fetch // the properties). func (c *Conn) shouldIgnore(path dbus.ObjectPath) bool { t, ok := c.subStateSubscriber.ignore[path] return ok && t >= time.Now().UnixNano() } func (c *Conn) updateIgnore(path dbus.ObjectPath, info map[string]any) { loadState, ok := info["LoadState"].(string) if !ok { return } // unit is unloaded - it will trigger bad systemd dbus behavior if loadState == "not-found" { c.subStateSubscriber.ignore[path] = time.Now().UnixNano() + ignoreInterval } } // without this, ignore would grow unboundedly over time func (c *Conn) cleanIgnore() { now := time.Now().UnixNano() if c.subStateSubscriber.cleanIgnore < now { c.subStateSubscriber.cleanIgnore = now + cleanIgnoreInterval for p, t := range c.subStateSubscriber.ignore { if t < now { delete(c.subStateSubscriber.ignore, p) } } } } // PropertiesUpdate holds a map of a unit's changed properties type PropertiesUpdate struct { UnitName string Changed map[string]dbus.Variant } // SetPropertiesSubscriber writes to updateCh when any unit's properties // change. Every property change reported by systemd will be sent; that is, no // transitions will be "missed" (as they might be with SetSubStateSubscriber). // However, state changes will only be written to the channel with non-blocking // writes. If updateCh is full, it attempts to write an error to errCh; if // errCh is full, the error passes silently. func (c *Conn) SetPropertiesSubscriber(updateCh chan<- *PropertiesUpdate, errCh chan<- error) { c.propertiesSubscriber.Lock() defer c.propertiesSubscriber.Unlock() c.propertiesSubscriber.updateCh = updateCh c.propertiesSubscriber.errCh = errCh } // we don't need to worry about shouldIgnore() here because // sendPropertiesUpdate doesn't call GetProperties() func (c *Conn) sendPropertiesUpdate(unitPath dbus.ObjectPath, changedProps map[string]dbus.Variant) { c.propertiesSubscriber.Lock() defer c.propertiesSubscriber.Unlock() if c.propertiesSubscriber.updateCh == nil { return } update := &PropertiesUpdate{unitName(unitPath), changedProps} select { case c.propertiesSubscriber.updateCh <- update: default: msg := "update channel is full" select { case c.propertiesSubscriber.errCh <- errors.New(msg): default: log.Printf("full error channel while reporting: %s\n", msg) } return } } NVIDIA-mig-parted-47bc938/vendor/github.com/coreos/go-systemd/v22/dbus/subscription_set.go000066400000000000000000000041631520540370700313040ustar00rootroot00000000000000// Copyright 2015 CoreOS, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dbus import ( "context" "time" ) // SubscriptionSet returns a subscription set which is like conn.Subscribe but // can filter to only return events for a set of units. type SubscriptionSet struct { *set conn *Conn } func (s *SubscriptionSet) filter(unit string) bool { return !s.Contains(unit) } // SubscribeContext starts listening for dbus events for all of the units in the set. // Returns channels identical to conn.SubscribeUnits. func (s *SubscriptionSet) SubscribeContext(ctx context.Context) (<-chan map[string]*UnitStatus, <-chan error) { // TODO: Make fully evented by using systemd 209 with properties changed values return s.conn.SubscribeUnitsCustomContext(ctx, time.Second, 0, mismatchUnitStatus, func(unit string) bool { return s.filter(unit) }, ) } // Deprecated: use SubscribeContext instead. func (s *SubscriptionSet) Subscribe() (<-chan map[string]*UnitStatus, <-chan error) { return s.SubscribeContext(context.Background()) } // NewSubscriptionSet returns a new subscription set. func (c *Conn) NewSubscriptionSet() *SubscriptionSet { return &SubscriptionSet{newSet(), c} } // mismatchUnitStatus returns true if the provided UnitStatus objects // are not equivalent. false is returned if the objects are equivalent. // Only the Name, Description and state-related fields are used in // the comparison. func mismatchUnitStatus(u1, u2 *UnitStatus) bool { return u1.Name != u2.Name || u1.Description != u2.Description || u1.LoadState != u2.LoadState || u1.ActiveState != u2.ActiveState || u1.SubState != u2.SubState } NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/000077500000000000000000000000001520540370700221065ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/go-md2man/000077500000000000000000000000001520540370700236675ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/go-md2man/v2/000077500000000000000000000000001520540370700242165ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/go-md2man/v2/LICENSE.md000066400000000000000000000020651520540370700256250ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2014 Brian Goff Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/go-md2man/v2/md2man/000077500000000000000000000000001520540370700253745ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/go-md2man/v2/md2man/debug.go000066400000000000000000000026411520540370700270140ustar00rootroot00000000000000package md2man import ( "fmt" "io" "os" "strings" "github.com/russross/blackfriday/v2" ) func fmtListFlags(flags blackfriday.ListType) string { knownFlags := []struct { name string flag blackfriday.ListType }{ {"ListTypeOrdered", blackfriday.ListTypeOrdered}, {"ListTypeDefinition", blackfriday.ListTypeDefinition}, {"ListTypeTerm", blackfriday.ListTypeTerm}, {"ListItemContainsBlock", blackfriday.ListItemContainsBlock}, {"ListItemBeginningOfList", blackfriday.ListItemBeginningOfList}, {"ListItemEndOfList", blackfriday.ListItemEndOfList}, } var f []string for _, kf := range knownFlags { if flags&kf.flag != 0 { f = append(f, kf.name) flags &^= kf.flag } } if flags != 0 { f = append(f, fmt.Sprintf("Unknown(%#x)", flags)) } return strings.Join(f, "|") } type debugDecorator struct { blackfriday.Renderer } func depth(node *blackfriday.Node) int { d := 0 for n := node.Parent; n != nil; n = n.Parent { d++ } return d } func (d *debugDecorator) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus { fmt.Fprintf(os.Stderr, "%s%s %v %v\n", strings.Repeat(" ", depth(node)), map[bool]string{true: "+", false: "-"}[entering], node, fmtListFlags(node.ListFlags)) var b strings.Builder status := d.Renderer.RenderNode(io.MultiWriter(&b, w), node, entering) if b.Len() > 0 { fmt.Fprintf(os.Stderr, ">> %q\n", b.String()) } return status } NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go000066400000000000000000000011041520540370700270750ustar00rootroot00000000000000// Package md2man aims in converting markdown into roff (man pages). package md2man import ( "os" "strconv" "github.com/russross/blackfriday/v2" ) // Render converts a markdown document into a roff formatted document. func Render(doc []byte) []byte { renderer := NewRoffRenderer() var r blackfriday.Renderer = renderer if v, _ := strconv.ParseBool(os.Getenv("MD2MAN_DEBUG")); v { r = &debugDecorator{Renderer: r} } return blackfriday.Run(doc, []blackfriday.Option{ blackfriday.WithRenderer(r), blackfriday.WithExtensions(renderer.GetExtensions()), }...) } NVIDIA-mig-parted-47bc938/vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go000066400000000000000000000266161520540370700266720ustar00rootroot00000000000000package md2man import ( "bufio" "bytes" "fmt" "io" "os" "strings" "github.com/russross/blackfriday/v2" ) // roffRenderer implements the blackfriday.Renderer interface for creating // roff format (manpages) from markdown text type roffRenderer struct { listCounters []int firstHeader bool listDepth int } const ( titleHeader = ".TH " topLevelHeader = "\n\n.SH " secondLevelHdr = "\n.SH " otherHeader = "\n.SS " crTag = "\n" emphTag = "\\fI" emphCloseTag = "\\fP" strongTag = "\\fB" strongCloseTag = "\\fP" breakTag = "\n.br\n" paraTag = "\n.PP\n" hruleTag = "\n.ti 0\n\\l'\\n(.lu'\n" linkTag = "\n\\[la]" linkCloseTag = "\\[ra]" codespanTag = "\\fB" codespanCloseTag = "\\fR" codeTag = "\n.EX\n" codeCloseTag = ".EE\n" // Do not prepend a newline character since code blocks, by definition, include a newline already (or at least as how blackfriday gives us on). quoteTag = "\n.PP\n.RS\n" quoteCloseTag = "\n.RE\n" listTag = "\n.RS\n" listCloseTag = ".RE\n" dtTag = "\n.TP\n" dd2Tag = "\n" tableStart = "\n.TS\nallbox;\n" tableEnd = ".TE\n" tableCellStart = "T{\n" tableCellEnd = "\nT}" tablePreprocessor = `'\" t` ) // NewRoffRenderer creates a new blackfriday Renderer for generating roff documents // from markdown func NewRoffRenderer() *roffRenderer { return &roffRenderer{} } // GetExtensions returns the list of extensions used by this renderer implementation func (*roffRenderer) GetExtensions() blackfriday.Extensions { return blackfriday.NoIntraEmphasis | blackfriday.Tables | blackfriday.FencedCode | blackfriday.SpaceHeadings | blackfriday.Footnotes | blackfriday.Titleblock | blackfriday.DefinitionLists } // RenderHeader handles outputting the header at document start func (r *roffRenderer) RenderHeader(w io.Writer, ast *blackfriday.Node) { // We need to walk the tree to check if there are any tables. // If there are, we need to enable the roff table preprocessor. ast.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus { if node.Type == blackfriday.Table { out(w, tablePreprocessor+"\n") return blackfriday.Terminate } return blackfriday.GoToNext }) // disable hyphenation out(w, ".nh\n") } // RenderFooter handles outputting the footer at the document end; the roff // renderer has no footer information func (r *roffRenderer) RenderFooter(w io.Writer, ast *blackfriday.Node) { } // RenderNode is called for each node in a markdown document; based on the node // type the equivalent roff output is sent to the writer func (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus { walkAction := blackfriday.GoToNext switch node.Type { case blackfriday.Text: // Special case: format the NAME section as required for proper whatis parsing. // Refer to the lexgrog(1) and groff_man(7) manual pages for details. if node.Parent != nil && node.Parent.Type == blackfriday.Paragraph && node.Parent.Prev != nil && node.Parent.Prev.Type == blackfriday.Heading && node.Parent.Prev.FirstChild != nil && bytes.EqualFold(node.Parent.Prev.FirstChild.Literal, []byte("NAME")) { before, after, found := bytesCut(node.Literal, []byte(" - ")) escapeSpecialChars(w, before) if found { out(w, ` \- `) escapeSpecialChars(w, after) } } else { escapeSpecialChars(w, node.Literal) } case blackfriday.Softbreak: out(w, crTag) case blackfriday.Hardbreak: out(w, breakTag) case blackfriday.Emph: if entering { out(w, emphTag) } else { out(w, emphCloseTag) } case blackfriday.Strong: if entering { out(w, strongTag) } else { out(w, strongCloseTag) } case blackfriday.Link: // Don't render the link text for automatic links, because this // will only duplicate the URL in the roff output. // See https://daringfireball.net/projects/markdown/syntax#autolink if !bytes.Equal(node.LinkData.Destination, node.FirstChild.Literal) { out(w, string(node.FirstChild.Literal)) } // Hyphens in a link must be escaped to avoid word-wrap in the rendered man page. escapedLink := strings.ReplaceAll(string(node.LinkData.Destination), "-", "\\-") out(w, linkTag+escapedLink+linkCloseTag) walkAction = blackfriday.SkipChildren case blackfriday.Image: // ignore images walkAction = blackfriday.SkipChildren case blackfriday.Code: out(w, codespanTag) escapeSpecialChars(w, node.Literal) out(w, codespanCloseTag) case blackfriday.Document: break case blackfriday.Paragraph: if entering { if r.listDepth > 0 { // roff .PP markers break lists if node.Prev != nil { // continued paragraph if node.Prev.Type == blackfriday.List && node.Prev.ListFlags&blackfriday.ListTypeDefinition == 0 { out(w, ".IP\n") } else { out(w, crTag) } } } else if node.Prev != nil && node.Prev.Type == blackfriday.Heading { out(w, crTag) } else { out(w, paraTag) } } else { if node.Next == nil || node.Next.Type != blackfriday.List { out(w, crTag) } } case blackfriday.BlockQuote: if entering { out(w, quoteTag) } else { out(w, quoteCloseTag) } case blackfriday.Heading: r.handleHeading(w, node, entering) case blackfriday.HorizontalRule: out(w, hruleTag) case blackfriday.List: r.handleList(w, node, entering) case blackfriday.Item: r.handleItem(w, node, entering) case blackfriday.CodeBlock: out(w, codeTag) escapeSpecialChars(w, node.Literal) out(w, codeCloseTag) case blackfriday.Table: r.handleTable(w, node, entering) case blackfriday.TableHead: case blackfriday.TableBody: case blackfriday.TableRow: // no action as cell entries do all the nroff formatting return blackfriday.GoToNext case blackfriday.TableCell: r.handleTableCell(w, node, entering) case blackfriday.HTMLSpan: // ignore other HTML tags case blackfriday.HTMLBlock: if bytes.HasPrefix(node.Literal, []byte(" ## Who uses fxamacker/cbor `fxamacker/cbor` is used in projects by Arm Ltd., Berlin Institute of Health at Charité, Chainlink, Confidential Computing Consortium, ConsenSys, EdgeX Foundry, F5, Flow Foundation, Fraunhofer‑AISEC, IBM, Kubernetes, Let's Encrypt (ISRG), Linaro, Linux Foundation, Matrix.org, Microsoft, National Cybersecurity Agency of France (govt), Netherlands (govt), Oasis Protocol, Red Hat OpenShift, Smallstep, Tailscale, Taurus SA, TIBCO, Veraison, and others. `fxamacker/cbor` passed multiple confidential security assessments in 2022. A [nonconfidential security assessment](https://github.com/veraison/go-cose/blob/v1.0.0-rc.1/reports/NCC_Microsoft-go-cose-Report_2022-05-26_v1.0.pdf) (prepared by NCC Group for Microsoft Corporation) assessed a subset of fxamacker/cbor v2.4. ## Standards `fxamacker/cbor` is a CBOR codec in full conformance with [IETF STD 94 (RFC 8949)](https://www.rfc-editor.org/info/std94). It also supports CBOR Sequences ([RFC 8742](https://www.rfc-editor.org/rfc/rfc8742.html)) and Extended Diagnostic Notation ([Appendix G of RFC 8610](https://www.rfc-editor.org/rfc/rfc8610.html#appendix-G)). Notable CBOR features include: | CBOR Feature | Description | | :--- | :--- | | CBOR tags | API supports built-in and user-defined tags. | | Preferred serialization | Integers encode to fewest bytes. Optional float64 → float32 → float16. | | Map key sorting | Unsorted, length-first (Canonical CBOR), and bytewise-lexicographic (CTAP2). | | Duplicate map keys | Always forbid for encoding and option to allow/forbid for decoding. | | Indefinite length data | Option to allow/forbid for encoding and decoding. | | Well-formedness | Always checked and enforced. | | Basic validity checks | Optionally check UTF-8 validity and duplicate map keys. | | Security considerations | Prevent integer overflow and resource exhaustion (RFC 8949 Section 10). | Known limitations are noted in the [Limitations section](#limitations). Go nil values for slices, maps, pointers, etc. are encoded as CBOR null. Empty slices, maps, etc. are encoded as empty CBOR arrays and maps. Decoder checks for all required well-formedness errors, including all "subkinds" of syntax errors and too little data. After well-formedness is verified, basic validity errors are handled as follows: * Invalid UTF-8 string: Decoder has option to check and return invalid UTF-8 string error. This check is enabled by default. * Duplicate keys in a map: Decoder has options to ignore or enforce rejection of duplicate map keys. When decoding well-formed CBOR arrays and maps, decoder saves the first error it encounters and continues with the next item. Options to handle this differently may be added in the future. By default, decoder treats time values of floating-point NaN and Infinity as if they are CBOR Null or CBOR Undefined. __Click to expand topic:__
🔎  Duplicate Map Keys

This library provides options for fast detection and rejection of duplicate map keys based on applying a Go-specific data model to CBOR's extended generic data model in order to determine duplicate vs distinct map keys. Detection relies on whether the CBOR map key would be a duplicate "key" when decoded and applied to the user-provided Go map or struct. `DupMapKeyQuiet` turns off detection of duplicate map keys. It tries to use a "keep fastest" method by choosing either "keep first" or "keep last" depending on the Go data type. `DupMapKeyEnforcedAPF` enforces detection and rejection of duplidate map keys. Decoding stops immediately and returns `DupMapKeyError` when the first duplicate key is detected. The error includes the duplicate map key and the index number. APF suffix means "Allow Partial Fill" so the destination map or struct can contain some decoded values at the time of error. It is the caller's responsibility to respond to the `DupMapKeyError` by discarding the partially filled result if that's required by their protocol.

🔎  Tag Validity

This library checks tag validity for built-in tags (currently tag numbers 0, 1, 2, 3, and 55799): * Inadmissible type for tag content * Inadmissible value for tag content Unknown tag data items (not tag number 0, 1, 2, 3, or 55799) are handled in two ways: * When decoding into an empty interface, unknown tag data item will be decoded into `cbor.Tag` data type, which contains tag number and tag content. The tag content will be decoded into the default Go data type for the CBOR data type. * When decoding into other Go types, unknown tag data item is decoded into the specified Go type. If Go type is registered with a tag number, the tag number can optionally be verified. Decoder also has an option to forbid tag data items (treat any tag data item as error) which is specified by protocols such as CTAP2 Canonical CBOR. For more information, see [decoding options](#decoding-options-1) and [tag options](#tag-options).

## Limitations If any of these limitations prevent you from using this library, please open an issue along with a link to your project. * CBOR `Undefined` (0xf7) value decodes to Go's `nil` value. CBOR `Null` (0xf6) more closely matches Go's `nil`. * CBOR map keys with data types not supported by Go for map keys are ignored and an error is returned after continuing to decode remaining items. * When decoding registered CBOR tag data to interface type, decoder creates a pointer to registered Go type matching CBOR tag number. Requiring a pointer for this is a Go limitation. ## Fuzzing and Code Coverage __Code coverage__ is always 95% or higher (with `go test -cover`) when tagging a release. __Coverage-guided fuzzing__ must pass billions of execs using before tagging a release. Fuzzing is done using nonpublic code which may eventually get merged into this project. Until then, reports like OpenSSF Scorecard can't detect fuzz tests being used by this project.
## Versions and API Changes This project uses [Semantic Versioning](https://semver.org), so the API is always backwards compatible unless the major version number changes. These functions have signatures identical to encoding/json and their API will continue to match `encoding/json` even after major new releases: `Marshal`, `Unmarshal`, `NewEncoder`, `NewDecoder`, `(*Encoder).Encode`, and `(*Decoder).Decode`. Exclusions from SemVer: - Newly added API documented as "subject to change". - Newly added API in the master branch that has never been tagged in non-beta release. - If function parameters are unchanged, bug fixes that change behavior (e.g. return error for edge case was missed in prior version). We try to highlight these in the release notes and add extended beta period. E.g. [v2.5.0-beta](https://github.com/fxamacker/cbor/releases/tag/v2.5.0-beta) (Dec 2022) -> [v2.5.0](https://github.com/fxamacker/cbor/releases/tag/v2.5.0) (Aug 2023). This project avoids breaking changes to behavior of encoding and decoding functions unless required to improve conformance with supported RFCs (e.g. RFC 8949, RFC 8742, etc.) Visible changes that don't improve conformance to standards are typically made available as new opt-in settings or new functions. ## Code of Conduct This project has adopted the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). Contact [faye.github@gmail.com](mailto:faye.github@gmail.com) with any questions or comments. ## Contributing Please open an issue before beginning work on a PR. The improvement may have already been considered, etc. For more info, see [How to Contribute](CONTRIBUTING.md). ## Security Policy Security fixes are provided for the latest released version of fxamacker/cbor. For the full text of the Security Policy, see [SECURITY.md](SECURITY.md). ## Acknowledgements Many thanks to all the contributors on this project! I'm especially grateful to Bastian Müller and Dieter Shirley for suggesting and collaborating on CBOR stream mode, and much more. I'm very grateful to Stefan Tatschner, Yawning Angel, Jernej Kos, x448, ZenGround0, and Jakob Borg for their contributions or support in the very early days. Big thanks to Ben Luddy for his contributions in v2.6.0 and v2.7.0. This library clearly wouldn't be possible without Carsten Bormann authoring CBOR RFCs. Special thanks to Laurence Lundblade and Jeffrey Yasskin for their help on IETF mailing list or at [7049bis](https://github.com/cbor-wg/CBORbis). Huge thanks to The Go Authors for creating a fun and practical programming language with batteries included! This library uses `x448/float16` which used to be included. As a standalone package, `x448/float16` is useful to other projects as well. ## License Copyright © 2019-2024 [Faye Amacker](https://github.com/fxamacker). fxamacker/cbor is licensed under the MIT License. See [LICENSE](LICENSE) for the full license text.
NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/SECURITY.md000066400000000000000000000006021520540370700254230ustar00rootroot00000000000000# Security Policy Security fixes are provided for the latest released version of fxamacker/cbor. If the security vulnerability is already known to the public, then you can open an issue as a bug report. To report security vulnerabilities not yet known to the public, please email faye.github@gmail.com and allow time for the problem to be resolved before reporting it to the public. NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/bytestring.go000066400000000000000000000054241520540370700263620ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "errors" ) // ByteString represents CBOR byte string (major type 2). ByteString can be used // when using a Go []byte is not possible or convenient. For example, Go doesn't // allow []byte as map key, so ByteString can be used to support data formats // having CBOR map with byte string keys. ByteString can also be used to // encode invalid UTF-8 string as CBOR byte string. // See DecOption.MapKeyByteStringMode for more details. type ByteString string // Bytes returns bytes representing ByteString. func (bs ByteString) Bytes() []byte { return []byte(bs) } // MarshalCBOR encodes ByteString as CBOR byte string (major type 2). func (bs ByteString) MarshalCBOR() ([]byte, error) { e := getEncodeBuffer() defer putEncodeBuffer(e) // Encode length encodeHead(e, byte(cborTypeByteString), uint64(len(bs))) // Encode data buf := make([]byte, e.Len()+len(bs)) n := copy(buf, e.Bytes()) copy(buf[n:], bs) return buf, nil } // UnmarshalCBOR decodes CBOR byte string (major type 2) to ByteString. // Decoding CBOR null and CBOR undefined sets ByteString to be empty. // // Deprecated: No longer used by this codec; kept for compatibility // with user apps that directly call this function. func (bs *ByteString) UnmarshalCBOR(data []byte) error { if bs == nil { return errors.New("cbor.ByteString: UnmarshalCBOR on nil pointer") } d := decoder{data: data, dm: defaultDecMode} // Check well-formedness of CBOR data item. // ByteString.UnmarshalCBOR() is exported, so // the codec needs to support same behavior for: // - Unmarshal(data, *ByteString) // - ByteString.UnmarshalCBOR(data) err := d.wellformed(false, false) if err != nil { return err } return bs.unmarshalCBOR(data) } // unmarshalCBOR decodes CBOR byte string (major type 2) to ByteString. // Decoding CBOR null and CBOR undefined sets ByteString to be empty. // This function assumes data is well-formed, and does not perform bounds checking. // This function is called by Unmarshal(). func (bs *ByteString) unmarshalCBOR(data []byte) error { if bs == nil { return errors.New("cbor.ByteString: UnmarshalCBOR on nil pointer") } // Decoding CBOR null and CBOR undefined to ByteString resets data. // This behavior is similar to decoding CBOR null and CBOR undefined to []byte. if len(data) == 1 && (data[0] == 0xf6 || data[0] == 0xf7) { *bs = "" return nil } d := decoder{data: data, dm: defaultDecMode} // Check if CBOR data type is byte string if typ := d.nextCBORType(); typ != cborTypeByteString { return &UnmarshalTypeError{CBORType: typ.String(), GoType: typeByteString.String()} } b, _ := d.parseByteString() *bs = ByteString(b) return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/cache.go000066400000000000000000000223321520540370700252300ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "bytes" "errors" "fmt" "reflect" "sort" "strconv" "strings" "sync" ) type encodeFuncs struct { ef encodeFunc ief isEmptyFunc izf isZeroFunc } var ( decodingStructTypeCache sync.Map // map[reflect.Type]*decodingStructType encodingStructTypeCache sync.Map // map[reflect.Type]*encodingStructType encodeFuncCache sync.Map // map[reflect.Type]encodeFuncs typeInfoCache sync.Map // map[reflect.Type]*typeInfo ) type specialType int const ( specialTypeNone specialType = iota specialTypeUnmarshalerIface specialTypeUnexportedUnmarshalerIface specialTypeEmptyIface specialTypeIface specialTypeTag specialTypeTime specialTypeJSONUnmarshalerIface ) type typeInfo struct { elemTypeInfo *typeInfo keyTypeInfo *typeInfo typ reflect.Type kind reflect.Kind nonPtrType reflect.Type nonPtrKind reflect.Kind spclType specialType } func newTypeInfo(t reflect.Type) *typeInfo { tInfo := typeInfo{typ: t, kind: t.Kind()} for t.Kind() == reflect.Pointer { t = t.Elem() } k := t.Kind() tInfo.nonPtrType = t tInfo.nonPtrKind = k if k == reflect.Interface { if t.NumMethod() == 0 { tInfo.spclType = specialTypeEmptyIface } else { tInfo.spclType = specialTypeIface } } else if t == typeTag { tInfo.spclType = specialTypeTag } else if t == typeTime { tInfo.spclType = specialTypeTime } else if reflect.PointerTo(t).Implements(typeUnexportedUnmarshaler) { tInfo.spclType = specialTypeUnexportedUnmarshalerIface } else if reflect.PointerTo(t).Implements(typeUnmarshaler) { tInfo.spclType = specialTypeUnmarshalerIface } else if reflect.PointerTo(t).Implements(typeJSONUnmarshaler) { tInfo.spclType = specialTypeJSONUnmarshalerIface } switch k { case reflect.Array, reflect.Slice: tInfo.elemTypeInfo = getTypeInfo(t.Elem()) case reflect.Map: tInfo.keyTypeInfo = getTypeInfo(t.Key()) tInfo.elemTypeInfo = getTypeInfo(t.Elem()) } return &tInfo } type decodingStructType struct { fields fields fieldIndicesByName map[string]int err error toArray bool } // The stdlib errors.Join was introduced in Go 1.20, and we still support Go 1.17, so instead, // here's a very basic implementation of an aggregated error. type multierror []error func (m multierror) Error() string { var sb strings.Builder for i, err := range m { sb.WriteString(err.Error()) if i < len(m)-1 { sb.WriteString(", ") } } return sb.String() } func getDecodingStructType(t reflect.Type) *decodingStructType { if v, _ := decodingStructTypeCache.Load(t); v != nil { return v.(*decodingStructType) } flds, structOptions := getFields(t) toArray := hasToArrayOption(structOptions) var errs []error for i := 0; i < len(flds); i++ { if flds[i].keyAsInt { nameAsInt, numErr := strconv.Atoi(flds[i].name) if numErr != nil { errs = append(errs, errors.New("cbor: failed to parse field name \""+flds[i].name+"\" to int ("+numErr.Error()+")")) break } flds[i].nameAsInt = int64(nameAsInt) } flds[i].typInfo = getTypeInfo(flds[i].typ) } fieldIndicesByName := make(map[string]int, len(flds)) for i, fld := range flds { if _, ok := fieldIndicesByName[fld.name]; ok { errs = append(errs, fmt.Errorf("cbor: two or more fields of %v have the same name %q", t, fld.name)) continue } fieldIndicesByName[fld.name] = i } var err error { var multi multierror for _, each := range errs { if each != nil { multi = append(multi, each) } } if len(multi) == 1 { err = multi[0] } else if len(multi) > 1 { err = multi } } structType := &decodingStructType{ fields: flds, fieldIndicesByName: fieldIndicesByName, err: err, toArray: toArray, } decodingStructTypeCache.Store(t, structType) return structType } type encodingStructType struct { fields fields bytewiseFields fields lengthFirstFields fields omitEmptyFieldsIdx []int err error toArray bool } func (st *encodingStructType) getFields(em *encMode) fields { switch em.sort { case SortNone, SortFastShuffle: return st.fields case SortLengthFirst: return st.lengthFirstFields default: return st.bytewiseFields } } type bytewiseFieldSorter struct { fields fields } func (x *bytewiseFieldSorter) Len() int { return len(x.fields) } func (x *bytewiseFieldSorter) Swap(i, j int) { x.fields[i], x.fields[j] = x.fields[j], x.fields[i] } func (x *bytewiseFieldSorter) Less(i, j int) bool { return bytes.Compare(x.fields[i].cborName, x.fields[j].cborName) <= 0 } type lengthFirstFieldSorter struct { fields fields } func (x *lengthFirstFieldSorter) Len() int { return len(x.fields) } func (x *lengthFirstFieldSorter) Swap(i, j int) { x.fields[i], x.fields[j] = x.fields[j], x.fields[i] } func (x *lengthFirstFieldSorter) Less(i, j int) bool { if len(x.fields[i].cborName) != len(x.fields[j].cborName) { return len(x.fields[i].cborName) < len(x.fields[j].cborName) } return bytes.Compare(x.fields[i].cborName, x.fields[j].cborName) <= 0 } func getEncodingStructType(t reflect.Type) (*encodingStructType, error) { if v, _ := encodingStructTypeCache.Load(t); v != nil { structType := v.(*encodingStructType) return structType, structType.err } flds, structOptions := getFields(t) if hasToArrayOption(structOptions) { return getEncodingStructToArrayType(t, flds) } var err error var hasKeyAsInt bool var hasKeyAsStr bool var omitEmptyIdx []int e := getEncodeBuffer() for i := 0; i < len(flds); i++ { // Get field's encodeFunc flds[i].ef, flds[i].ief, flds[i].izf = getEncodeFunc(flds[i].typ) if flds[i].ef == nil { err = &UnsupportedTypeError{t} break } // Encode field name if flds[i].keyAsInt { nameAsInt, numErr := strconv.Atoi(flds[i].name) if numErr != nil { err = errors.New("cbor: failed to parse field name \"" + flds[i].name + "\" to int (" + numErr.Error() + ")") break } flds[i].nameAsInt = int64(nameAsInt) if nameAsInt >= 0 { encodeHead(e, byte(cborTypePositiveInt), uint64(nameAsInt)) } else { n := nameAsInt*(-1) - 1 encodeHead(e, byte(cborTypeNegativeInt), uint64(n)) } flds[i].cborName = make([]byte, e.Len()) copy(flds[i].cborName, e.Bytes()) e.Reset() hasKeyAsInt = true } else { encodeHead(e, byte(cborTypeTextString), uint64(len(flds[i].name))) flds[i].cborName = make([]byte, e.Len()+len(flds[i].name)) n := copy(flds[i].cborName, e.Bytes()) copy(flds[i].cborName[n:], flds[i].name) e.Reset() // If cborName contains a text string, then cborNameByteString contains a // string that has the byte string major type but is otherwise identical to // cborName. flds[i].cborNameByteString = make([]byte, len(flds[i].cborName)) copy(flds[i].cborNameByteString, flds[i].cborName) // Reset encoded CBOR type to byte string, preserving the "additional // information" bits: flds[i].cborNameByteString[0] = byte(cborTypeByteString) | getAdditionalInformation(flds[i].cborNameByteString[0]) hasKeyAsStr = true } // Check if field can be omitted when empty if flds[i].omitEmpty { omitEmptyIdx = append(omitEmptyIdx, i) } } putEncodeBuffer(e) if err != nil { structType := &encodingStructType{err: err} encodingStructTypeCache.Store(t, structType) return structType, structType.err } // Sort fields by canonical order bytewiseFields := make(fields, len(flds)) copy(bytewiseFields, flds) sort.Sort(&bytewiseFieldSorter{bytewiseFields}) lengthFirstFields := bytewiseFields if hasKeyAsInt && hasKeyAsStr { lengthFirstFields = make(fields, len(flds)) copy(lengthFirstFields, flds) sort.Sort(&lengthFirstFieldSorter{lengthFirstFields}) } structType := &encodingStructType{ fields: flds, bytewiseFields: bytewiseFields, lengthFirstFields: lengthFirstFields, omitEmptyFieldsIdx: omitEmptyIdx, } encodingStructTypeCache.Store(t, structType) return structType, structType.err } func getEncodingStructToArrayType(t reflect.Type, flds fields) (*encodingStructType, error) { for i := 0; i < len(flds); i++ { // Get field's encodeFunc flds[i].ef, flds[i].ief, flds[i].izf = getEncodeFunc(flds[i].typ) if flds[i].ef == nil { structType := &encodingStructType{err: &UnsupportedTypeError{t}} encodingStructTypeCache.Store(t, structType) return structType, structType.err } } structType := &encodingStructType{ fields: flds, toArray: true, } encodingStructTypeCache.Store(t, structType) return structType, structType.err } func getEncodeFunc(t reflect.Type) (encodeFunc, isEmptyFunc, isZeroFunc) { if v, _ := encodeFuncCache.Load(t); v != nil { fs := v.(encodeFuncs) return fs.ef, fs.ief, fs.izf } ef, ief, izf := getEncodeFuncInternal(t) encodeFuncCache.Store(t, encodeFuncs{ef, ief, izf}) return ef, ief, izf } func getTypeInfo(t reflect.Type) *typeInfo { if v, _ := typeInfoCache.Load(t); v != nil { return v.(*typeInfo) } tInfo := newTypeInfo(t) typeInfoCache.Store(t, tInfo) return tInfo } func hasToArrayOption(tag string) bool { s := ",toarray" idx := strings.Index(tag, s) return idx >= 0 && (len(tag) == idx+len(s) || tag[idx+len(s)] == ',') } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/common.go000066400000000000000000000126651520540370700254650ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "fmt" "io" "strconv" ) type cborType uint8 const ( cborTypePositiveInt cborType = 0x00 cborTypeNegativeInt cborType = 0x20 cborTypeByteString cborType = 0x40 cborTypeTextString cborType = 0x60 cborTypeArray cborType = 0x80 cborTypeMap cborType = 0xa0 cborTypeTag cborType = 0xc0 cborTypePrimitives cborType = 0xe0 ) func (t cborType) String() string { switch t { case cborTypePositiveInt: return "positive integer" case cborTypeNegativeInt: return "negative integer" case cborTypeByteString: return "byte string" case cborTypeTextString: return "UTF-8 text string" case cborTypeArray: return "array" case cborTypeMap: return "map" case cborTypeTag: return "tag" case cborTypePrimitives: return "primitives" default: return "Invalid type " + strconv.Itoa(int(t)) } } type additionalInformation uint8 const ( maxAdditionalInformationWithoutArgument = 23 additionalInformationWith1ByteArgument = 24 additionalInformationWith2ByteArgument = 25 additionalInformationWith4ByteArgument = 26 additionalInformationWith8ByteArgument = 27 // For major type 7. additionalInformationAsFalse = 20 additionalInformationAsTrue = 21 additionalInformationAsNull = 22 additionalInformationAsUndefined = 23 additionalInformationAsFloat16 = 25 additionalInformationAsFloat32 = 26 additionalInformationAsFloat64 = 27 // For major type 2, 3, 4, 5. additionalInformationAsIndefiniteLengthFlag = 31 ) const ( maxSimpleValueInAdditionalInformation = 23 minSimpleValueIn1ByteArgument = 32 ) func (ai additionalInformation) isIndefiniteLength() bool { return ai == additionalInformationAsIndefiniteLengthFlag } const ( // From RFC 8949 Section 3: // "The initial byte of each encoded data item contains both information about the major type // (the high-order 3 bits, described in Section 3.1) and additional information // (the low-order 5 bits)." // typeMask is used to extract major type in initial byte of encoded data item. typeMask = 0xe0 // additionalInformationMask is used to extract additional information in initial byte of encoded data item. additionalInformationMask = 0x1f ) func getType(raw byte) cborType { return cborType(raw & typeMask) } func getAdditionalInformation(raw byte) byte { return raw & additionalInformationMask } func isBreakFlag(raw byte) bool { return raw == cborBreakFlag } func parseInitialByte(b byte) (t cborType, ai byte) { return getType(b), getAdditionalInformation(b) } const ( tagNumRFC3339Time = 0 tagNumEpochTime = 1 tagNumUnsignedBignum = 2 tagNumNegativeBignum = 3 tagNumExpectedLaterEncodingBase64URL = 21 tagNumExpectedLaterEncodingBase64 = 22 tagNumExpectedLaterEncodingBase16 = 23 tagNumSelfDescribedCBOR = 55799 ) const ( cborBreakFlag = byte(0xff) cborByteStringWithIndefiniteLengthHead = byte(0x5f) cborTextStringWithIndefiniteLengthHead = byte(0x7f) cborArrayWithIndefiniteLengthHead = byte(0x9f) cborMapWithIndefiniteLengthHead = byte(0xbf) ) var ( cborFalse = []byte{0xf4} cborTrue = []byte{0xf5} cborNil = []byte{0xf6} cborNaN = []byte{0xf9, 0x7e, 0x00} cborPositiveInfinity = []byte{0xf9, 0x7c, 0x00} cborNegativeInfinity = []byte{0xf9, 0xfc, 0x00} ) // validBuiltinTag checks that supported built-in tag numbers are followed by expected content types. func validBuiltinTag(tagNum uint64, contentHead byte) error { t := getType(contentHead) switch tagNum { case tagNumRFC3339Time: // Tag content (date/time text string in RFC 3339 format) must be string type. if t != cborTypeTextString { return newInadmissibleTagContentTypeError( tagNumRFC3339Time, "text string", t.String()) } return nil case tagNumEpochTime: // Tag content (epoch date/time) must be uint, int, or float type. if t != cborTypePositiveInt && t != cborTypeNegativeInt && (contentHead < 0xf9 || contentHead > 0xfb) { return newInadmissibleTagContentTypeError( tagNumEpochTime, "integer or floating-point number", t.String()) } return nil case tagNumUnsignedBignum, tagNumNegativeBignum: // Tag content (bignum) must be byte type. if t != cborTypeByteString { return newInadmissibleTagContentTypeErrorf( fmt.Sprintf( "tag number %d or %d must be followed by byte string, got %s", tagNumUnsignedBignum, tagNumNegativeBignum, t.String(), )) } return nil case tagNumExpectedLaterEncodingBase64URL, tagNumExpectedLaterEncodingBase64, tagNumExpectedLaterEncodingBase16: // From RFC 8949 3.4.5.2: // The data item tagged can be a byte string or any other data item. In the latter // case, the tag applies to all of the byte string data items contained in the data // item, except for those contained in a nested data item tagged with an expected // conversion. return nil } return nil } // Transcoder is a scheme for transcoding a single CBOR encoded data item to or from a different // data format. type Transcoder interface { // Transcode reads the data item in its source format from a Reader and writes a // corresponding representation in its destination format to a Writer. Transcode(dst io.Writer, src io.Reader) error } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/decode.go000066400000000000000000003165531520540370700254230ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "bytes" "encoding" "encoding/base64" "encoding/binary" "encoding/hex" "errors" "fmt" "io" "math" "math/big" "reflect" "strconv" "strings" "time" "unicode/utf8" "github.com/x448/float16" ) // Unmarshal parses the CBOR-encoded data into the value pointed to by v // using default decoding options. If v is nil, not a pointer, or // a nil pointer, Unmarshal returns an error. // // To unmarshal CBOR into a value implementing the Unmarshaler interface, // Unmarshal calls that value's UnmarshalCBOR method with a valid // CBOR value. // // To unmarshal CBOR byte string into a value implementing the // encoding.BinaryUnmarshaler interface, Unmarshal calls that value's // UnmarshalBinary method with decoded CBOR byte string. // // To unmarshal CBOR into a pointer, Unmarshal sets the pointer to nil // if CBOR data is null (0xf6) or undefined (0xf7). Otherwise, Unmarshal // unmarshals CBOR into the value pointed to by the pointer. If the // pointer is nil, Unmarshal creates a new value for it to point to. // // To unmarshal CBOR into an empty interface value, Unmarshal uses the // following rules: // // CBOR booleans decode to bool. // CBOR positive integers decode to uint64. // CBOR negative integers decode to int64 (big.Int if value overflows). // CBOR floating points decode to float64. // CBOR byte strings decode to []byte. // CBOR text strings decode to string. // CBOR arrays decode to []interface{}. // CBOR maps decode to map[interface{}]interface{}. // CBOR null and undefined values decode to nil. // CBOR times (tag 0 and 1) decode to time.Time. // CBOR bignums (tag 2 and 3) decode to big.Int. // CBOR tags with an unrecognized number decode to cbor.Tag // // To unmarshal a CBOR array into a slice, Unmarshal allocates a new slice // if the CBOR array is empty or slice capacity is less than CBOR array length. // Otherwise Unmarshal overwrites existing elements, and sets slice length // to CBOR array length. // // To unmarshal a CBOR array into a Go array, Unmarshal decodes CBOR array // elements into Go array elements. If the Go array is smaller than the // CBOR array, the extra CBOR array elements are discarded. If the CBOR // array is smaller than the Go array, the extra Go array elements are // set to zero values. // // To unmarshal a CBOR array into a struct, struct must have a special field "_" // with struct tag `cbor:",toarray"`. Go array elements are decoded into struct // fields. Any "omitempty" struct field tag option is ignored in this case. // // To unmarshal a CBOR map into a map, Unmarshal allocates a new map only if the // map is nil. Otherwise Unmarshal reuses the existing map and keeps existing // entries. Unmarshal stores key-value pairs from the CBOR map into Go map. // See DecOptions.DupMapKey to enable duplicate map key detection. // // To unmarshal a CBOR map into a struct, Unmarshal matches CBOR map keys to the // keys in the following priority: // // 1. "cbor" key in struct field tag, // 2. "json" key in struct field tag, // 3. struct field name. // // Unmarshal tries an exact match for field name, then a case-insensitive match. // Map key-value pairs without corresponding struct fields are ignored. See // DecOptions.ExtraReturnErrors to return error at unknown field. // // To unmarshal a CBOR text string into a time.Time value, Unmarshal parses text // string formatted in RFC3339. To unmarshal a CBOR integer/float into a // time.Time value, Unmarshal creates an unix time with integer/float as seconds // and fractional seconds since January 1, 1970 UTC. As a special case, Infinite // and NaN float values decode to time.Time's zero value. // // To unmarshal CBOR null (0xf6) and undefined (0xf7) values into a // slice/map/pointer, Unmarshal sets Go value to nil. Because null is often // used to mean "not present", unmarshaling CBOR null and undefined value // into any other Go type has no effect and returns no error. // // Unmarshal supports CBOR tag 55799 (self-describe CBOR), tag 0 and 1 (time), // and tag 2 and 3 (bignum). // // Unmarshal returns ExtraneousDataError error (without decoding into v) // if there are any remaining bytes following the first valid CBOR data item. // See UnmarshalFirst, if you want to unmarshal only the first // CBOR data item without ExtraneousDataError caused by remaining bytes. func Unmarshal(data []byte, v any) error { return defaultDecMode.Unmarshal(data, v) } // UnmarshalFirst parses the first CBOR data item into the value pointed to by v // using default decoding options. Any remaining bytes are returned in rest. // // If v is nil, not a pointer, or a nil pointer, UnmarshalFirst returns an error. // // See the documentation for Unmarshal for details. func UnmarshalFirst(data []byte, v any) (rest []byte, err error) { return defaultDecMode.UnmarshalFirst(data, v) } // Valid checks whether data is a well-formed encoded CBOR data item and // that it complies with default restrictions such as MaxNestedLevels, // MaxArrayElements, MaxMapPairs, etc. // // If there are any remaining bytes after the CBOR data item, // an ExtraneousDataError is returned. // // WARNING: Valid doesn't check if encoded CBOR data item is valid (i.e. validity) // and RFC 8949 distinctly defines what is "Valid" and what is "Well-formed". // // Deprecated: Valid is kept for compatibility and should not be used. // Use Wellformed instead because it has a more appropriate name. func Valid(data []byte) error { return defaultDecMode.Valid(data) } // Wellformed checks whether data is a well-formed encoded CBOR data item and // that it complies with default restrictions such as MaxNestedLevels, // MaxArrayElements, MaxMapPairs, etc. // // If there are any remaining bytes after the CBOR data item, // an ExtraneousDataError is returned. func Wellformed(data []byte) error { return defaultDecMode.Wellformed(data) } // Unmarshaler is the interface implemented by types that wish to unmarshal // CBOR data themselves. The input is a valid CBOR value. UnmarshalCBOR // must copy the CBOR data if it needs to use it after returning. type Unmarshaler interface { UnmarshalCBOR([]byte) error } type unmarshaler interface { unmarshalCBOR([]byte) error } // InvalidUnmarshalError describes an invalid argument passed to Unmarshal. type InvalidUnmarshalError struct { s string } func (e *InvalidUnmarshalError) Error() string { return e.s } // UnmarshalTypeError describes a CBOR value that can't be decoded to a Go type. type UnmarshalTypeError struct { CBORType string // type of CBOR value GoType string // type of Go value it could not be decoded into StructFieldName string // name of the struct field holding the Go value (optional) errorMsg string // additional error message (optional) } func (e *UnmarshalTypeError) Error() string { var s string if e.StructFieldName != "" { s = "cbor: cannot unmarshal " + e.CBORType + " into Go struct field " + e.StructFieldName + " of type " + e.GoType } else { s = "cbor: cannot unmarshal " + e.CBORType + " into Go value of type " + e.GoType } if e.errorMsg != "" { s += " (" + e.errorMsg + ")" } return s } // InvalidMapKeyTypeError describes invalid Go map key type when decoding CBOR map. // For example, Go doesn't allow slice as map key. type InvalidMapKeyTypeError struct { GoType string } func (e *InvalidMapKeyTypeError) Error() string { return "cbor: invalid map key type: " + e.GoType } // DupMapKeyError describes detected duplicate map key in CBOR map. type DupMapKeyError struct { Key any Index int } func (e *DupMapKeyError) Error() string { return fmt.Sprintf("cbor: found duplicate map key %#v at map element index %d", e.Key, e.Index) } // UnknownFieldError describes detected unknown field in CBOR map when decoding to Go struct. type UnknownFieldError struct { Index int } func (e *UnknownFieldError) Error() string { return fmt.Sprintf("cbor: found unknown field at map element index %d", e.Index) } // UnacceptableDataItemError is returned when unmarshaling a CBOR input that contains a data item // that is not acceptable to a specific CBOR-based application protocol ("invalid or unexpected" as // described in RFC 8949 Section 5 Paragraph 3). type UnacceptableDataItemError struct { CBORType string Message string } func (e UnacceptableDataItemError) Error() string { return fmt.Sprintf("cbor: data item of cbor type %s is not accepted by protocol: %s", e.CBORType, e.Message) } // ByteStringExpectedFormatError is returned when unmarshaling CBOR byte string fails when // using non-default ByteStringExpectedFormat decoding option that makes decoder expect // a specified format such as base64, hex, etc. type ByteStringExpectedFormatError struct { expectedFormatOption ByteStringExpectedFormatMode err error } func newByteStringExpectedFormatError(expectedFormatOption ByteStringExpectedFormatMode, err error) *ByteStringExpectedFormatError { return &ByteStringExpectedFormatError{expectedFormatOption, err} } func (e *ByteStringExpectedFormatError) Error() string { switch e.expectedFormatOption { case ByteStringExpectedBase64URL: return fmt.Sprintf("cbor: failed to decode base64url from byte string: %s", e.err) case ByteStringExpectedBase64: return fmt.Sprintf("cbor: failed to decode base64 from byte string: %s", e.err) case ByteStringExpectedBase16: return fmt.Sprintf("cbor: failed to decode hex from byte string: %s", e.err) default: return fmt.Sprintf("cbor: failed to decode byte string in expected format %d: %s", e.expectedFormatOption, e.err) } } func (e *ByteStringExpectedFormatError) Unwrap() error { return e.err } // InadmissibleTagContentTypeError is returned when unmarshaling built-in CBOR tags // fails because of inadmissible type for tag content. Currently, the built-in // CBOR tags in this codec are tags 0-3 and 21-23. // See "Tag validity" in RFC 8949 Section 5.3.2. type InadmissibleTagContentTypeError struct { s string tagNum int expectedTagContentType string gotTagContentType string } func newInadmissibleTagContentTypeError( tagNum int, expectedTagContentType string, gotTagContentType string, ) *InadmissibleTagContentTypeError { return &InadmissibleTagContentTypeError{ tagNum: tagNum, expectedTagContentType: expectedTagContentType, gotTagContentType: gotTagContentType, } } func newInadmissibleTagContentTypeErrorf(s string) *InadmissibleTagContentTypeError { return &InadmissibleTagContentTypeError{s: "cbor: " + s} //nolint:goconst // ignore "cbor" } func (e *InadmissibleTagContentTypeError) Error() string { if e.s == "" { return fmt.Sprintf( "cbor: tag number %d must be followed by %s, got %s", e.tagNum, e.expectedTagContentType, e.gotTagContentType, ) } return e.s } // DupMapKeyMode specifies how to enforce duplicate map key. Two map keys are considered duplicates if: // 1. When decoding into a struct, both keys match the same struct field. The keys are also // considered duplicates if neither matches any field and decoding to interface{} would produce // equal (==) values for both keys. // 2. When decoding into a map, both keys are equal (==) when decoded into values of the // destination map's key type. type DupMapKeyMode int const ( // DupMapKeyQuiet doesn't enforce duplicate map key. Decoder quietly (no error) // uses faster of "keep first" or "keep last" depending on Go data type and other factors. DupMapKeyQuiet DupMapKeyMode = iota // DupMapKeyEnforcedAPF enforces detection and rejection of duplicate map keys. // APF means "Allow Partial Fill" and the destination map or struct can be partially filled. // If a duplicate map key is detected, DupMapKeyError is returned without further decoding // of the map. It's the caller's responsibility to respond to DupMapKeyError by // discarding the partially filled result if their protocol requires it. // WARNING: using DupMapKeyEnforcedAPF will decrease performance and increase memory use. DupMapKeyEnforcedAPF maxDupMapKeyMode ) func (dmkm DupMapKeyMode) valid() bool { return dmkm >= 0 && dmkm < maxDupMapKeyMode } // IndefLengthMode specifies whether to allow indefinite length items. type IndefLengthMode int const ( // IndefLengthAllowed allows indefinite length items. IndefLengthAllowed IndefLengthMode = iota // IndefLengthForbidden disallows indefinite length items. IndefLengthForbidden maxIndefLengthMode ) func (m IndefLengthMode) valid() bool { return m >= 0 && m < maxIndefLengthMode } // TagsMode specifies whether to allow CBOR tags. type TagsMode int const ( // TagsAllowed allows CBOR tags. TagsAllowed TagsMode = iota // TagsForbidden disallows CBOR tags. TagsForbidden maxTagsMode ) func (tm TagsMode) valid() bool { return tm >= 0 && tm < maxTagsMode } // IntDecMode specifies which Go type (int64, uint64, or big.Int) should // be used when decoding CBOR integers (major type 0 and 1) to Go interface{}. type IntDecMode int const ( // IntDecConvertNone affects how CBOR integers (major type 0 and 1) decode to Go interface{}. // It decodes CBOR unsigned integer (major type 0) to: // - uint64 // It decodes CBOR negative integer (major type 1) to: // - int64 if value fits // - big.Int or *big.Int (see BigIntDecMode) if value doesn't fit into int64 IntDecConvertNone IntDecMode = iota // IntDecConvertSigned affects how CBOR integers (major type 0 and 1) decode to Go interface{}. // It decodes CBOR integers (major type 0 and 1) to: // - int64 if value fits // - big.Int or *big.Int (see BigIntDecMode) if value < math.MinInt64 // - return UnmarshalTypeError if value > math.MaxInt64 // Deprecated: IntDecConvertSigned should not be used. // Please use other options, such as IntDecConvertSignedOrError, IntDecConvertSignedOrBigInt, IntDecConvertNone. IntDecConvertSigned // IntDecConvertSignedOrFail affects how CBOR integers (major type 0 and 1) decode to Go interface{}. // It decodes CBOR integers (major type 0 and 1) to: // - int64 if value fits // - return UnmarshalTypeError if value doesn't fit into int64 IntDecConvertSignedOrFail // IntDecConvertSignedOrBigInt affects how CBOR integers (major type 0 and 1) decode to Go interface{}. // It makes CBOR integers (major type 0 and 1) decode to: // - int64 if value fits // - big.Int or *big.Int (see BigIntDecMode) if value doesn't fit into int64 IntDecConvertSignedOrBigInt maxIntDec ) func (idm IntDecMode) valid() bool { return idm >= 0 && idm < maxIntDec } // MapKeyByteStringMode specifies how to decode CBOR byte string (major type 2) // as Go map key when decoding CBOR map key into an empty Go interface value. // Specifically, this option applies when decoding CBOR map into // - Go empty interface, or // - Go map with empty interface as key type. // The CBOR map key types handled by this option are // - byte string // - tagged byte string // - nested tagged byte string type MapKeyByteStringMode int const ( // MapKeyByteStringAllowed allows CBOR byte string to be decoded as Go map key. // Since Go doesn't allow []byte as map key, CBOR byte string is decoded to // ByteString which has underlying string type. // This is the default setting. MapKeyByteStringAllowed MapKeyByteStringMode = iota // MapKeyByteStringForbidden forbids CBOR byte string being decoded as Go map key. // Attempting to decode CBOR byte string as map key into empty interface value // returns a decoding error. MapKeyByteStringForbidden maxMapKeyByteStringMode ) func (mkbsm MapKeyByteStringMode) valid() bool { return mkbsm >= 0 && mkbsm < maxMapKeyByteStringMode } // ExtraDecErrorCond specifies extra conditions that should be treated as errors. type ExtraDecErrorCond uint // ExtraDecErrorNone indicates no extra error condition. const ExtraDecErrorNone ExtraDecErrorCond = 0 const ( // ExtraDecErrorUnknownField indicates error condition when destination // Go struct doesn't have a field matching a CBOR map key. ExtraDecErrorUnknownField ExtraDecErrorCond = 1 << iota maxExtraDecError ) func (ec ExtraDecErrorCond) valid() bool { return ec < maxExtraDecError } // UTF8Mode option specifies if decoder should // decode CBOR Text containing invalid UTF-8 string. type UTF8Mode int const ( // UTF8RejectInvalid rejects CBOR Text containing // invalid UTF-8 string. UTF8RejectInvalid UTF8Mode = iota // UTF8DecodeInvalid allows decoding CBOR Text containing // invalid UTF-8 string. UTF8DecodeInvalid maxUTF8Mode ) func (um UTF8Mode) valid() bool { return um >= 0 && um < maxUTF8Mode } // FieldNameMatchingMode specifies how string keys in CBOR maps are matched to Go struct field names. type FieldNameMatchingMode int const ( // FieldNameMatchingPreferCaseSensitive prefers to decode map items into struct fields whose names (or tag // names) exactly match the item's key. If there is no such field, a map item will be decoded into a field whose // name is a case-insensitive match for the item's key. FieldNameMatchingPreferCaseSensitive FieldNameMatchingMode = iota // FieldNameMatchingCaseSensitive decodes map items only into a struct field whose name (or tag name) is an // exact match for the item's key. FieldNameMatchingCaseSensitive maxFieldNameMatchingMode ) func (fnmm FieldNameMatchingMode) valid() bool { return fnmm >= 0 && fnmm < maxFieldNameMatchingMode } // BigIntDecMode specifies how to decode CBOR bignum to Go interface{}. type BigIntDecMode int const ( // BigIntDecodeValue makes CBOR bignum decode to big.Int (instead of *big.Int) // when unmarshaling into a Go interface{}. BigIntDecodeValue BigIntDecMode = iota // BigIntDecodePointer makes CBOR bignum decode to *big.Int when // unmarshaling into a Go interface{}. BigIntDecodePointer maxBigIntDecMode ) func (bidm BigIntDecMode) valid() bool { return bidm >= 0 && bidm < maxBigIntDecMode } // ByteStringToStringMode specifies the behavior when decoding a CBOR byte string into a Go string. type ByteStringToStringMode int const ( // ByteStringToStringForbidden generates an error on an attempt to decode a CBOR byte string into a Go string. ByteStringToStringForbidden ByteStringToStringMode = iota // ByteStringToStringAllowed permits decoding a CBOR byte string into a Go string. ByteStringToStringAllowed // ByteStringToStringAllowedWithExpectedLaterEncoding permits decoding a CBOR byte string // into a Go string. Also, if the byte string is enclosed (directly or indirectly) by one of // the "expected later encoding" tags (numbers 21 through 23), the destination string will // be populated by applying the designated text encoding to the contents of the input byte // string. ByteStringToStringAllowedWithExpectedLaterEncoding maxByteStringToStringMode ) func (bstsm ByteStringToStringMode) valid() bool { return bstsm >= 0 && bstsm < maxByteStringToStringMode } // FieldNameByteStringMode specifies the behavior when decoding a CBOR byte string map key as a Go struct field name. type FieldNameByteStringMode int const ( // FieldNameByteStringForbidden generates an error on an attempt to decode a CBOR byte string map key as a Go struct field name. FieldNameByteStringForbidden FieldNameByteStringMode = iota // FieldNameByteStringAllowed permits CBOR byte string map keys to be recognized as Go struct field names. FieldNameByteStringAllowed maxFieldNameByteStringMode ) func (fnbsm FieldNameByteStringMode) valid() bool { return fnbsm >= 0 && fnbsm < maxFieldNameByteStringMode } // UnrecognizedTagToAnyMode specifies how to decode unrecognized CBOR tag into an empty interface (any). // Currently, recognized CBOR tag numbers are 0, 1, 2, 3, or registered by TagSet. type UnrecognizedTagToAnyMode int const ( // UnrecognizedTagNumAndContentToAny decodes CBOR tag number and tag content to cbor.Tag // when decoding unrecognized CBOR tag into an empty interface. UnrecognizedTagNumAndContentToAny UnrecognizedTagToAnyMode = iota // UnrecognizedTagContentToAny decodes only CBOR tag content (into its default type) // when decoding unrecognized CBOR tag into an empty interface. UnrecognizedTagContentToAny maxUnrecognizedTagToAny ) func (uttam UnrecognizedTagToAnyMode) valid() bool { return uttam >= 0 && uttam < maxUnrecognizedTagToAny } // TimeTagToAnyMode specifies how to decode CBOR tag 0 and 1 into an empty interface (any). // Based on the specified mode, Unmarshal can return a time.Time value or a time string in a specific format. type TimeTagToAnyMode int const ( // TimeTagToTime decodes CBOR tag 0 and 1 into a time.Time value // when decoding tag 0 or 1 into an empty interface. TimeTagToTime TimeTagToAnyMode = iota // TimeTagToRFC3339 decodes CBOR tag 0 and 1 into a time string in RFC3339 format // when decoding tag 0 or 1 into an empty interface. TimeTagToRFC3339 // TimeTagToRFC3339Nano decodes CBOR tag 0 and 1 into a time string in RFC3339Nano format // when decoding tag 0 or 1 into an empty interface. TimeTagToRFC3339Nano maxTimeTagToAnyMode ) func (tttam TimeTagToAnyMode) valid() bool { return tttam >= 0 && tttam < maxTimeTagToAnyMode } // SimpleValueRegistry is a registry of unmarshaling behaviors for each possible CBOR simple value // number (0...23 and 32...255). type SimpleValueRegistry struct { rejected [256]bool } // WithRejectedSimpleValue registers the given simple value as rejected. If the simple value is // encountered in a CBOR input during unmarshaling, an UnacceptableDataItemError is returned. func WithRejectedSimpleValue(sv SimpleValue) func(*SimpleValueRegistry) error { return func(r *SimpleValueRegistry) error { if sv >= 24 && sv <= 31 { return fmt.Errorf("cbor: cannot set analog for reserved simple value %d", sv) } r.rejected[sv] = true return nil } } // Creates a new SimpleValueRegistry. The registry state is initialized by executing the provided // functions in order against a registry that is pre-populated with the defaults for all well-formed // simple value numbers. func NewSimpleValueRegistryFromDefaults(fns ...func(*SimpleValueRegistry) error) (*SimpleValueRegistry, error) { var r SimpleValueRegistry for _, fn := range fns { if err := fn(&r); err != nil { return nil, err } } return &r, nil } // NaNMode specifies how to decode floating-point values (major type 7, additional information 25 // through 27) representing NaN (not-a-number). type NaNMode int const ( // NaNDecodeAllowed will decode NaN values to Go float32 or float64. NaNDecodeAllowed NaNMode = iota // NaNDecodeForbidden will return an UnacceptableDataItemError on an attempt to decode a NaN value. NaNDecodeForbidden maxNaNDecode ) func (ndm NaNMode) valid() bool { return ndm >= 0 && ndm < maxNaNDecode } // InfMode specifies how to decode floating-point values (major type 7, additional information 25 // through 27) representing positive or negative infinity. type InfMode int const ( // InfDecodeAllowed will decode infinite values to Go float32 or float64. InfDecodeAllowed InfMode = iota // InfDecodeForbidden will return an UnacceptableDataItemError on an attempt to decode an // infinite value. InfDecodeForbidden maxInfDecode ) func (idm InfMode) valid() bool { return idm >= 0 && idm < maxInfDecode } // ByteStringToTimeMode specifies the behavior when decoding a CBOR byte string into a Go time.Time. type ByteStringToTimeMode int const ( // ByteStringToTimeForbidden generates an error on an attempt to decode a CBOR byte string into a Go time.Time. ByteStringToTimeForbidden ByteStringToTimeMode = iota // ByteStringToTimeAllowed permits decoding a CBOR byte string into a Go time.Time. ByteStringToTimeAllowed maxByteStringToTimeMode ) func (bttm ByteStringToTimeMode) valid() bool { return bttm >= 0 && bttm < maxByteStringToTimeMode } // ByteStringExpectedFormatMode specifies how to decode CBOR byte string into Go byte slice // when the byte string is NOT enclosed in CBOR tag 21, 22, or 23. An error is returned if // the CBOR byte string does not contain the expected format (e.g. base64) specified. // For tags 21-23, see "Expected Later Encoding for CBOR-to-JSON Converters" // in RFC 8949 Section 3.4.5.2. type ByteStringExpectedFormatMode int const ( // ByteStringExpectedFormatNone copies the unmodified CBOR byte string into Go byte slice // if the byte string is not tagged by CBOR tag 21-23. ByteStringExpectedFormatNone ByteStringExpectedFormatMode = iota // ByteStringExpectedBase64URL expects CBOR byte strings to contain base64url-encoded bytes // if the byte string is not tagged by CBOR tag 21-23. The decoder will attempt to decode // the base64url-encoded bytes into Go slice. ByteStringExpectedBase64URL // ByteStringExpectedBase64 expects CBOR byte strings to contain base64-encoded bytes // if the byte string is not tagged by CBOR tag 21-23. The decoder will attempt to decode // the base64-encoded bytes into Go slice. ByteStringExpectedBase64 // ByteStringExpectedBase16 expects CBOR byte strings to contain base16-encoded bytes // if the byte string is not tagged by CBOR tag 21-23. The decoder will attempt to decode // the base16-encoded bytes into Go slice. ByteStringExpectedBase16 maxByteStringExpectedFormatMode ) func (bsefm ByteStringExpectedFormatMode) valid() bool { return bsefm >= 0 && bsefm < maxByteStringExpectedFormatMode } // BignumTagMode specifies whether or not the "bignum" tags 2 and 3 (RFC 8949 Section 3.4.3) can be // decoded. type BignumTagMode int const ( // BignumTagAllowed allows bignum tags to be decoded. BignumTagAllowed BignumTagMode = iota // BignumTagForbidden produces an UnacceptableDataItemError during Unmarshal if a bignum tag // is encountered in the input. BignumTagForbidden maxBignumTag ) func (btm BignumTagMode) valid() bool { return btm >= 0 && btm < maxBignumTag } // BinaryUnmarshalerMode specifies how to decode into types that implement // encoding.BinaryUnmarshaler. type BinaryUnmarshalerMode int const ( // BinaryUnmarshalerByteString will invoke UnmarshalBinary on the contents of a CBOR byte // string when decoding into a value that implements BinaryUnmarshaler. BinaryUnmarshalerByteString BinaryUnmarshalerMode = iota // BinaryUnmarshalerNone does not recognize BinaryUnmarshaler implementations during decode. BinaryUnmarshalerNone maxBinaryUnmarshalerMode ) func (bum BinaryUnmarshalerMode) valid() bool { return bum >= 0 && bum < maxBinaryUnmarshalerMode } // TextUnmarshalerMode specifies how to decode into types that implement // encoding.TextUnmarshaler. type TextUnmarshalerMode int const ( // TextUnmarshalerNone does not recognize TextUnmarshaler implementations during decode. TextUnmarshalerNone TextUnmarshalerMode = iota // TextUnmarshalerTextString will invoke UnmarshalText on the contents of a CBOR text // string when decoding into a value that implements TextUnmarshaler. TextUnmarshalerTextString maxTextUnmarshalerMode ) func (tum TextUnmarshalerMode) valid() bool { return tum >= 0 && tum < maxTextUnmarshalerMode } // DecOptions specifies decoding options. type DecOptions struct { // DupMapKey specifies whether to enforce duplicate map key. DupMapKey DupMapKeyMode // TimeTag specifies whether or not untagged data items, or tags other // than tag 0 and tag 1, can be decoded to time.Time. If tag 0 or tag 1 // appears in an input, the type of its content is always validated as // specified in RFC 8949. That behavior is not controlled by this // option. The behavior of the supported modes are: // // DecTagIgnored (default): Untagged text strings and text strings // enclosed in tags other than 0 and 1 are decoded as though enclosed // in tag 0. Untagged unsigned integers, negative integers, and // floating-point numbers (or those enclosed in tags other than 0 and // 1) are decoded as though enclosed in tag 1. Decoding a tag other // than 0 or 1 enclosing simple values null or undefined into a // time.Time does not modify the destination value. // // DecTagOptional: Untagged text strings are decoded as though // enclosed in tag 0. Untagged unsigned integers, negative integers, // and floating-point numbers are decoded as though enclosed in tag // 1. Tags other than 0 and 1 will produce an error on attempts to // decode them into a time.Time. // // DecTagRequired: Only tags 0 and 1 can be decoded to time.Time. Any // other input will produce an error. TimeTag DecTagMode // MaxNestedLevels specifies the max nested levels allowed for any combination of CBOR array, maps, and tags. // Default is 32 levels and it can be set to [4, 65535]. Note that higher maximum levels of nesting can // require larger amounts of stack to deserialize. Don't increase this higher than you require. MaxNestedLevels int // MaxArrayElements specifies the max number of elements for CBOR arrays. // Default is 128*1024=131072 and it can be set to [16, 2147483647] MaxArrayElements int // MaxMapPairs specifies the max number of key-value pairs for CBOR maps. // Default is 128*1024=131072 and it can be set to [16, 2147483647] MaxMapPairs int // IndefLength specifies whether to allow indefinite length CBOR items. IndefLength IndefLengthMode // TagsMd specifies whether to allow CBOR tags (major type 6). TagsMd TagsMode // IntDec specifies which Go integer type (int64, uint64, or [big.Int]) to use // when decoding CBOR int (major type 0 and 1) to Go interface{}. IntDec IntDecMode // MapKeyByteString specifies how to decode CBOR byte string as map key // when decoding CBOR map with byte string key into an empty interface value. // By default, an error is returned when attempting to decode CBOR byte string // as map key because Go doesn't allow []byte as map key. MapKeyByteString MapKeyByteStringMode // ExtraReturnErrors specifies extra conditions that should be treated as errors. ExtraReturnErrors ExtraDecErrorCond // DefaultMapType specifies Go map type to create and decode to // when unmarshaling CBOR into an empty interface value. // By default, unmarshal uses map[interface{}]interface{}. DefaultMapType reflect.Type // UTF8 specifies if decoder should decode CBOR Text containing invalid UTF-8. // By default, unmarshal rejects CBOR text containing invalid UTF-8. UTF8 UTF8Mode // FieldNameMatching specifies how string keys in CBOR maps are matched to Go struct field names. FieldNameMatching FieldNameMatchingMode // BigIntDec specifies how to decode CBOR bignum to Go interface{}. BigIntDec BigIntDecMode // DefaultByteStringType is the Go type that should be produced when decoding a CBOR byte // string into an empty interface value. Types to which a []byte is convertible are valid // for this option, except for array and pointer-to-array types. If nil, the default is // []byte. DefaultByteStringType reflect.Type // ByteStringToString specifies the behavior when decoding a CBOR byte string into a Go string. ByteStringToString ByteStringToStringMode // FieldNameByteString specifies the behavior when decoding a CBOR byte string map key as a // Go struct field name. FieldNameByteString FieldNameByteStringMode // UnrecognizedTagToAny specifies how to decode unrecognized CBOR tag into an empty interface. // Currently, recognized CBOR tag numbers are 0, 1, 2, 3, or registered by TagSet. UnrecognizedTagToAny UnrecognizedTagToAnyMode // TimeTagToAny specifies how to decode CBOR tag 0 and 1 into an empty interface (any). // Based on the specified mode, Unmarshal can return a time.Time value or a time string in a specific format. TimeTagToAny TimeTagToAnyMode // SimpleValues is an immutable mapping from each CBOR simple value to a corresponding // unmarshal behavior. If nil, the simple values false, true, null, and undefined are mapped // to the Go analog values false, true, nil, and nil, respectively, and all other simple // values N (except the reserved simple values 24 through 31) are mapped to // cbor.SimpleValue(N). In other words, all well-formed simple values can be decoded. // // Users may provide a custom SimpleValueRegistry constructed via // NewSimpleValueRegistryFromDefaults. SimpleValues *SimpleValueRegistry // NaN specifies how to decode floating-point values (major type 7, additional information // 25 through 27) representing NaN (not-a-number). NaN NaNMode // Inf specifies how to decode floating-point values (major type 7, additional information // 25 through 27) representing positive or negative infinity. Inf InfMode // ByteStringToTime specifies how to decode CBOR byte string into Go time.Time. ByteStringToTime ByteStringToTimeMode // ByteStringExpectedFormat specifies how to decode CBOR byte string into Go byte slice // when the byte string is NOT enclosed in CBOR tag 21, 22, or 23. An error is returned if // the CBOR byte string does not contain the expected format (e.g. base64) specified. // For tags 21-23, see "Expected Later Encoding for CBOR-to-JSON Converters" // in RFC 8949 Section 3.4.5.2. ByteStringExpectedFormat ByteStringExpectedFormatMode // BignumTag specifies whether or not the "bignum" tags 2 and 3 (RFC 8949 Section 3.4.3) can // be decoded. Unlike BigIntDec, this option applies to all bignum tags encountered in a // CBOR input, independent of the type of the destination value of a particular Unmarshal // operation. BignumTag BignumTagMode // BinaryUnmarshaler specifies how to decode into types that implement // encoding.BinaryUnmarshaler. BinaryUnmarshaler BinaryUnmarshalerMode // TextUnmarshaler specifies how to decode into types that implement // encoding.TextUnmarshaler. TextUnmarshaler TextUnmarshalerMode // JSONUnmarshalerTranscoder sets the transcoding scheme used to unmarshal types that // implement json.Unmarshaler but do not also implement cbor.Unmarshaler. If nil, decoding // behavior is not influenced by whether or not a type implements json.Unmarshaler. JSONUnmarshalerTranscoder Transcoder } // DecMode returns DecMode with immutable options and no tags (safe for concurrency). func (opts DecOptions) DecMode() (DecMode, error) { //nolint:gocritic // ignore hugeParam return opts.decMode() } // validForTags checks that the provided tag set is compatible with these options and returns a // non-nil error if and only if the provided tag set is incompatible. func (opts DecOptions) validForTags(tags TagSet) error { //nolint:gocritic // ignore hugeParam if opts.TagsMd == TagsForbidden { return errors.New("cbor: cannot create DecMode with TagSet when TagsMd is TagsForbidden") } if tags == nil { return errors.New("cbor: cannot create DecMode with nil value as TagSet") } if opts.ByteStringToString == ByteStringToStringAllowedWithExpectedLaterEncoding || opts.ByteStringExpectedFormat != ByteStringExpectedFormatNone { for _, tagNum := range []uint64{ tagNumExpectedLaterEncodingBase64URL, tagNumExpectedLaterEncodingBase64, tagNumExpectedLaterEncodingBase16, } { if rt := tags.getTypeFromTagNum([]uint64{tagNum}); rt != nil { return fmt.Errorf("cbor: DecMode with non-default StringExpectedEncoding or ByteSliceExpectedEncoding treats tag %d as built-in and conflicts with the provided TagSet's registration of %v", tagNum, rt) } } } return nil } // DecModeWithTags returns DecMode with options and tags that are both immutable (safe for concurrency). func (opts DecOptions) DecModeWithTags(tags TagSet) (DecMode, error) { //nolint:gocritic // ignore hugeParam if err := opts.validForTags(tags); err != nil { return nil, err } dm, err := opts.decMode() if err != nil { return nil, err } // Copy tags ts := tagSet(make(map[reflect.Type]*tagItem)) syncTags := tags.(*syncTagSet) syncTags.RLock() for contentType, tag := range syncTags.t { if tag.opts.DecTag != DecTagIgnored { ts[contentType] = tag } } syncTags.RUnlock() if len(ts) > 0 { dm.tags = ts } return dm, nil } // DecModeWithSharedTags returns DecMode with immutable options and mutable shared tags (safe for concurrency). func (opts DecOptions) DecModeWithSharedTags(tags TagSet) (DecMode, error) { //nolint:gocritic // ignore hugeParam if err := opts.validForTags(tags); err != nil { return nil, err } dm, err := opts.decMode() if err != nil { return nil, err } dm.tags = tags return dm, nil } const ( defaultMaxArrayElements = 131072 minMaxArrayElements = 16 maxMaxArrayElements = 2147483647 defaultMaxMapPairs = 131072 minMaxMapPairs = 16 maxMaxMapPairs = 2147483647 defaultMaxNestedLevels = 32 minMaxNestedLevels = 4 maxMaxNestedLevels = 65535 ) var defaultSimpleValues = func() *SimpleValueRegistry { registry, err := NewSimpleValueRegistryFromDefaults() if err != nil { panic(err) } return registry }() //nolint:gocyclo // Each option comes with some manageable boilerplate func (opts DecOptions) decMode() (*decMode, error) { //nolint:gocritic // ignore hugeParam if !opts.DupMapKey.valid() { return nil, errors.New("cbor: invalid DupMapKey " + strconv.Itoa(int(opts.DupMapKey))) } if !opts.TimeTag.valid() { return nil, errors.New("cbor: invalid TimeTag " + strconv.Itoa(int(opts.TimeTag))) } if !opts.IndefLength.valid() { return nil, errors.New("cbor: invalid IndefLength " + strconv.Itoa(int(opts.IndefLength))) } if !opts.TagsMd.valid() { return nil, errors.New("cbor: invalid TagsMd " + strconv.Itoa(int(opts.TagsMd))) } if !opts.IntDec.valid() { return nil, errors.New("cbor: invalid IntDec " + strconv.Itoa(int(opts.IntDec))) } if !opts.MapKeyByteString.valid() { return nil, errors.New("cbor: invalid MapKeyByteString " + strconv.Itoa(int(opts.MapKeyByteString))) } if opts.MaxNestedLevels == 0 { opts.MaxNestedLevels = defaultMaxNestedLevels } else if opts.MaxNestedLevels < minMaxNestedLevels || opts.MaxNestedLevels > maxMaxNestedLevels { return nil, errors.New("cbor: invalid MaxNestedLevels " + strconv.Itoa(opts.MaxNestedLevels) + " (range is [" + strconv.Itoa(minMaxNestedLevels) + ", " + strconv.Itoa(maxMaxNestedLevels) + "])") } if opts.MaxArrayElements == 0 { opts.MaxArrayElements = defaultMaxArrayElements } else if opts.MaxArrayElements < minMaxArrayElements || opts.MaxArrayElements > maxMaxArrayElements { return nil, errors.New("cbor: invalid MaxArrayElements " + strconv.Itoa(opts.MaxArrayElements) + " (range is [" + strconv.Itoa(minMaxArrayElements) + ", " + strconv.Itoa(maxMaxArrayElements) + "])") } if opts.MaxMapPairs == 0 { opts.MaxMapPairs = defaultMaxMapPairs } else if opts.MaxMapPairs < minMaxMapPairs || opts.MaxMapPairs > maxMaxMapPairs { return nil, errors.New("cbor: invalid MaxMapPairs " + strconv.Itoa(opts.MaxMapPairs) + " (range is [" + strconv.Itoa(minMaxMapPairs) + ", " + strconv.Itoa(maxMaxMapPairs) + "])") } if !opts.ExtraReturnErrors.valid() { return nil, errors.New("cbor: invalid ExtraReturnErrors " + strconv.Itoa(int(opts.ExtraReturnErrors))) } if opts.DefaultMapType != nil && opts.DefaultMapType.Kind() != reflect.Map { return nil, fmt.Errorf("cbor: invalid DefaultMapType %s", opts.DefaultMapType) } if !opts.UTF8.valid() { return nil, errors.New("cbor: invalid UTF8 " + strconv.Itoa(int(opts.UTF8))) } if !opts.FieldNameMatching.valid() { return nil, errors.New("cbor: invalid FieldNameMatching " + strconv.Itoa(int(opts.FieldNameMatching))) } if !opts.BigIntDec.valid() { return nil, errors.New("cbor: invalid BigIntDec " + strconv.Itoa(int(opts.BigIntDec))) } if opts.DefaultByteStringType != nil && opts.DefaultByteStringType.Kind() != reflect.String && (opts.DefaultByteStringType.Kind() != reflect.Slice || opts.DefaultByteStringType.Elem().Kind() != reflect.Uint8) { return nil, fmt.Errorf("cbor: invalid DefaultByteStringType: %s is not of kind string or []uint8", opts.DefaultByteStringType) } if !opts.ByteStringToString.valid() { return nil, errors.New("cbor: invalid ByteStringToString " + strconv.Itoa(int(opts.ByteStringToString))) } if !opts.FieldNameByteString.valid() { return nil, errors.New("cbor: invalid FieldNameByteString " + strconv.Itoa(int(opts.FieldNameByteString))) } if !opts.UnrecognizedTagToAny.valid() { return nil, errors.New("cbor: invalid UnrecognizedTagToAnyMode " + strconv.Itoa(int(opts.UnrecognizedTagToAny))) } simpleValues := opts.SimpleValues if simpleValues == nil { simpleValues = defaultSimpleValues } if !opts.TimeTagToAny.valid() { return nil, errors.New("cbor: invalid TimeTagToAny " + strconv.Itoa(int(opts.TimeTagToAny))) } if !opts.NaN.valid() { return nil, errors.New("cbor: invalid NaNDec " + strconv.Itoa(int(opts.NaN))) } if !opts.Inf.valid() { return nil, errors.New("cbor: invalid InfDec " + strconv.Itoa(int(opts.Inf))) } if !opts.ByteStringToTime.valid() { return nil, errors.New("cbor: invalid ByteStringToTime " + strconv.Itoa(int(opts.ByteStringToTime))) } if !opts.ByteStringExpectedFormat.valid() { return nil, errors.New("cbor: invalid ByteStringExpectedFormat " + strconv.Itoa(int(opts.ByteStringExpectedFormat))) } if !opts.BignumTag.valid() { return nil, errors.New("cbor: invalid BignumTag " + strconv.Itoa(int(opts.BignumTag))) } if !opts.BinaryUnmarshaler.valid() { return nil, errors.New("cbor: invalid BinaryUnmarshaler " + strconv.Itoa(int(opts.BinaryUnmarshaler))) } if !opts.TextUnmarshaler.valid() { return nil, errors.New("cbor: invalid TextUnmarshaler " + strconv.Itoa(int(opts.TextUnmarshaler))) } dm := decMode{ dupMapKey: opts.DupMapKey, timeTag: opts.TimeTag, maxNestedLevels: opts.MaxNestedLevels, maxArrayElements: opts.MaxArrayElements, maxMapPairs: opts.MaxMapPairs, indefLength: opts.IndefLength, tagsMd: opts.TagsMd, intDec: opts.IntDec, mapKeyByteString: opts.MapKeyByteString, extraReturnErrors: opts.ExtraReturnErrors, defaultMapType: opts.DefaultMapType, utf8: opts.UTF8, fieldNameMatching: opts.FieldNameMatching, bigIntDec: opts.BigIntDec, defaultByteStringType: opts.DefaultByteStringType, byteStringToString: opts.ByteStringToString, fieldNameByteString: opts.FieldNameByteString, unrecognizedTagToAny: opts.UnrecognizedTagToAny, timeTagToAny: opts.TimeTagToAny, simpleValues: simpleValues, nanDec: opts.NaN, infDec: opts.Inf, byteStringToTime: opts.ByteStringToTime, byteStringExpectedFormat: opts.ByteStringExpectedFormat, bignumTag: opts.BignumTag, binaryUnmarshaler: opts.BinaryUnmarshaler, textUnmarshaler: opts.TextUnmarshaler, jsonUnmarshalerTranscoder: opts.JSONUnmarshalerTranscoder, } return &dm, nil } // DecMode is the main interface for CBOR decoding. type DecMode interface { // Unmarshal parses the CBOR-encoded data into the value pointed to by v // using the decoding mode. If v is nil, not a pointer, or a nil pointer, // Unmarshal returns an error. // // See the documentation for Unmarshal for details. Unmarshal(data []byte, v any) error // UnmarshalFirst parses the first CBOR data item into the value pointed to by v // using the decoding mode. Any remaining bytes are returned in rest. // // If v is nil, not a pointer, or a nil pointer, UnmarshalFirst returns an error. // // See the documentation for Unmarshal for details. UnmarshalFirst(data []byte, v any) (rest []byte, err error) // Valid checks whether data is a well-formed encoded CBOR data item and // that it complies with configurable restrictions such as MaxNestedLevels, // MaxArrayElements, MaxMapPairs, etc. // // If there are any remaining bytes after the CBOR data item, // an ExtraneousDataError is returned. // // WARNING: Valid doesn't check if encoded CBOR data item is valid (i.e. validity) // and RFC 8949 distinctly defines what is "Valid" and what is "Well-formed". // // Deprecated: Valid is kept for compatibility and should not be used. // Use Wellformed instead because it has a more appropriate name. Valid(data []byte) error // Wellformed checks whether data is a well-formed encoded CBOR data item and // that it complies with configurable restrictions such as MaxNestedLevels, // MaxArrayElements, MaxMapPairs, etc. // // If there are any remaining bytes after the CBOR data item, // an ExtraneousDataError is returned. Wellformed(data []byte) error // NewDecoder returns a new decoder that reads from r using dm DecMode. NewDecoder(r io.Reader) *Decoder // DecOptions returns user specified options used to create this DecMode. DecOptions() DecOptions } type decMode struct { tags tagProvider dupMapKey DupMapKeyMode timeTag DecTagMode maxNestedLevels int maxArrayElements int maxMapPairs int indefLength IndefLengthMode tagsMd TagsMode intDec IntDecMode mapKeyByteString MapKeyByteStringMode extraReturnErrors ExtraDecErrorCond defaultMapType reflect.Type utf8 UTF8Mode fieldNameMatching FieldNameMatchingMode bigIntDec BigIntDecMode defaultByteStringType reflect.Type byteStringToString ByteStringToStringMode fieldNameByteString FieldNameByteStringMode unrecognizedTagToAny UnrecognizedTagToAnyMode timeTagToAny TimeTagToAnyMode simpleValues *SimpleValueRegistry nanDec NaNMode infDec InfMode byteStringToTime ByteStringToTimeMode byteStringExpectedFormat ByteStringExpectedFormatMode bignumTag BignumTagMode binaryUnmarshaler BinaryUnmarshalerMode textUnmarshaler TextUnmarshalerMode jsonUnmarshalerTranscoder Transcoder } var defaultDecMode, _ = DecOptions{}.decMode() // DecOptions returns user specified options used to create this DecMode. func (dm *decMode) DecOptions() DecOptions { simpleValues := dm.simpleValues if simpleValues == defaultSimpleValues { // Users can't explicitly set this to defaultSimpleValues. It must have been nil in // the original DecOptions. simpleValues = nil } return DecOptions{ DupMapKey: dm.dupMapKey, TimeTag: dm.timeTag, MaxNestedLevels: dm.maxNestedLevels, MaxArrayElements: dm.maxArrayElements, MaxMapPairs: dm.maxMapPairs, IndefLength: dm.indefLength, TagsMd: dm.tagsMd, IntDec: dm.intDec, MapKeyByteString: dm.mapKeyByteString, ExtraReturnErrors: dm.extraReturnErrors, DefaultMapType: dm.defaultMapType, UTF8: dm.utf8, FieldNameMatching: dm.fieldNameMatching, BigIntDec: dm.bigIntDec, DefaultByteStringType: dm.defaultByteStringType, ByteStringToString: dm.byteStringToString, FieldNameByteString: dm.fieldNameByteString, UnrecognizedTagToAny: dm.unrecognizedTagToAny, TimeTagToAny: dm.timeTagToAny, SimpleValues: simpleValues, NaN: dm.nanDec, Inf: dm.infDec, ByteStringToTime: dm.byteStringToTime, ByteStringExpectedFormat: dm.byteStringExpectedFormat, BignumTag: dm.bignumTag, BinaryUnmarshaler: dm.binaryUnmarshaler, TextUnmarshaler: dm.textUnmarshaler, JSONUnmarshalerTranscoder: dm.jsonUnmarshalerTranscoder, } } // Unmarshal parses the CBOR-encoded data into the value pointed to by v // using dm decoding mode. If v is nil, not a pointer, or a nil pointer, // Unmarshal returns an error. // // See the documentation for Unmarshal for details. func (dm *decMode) Unmarshal(data []byte, v any) error { d := decoder{data: data, dm: dm} // Check well-formedness. off := d.off // Save offset before data validation err := d.wellformed(false, false) // don't allow any extra data after valid data item. d.off = off // Restore offset if err != nil { return err } return d.value(v) } // UnmarshalFirst parses the first CBOR data item into the value pointed to by v // using dm decoding mode. Any remaining bytes are returned in rest. // // If v is nil, not a pointer, or a nil pointer, UnmarshalFirst returns an error. // // See the documentation for Unmarshal for details. func (dm *decMode) UnmarshalFirst(data []byte, v any) (rest []byte, err error) { d := decoder{data: data, dm: dm} // check well-formedness. off := d.off // Save offset before data validation err = d.wellformed(true, false) // allow extra data after well-formed data item d.off = off // Restore offset // If it is well-formed, parse the value. This is structured like this to allow // better test coverage if err == nil { err = d.value(v) } // If either wellformed or value returned an error, do not return rest bytes if err != nil { return nil, err } // Return the rest of the data slice (which might be len 0) return d.data[d.off:], nil } // Valid checks whether data is a well-formed encoded CBOR data item and // that it complies with configurable restrictions such as MaxNestedLevels, // MaxArrayElements, MaxMapPairs, etc. // // If there are any remaining bytes after the CBOR data item, // an ExtraneousDataError is returned. // // WARNING: Valid doesn't check if encoded CBOR data item is valid (i.e. validity) // and RFC 8949 distinctly defines what is "Valid" and what is "Well-formed". // // Deprecated: Valid is kept for compatibility and should not be used. // Use Wellformed instead because it has a more appropriate name. func (dm *decMode) Valid(data []byte) error { return dm.Wellformed(data) } // Wellformed checks whether data is a well-formed encoded CBOR data item and // that it complies with configurable restrictions such as MaxNestedLevels, // MaxArrayElements, MaxMapPairs, etc. // // If there are any remaining bytes after the CBOR data item, // an ExtraneousDataError is returned. func (dm *decMode) Wellformed(data []byte) error { d := decoder{data: data, dm: dm} return d.wellformed(false, false) } // NewDecoder returns a new decoder that reads from r using dm DecMode. func (dm *decMode) NewDecoder(r io.Reader) *Decoder { return &Decoder{r: r, d: decoder{dm: dm}} } type decoder struct { data []byte off int // next read offset in data dm *decMode // expectedLaterEncodingTags stores a stack of encountered "Expected Later Encoding" tags, // if any. // // The "Expected Later Encoding" tags (21 to 23) are valid for any data item. When decoding // byte strings, the effective encoding comes from the tag nearest to the byte string being // decoded. For example, the effective encoding of the byte string 21(22(h'41')) would be // controlled by tag 22,and in the data item 23(h'42', 22([21(h'43')])]) the effective // encoding of the byte strings h'42' and h'43' would be controlled by tag 23 and 21, // respectively. expectedLaterEncodingTags []uint64 } // value decodes CBOR data item into the value pointed to by v. // If CBOR data item fails to be decoded into v, // error is returned and offset is moved to the next CBOR data item. // Precondition: d.data contains at least one well-formed CBOR data item. func (d *decoder) value(v any) error { // v can't be nil, non-pointer, or nil pointer value. if v == nil { return &InvalidUnmarshalError{"cbor: Unmarshal(nil)"} } rv := reflect.ValueOf(v) if rv.Kind() != reflect.Pointer { return &InvalidUnmarshalError{"cbor: Unmarshal(non-pointer " + rv.Type().String() + ")"} } else if rv.IsNil() { return &InvalidUnmarshalError{"cbor: Unmarshal(nil " + rv.Type().String() + ")"} } rv = rv.Elem() return d.parseToValue(rv, getTypeInfo(rv.Type())) } // parseToValue decodes CBOR data to value. It assumes data is well-formed, // and does not perform bounds checking. func (d *decoder) parseToValue(v reflect.Value, tInfo *typeInfo) error { //nolint:gocyclo // Decode CBOR nil or CBOR undefined to pointer value by setting pointer value to nil. if d.nextCBORNil() && v.Kind() == reflect.Pointer { d.skip() v.SetZero() return nil } if tInfo.spclType == specialTypeIface { if !v.IsNil() { // Use value type v = v.Elem() tInfo = getTypeInfo(v.Type()) } else { //nolint:gocritic // Create and use registered type if CBOR data is registered tag if d.dm.tags != nil && d.nextCBORType() == cborTypeTag { off := d.off var tagNums []uint64 for d.nextCBORType() == cborTypeTag { _, _, tagNum := d.getHead() tagNums = append(tagNums, tagNum) } d.off = off registeredType := d.dm.tags.getTypeFromTagNum(tagNums) if registeredType != nil { if registeredType.Implements(tInfo.nonPtrType) || reflect.PointerTo(registeredType).Implements(tInfo.nonPtrType) { v.Set(reflect.New(registeredType)) v = v.Elem() tInfo = getTypeInfo(registeredType) } } } } } // Create new value for the pointer v to point to. // At this point, CBOR value is not nil/undefined if v is a pointer. for v.Kind() == reflect.Pointer { if v.IsNil() { if !v.CanSet() { d.skip() return errors.New("cbor: cannot set new value for " + v.Type().String()) } v.Set(reflect.New(v.Type().Elem())) } v = v.Elem() } // Strip self-described CBOR tag number. for d.nextCBORType() == cborTypeTag { off := d.off _, _, tagNum := d.getHead() if tagNum != tagNumSelfDescribedCBOR { d.off = off break } } // Check validity of supported built-in tags. off := d.off for d.nextCBORType() == cborTypeTag { _, _, tagNum := d.getHead() if err := validBuiltinTag(tagNum, d.data[d.off]); err != nil { d.skip() return err } } d.off = off if tInfo.spclType != specialTypeNone { switch tInfo.spclType { case specialTypeEmptyIface: iv, err := d.parse(false) // Skipped self-described CBOR tag number already. if iv != nil { v.Set(reflect.ValueOf(iv)) } return err case specialTypeTag: return d.parseToTag(v) case specialTypeTime: if d.nextCBORNil() { // Decoding CBOR null and undefined to time.Time is no-op. d.skip() return nil } tm, ok, err := d.parseToTime() if err != nil { return err } if ok { v.Set(reflect.ValueOf(tm)) } return nil case specialTypeUnmarshalerIface: return d.parseToUnmarshaler(v) case specialTypeUnexportedUnmarshalerIface: return d.parseToUnexportedUnmarshaler(v) case specialTypeJSONUnmarshalerIface: // This special type implies that the type does not also implement // cbor.Umarshaler. if d.dm.jsonUnmarshalerTranscoder == nil { break } return d.parseToJSONUnmarshaler(v) } } // Check registered tag number if tagItem := d.getRegisteredTagItem(tInfo.nonPtrType); tagItem != nil { t := d.nextCBORType() if t != cborTypeTag { if tagItem.opts.DecTag == DecTagRequired { d.skip() // Required tag number is absent, skip entire tag return &UnmarshalTypeError{ CBORType: t.String(), GoType: tInfo.typ.String(), errorMsg: "expect CBOR tag value"} } } else if err := d.validRegisteredTagNums(tagItem); err != nil { d.skip() // Skip tag content return err } } t := d.nextCBORType() switch t { case cborTypePositiveInt: _, _, val := d.getHead() return fillPositiveInt(t, val, v) case cborTypeNegativeInt: _, _, val := d.getHead() if val > math.MaxInt64 { // CBOR negative integer overflows int64, use big.Int to store value. bi := new(big.Int) bi.SetUint64(val) bi.Add(bi, big.NewInt(1)) bi.Neg(bi) if tInfo.nonPtrType == typeBigInt { v.Set(reflect.ValueOf(*bi)) return nil } return &UnmarshalTypeError{ CBORType: t.String(), GoType: tInfo.nonPtrType.String(), errorMsg: bi.String() + " overflows Go's int64", } } nValue := int64(-1) ^ int64(val) return fillNegativeInt(t, nValue, v) case cborTypeByteString: b, copied := d.parseByteString() b, converted, err := d.applyByteStringTextConversion(b, v.Type()) if err != nil { return err } copied = copied || converted return fillByteString(t, b, !copied, v, d.dm.byteStringToString, d.dm.binaryUnmarshaler, d.dm.textUnmarshaler) case cborTypeTextString: b, err := d.parseTextString() if err != nil { return err } return fillTextString(t, b, v, d.dm.textUnmarshaler) case cborTypePrimitives: _, ai, val := d.getHead() switch ai { case additionalInformationAsFloat16: f := float64(float16.Frombits(uint16(val)).Float32()) return fillFloat(t, f, v) case additionalInformationAsFloat32: f := float64(math.Float32frombits(uint32(val))) return fillFloat(t, f, v) case additionalInformationAsFloat64: f := math.Float64frombits(val) return fillFloat(t, f, v) default: // ai <= 24 if d.dm.simpleValues.rejected[SimpleValue(val)] { return &UnacceptableDataItemError{ CBORType: t.String(), Message: "simple value " + strconv.FormatInt(int64(val), 10) + " is not recognized", } } switch ai { case additionalInformationAsFalse, additionalInformationAsTrue: return fillBool(t, ai == additionalInformationAsTrue, v) case additionalInformationAsNull, additionalInformationAsUndefined: return fillNil(t, v) default: return fillPositiveInt(t, val, v) } } case cborTypeTag: _, _, tagNum := d.getHead() switch tagNum { case tagNumUnsignedBignum: // Bignum (tag 2) can be decoded to uint, int, float, slice, array, or big.Int. b, copied := d.parseByteString() bi := new(big.Int).SetBytes(b) if tInfo.nonPtrType == typeBigInt { v.Set(reflect.ValueOf(*bi)) return nil } if tInfo.nonPtrKind == reflect.Slice || tInfo.nonPtrKind == reflect.Array { return fillByteString(t, b, !copied, v, ByteStringToStringForbidden, d.dm.binaryUnmarshaler, d.dm.textUnmarshaler) } if bi.IsUint64() { return fillPositiveInt(t, bi.Uint64(), v) } return &UnmarshalTypeError{ CBORType: t.String(), GoType: tInfo.nonPtrType.String(), errorMsg: bi.String() + " overflows " + v.Type().String(), } case tagNumNegativeBignum: // Bignum (tag 3) can be decoded to int, float, slice, array, or big.Int. b, copied := d.parseByteString() bi := new(big.Int).SetBytes(b) bi.Add(bi, big.NewInt(1)) bi.Neg(bi) if tInfo.nonPtrType == typeBigInt { v.Set(reflect.ValueOf(*bi)) return nil } if tInfo.nonPtrKind == reflect.Slice || tInfo.nonPtrKind == reflect.Array { return fillByteString(t, b, !copied, v, ByteStringToStringForbidden, d.dm.binaryUnmarshaler, d.dm.textUnmarshaler) } if bi.IsInt64() { return fillNegativeInt(t, bi.Int64(), v) } return &UnmarshalTypeError{ CBORType: t.String(), GoType: tInfo.nonPtrType.String(), errorMsg: bi.String() + " overflows " + v.Type().String(), } case tagNumExpectedLaterEncodingBase64URL, tagNumExpectedLaterEncodingBase64, tagNumExpectedLaterEncodingBase16: // If conversion for interoperability with text encodings is not configured, // treat tags 21-23 as unregistered tags. if d.dm.byteStringToString == ByteStringToStringAllowedWithExpectedLaterEncoding || d.dm.byteStringExpectedFormat != ByteStringExpectedFormatNone { d.expectedLaterEncodingTags = append(d.expectedLaterEncodingTags, tagNum) defer func() { d.expectedLaterEncodingTags = d.expectedLaterEncodingTags[:len(d.expectedLaterEncodingTags)-1] }() } } return d.parseToValue(v, tInfo) case cborTypeArray: if tInfo.nonPtrKind == reflect.Slice { return d.parseArrayToSlice(v, tInfo) } else if tInfo.nonPtrKind == reflect.Array { return d.parseArrayToArray(v, tInfo) } else if tInfo.nonPtrKind == reflect.Struct { return d.parseArrayToStruct(v, tInfo) } d.skip() return &UnmarshalTypeError{CBORType: t.String(), GoType: tInfo.nonPtrType.String()} case cborTypeMap: if tInfo.nonPtrKind == reflect.Struct { return d.parseMapToStruct(v, tInfo) } else if tInfo.nonPtrKind == reflect.Map { return d.parseMapToMap(v, tInfo) } d.skip() return &UnmarshalTypeError{CBORType: t.String(), GoType: tInfo.nonPtrType.String()} } return nil } func (d *decoder) parseToTag(v reflect.Value) error { if d.nextCBORNil() { // Decoding CBOR null and undefined to cbor.Tag is no-op. d.skip() return nil } t := d.nextCBORType() if t != cborTypeTag { d.skip() return &UnmarshalTypeError{CBORType: t.String(), GoType: typeTag.String()} } // Unmarshal tag number _, _, num := d.getHead() // Unmarshal tag content content, err := d.parse(false) if err != nil { return err } v.Set(reflect.ValueOf(Tag{num, content})) return nil } // parseToTime decodes the current data item as a time.Time. The bool return value is false if and // only if the destination value should remain unmodified. func (d *decoder) parseToTime() (time.Time, bool, error) { // Verify that tag number or absence of tag number is acceptable to specified timeTag. if t := d.nextCBORType(); t == cborTypeTag { if d.dm.timeTag == DecTagIgnored { // Skip all enclosing tags for t == cborTypeTag { d.getHead() t = d.nextCBORType() } if d.nextCBORNil() { d.skip() return time.Time{}, false, nil } } else { // Read tag number _, _, tagNum := d.getHead() if tagNum != 0 && tagNum != 1 { d.skip() // skip tag content return time.Time{}, false, errors.New("cbor: wrong tag number for time.Time, got " + strconv.Itoa(int(tagNum)) + ", expect 0 or 1") } } } else { if d.dm.timeTag == DecTagRequired { d.skip() return time.Time{}, false, &UnmarshalTypeError{CBORType: t.String(), GoType: typeTime.String(), errorMsg: "expect CBOR tag value"} } } switch t := d.nextCBORType(); t { case cborTypeByteString: if d.dm.byteStringToTime == ByteStringToTimeAllowed { b, _ := d.parseByteString() t, err := time.Parse(time.RFC3339, string(b)) if err != nil { return time.Time{}, false, fmt.Errorf("cbor: cannot set %q for time.Time: %w", string(b), err) } return t, true, nil } return time.Time{}, false, &UnmarshalTypeError{CBORType: t.String(), GoType: typeTime.String()} case cborTypeTextString: s, err := d.parseTextString() if err != nil { return time.Time{}, false, err } t, err := time.Parse(time.RFC3339, string(s)) if err != nil { return time.Time{}, false, errors.New("cbor: cannot set " + string(s) + " for time.Time: " + err.Error()) } return t, true, nil case cborTypePositiveInt: _, _, val := d.getHead() if val > math.MaxInt64 { return time.Time{}, false, &UnmarshalTypeError{ CBORType: t.String(), GoType: typeTime.String(), errorMsg: fmt.Sprintf("%d overflows Go's int64", val), } } return time.Unix(int64(val), 0), true, nil case cborTypeNegativeInt: _, _, val := d.getHead() if val > math.MaxInt64 { if val == math.MaxUint64 { // Maximum absolute value representable by negative integer is 2^64, // not 2^64-1, so it overflows uint64. return time.Time{}, false, &UnmarshalTypeError{ CBORType: t.String(), GoType: typeTime.String(), errorMsg: "-18446744073709551616 overflows Go's int64", } } return time.Time{}, false, &UnmarshalTypeError{ CBORType: t.String(), GoType: typeTime.String(), errorMsg: fmt.Sprintf("-%d overflows Go's int64", val+1), } } return time.Unix(int64(-1)^int64(val), 0), true, nil case cborTypePrimitives: _, ai, val := d.getHead() var f float64 switch ai { case additionalInformationAsFloat16: f = float64(float16.Frombits(uint16(val)).Float32()) case additionalInformationAsFloat32: f = float64(math.Float32frombits(uint32(val))) case additionalInformationAsFloat64: f = math.Float64frombits(val) default: return time.Time{}, false, &UnmarshalTypeError{CBORType: t.String(), GoType: typeTime.String()} } if math.IsNaN(f) || math.IsInf(f, 0) { // https://www.rfc-editor.org/rfc/rfc8949.html#section-3.4.2-6 return time.Time{}, true, nil } seconds, fractional := math.Modf(f) return time.Unix(int64(seconds), int64(fractional*1e9)), true, nil default: return time.Time{}, false, &UnmarshalTypeError{CBORType: t.String(), GoType: typeTime.String()} } } // parseToUnmarshaler parses CBOR data to value implementing Unmarshaler interface. // It assumes data is well-formed, and does not perform bounds checking. func (d *decoder) parseToUnmarshaler(v reflect.Value) error { if d.nextCBORNil() && v.Kind() == reflect.Pointer && v.IsNil() { d.skip() return nil } if v.Kind() != reflect.Pointer && v.CanAddr() { v = v.Addr() } if u, ok := v.Interface().(Unmarshaler); ok { start := d.off d.skip() return u.UnmarshalCBOR(d.data[start:d.off]) } d.skip() return errors.New("cbor: failed to assert " + v.Type().String() + " as cbor.Unmarshaler") } // parseToUnexportedUnmarshaler parses CBOR data to value implementing unmarshaler interface. // It assumes data is well-formed, and does not perform bounds checking. func (d *decoder) parseToUnexportedUnmarshaler(v reflect.Value) error { if d.nextCBORNil() && v.Kind() == reflect.Pointer && v.IsNil() { d.skip() return nil } if v.Kind() != reflect.Pointer && v.CanAddr() { v = v.Addr() } if u, ok := v.Interface().(unmarshaler); ok { start := d.off d.skip() return u.unmarshalCBOR(d.data[start:d.off]) } d.skip() return errors.New("cbor: failed to assert " + v.Type().String() + " as cbor.unmarshaler") } // parseToJSONUnmarshaler parses CBOR data to be transcoded to JSON and passed to the value's // implementation of the json.Unmarshaler interface. It assumes data is well-formed, and does not // perform bounds checking. func (d *decoder) parseToJSONUnmarshaler(v reflect.Value) error { if d.nextCBORNil() && v.Kind() == reflect.Pointer && v.IsNil() { d.skip() return nil } if v.Kind() != reflect.Pointer && v.CanAddr() { v = v.Addr() } if u, ok := v.Interface().(jsonUnmarshaler); ok { start := d.off d.skip() e := getEncodeBuffer() defer putEncodeBuffer(e) if err := d.dm.jsonUnmarshalerTranscoder.Transcode(e, bytes.NewReader(d.data[start:d.off])); err != nil { return &TranscodeError{err: err, rtype: v.Type(), sourceFormat: "cbor", targetFormat: "json"} } return u.UnmarshalJSON(e.Bytes()) } d.skip() return errors.New("cbor: failed to assert " + v.Type().String() + " as json.Unmarshaler") } // parse parses CBOR data and returns value in default Go type. // It assumes data is well-formed, and does not perform bounds checking. func (d *decoder) parse(skipSelfDescribedTag bool) (any, error) { //nolint:gocyclo // Strip self-described CBOR tag number. if skipSelfDescribedTag { for d.nextCBORType() == cborTypeTag { off := d.off _, _, tagNum := d.getHead() if tagNum != tagNumSelfDescribedCBOR { d.off = off break } } } // Check validity of supported built-in tags. off := d.off for d.nextCBORType() == cborTypeTag { _, _, tagNum := d.getHead() if err := validBuiltinTag(tagNum, d.data[d.off]); err != nil { d.skip() return nil, err } } d.off = off t := d.nextCBORType() switch t { case cborTypePositiveInt: _, _, val := d.getHead() switch d.dm.intDec { case IntDecConvertNone: return val, nil case IntDecConvertSigned, IntDecConvertSignedOrFail: if val > math.MaxInt64 { return nil, &UnmarshalTypeError{ CBORType: t.String(), GoType: reflect.TypeOf(int64(0)).String(), errorMsg: strconv.FormatUint(val, 10) + " overflows Go's int64", } } return int64(val), nil case IntDecConvertSignedOrBigInt: if val > math.MaxInt64 { bi := new(big.Int).SetUint64(val) if d.dm.bigIntDec == BigIntDecodePointer { return bi, nil } return *bi, nil } return int64(val), nil default: // not reachable } case cborTypeNegativeInt: _, _, val := d.getHead() if val > math.MaxInt64 { // CBOR negative integer value overflows Go int64, use big.Int instead. bi := new(big.Int).SetUint64(val) bi.Add(bi, big.NewInt(1)) bi.Neg(bi) if d.dm.intDec == IntDecConvertSignedOrFail { return nil, &UnmarshalTypeError{ CBORType: t.String(), GoType: reflect.TypeOf(int64(0)).String(), errorMsg: bi.String() + " overflows Go's int64", } } if d.dm.bigIntDec == BigIntDecodePointer { return bi, nil } return *bi, nil } nValue := int64(-1) ^ int64(val) return nValue, nil case cborTypeByteString: b, copied := d.parseByteString() var effectiveByteStringType = d.dm.defaultByteStringType if effectiveByteStringType == nil { effectiveByteStringType = typeByteSlice } b, converted, err := d.applyByteStringTextConversion(b, effectiveByteStringType) if err != nil { return nil, err } copied = copied || converted switch effectiveByteStringType { case typeByteSlice: if copied { return b, nil } clone := make([]byte, len(b)) copy(clone, b) return clone, nil case typeString: return string(b), nil default: if copied || d.dm.defaultByteStringType.Kind() == reflect.String { // Avoid an unnecessary copy since the conversion to string must // copy the underlying bytes. return reflect.ValueOf(b).Convert(d.dm.defaultByteStringType).Interface(), nil } clone := make([]byte, len(b)) copy(clone, b) return reflect.ValueOf(clone).Convert(d.dm.defaultByteStringType).Interface(), nil } case cborTypeTextString: b, err := d.parseTextString() if err != nil { return nil, err } return string(b), nil case cborTypeTag: tagOff := d.off _, _, tagNum := d.getHead() contentOff := d.off switch tagNum { case tagNumRFC3339Time, tagNumEpochTime: d.off = tagOff tm, _, err := d.parseToTime() if err != nil { return nil, err } switch d.dm.timeTagToAny { case TimeTagToTime: return tm, nil case TimeTagToRFC3339: if tagNum == 1 { tm = tm.UTC() } // Call time.MarshalText() to format decoded time to RFC3339 format, // and return error on time value that cannot be represented in // RFC3339 format. E.g. year cannot exceed 9999, etc. text, err := tm.Truncate(time.Second).MarshalText() if err != nil { return nil, fmt.Errorf("cbor: decoded time cannot be represented in RFC3339 format: %v", err) } return string(text), nil case TimeTagToRFC3339Nano: if tagNum == 1 { tm = tm.UTC() } // Call time.MarshalText() to format decoded time to RFC3339 format, // and return error on time value that cannot be represented in // RFC3339 format with sub-second precision. text, err := tm.MarshalText() if err != nil { return nil, fmt.Errorf("cbor: decoded time cannot be represented in RFC3339 format with sub-second precision: %v", err) } return string(text), nil default: // not reachable } case tagNumUnsignedBignum: b, _ := d.parseByteString() bi := new(big.Int).SetBytes(b) if d.dm.bigIntDec == BigIntDecodePointer { return bi, nil } return *bi, nil case tagNumNegativeBignum: b, _ := d.parseByteString() bi := new(big.Int).SetBytes(b) bi.Add(bi, big.NewInt(1)) bi.Neg(bi) if d.dm.bigIntDec == BigIntDecodePointer { return bi, nil } return *bi, nil case tagNumExpectedLaterEncodingBase64URL, tagNumExpectedLaterEncodingBase64, tagNumExpectedLaterEncodingBase16: // If conversion for interoperability with text encodings is not configured, // treat tags 21-23 as unregistered tags. if d.dm.byteStringToString == ByteStringToStringAllowedWithExpectedLaterEncoding || d.dm.byteStringExpectedFormat != ByteStringExpectedFormatNone { d.expectedLaterEncodingTags = append(d.expectedLaterEncodingTags, tagNum) defer func() { d.expectedLaterEncodingTags = d.expectedLaterEncodingTags[:len(d.expectedLaterEncodingTags)-1] }() return d.parse(false) } } if d.dm.tags != nil { // Parse to specified type if tag number is registered. tagNums := []uint64{tagNum} for d.nextCBORType() == cborTypeTag { _, _, num := d.getHead() tagNums = append(tagNums, num) } registeredType := d.dm.tags.getTypeFromTagNum(tagNums) if registeredType != nil { d.off = tagOff rv := reflect.New(registeredType) if err := d.parseToValue(rv.Elem(), getTypeInfo(registeredType)); err != nil { return nil, err } return rv.Elem().Interface(), nil } } // Parse tag content d.off = contentOff content, err := d.parse(false) if err != nil { return nil, err } if d.dm.unrecognizedTagToAny == UnrecognizedTagContentToAny { return content, nil } return Tag{tagNum, content}, nil case cborTypePrimitives: _, ai, val := d.getHead() if ai <= 24 && d.dm.simpleValues.rejected[SimpleValue(val)] { return nil, &UnacceptableDataItemError{ CBORType: t.String(), Message: "simple value " + strconv.FormatInt(int64(val), 10) + " is not recognized", } } if ai < 20 || ai == 24 { return SimpleValue(val), nil } switch ai { case additionalInformationAsFalse, additionalInformationAsTrue: return (ai == additionalInformationAsTrue), nil case additionalInformationAsNull, additionalInformationAsUndefined: return nil, nil case additionalInformationAsFloat16: f := float64(float16.Frombits(uint16(val)).Float32()) return f, nil case additionalInformationAsFloat32: f := float64(math.Float32frombits(uint32(val))) return f, nil case additionalInformationAsFloat64: f := math.Float64frombits(val) return f, nil } case cborTypeArray: return d.parseArray() case cborTypeMap: if d.dm.defaultMapType != nil { m := reflect.New(d.dm.defaultMapType) err := d.parseToValue(m, getTypeInfo(m.Elem().Type())) if err != nil { return nil, err } return m.Elem().Interface(), nil } return d.parseMap() } return nil, nil } // parseByteString parses a CBOR encoded byte string. The returned byte slice // may be backed directly by the input. The second return value will be true if // and only if the slice is backed by a copy of the input. Callers are // responsible for making a copy if necessary. func (d *decoder) parseByteString() ([]byte, bool) { _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() if !indefiniteLength { b := d.data[d.off : d.off+int(val)] d.off += int(val) return b, false } // Process indefinite length string chunks. b := []byte{} for !d.foundBreak() { _, _, val = d.getHead() b = append(b, d.data[d.off:d.off+int(val)]...) d.off += int(val) } return b, true } // applyByteStringTextConversion converts bytes read from a byte string to or from a configured text // encoding. If no transformation was performed (because it was not required), the original byte // slice is returned and the bool return value is false. Otherwise, a new slice containing the // converted bytes is returned along with the bool value true. func (d *decoder) applyByteStringTextConversion( src []byte, dstType reflect.Type, ) ( dst []byte, transformed bool, err error, ) { switch dstType.Kind() { case reflect.String: if d.dm.byteStringToString != ByteStringToStringAllowedWithExpectedLaterEncoding || len(d.expectedLaterEncodingTags) == 0 { return src, false, nil } switch d.expectedLaterEncodingTags[len(d.expectedLaterEncodingTags)-1] { case tagNumExpectedLaterEncodingBase64URL: encoded := make([]byte, base64.RawURLEncoding.EncodedLen(len(src))) base64.RawURLEncoding.Encode(encoded, src) return encoded, true, nil case tagNumExpectedLaterEncodingBase64: encoded := make([]byte, base64.StdEncoding.EncodedLen(len(src))) base64.StdEncoding.Encode(encoded, src) return encoded, true, nil case tagNumExpectedLaterEncodingBase16: encoded := make([]byte, hex.EncodedLen(len(src))) hex.Encode(encoded, src) return encoded, true, nil default: // If this happens, there is a bug: the decoder has pushed an invalid // "expected later encoding" tag to the stack. panic(fmt.Sprintf("unrecognized expected later encoding tag: %d", d.expectedLaterEncodingTags)) } case reflect.Slice: if dstType.Elem().Kind() != reflect.Uint8 || len(d.expectedLaterEncodingTags) > 0 { // Either the destination is not a slice of bytes, or the encoder that // produced the input indicated an expected text encoding tag and therefore // the content of the byte string has NOT been text encoded. return src, false, nil } switch d.dm.byteStringExpectedFormat { case ByteStringExpectedBase64URL: decoded := make([]byte, base64.RawURLEncoding.DecodedLen(len(src))) n, err := base64.RawURLEncoding.Decode(decoded, src) if err != nil { return nil, false, newByteStringExpectedFormatError(ByteStringExpectedBase64URL, err) } return decoded[:n], true, nil case ByteStringExpectedBase64: decoded := make([]byte, base64.StdEncoding.DecodedLen(len(src))) n, err := base64.StdEncoding.Decode(decoded, src) if err != nil { return nil, false, newByteStringExpectedFormatError(ByteStringExpectedBase64, err) } return decoded[:n], true, nil case ByteStringExpectedBase16: decoded := make([]byte, hex.DecodedLen(len(src))) n, err := hex.Decode(decoded, src) if err != nil { return nil, false, newByteStringExpectedFormatError(ByteStringExpectedBase16, err) } return decoded[:n], true, nil } } return src, false, nil } // parseTextString parses CBOR encoded text string. It returns a byte slice // to prevent creating an extra copy of string. Caller should wrap returned // byte slice as string when needed. func (d *decoder) parseTextString() ([]byte, error) { _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() if !indefiniteLength { b := d.data[d.off : d.off+int(val)] d.off += int(val) if d.dm.utf8 == UTF8RejectInvalid && !utf8.Valid(b) { return nil, &SemanticError{"cbor: invalid UTF-8 string"} } return b, nil } // Process indefinite length string chunks. b := []byte{} for !d.foundBreak() { _, _, val = d.getHead() x := d.data[d.off : d.off+int(val)] d.off += int(val) if d.dm.utf8 == UTF8RejectInvalid && !utf8.Valid(x) { for !d.foundBreak() { d.skip() // Skip remaining chunk on error } return nil, &SemanticError{"cbor: invalid UTF-8 string"} } b = append(b, x...) } return b, nil } func (d *decoder) parseArray() ([]any, error) { _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() hasSize := !indefiniteLength count := int(val) if !hasSize { count = d.numOfItemsUntilBreak() // peek ahead to get array size to preallocate slice for better performance } v := make([]any, count) var e any var err, lastErr error for i := 0; (hasSize && i < count) || (!hasSize && !d.foundBreak()); i++ { if e, lastErr = d.parse(true); lastErr != nil { if err == nil { err = lastErr } continue } v[i] = e } return v, err } func (d *decoder) parseArrayToSlice(v reflect.Value, tInfo *typeInfo) error { _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() hasSize := !indefiniteLength count := int(val) if !hasSize { count = d.numOfItemsUntilBreak() // peek ahead to get array size to preallocate slice for better performance } if v.IsNil() || v.Cap() < count || count == 0 { v.Set(reflect.MakeSlice(tInfo.nonPtrType, count, count)) } v.SetLen(count) var err error for i := 0; (hasSize && i < count) || (!hasSize && !d.foundBreak()); i++ { if lastErr := d.parseToValue(v.Index(i), tInfo.elemTypeInfo); lastErr != nil { if err == nil { err = lastErr } } } return err } func (d *decoder) parseArrayToArray(v reflect.Value, tInfo *typeInfo) error { _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() hasSize := !indefiniteLength count := int(val) gi := 0 vLen := v.Len() var err error for ci := 0; (hasSize && ci < count) || (!hasSize && !d.foundBreak()); ci++ { if gi < vLen { // Read CBOR array element and set array element if lastErr := d.parseToValue(v.Index(gi), tInfo.elemTypeInfo); lastErr != nil { if err == nil { err = lastErr } } gi++ } else { d.skip() // Skip remaining CBOR array element } } // Set remaining Go array elements to zero values. if gi < vLen { for ; gi < vLen; gi++ { v.Index(gi).SetZero() } } return err } func (d *decoder) parseMap() (any, error) { _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() hasSize := !indefiniteLength count := int(val) m := make(map[any]any) var k, e any var err, lastErr error keyCount := 0 for i := 0; (hasSize && i < count) || (!hasSize && !d.foundBreak()); i++ { // Parse CBOR map key. if k, lastErr = d.parse(true); lastErr != nil { if err == nil { err = lastErr } d.skip() continue } // Detect if CBOR map key can be used as Go map key. rv := reflect.ValueOf(k) if !isHashableValue(rv) { var converted bool if d.dm.mapKeyByteString == MapKeyByteStringAllowed { k, converted = convertByteSliceToByteString(k) } if !converted { if err == nil { err = &InvalidMapKeyTypeError{rv.Type().String()} } d.skip() continue } } // Parse CBOR map value. if e, lastErr = d.parse(true); lastErr != nil { if err == nil { err = lastErr } continue } // Add key-value pair to Go map. m[k] = e // Detect duplicate map key. if d.dm.dupMapKey == DupMapKeyEnforcedAPF { newKeyCount := len(m) if newKeyCount == keyCount { m[k] = nil err = &DupMapKeyError{k, i} i++ // skip the rest of the map for ; (hasSize && i < count) || (!hasSize && !d.foundBreak()); i++ { d.skip() // Skip map key d.skip() // Skip map value } return m, err } keyCount = newKeyCount } } return m, err } func (d *decoder) parseMapToMap(v reflect.Value, tInfo *typeInfo) error { //nolint:gocyclo _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() hasSize := !indefiniteLength count := int(val) if v.IsNil() { mapsize := count if !hasSize { mapsize = 0 } v.Set(reflect.MakeMapWithSize(tInfo.nonPtrType, mapsize)) } keyType, eleType := tInfo.keyTypeInfo.typ, tInfo.elemTypeInfo.typ reuseKey, reuseEle := isImmutableKind(tInfo.keyTypeInfo.kind), isImmutableKind(tInfo.elemTypeInfo.kind) var keyValue, eleValue reflect.Value keyIsInterfaceType := keyType == typeIntf // If key type is interface{}, need to check if key value is hashable. var err, lastErr error keyCount := v.Len() var existingKeys map[any]bool // Store existing map keys, used for detecting duplicate map key. if d.dm.dupMapKey == DupMapKeyEnforcedAPF { existingKeys = make(map[any]bool, keyCount) if keyCount > 0 { vKeys := v.MapKeys() for i := 0; i < len(vKeys); i++ { existingKeys[vKeys[i].Interface()] = true } } } for i := 0; (hasSize && i < count) || (!hasSize && !d.foundBreak()); i++ { // Parse CBOR map key. if !keyValue.IsValid() { keyValue = reflect.New(keyType).Elem() } else if !reuseKey { keyValue.SetZero() } if lastErr = d.parseToValue(keyValue, tInfo.keyTypeInfo); lastErr != nil { if err == nil { err = lastErr } d.skip() continue } // Detect if CBOR map key can be used as Go map key. if keyIsInterfaceType && keyValue.Elem().IsValid() { if !isHashableValue(keyValue.Elem()) { var converted bool if d.dm.mapKeyByteString == MapKeyByteStringAllowed { var k any k, converted = convertByteSliceToByteString(keyValue.Elem().Interface()) if converted { keyValue.Set(reflect.ValueOf(k)) } } if !converted { if err == nil { err = &InvalidMapKeyTypeError{keyValue.Elem().Type().String()} } d.skip() continue } } } // Parse CBOR map value. if !eleValue.IsValid() { eleValue = reflect.New(eleType).Elem() } else if !reuseEle { eleValue.SetZero() } if lastErr := d.parseToValue(eleValue, tInfo.elemTypeInfo); lastErr != nil { if err == nil { err = lastErr } continue } // Add key-value pair to Go map. v.SetMapIndex(keyValue, eleValue) // Detect duplicate map key. if d.dm.dupMapKey == DupMapKeyEnforcedAPF { newKeyCount := v.Len() if newKeyCount == keyCount { kvi := keyValue.Interface() if !existingKeys[kvi] { v.SetMapIndex(keyValue, reflect.New(eleType).Elem()) err = &DupMapKeyError{kvi, i} i++ // skip the rest of the map for ; (hasSize && i < count) || (!hasSize && !d.foundBreak()); i++ { d.skip() // skip map key d.skip() // skip map value } return err } delete(existingKeys, kvi) } keyCount = newKeyCount } } return err } func (d *decoder) parseArrayToStruct(v reflect.Value, tInfo *typeInfo) error { structType := getDecodingStructType(tInfo.nonPtrType) if structType.err != nil { return structType.err } if !structType.toArray { t := d.nextCBORType() d.skip() return &UnmarshalTypeError{ CBORType: t.String(), GoType: tInfo.nonPtrType.String(), errorMsg: "cannot decode CBOR array to struct without toarray option", } } start := d.off _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() hasSize := !indefiniteLength count := int(val) if !hasSize { count = d.numOfItemsUntilBreak() // peek ahead to get array size } if count != len(structType.fields) { d.off = start d.skip() return &UnmarshalTypeError{ CBORType: cborTypeArray.String(), GoType: tInfo.typ.String(), errorMsg: "cannot decode CBOR array to struct with different number of elements", } } var err, lastErr error for i := 0; (hasSize && i < count) || (!hasSize && !d.foundBreak()); i++ { f := structType.fields[i] // Get field value by index var fv reflect.Value if len(f.idx) == 1 { fv = v.Field(f.idx[0]) } else { fv, lastErr = getFieldValue(v, f.idx, func(v reflect.Value) (reflect.Value, error) { // Return a new value for embedded field null pointer to point to, or return error. if !v.CanSet() { return reflect.Value{}, errors.New("cbor: cannot set embedded pointer to unexported struct: " + v.Type().String()) } v.Set(reflect.New(v.Type().Elem())) return v, nil }) if lastErr != nil && err == nil { err = lastErr } if !fv.IsValid() { d.skip() continue } } if lastErr = d.parseToValue(fv, f.typInfo); lastErr != nil { if err == nil { if typeError, ok := lastErr.(*UnmarshalTypeError); ok { typeError.StructFieldName = tInfo.typ.String() + "." + f.name err = typeError } else { err = lastErr } } } } return err } // parseMapToStruct needs to be fast so gocyclo can be ignored for now. func (d *decoder) parseMapToStruct(v reflect.Value, tInfo *typeInfo) error { //nolint:gocyclo structType := getDecodingStructType(tInfo.nonPtrType) if structType.err != nil { return structType.err } if structType.toArray { t := d.nextCBORType() d.skip() return &UnmarshalTypeError{ CBORType: t.String(), GoType: tInfo.nonPtrType.String(), errorMsg: "cannot decode CBOR map to struct with toarray option", } } var err, lastErr error // Get CBOR map size _, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() hasSize := !indefiniteLength count := int(val) // Keeps track of matched struct fields var foundFldIdx []bool { const maxStackFields = 128 if nfields := len(structType.fields); nfields <= maxStackFields { // For structs with typical field counts, expect that this can be // stack-allocated. var a [maxStackFields]bool foundFldIdx = a[:nfields] } else { foundFldIdx = make([]bool, len(structType.fields)) } } // Keeps track of CBOR map keys to detect duplicate map key keyCount := 0 var mapKeys map[any]struct{} errOnUnknownField := (d.dm.extraReturnErrors & ExtraDecErrorUnknownField) > 0 MapEntryLoop: for j := 0; (hasSize && j < count) || (!hasSize && !d.foundBreak()); j++ { var f *field // If duplicate field detection is enabled and the key at index j did not match any // field, k will hold the map key. var k any t := d.nextCBORType() if t == cborTypeTextString || (t == cborTypeByteString && d.dm.fieldNameByteString == FieldNameByteStringAllowed) { var keyBytes []byte if t == cborTypeTextString { keyBytes, lastErr = d.parseTextString() if lastErr != nil { if err == nil { err = lastErr } d.skip() // skip value continue } } else { // cborTypeByteString keyBytes, _ = d.parseByteString() } // Check for exact match on field name. if i, ok := structType.fieldIndicesByName[string(keyBytes)]; ok { fld := structType.fields[i] if !foundFldIdx[i] { f = fld foundFldIdx[i] = true } else if d.dm.dupMapKey == DupMapKeyEnforcedAPF { err = &DupMapKeyError{fld.name, j} d.skip() // skip value j++ // skip the rest of the map for ; (hasSize && j < count) || (!hasSize && !d.foundBreak()); j++ { d.skip() d.skip() } return err } else { // discard repeated match d.skip() continue MapEntryLoop } } // Find field with case-insensitive match if f == nil && d.dm.fieldNameMatching == FieldNameMatchingPreferCaseSensitive { keyLen := len(keyBytes) keyString := string(keyBytes) for i := 0; i < len(structType.fields); i++ { fld := structType.fields[i] if len(fld.name) == keyLen && strings.EqualFold(fld.name, keyString) { if !foundFldIdx[i] { f = fld foundFldIdx[i] = true } else if d.dm.dupMapKey == DupMapKeyEnforcedAPF { err = &DupMapKeyError{keyString, j} d.skip() // skip value j++ // skip the rest of the map for ; (hasSize && j < count) || (!hasSize && !d.foundBreak()); j++ { d.skip() d.skip() } return err } else { // discard repeated match d.skip() continue MapEntryLoop } break } } } if d.dm.dupMapKey == DupMapKeyEnforcedAPF && f == nil { k = string(keyBytes) } } else if t <= cborTypeNegativeInt { // uint/int var nameAsInt int64 if t == cborTypePositiveInt { _, _, val := d.getHead() nameAsInt = int64(val) } else { _, _, val := d.getHead() if val > math.MaxInt64 { if err == nil { err = &UnmarshalTypeError{ CBORType: t.String(), GoType: reflect.TypeOf(int64(0)).String(), errorMsg: "-1-" + strconv.FormatUint(val, 10) + " overflows Go's int64", } } d.skip() // skip value continue } nameAsInt = int64(-1) ^ int64(val) } // Find field for i := 0; i < len(structType.fields); i++ { fld := structType.fields[i] if fld.keyAsInt && fld.nameAsInt == nameAsInt { if !foundFldIdx[i] { f = fld foundFldIdx[i] = true } else if d.dm.dupMapKey == DupMapKeyEnforcedAPF { err = &DupMapKeyError{nameAsInt, j} d.skip() // skip value j++ // skip the rest of the map for ; (hasSize && j < count) || (!hasSize && !d.foundBreak()); j++ { d.skip() d.skip() } return err } else { // discard repeated match d.skip() continue MapEntryLoop } break } } if d.dm.dupMapKey == DupMapKeyEnforcedAPF && f == nil { k = nameAsInt } } else { if err == nil { err = &UnmarshalTypeError{ CBORType: t.String(), GoType: reflect.TypeOf("").String(), errorMsg: "map key is of type " + t.String() + " and cannot be used to match struct field name", } } if d.dm.dupMapKey == DupMapKeyEnforcedAPF { // parse key k, lastErr = d.parse(true) if lastErr != nil { d.skip() // skip value continue } // Detect if CBOR map key can be used as Go map key. if !isHashableValue(reflect.ValueOf(k)) { d.skip() // skip value continue } } else { d.skip() // skip key } } if f == nil { if errOnUnknownField { err = &UnknownFieldError{j} d.skip() // Skip value j++ // skip the rest of the map for ; (hasSize && j < count) || (!hasSize && !d.foundBreak()); j++ { d.skip() d.skip() } return err } // Two map keys that match the same struct field are immediately considered // duplicates. This check detects duplicates between two map keys that do // not match a struct field. If unknown field errors are enabled, then this // check is never reached. if d.dm.dupMapKey == DupMapKeyEnforcedAPF { if mapKeys == nil { mapKeys = make(map[any]struct{}, 1) } mapKeys[k] = struct{}{} newKeyCount := len(mapKeys) if newKeyCount == keyCount { err = &DupMapKeyError{k, j} d.skip() // skip value j++ // skip the rest of the map for ; (hasSize && j < count) || (!hasSize && !d.foundBreak()); j++ { d.skip() d.skip() } return err } keyCount = newKeyCount } d.skip() // Skip value continue } // Get field value by index var fv reflect.Value if len(f.idx) == 1 { fv = v.Field(f.idx[0]) } else { fv, lastErr = getFieldValue(v, f.idx, func(v reflect.Value) (reflect.Value, error) { // Return a new value for embedded field null pointer to point to, or return error. if !v.CanSet() { return reflect.Value{}, errors.New("cbor: cannot set embedded pointer to unexported struct: " + v.Type().String()) } v.Set(reflect.New(v.Type().Elem())) return v, nil }) if lastErr != nil && err == nil { err = lastErr } if !fv.IsValid() { d.skip() continue } } if lastErr = d.parseToValue(fv, f.typInfo); lastErr != nil { if err == nil { if typeError, ok := lastErr.(*UnmarshalTypeError); ok { typeError.StructFieldName = tInfo.nonPtrType.String() + "." + f.name err = typeError } else { err = lastErr } } } } return err } // validRegisteredTagNums verifies that tag numbers match registered tag numbers of type t. // validRegisteredTagNums assumes next CBOR data type is tag. It scans all tag numbers, and stops at tag content. func (d *decoder) validRegisteredTagNums(registeredTag *tagItem) error { // Scan until next cbor data is tag content. tagNums := make([]uint64, 0, 1) for d.nextCBORType() == cborTypeTag { _, _, val := d.getHead() tagNums = append(tagNums, val) } if !registeredTag.equalTagNum(tagNums) { return &WrongTagError{registeredTag.contentType, registeredTag.num, tagNums} } return nil } func (d *decoder) getRegisteredTagItem(vt reflect.Type) *tagItem { if d.dm.tags != nil { return d.dm.tags.getTagItemFromType(vt) } return nil } // skip moves data offset to the next item. skip assumes data is well-formed, // and does not perform bounds checking. func (d *decoder) skip() { t, _, val, indefiniteLength := d.getHeadWithIndefiniteLengthFlag() if indefiniteLength { switch t { case cborTypeByteString, cborTypeTextString, cborTypeArray, cborTypeMap: for { if isBreakFlag(d.data[d.off]) { d.off++ return } d.skip() } } } switch t { case cborTypeByteString, cborTypeTextString: d.off += int(val) case cborTypeArray: for i := 0; i < int(val); i++ { d.skip() } case cborTypeMap: for i := 0; i < int(val)*2; i++ { d.skip() } case cborTypeTag: d.skip() } } func (d *decoder) getHeadWithIndefiniteLengthFlag() ( t cborType, ai byte, val uint64, indefiniteLength bool, ) { t, ai, val = d.getHead() indefiniteLength = additionalInformation(ai).isIndefiniteLength() return } // getHead assumes data is well-formed, and does not perform bounds checking. func (d *decoder) getHead() (t cborType, ai byte, val uint64) { t, ai = parseInitialByte(d.data[d.off]) val = uint64(ai) d.off++ if ai <= maxAdditionalInformationWithoutArgument { return } if ai == additionalInformationWith1ByteArgument { val = uint64(d.data[d.off]) d.off++ return } if ai == additionalInformationWith2ByteArgument { const argumentSize = 2 val = uint64(binary.BigEndian.Uint16(d.data[d.off : d.off+argumentSize])) d.off += argumentSize return } if ai == additionalInformationWith4ByteArgument { const argumentSize = 4 val = uint64(binary.BigEndian.Uint32(d.data[d.off : d.off+argumentSize])) d.off += argumentSize return } if ai == additionalInformationWith8ByteArgument { const argumentSize = 8 val = binary.BigEndian.Uint64(d.data[d.off : d.off+argumentSize]) d.off += argumentSize return } return } func (d *decoder) numOfItemsUntilBreak() int { savedOff := d.off i := 0 for !d.foundBreak() { d.skip() i++ } d.off = savedOff return i } // foundBreak returns true if next byte is CBOR break code and moves cursor by 1, // otherwise it returns false. // foundBreak assumes data is well-formed, and does not perform bounds checking. func (d *decoder) foundBreak() bool { if isBreakFlag(d.data[d.off]) { d.off++ return true } return false } func (d *decoder) reset(data []byte) { d.data = data d.off = 0 d.expectedLaterEncodingTags = d.expectedLaterEncodingTags[:0] } func (d *decoder) nextCBORType() cborType { return getType(d.data[d.off]) } func (d *decoder) nextCBORNil() bool { return d.data[d.off] == 0xf6 || d.data[d.off] == 0xf7 } type jsonUnmarshaler interface{ UnmarshalJSON([]byte) error } var ( typeIntf = reflect.TypeOf([]any(nil)).Elem() typeTime = reflect.TypeOf(time.Time{}) typeBigInt = reflect.TypeOf(big.Int{}) typeUnmarshaler = reflect.TypeOf((*Unmarshaler)(nil)).Elem() typeUnexportedUnmarshaler = reflect.TypeOf((*unmarshaler)(nil)).Elem() typeBinaryUnmarshaler = reflect.TypeOf((*encoding.BinaryUnmarshaler)(nil)).Elem() typeTextUnmarshaler = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() typeJSONUnmarshaler = reflect.TypeOf((*jsonUnmarshaler)(nil)).Elem() typeString = reflect.TypeOf("") typeByteSlice = reflect.TypeOf([]byte(nil)) ) func fillNil(_ cborType, v reflect.Value) error { switch v.Kind() { case reflect.Slice, reflect.Map, reflect.Interface, reflect.Pointer: v.SetZero() return nil } return nil } func fillPositiveInt(t cborType, val uint64, v reflect.Value) error { switch v.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: if val > math.MaxInt64 { return &UnmarshalTypeError{ CBORType: t.String(), GoType: v.Type().String(), errorMsg: strconv.FormatUint(val, 10) + " overflows " + v.Type().String(), } } if v.OverflowInt(int64(val)) { return &UnmarshalTypeError{ CBORType: t.String(), GoType: v.Type().String(), errorMsg: strconv.FormatUint(val, 10) + " overflows " + v.Type().String(), } } v.SetInt(int64(val)) return nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: if v.OverflowUint(val) { return &UnmarshalTypeError{ CBORType: t.String(), GoType: v.Type().String(), errorMsg: strconv.FormatUint(val, 10) + " overflows " + v.Type().String(), } } v.SetUint(val) return nil case reflect.Float32, reflect.Float64: f := float64(val) v.SetFloat(f) return nil } if v.Type() == typeBigInt { i := new(big.Int).SetUint64(val) v.Set(reflect.ValueOf(*i)) return nil } return &UnmarshalTypeError{CBORType: t.String(), GoType: v.Type().String()} } func fillNegativeInt(t cborType, val int64, v reflect.Value) error { switch v.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: if v.OverflowInt(val) { return &UnmarshalTypeError{ CBORType: t.String(), GoType: v.Type().String(), errorMsg: strconv.FormatInt(val, 10) + " overflows " + v.Type().String(), } } v.SetInt(val) return nil case reflect.Float32, reflect.Float64: f := float64(val) v.SetFloat(f) return nil } if v.Type() == typeBigInt { i := new(big.Int).SetInt64(val) v.Set(reflect.ValueOf(*i)) return nil } return &UnmarshalTypeError{CBORType: t.String(), GoType: v.Type().String()} } func fillBool(t cborType, val bool, v reflect.Value) error { if v.Kind() == reflect.Bool { v.SetBool(val) return nil } return &UnmarshalTypeError{CBORType: t.String(), GoType: v.Type().String()} } func fillFloat(t cborType, val float64, v reflect.Value) error { switch v.Kind() { case reflect.Float32, reflect.Float64: if v.OverflowFloat(val) { return &UnmarshalTypeError{ CBORType: t.String(), GoType: v.Type().String(), errorMsg: strconv.FormatFloat(val, 'E', -1, 64) + " overflows " + v.Type().String(), } } v.SetFloat(val) return nil } return &UnmarshalTypeError{CBORType: t.String(), GoType: v.Type().String()} } func fillByteString(t cborType, val []byte, shared bool, v reflect.Value, bsts ByteStringToStringMode, bum BinaryUnmarshalerMode, tum TextUnmarshalerMode) error { if bum == BinaryUnmarshalerByteString && reflect.PointerTo(v.Type()).Implements(typeBinaryUnmarshaler) { if v.CanAddr() { v = v.Addr() if u, ok := v.Interface().(encoding.BinaryUnmarshaler); ok { // The contract of BinaryUnmarshaler forbids // retaining the input bytes, so no copying is // required even if val is shared. return u.UnmarshalBinary(val) } } return errors.New("cbor: cannot set new value for " + v.Type().String()) } if bsts != ByteStringToStringForbidden { if tum == TextUnmarshalerTextString && reflect.PointerTo(v.Type()).Implements(typeTextUnmarshaler) { if v.CanAddr() { v = v.Addr() if u, ok := v.Interface().(encoding.TextUnmarshaler); ok { // The contract of TextUnmarshaler forbids retaining the input // bytes, so no copying is required even if val is shared. if err := u.UnmarshalText(val); err != nil { return fmt.Errorf("cbor: cannot unmarshal text for %s: %w", v.Type(), err) } return nil } } return errors.New("cbor: cannot set new value for " + v.Type().String()) } if v.Kind() == reflect.String { v.SetString(string(val)) return nil } } if v.Kind() == reflect.Slice && v.Type().Elem().Kind() == reflect.Uint8 { src := val if shared { // SetBytes shares the underlying bytes of the source slice. src = make([]byte, len(val)) copy(src, val) } v.SetBytes(src) return nil } if v.Kind() == reflect.Array && v.Type().Elem().Kind() == reflect.Uint8 { vLen := v.Len() i := 0 for ; i < vLen && i < len(val); i++ { v.Index(i).SetUint(uint64(val[i])) } // Set remaining Go array elements to zero values. if i < vLen { for ; i < vLen; i++ { v.Index(i).SetZero() } } return nil } return &UnmarshalTypeError{CBORType: t.String(), GoType: v.Type().String()} } func fillTextString(t cborType, val []byte, v reflect.Value, tum TextUnmarshalerMode) error { // Check if the value implements TextUnmarshaler and the mode allows it if tum == TextUnmarshalerTextString && reflect.PointerTo(v.Type()).Implements(typeTextUnmarshaler) { if v.CanAddr() { v = v.Addr() if u, ok := v.Interface().(encoding.TextUnmarshaler); ok { // The contract of TextUnmarshaler forbids retaining the input // bytes, so no copying is required even if val is shared. if err := u.UnmarshalText(val); err != nil { return fmt.Errorf("cbor: cannot unmarshal text for %s: %w", v.Type(), err) } return nil } } return errors.New("cbor: cannot set new value for " + v.Type().String()) } if v.Kind() == reflect.String { v.SetString(string(val)) return nil } return &UnmarshalTypeError{CBORType: t.String(), GoType: v.Type().String()} } func isImmutableKind(k reflect.Kind) bool { switch k { case reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: return true default: return false } } func isHashableValue(rv reflect.Value) bool { switch rv.Kind() { case reflect.Slice, reflect.Map, reflect.Func: return false case reflect.Struct: switch rv.Type() { case typeTag: tag := rv.Interface().(Tag) return isHashableValue(reflect.ValueOf(tag.Content)) case typeBigInt: return false } } return true } // convertByteSliceToByteString converts []byte to ByteString if // - v is []byte type, or // - v is Tag type and tag content type is []byte // This function also handles nested tags. // CBOR data is already verified to be well-formed before this function is used, // so the recursion won't exceed max nested levels. func convertByteSliceToByteString(v any) (any, bool) { switch v := v.(type) { case []byte: return ByteString(v), true case Tag: content, converted := convertByteSliceToByteString(v.Content) if converted { return Tag{Number: v.Number, Content: content}, true } } return v, false } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/diagnose.go000066400000000000000000000425631520540370700257660ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "bytes" "encoding/base32" "encoding/base64" "encoding/hex" "errors" "fmt" "io" "math" "math/big" "strconv" "unicode/utf16" "unicode/utf8" "github.com/x448/float16" ) // DiagMode is the main interface for CBOR diagnostic notation. type DiagMode interface { // Diagnose returns extended diagnostic notation (EDN) of CBOR data items using this DiagMode. Diagnose([]byte) (string, error) // DiagnoseFirst returns extended diagnostic notation (EDN) of the first CBOR data item using the DiagMode. Any remaining bytes are returned in rest. DiagnoseFirst([]byte) (string, []byte, error) // DiagOptions returns user specified options used to create this DiagMode. DiagOptions() DiagOptions } // ByteStringEncoding specifies the base encoding that byte strings are notated. type ByteStringEncoding uint8 const ( // ByteStringBase16Encoding encodes byte strings in base16, without padding. ByteStringBase16Encoding ByteStringEncoding = iota // ByteStringBase32Encoding encodes byte strings in base32, without padding. ByteStringBase32Encoding // ByteStringBase32HexEncoding encodes byte strings in base32hex, without padding. ByteStringBase32HexEncoding // ByteStringBase64Encoding encodes byte strings in base64url, without padding. ByteStringBase64Encoding maxByteStringEncoding ) func (bse ByteStringEncoding) valid() error { if bse >= maxByteStringEncoding { return errors.New("cbor: invalid ByteStringEncoding " + strconv.Itoa(int(bse))) } return nil } // DiagOptions specifies Diag options. type DiagOptions struct { // ByteStringEncoding specifies the base encoding that byte strings are notated. // Default is ByteStringBase16Encoding. ByteStringEncoding ByteStringEncoding // ByteStringHexWhitespace specifies notating with whitespace in byte string // when ByteStringEncoding is ByteStringBase16Encoding. ByteStringHexWhitespace bool // ByteStringText specifies notating with text in byte string // if it is a valid UTF-8 text. ByteStringText bool // ByteStringEmbeddedCBOR specifies notating embedded CBOR in byte string // if it is a valid CBOR bytes. ByteStringEmbeddedCBOR bool // CBORSequence specifies notating CBOR sequences. // otherwise, it returns an error if there are more bytes after the first CBOR. CBORSequence bool // FloatPrecisionIndicator specifies appending a suffix to indicate float precision. // Refer to https://www.rfc-editor.org/rfc/rfc8949.html#name-encoding-indicators. FloatPrecisionIndicator bool // MaxNestedLevels specifies the max nested levels allowed for any combination of CBOR array, maps, and tags. // Default is 32 levels and it can be set to [4, 65535]. Note that higher maximum levels of nesting can // require larger amounts of stack to deserialize. Don't increase this higher than you require. MaxNestedLevels int // MaxArrayElements specifies the max number of elements for CBOR arrays. // Default is 128*1024=131072 and it can be set to [16, 2147483647] MaxArrayElements int // MaxMapPairs specifies the max number of key-value pairs for CBOR maps. // Default is 128*1024=131072 and it can be set to [16, 2147483647] MaxMapPairs int } // DiagMode returns a DiagMode with immutable options. func (opts DiagOptions) DiagMode() (DiagMode, error) { return opts.diagMode() } func (opts DiagOptions) diagMode() (*diagMode, error) { if err := opts.ByteStringEncoding.valid(); err != nil { return nil, err } decMode, err := DecOptions{ MaxNestedLevels: opts.MaxNestedLevels, MaxArrayElements: opts.MaxArrayElements, MaxMapPairs: opts.MaxMapPairs, }.decMode() if err != nil { return nil, err } return &diagMode{ byteStringEncoding: opts.ByteStringEncoding, byteStringHexWhitespace: opts.ByteStringHexWhitespace, byteStringText: opts.ByteStringText, byteStringEmbeddedCBOR: opts.ByteStringEmbeddedCBOR, cborSequence: opts.CBORSequence, floatPrecisionIndicator: opts.FloatPrecisionIndicator, decMode: decMode, }, nil } type diagMode struct { byteStringEncoding ByteStringEncoding byteStringHexWhitespace bool byteStringText bool byteStringEmbeddedCBOR bool cborSequence bool floatPrecisionIndicator bool decMode *decMode } // DiagOptions returns user specified options used to create this DiagMode. func (dm *diagMode) DiagOptions() DiagOptions { return DiagOptions{ ByteStringEncoding: dm.byteStringEncoding, ByteStringHexWhitespace: dm.byteStringHexWhitespace, ByteStringText: dm.byteStringText, ByteStringEmbeddedCBOR: dm.byteStringEmbeddedCBOR, CBORSequence: dm.cborSequence, FloatPrecisionIndicator: dm.floatPrecisionIndicator, MaxNestedLevels: dm.decMode.maxNestedLevels, MaxArrayElements: dm.decMode.maxArrayElements, MaxMapPairs: dm.decMode.maxMapPairs, } } // Diagnose returns extended diagnostic notation (EDN) of CBOR data items using the DiagMode. func (dm *diagMode) Diagnose(data []byte) (string, error) { return newDiagnose(data, dm.decMode, dm).diag(dm.cborSequence) } // DiagnoseFirst returns extended diagnostic notation (EDN) of the first CBOR data item using the DiagMode. Any remaining bytes are returned in rest. func (dm *diagMode) DiagnoseFirst(data []byte) (diagNotation string, rest []byte, err error) { return newDiagnose(data, dm.decMode, dm).diagFirst() } var defaultDiagMode, _ = DiagOptions{}.diagMode() // Diagnose returns extended diagnostic notation (EDN) of CBOR data items // using the default diagnostic mode. // // Refer to https://www.rfc-editor.org/rfc/rfc8949.html#name-diagnostic-notation. func Diagnose(data []byte) (string, error) { return defaultDiagMode.Diagnose(data) } // Diagnose returns extended diagnostic notation (EDN) of the first CBOR data item using the DiagMode. Any remaining bytes are returned in rest. func DiagnoseFirst(data []byte) (diagNotation string, rest []byte, err error) { return defaultDiagMode.DiagnoseFirst(data) } type diagnose struct { dm *diagMode d *decoder w *bytes.Buffer } func newDiagnose(data []byte, decm *decMode, diagm *diagMode) *diagnose { return &diagnose{ dm: diagm, d: &decoder{data: data, dm: decm}, w: &bytes.Buffer{}, } } func (di *diagnose) diag(cborSequence bool) (string, error) { // CBOR Sequence firstItem := true for { switch err := di.wellformed(cborSequence); err { case nil: if !firstItem { di.w.WriteString(", ") } firstItem = false if itemErr := di.item(); itemErr != nil { return di.w.String(), itemErr } case io.EOF: if firstItem { return di.w.String(), err } return di.w.String(), nil default: return di.w.String(), err } } } func (di *diagnose) diagFirst() (diagNotation string, rest []byte, err error) { err = di.wellformed(true) if err == nil { err = di.item() } if err == nil { // Return EDN and the rest of the data slice (which might be len 0) return di.w.String(), di.d.data[di.d.off:], nil } return di.w.String(), nil, err } func (di *diagnose) wellformed(allowExtraData bool) error { off := di.d.off err := di.d.wellformed(allowExtraData, false) di.d.off = off return err } func (di *diagnose) item() error { //nolint:gocyclo initialByte := di.d.data[di.d.off] switch initialByte { case cborByteStringWithIndefiniteLengthHead, cborTextStringWithIndefiniteLengthHead: // indefinite-length byte/text string di.d.off++ if isBreakFlag(di.d.data[di.d.off]) { di.d.off++ switch initialByte { case cborByteStringWithIndefiniteLengthHead: // indefinite-length bytes with no chunks. di.w.WriteString(`''_`) return nil case cborTextStringWithIndefiniteLengthHead: // indefinite-length text with no chunks. di.w.WriteString(`""_`) return nil } } di.w.WriteString("(_ ") i := 0 for !di.d.foundBreak() { if i > 0 { di.w.WriteString(", ") } i++ // wellformedIndefiniteString() already checked that the next item is a byte/text string. if err := di.item(); err != nil { return err } } di.w.WriteByte(')') return nil case cborArrayWithIndefiniteLengthHead: // indefinite-length array di.d.off++ di.w.WriteString("[_ ") i := 0 for !di.d.foundBreak() { if i > 0 { di.w.WriteString(", ") } i++ if err := di.item(); err != nil { return err } } di.w.WriteByte(']') return nil case cborMapWithIndefiniteLengthHead: // indefinite-length map di.d.off++ di.w.WriteString("{_ ") i := 0 for !di.d.foundBreak() { if i > 0 { di.w.WriteString(", ") } i++ // key if err := di.item(); err != nil { return err } di.w.WriteString(": ") // value if err := di.item(); err != nil { return err } } di.w.WriteByte('}') return nil } t := di.d.nextCBORType() switch t { case cborTypePositiveInt: _, _, val := di.d.getHead() di.w.WriteString(strconv.FormatUint(val, 10)) return nil case cborTypeNegativeInt: _, _, val := di.d.getHead() if val > math.MaxInt64 { // CBOR negative integer overflows int64, use big.Int to store value. bi := new(big.Int) bi.SetUint64(val) bi.Add(bi, big.NewInt(1)) bi.Neg(bi) di.w.WriteString(bi.String()) return nil } nValue := int64(-1) ^ int64(val) di.w.WriteString(strconv.FormatInt(nValue, 10)) return nil case cborTypeByteString: b, _ := di.d.parseByteString() return di.encodeByteString(b) case cborTypeTextString: b, err := di.d.parseTextString() if err != nil { return err } return di.encodeTextString(string(b), '"') case cborTypeArray: _, _, val := di.d.getHead() count := int(val) di.w.WriteByte('[') for i := 0; i < count; i++ { if i > 0 { di.w.WriteString(", ") } if err := di.item(); err != nil { return err } } di.w.WriteByte(']') return nil case cborTypeMap: _, _, val := di.d.getHead() count := int(val) di.w.WriteByte('{') for i := 0; i < count; i++ { if i > 0 { di.w.WriteString(", ") } // key if err := di.item(); err != nil { return err } di.w.WriteString(": ") // value if err := di.item(); err != nil { return err } } di.w.WriteByte('}') return nil case cborTypeTag: _, _, tagNum := di.d.getHead() switch tagNum { case tagNumUnsignedBignum: if nt := di.d.nextCBORType(); nt != cborTypeByteString { return newInadmissibleTagContentTypeError( tagNumUnsignedBignum, "byte string", nt.String()) } b, _ := di.d.parseByteString() bi := new(big.Int).SetBytes(b) di.w.WriteString(bi.String()) return nil case tagNumNegativeBignum: if nt := di.d.nextCBORType(); nt != cborTypeByteString { return newInadmissibleTagContentTypeError( tagNumNegativeBignum, "byte string", nt.String(), ) } b, _ := di.d.parseByteString() bi := new(big.Int).SetBytes(b) bi.Add(bi, big.NewInt(1)) bi.Neg(bi) di.w.WriteString(bi.String()) return nil default: di.w.WriteString(strconv.FormatUint(tagNum, 10)) di.w.WriteByte('(') if err := di.item(); err != nil { return err } di.w.WriteByte(')') return nil } case cborTypePrimitives: _, ai, val := di.d.getHead() switch ai { case additionalInformationAsFalse: di.w.WriteString("false") return nil case additionalInformationAsTrue: di.w.WriteString("true") return nil case additionalInformationAsNull: di.w.WriteString("null") return nil case additionalInformationAsUndefined: di.w.WriteString("undefined") return nil case additionalInformationAsFloat16, additionalInformationAsFloat32, additionalInformationAsFloat64: return di.encodeFloat(ai, val) default: di.w.WriteString("simple(") di.w.WriteString(strconv.FormatUint(val, 10)) di.w.WriteByte(')') return nil } } return nil } // writeU16 format a rune as "\uxxxx" func (di *diagnose) writeU16(val rune) { di.w.WriteString("\\u") var in [2]byte in[0] = byte(val >> 8) in[1] = byte(val) sz := hex.EncodedLen(len(in)) di.w.Grow(sz) dst := di.w.Bytes()[di.w.Len() : di.w.Len()+sz] hex.Encode(dst, in[:]) di.w.Write(dst) } var rawBase32Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) var rawBase32HexEncoding = base32.HexEncoding.WithPadding(base32.NoPadding) func (di *diagnose) encodeByteString(val []byte) error { if len(val) > 0 { if di.dm.byteStringText && utf8.Valid(val) { return di.encodeTextString(string(val), '\'') } if di.dm.byteStringEmbeddedCBOR { di2 := newDiagnose(val, di.dm.decMode, di.dm) // should always notating embedded CBOR sequence. if str, err := di2.diag(true); err == nil { di.w.WriteString("<<") di.w.WriteString(str) di.w.WriteString(">>") return nil } } } switch di.dm.byteStringEncoding { case ByteStringBase16Encoding: di.w.WriteString("h'") if di.dm.byteStringHexWhitespace { sz := hex.EncodedLen(len(val)) if len(val) > 0 { sz += len(val) - 1 } di.w.Grow(sz) dst := di.w.Bytes()[di.w.Len():] for i := range val { if i > 0 { dst = append(dst, ' ') } hex.Encode(dst[len(dst):len(dst)+2], val[i:i+1]) dst = dst[:len(dst)+2] } di.w.Write(dst) } else { sz := hex.EncodedLen(len(val)) di.w.Grow(sz) dst := di.w.Bytes()[di.w.Len() : di.w.Len()+sz] hex.Encode(dst, val) di.w.Write(dst) } di.w.WriteByte('\'') return nil case ByteStringBase32Encoding: di.w.WriteString("b32'") sz := rawBase32Encoding.EncodedLen(len(val)) di.w.Grow(sz) dst := di.w.Bytes()[di.w.Len() : di.w.Len()+sz] rawBase32Encoding.Encode(dst, val) di.w.Write(dst) di.w.WriteByte('\'') return nil case ByteStringBase32HexEncoding: di.w.WriteString("h32'") sz := rawBase32HexEncoding.EncodedLen(len(val)) di.w.Grow(sz) dst := di.w.Bytes()[di.w.Len() : di.w.Len()+sz] rawBase32HexEncoding.Encode(dst, val) di.w.Write(dst) di.w.WriteByte('\'') return nil case ByteStringBase64Encoding: di.w.WriteString("b64'") sz := base64.RawURLEncoding.EncodedLen(len(val)) di.w.Grow(sz) dst := di.w.Bytes()[di.w.Len() : di.w.Len()+sz] base64.RawURLEncoding.Encode(dst, val) di.w.Write(dst) di.w.WriteByte('\'') return nil default: // It should not be possible for users to construct a *diagMode with an invalid byte // string encoding. panic(fmt.Sprintf("diagmode has invalid ByteStringEncoding %v", di.dm.byteStringEncoding)) } } const utf16SurrSelf = rune(0x10000) // quote should be either `'` or `"` func (di *diagnose) encodeTextString(val string, quote byte) error { di.w.WriteByte(quote) for i := 0; i < len(val); { if b := val[i]; b < utf8.RuneSelf { switch { case b == '\t', b == '\n', b == '\r', b == '\\', b == quote: di.w.WriteByte('\\') switch b { case '\t': b = 't' case '\n': b = 'n' case '\r': b = 'r' } di.w.WriteByte(b) case b >= ' ' && b <= '~': di.w.WriteByte(b) default: di.writeU16(rune(b)) } i++ continue } c, size := utf8.DecodeRuneInString(val[i:]) switch { case c == utf8.RuneError: return &SemanticError{"cbor: invalid UTF-8 string"} case c < utf16SurrSelf: di.writeU16(c) default: c1, c2 := utf16.EncodeRune(c) di.writeU16(c1) di.writeU16(c2) } i += size } di.w.WriteByte(quote) return nil } func (di *diagnose) encodeFloat(ai byte, val uint64) error { f64 := float64(0) switch ai { case additionalInformationAsFloat16: f16 := float16.Frombits(uint16(val)) switch { case f16.IsNaN(): di.w.WriteString("NaN") return nil case f16.IsInf(1): di.w.WriteString("Infinity") return nil case f16.IsInf(-1): di.w.WriteString("-Infinity") return nil default: f64 = float64(f16.Float32()) } case additionalInformationAsFloat32: f32 := math.Float32frombits(uint32(val)) switch { case f32 != f32: di.w.WriteString("NaN") return nil case f32 > math.MaxFloat32: di.w.WriteString("Infinity") return nil case f32 < -math.MaxFloat32: di.w.WriteString("-Infinity") return nil default: f64 = float64(f32) } case additionalInformationAsFloat64: f64 = math.Float64frombits(val) switch { case f64 != f64: di.w.WriteString("NaN") return nil case f64 > math.MaxFloat64: di.w.WriteString("Infinity") return nil case f64 < -math.MaxFloat64: di.w.WriteString("-Infinity") return nil } } // Use ES6 number to string conversion which should match most JSON generators. // Inspired by https://github.com/golang/go/blob/4df10fba1687a6d4f51d7238a403f8f2298f6a16/src/encoding/json/encode.go#L585 const bitSize = 64 b := make([]byte, 0, 32) if abs := math.Abs(f64); abs != 0 && (abs < 1e-6 || abs >= 1e21) { b = strconv.AppendFloat(b, f64, 'e', -1, bitSize) // clean up e-09 to e-9 n := len(b) if n >= 4 && string(b[n-4:n-1]) == "e-0" { b = append(b[:n-2], b[n-1]) } } else { b = strconv.AppendFloat(b, f64, 'f', -1, bitSize) } // add decimal point and trailing zero if needed if bytes.IndexByte(b, '.') < 0 { if i := bytes.IndexByte(b, 'e'); i < 0 { b = append(b, '.', '0') } else { b = append(b[:i+2], b[i:]...) b[i] = '.' b[i+1] = '0' } } di.w.WriteString(string(b)) if di.dm.floatPrecisionIndicator { switch ai { case additionalInformationAsFloat16: di.w.WriteString("_1") return nil case additionalInformationAsFloat32: di.w.WriteString("_2") return nil case additionalInformationAsFloat64: di.w.WriteString("_3") return nil } } return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/doc.go000066400000000000000000000122151520540370700247310ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. /* Package cbor is a modern CBOR codec (RFC 8949 & RFC 8742) with CBOR tags, Go struct tag options (toarray/keyasint/omitempty/omitzero), Core Deterministic Encoding, CTAP2, Canonical CBOR, float64->32->16, and duplicate map key detection. Encoding options allow "preferred serialization" by encoding integers and floats to their smallest forms (e.g. float16) when values fit. Struct tag options "keyasint", "toarray", "omitempty", and "omitzero" reduce encoding size and reduce programming effort. For example, "toarray" tag makes struct fields encode to CBOR array elements. And "keyasint" makes a field encode to an element of CBOR map with specified int key. Latest docs can be viewed at https://github.com/fxamacker/cbor#cbor-library-in-go # Basics The Quick Start guide is at https://github.com/fxamacker/cbor#quick-start Function signatures identical to encoding/json include: Marshal, Unmarshal, NewEncoder, NewDecoder, (*Encoder).Encode, (*Decoder).Decode Standard interfaces include: BinaryMarshaler, BinaryUnmarshaler, Marshaler, and Unmarshaler Diagnostic functions translate CBOR data item into Diagnostic Notation: Diagnose, DiagnoseFirst Functions that simplify using CBOR Sequences (RFC 8742) include: UnmarshalFirst Custom encoding and decoding is possible by implementing standard interfaces for user-defined Go types. Codec functions are available at package-level (using defaults options) or by creating modes from options at runtime. "Mode" in this API means definite way of encoding (EncMode) or decoding (DecMode). EncMode and DecMode interfaces are created from EncOptions or DecOptions structs. em, err := cbor.EncOptions{...}.EncMode() em, err := cbor.CanonicalEncOptions().EncMode() em, err := cbor.CTAP2EncOptions().EncMode() Modes use immutable options to avoid side-effects and simplify concurrency. Behavior of modes won't accidentally change at runtime after they're created. Modes are intended to be reused and are safe for concurrent use. EncMode and DecMode Interfaces // EncMode interface uses immutable options and is safe for concurrent use. type EncMode interface { Marshal(v interface{}) ([]byte, error) NewEncoder(w io.Writer) *Encoder EncOptions() EncOptions // returns copy of options } // DecMode interface uses immutable options and is safe for concurrent use. type DecMode interface { Unmarshal(data []byte, v interface{}) error NewDecoder(r io.Reader) *Decoder DecOptions() DecOptions // returns copy of options } Using Default Encoding Mode b, err := cbor.Marshal(v) encoder := cbor.NewEncoder(w) err = encoder.Encode(v) Using Default Decoding Mode err := cbor.Unmarshal(b, &v) decoder := cbor.NewDecoder(r) err = decoder.Decode(&v) Using Default Mode of UnmarshalFirst to Decode CBOR Sequences // Decode the first CBOR data item and return remaining bytes: rest, err = cbor.UnmarshalFirst(b, &v) // decode []byte b to v Using Extended Diagnostic Notation (EDN) to represent CBOR data // Translate the first CBOR data item into text and return remaining bytes. text, rest, err = cbor.DiagnoseFirst(b) // decode []byte b to text Creating and Using Encoding Modes // Create EncOptions using either struct literal or a function. opts := cbor.CanonicalEncOptions() // If needed, modify encoding options opts.Time = cbor.TimeUnix // Create reusable EncMode interface with immutable options, safe for concurrent use. em, err := opts.EncMode() // Use EncMode like encoding/json, with same function signatures. b, err := em.Marshal(v) // or encoder := em.NewEncoder(w) err := encoder.Encode(v) // NOTE: Both em.Marshal(v) and encoder.Encode(v) use encoding options // specified during creation of em (encoding mode). # CBOR Options Predefined Encoding Options: https://github.com/fxamacker/cbor#predefined-encoding-options Encoding Options: https://github.com/fxamacker/cbor#encoding-options Decoding Options: https://github.com/fxamacker/cbor#decoding-options # Struct Tags Struct tags like `cbor:"name,omitempty"` and `json:"name,omitempty"` work as expected. If both struct tags are specified then `cbor` is used. Struct tag options like "keyasint", "toarray", "omitempty", and "omitzero" make it easy to use very compact formats like COSE and CWT (CBOR Web Tokens) with structs. The "omitzero" option omits zero values from encoding, matching [stdlib encoding/json behavior](https://pkg.go.dev/encoding/json#Marshal). When specified in the `cbor` tag, the option is always honored. When specified in the `json` tag, the option is honored when building with Go 1.24+. For example, "toarray" makes struct fields encode to array elements. And "keyasint" makes struct fields encode to elements of CBOR map with int keys. https://raw.githubusercontent.com/fxamacker/images/master/cbor/v2.0.0/cbor_easy_api.png Struct tag options are listed at https://github.com/fxamacker/cbor#struct-tags-1 # Tests and Fuzzing Over 375 tests are included in this package. Cover-guided fuzzing is handled by a private fuzzer that replaced fxamacker/cbor-fuzz years ago. */ package cbor NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/encode.go000066400000000000000000002141311520540370700254220ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "bytes" "encoding" "encoding/binary" "errors" "fmt" "io" "math" "math/big" "math/rand" "reflect" "sort" "strconv" "sync" "time" "github.com/x448/float16" ) // Marshal returns the CBOR encoding of v using default encoding options. // See EncOptions for encoding options. // // Marshal uses the following encoding rules: // // If value implements the Marshaler interface, Marshal calls its // MarshalCBOR method. // // If value implements encoding.BinaryMarshaler, Marhsal calls its // MarshalBinary method and encode it as CBOR byte string. // // Boolean values encode as CBOR booleans (type 7). // // Positive integer values encode as CBOR positive integers (type 0). // // Negative integer values encode as CBOR negative integers (type 1). // // Floating point values encode as CBOR floating points (type 7). // // String values encode as CBOR text strings (type 3). // // []byte values encode as CBOR byte strings (type 2). // // Array and slice values encode as CBOR arrays (type 4). // // Map values encode as CBOR maps (type 5). // // Struct values encode as CBOR maps (type 5). Each exported struct field // becomes a pair with field name encoded as CBOR text string (type 3) and // field value encoded based on its type. See struct tag option "keyasint" // to encode field name as CBOR integer (type 0 and 1). Also see struct // tag option "toarray" for special field "_" to encode struct values as // CBOR array (type 4). // // Marshal supports format string stored under the "cbor" key in the struct // field's tag. CBOR format string can specify the name of the field, // "omitempty", "omitzero" and "keyasint" options, and special case "-" for // field omission. If "cbor" key is absent, Marshal uses "json" key. // When using the "json" key, the "omitzero" option is honored when building // with Go 1.24+ to match stdlib encoding/json behavior. // // Struct field name is treated as integer if it has "keyasint" option in // its format string. The format string must specify an integer as its // field name. // // Special struct field "_" is used to specify struct level options, such as // "toarray". "toarray" option enables Go struct to be encoded as CBOR array. // "omitempty" and "omitzero" are disabled by "toarray" to ensure that the // same number of elements are encoded every time. // // Anonymous struct fields are marshaled as if their exported fields // were fields in the outer struct. Marshal follows the same struct fields // visibility rules used by JSON encoding package. // // time.Time values encode as text strings specified in RFC3339 or numerical // representation of seconds since January 1, 1970 UTC depending on // EncOptions.Time setting. Also See EncOptions.TimeTag to encode // time.Time as CBOR tag with tag number 0 or 1. // // big.Int values encode as CBOR integers (type 0 and 1) if values fit. // Otherwise, big.Int values encode as CBOR bignums (tag 2 and 3). See // EncOptions.BigIntConvert to always encode big.Int values as CBOR // bignums. // // Pointer values encode as the value pointed to. // // Interface values encode as the value stored in the interface. // // Nil slice/map/pointer/interface values encode as CBOR nulls (type 7). // // Values of other types cannot be encoded in CBOR. Attempting // to encode such a value causes Marshal to return an UnsupportedTypeError. func Marshal(v any) ([]byte, error) { return defaultEncMode.Marshal(v) } // MarshalToBuffer encodes v into provided buffer (instead of using built-in buffer pool) // and uses default encoding options. // // NOTE: Unlike Marshal, the buffer provided to MarshalToBuffer can contain // partially encoded data if error is returned. // // See Marshal for more details. func MarshalToBuffer(v any, buf *bytes.Buffer) error { return defaultEncMode.MarshalToBuffer(v, buf) } // Marshaler is the interface implemented by types that can marshal themselves // into valid CBOR. type Marshaler interface { MarshalCBOR() ([]byte, error) } // MarshalerError represents error from checking encoded CBOR data item // returned from MarshalCBOR for well-formedness and some very limited tag validation. type MarshalerError struct { typ reflect.Type err error } func (e *MarshalerError) Error() string { return "cbor: error calling MarshalCBOR for type " + e.typ.String() + ": " + e.err.Error() } func (e *MarshalerError) Unwrap() error { return e.err } type TranscodeError struct { err error rtype reflect.Type sourceFormat, targetFormat string } func (e TranscodeError) Error() string { return "cbor: cannot transcode from " + e.sourceFormat + " to " + e.targetFormat + ": " + e.err.Error() } func (e TranscodeError) Unwrap() error { return e.err } // UnsupportedTypeError is returned by Marshal when attempting to encode value // of an unsupported type. type UnsupportedTypeError struct { Type reflect.Type } func (e *UnsupportedTypeError) Error() string { return "cbor: unsupported type: " + e.Type.String() } // UnsupportedValueError is returned by Marshal when attempting to encode an // unsupported value. type UnsupportedValueError struct { msg string } func (e *UnsupportedValueError) Error() string { return "cbor: unsupported value: " + e.msg } // SortMode identifies supported sorting order. type SortMode int const ( // SortNone encodes map pairs and struct fields in an arbitrary order. SortNone SortMode = 0 // SortLengthFirst causes map keys or struct fields to be sorted such that: // - If two keys have different lengths, the shorter one sorts earlier; // - If two keys have the same length, the one with the lower value in // (byte-wise) lexical order sorts earlier. // It is used in "Canonical CBOR" encoding in RFC 7049 3.9. SortLengthFirst SortMode = 1 // SortBytewiseLexical causes map keys or struct fields to be sorted in the // bytewise lexicographic order of their deterministic CBOR encodings. // It is used in "CTAP2 Canonical CBOR" and "Core Deterministic Encoding" // in RFC 7049bis. SortBytewiseLexical SortMode = 2 // SortShuffle encodes map pairs and struct fields in a shuffled // order. This mode does not guarantee an unbiased permutation, but it // does guarantee that the runtime of the shuffle algorithm used will be // constant. SortFastShuffle SortMode = 3 // SortCanonical is used in "Canonical CBOR" encoding in RFC 7049 3.9. SortCanonical SortMode = SortLengthFirst // SortCTAP2 is used in "CTAP2 Canonical CBOR". SortCTAP2 SortMode = SortBytewiseLexical // SortCoreDeterministic is used in "Core Deterministic Encoding" in RFC 7049bis. SortCoreDeterministic SortMode = SortBytewiseLexical maxSortMode SortMode = 4 ) func (sm SortMode) valid() bool { return sm >= 0 && sm < maxSortMode } // StringMode specifies how to encode Go string values. type StringMode int const ( // StringToTextString encodes Go string to CBOR text string (major type 3). StringToTextString StringMode = iota // StringToByteString encodes Go string to CBOR byte string (major type 2). StringToByteString ) func (st StringMode) cborType() (cborType, error) { switch st { case StringToTextString: return cborTypeTextString, nil case StringToByteString: return cborTypeByteString, nil } return 0, errors.New("cbor: invalid StringType " + strconv.Itoa(int(st))) } // ShortestFloatMode specifies which floating-point format should // be used as the shortest possible format for CBOR encoding. // It is not used for encoding Infinity and NaN values. type ShortestFloatMode int const ( // ShortestFloatNone makes float values encode without any conversion. // This is the default for ShortestFloatMode in v1. // E.g. a float32 in Go will encode to CBOR float32. And // a float64 in Go will encode to CBOR float64. ShortestFloatNone ShortestFloatMode = iota // ShortestFloat16 specifies float16 as the shortest form that preserves value. // E.g. if float64 can convert to float32 while preserving value, then // encoding will also try to convert float32 to float16. So a float64 might // encode as CBOR float64, float32 or float16 depending on the value. ShortestFloat16 maxShortestFloat ) func (sfm ShortestFloatMode) valid() bool { return sfm >= 0 && sfm < maxShortestFloat } // NaNConvertMode specifies how to encode NaN and overrides ShortestFloatMode. // ShortestFloatMode is not used for encoding Infinity and NaN values. type NaNConvertMode int const ( // NaNConvert7e00 always encodes NaN to 0xf97e00 (CBOR float16 = 0x7e00). NaNConvert7e00 NaNConvertMode = iota // NaNConvertNone never modifies or converts NaN to other representations // (float64 NaN stays float64, etc. even if it can use float16 without losing // any bits). NaNConvertNone // NaNConvertPreserveSignal converts NaN to the smallest form that preserves // value (quiet bit + payload) as described in RFC 7049bis Draft 12. NaNConvertPreserveSignal // NaNConvertQuiet always forces quiet bit = 1 and shortest form that preserves // NaN payload. NaNConvertQuiet // NaNConvertReject returns UnsupportedValueError on attempts to encode a NaN value. NaNConvertReject maxNaNConvert ) func (ncm NaNConvertMode) valid() bool { return ncm >= 0 && ncm < maxNaNConvert } // InfConvertMode specifies how to encode Infinity and overrides ShortestFloatMode. // ShortestFloatMode is not used for encoding Infinity and NaN values. type InfConvertMode int const ( // InfConvertFloat16 always converts Inf to lossless IEEE binary16 (float16). InfConvertFloat16 InfConvertMode = iota // InfConvertNone never converts (used by CTAP2 Canonical CBOR). InfConvertNone // InfConvertReject returns UnsupportedValueError on attempts to encode an infinite value. InfConvertReject maxInfConvert ) func (icm InfConvertMode) valid() bool { return icm >= 0 && icm < maxInfConvert } // TimeMode specifies how to encode time.Time values in compliance with RFC 8949 (CBOR): // - Section 3.4.1: Standard Date/Time String // - Section 3.4.2: Epoch-Based Date/Time // For more info, see: // - https://www.rfc-editor.org/rfc/rfc8949.html // NOTE: User applications that prefer to encode time with fractional seconds to an integer // (instead of floating point or text string) can use a CBOR tag number not assigned by IANA: // 1. Define a user-defined type in Go with just a time.Time or int64 as its data. // 2. Implement the cbor.Marshaler and cbor.Unmarshaler interface for that user-defined type // to encode or decode the tagged data item with an enclosed integer content. type TimeMode int const ( // TimeUnix causes time.Time to encode to a CBOR time (tag 1) with an integer content // representing seconds elapsed (with 1-second precision) since UNIX Epoch UTC. // The TimeUnix option is location independent and has a clear precision guarantee. TimeUnix TimeMode = iota // TimeUnixMicro causes time.Time to encode to a CBOR time (tag 1) with a floating point content // representing seconds elapsed (with up to 1-microsecond precision) since UNIX Epoch UTC. // NOTE: The floating point content is encoded to the shortest floating-point encoding that preserves // the 64-bit floating point value. I.e., the floating point encoding can be IEEE 764: // binary64, binary32, or binary16 depending on the content's value. TimeUnixMicro // TimeUnixDynamic causes time.Time to encode to a CBOR time (tag 1) with either an integer content or // a floating point content, depending on the content's value. This option is equivalent to dynamically // choosing TimeUnix if time.Time doesn't have fractional seconds, and using TimeUnixMicro if time.Time // has fractional seconds. TimeUnixDynamic // TimeRFC3339 causes time.Time to encode to a CBOR time (tag 0) with a text string content // representing the time using 1-second precision in RFC3339 format. If the time.Time has a // non-UTC timezone then a "localtime - UTC" numeric offset will be included as specified in RFC3339. // NOTE: User applications can avoid including the RFC3339 numeric offset by: // - providing a time.Time value set to UTC, or // - using the TimeUnix, TimeUnixMicro, or TimeUnixDynamic option instead of TimeRFC3339. TimeRFC3339 // TimeRFC3339Nano causes time.Time to encode to a CBOR time (tag 0) with a text string content // representing the time using 1-nanosecond precision in RFC3339 format. If the time.Time has a // non-UTC timezone then a "localtime - UTC" numeric offset will be included as specified in RFC3339. // NOTE: User applications can avoid including the RFC3339 numeric offset by: // - providing a time.Time value set to UTC, or // - using the TimeUnix, TimeUnixMicro, or TimeUnixDynamic option instead of TimeRFC3339Nano. TimeRFC3339Nano maxTimeMode ) func (tm TimeMode) valid() bool { return tm >= 0 && tm < maxTimeMode } // BigIntConvertMode specifies how to encode big.Int values. type BigIntConvertMode int const ( // BigIntConvertShortest makes big.Int encode to CBOR integer if value fits. // E.g. if big.Int value can be converted to CBOR integer while preserving // value, encoder will encode it to CBOR integer (major type 0 or 1). BigIntConvertShortest BigIntConvertMode = iota // BigIntConvertNone makes big.Int encode to CBOR bignum (tag 2 or 3) without // converting it to another CBOR type. BigIntConvertNone // BigIntConvertReject returns an UnsupportedTypeError instead of marshaling a big.Int. BigIntConvertReject maxBigIntConvert ) func (bim BigIntConvertMode) valid() bool { return bim >= 0 && bim < maxBigIntConvert } // NilContainersMode specifies how to encode nil slices and maps. type NilContainersMode int const ( // NilContainerAsNull encodes nil slices and maps as CBOR null. // This is the default. NilContainerAsNull NilContainersMode = iota // NilContainerAsEmpty encodes nil slices and maps as // empty container (CBOR bytestring, array, or map). NilContainerAsEmpty maxNilContainersMode ) func (m NilContainersMode) valid() bool { return m >= 0 && m < maxNilContainersMode } // OmitEmptyMode specifies how to encode struct fields with omitempty tag. // The default behavior omits if field value would encode as empty CBOR value. type OmitEmptyMode int const ( // OmitEmptyCBORValue specifies that struct fields tagged with "omitempty" // should be omitted from encoding if the field would be encoded as an empty // CBOR value, such as CBOR false, 0, 0.0, nil, empty byte, empty string, // empty array, or empty map. OmitEmptyCBORValue OmitEmptyMode = iota // OmitEmptyGoValue specifies that struct fields tagged with "omitempty" // should be omitted from encoding if the field has an empty Go value, // defined as false, 0, 0.0, a nil pointer, a nil interface value, and // any empty array, slice, map, or string. // This behavior is the same as the current (aka v1) encoding/json package // included in Go. OmitEmptyGoValue maxOmitEmptyMode ) func (om OmitEmptyMode) valid() bool { return om >= 0 && om < maxOmitEmptyMode } // FieldNameMode specifies the CBOR type to use when encoding struct field names. type FieldNameMode int const ( // FieldNameToTextString encodes struct fields to CBOR text string (major type 3). FieldNameToTextString FieldNameMode = iota // FieldNameToTextString encodes struct fields to CBOR byte string (major type 2). FieldNameToByteString maxFieldNameMode ) func (fnm FieldNameMode) valid() bool { return fnm >= 0 && fnm < maxFieldNameMode } // ByteSliceLaterFormatMode specifies which later format conversion hint (CBOR tag 21-23) // to include (if any) when encoding Go byte slice to CBOR byte string. The encoder will // always encode unmodified bytes from the byte slice and just wrap it within // CBOR tag 21, 22, or 23 if specified. // See "Expected Later Encoding for CBOR-to-JSON Converters" in RFC 8949 Section 3.4.5.2. type ByteSliceLaterFormatMode int const ( // ByteSliceLaterFormatNone encodes unmodified bytes from Go byte slice to CBOR byte string (major type 2) // without adding CBOR tag 21, 22, or 23. ByteSliceLaterFormatNone ByteSliceLaterFormatMode = iota // ByteSliceLaterFormatBase64URL encodes unmodified bytes from Go byte slice to CBOR byte string (major type 2) // inside CBOR tag 21 (expected later conversion to base64url encoding, see RFC 8949 Section 3.4.5.2). ByteSliceLaterFormatBase64URL // ByteSliceLaterFormatBase64 encodes unmodified bytes from Go byte slice to CBOR byte string (major type 2) // inside CBOR tag 22 (expected later conversion to base64 encoding, see RFC 8949 Section 3.4.5.2). ByteSliceLaterFormatBase64 // ByteSliceLaterFormatBase16 encodes unmodified bytes from Go byte slice to CBOR byte string (major type 2) // inside CBOR tag 23 (expected later conversion to base16 encoding, see RFC 8949 Section 3.4.5.2). ByteSliceLaterFormatBase16 ) func (bsefm ByteSliceLaterFormatMode) encodingTag() (uint64, error) { switch bsefm { case ByteSliceLaterFormatNone: return 0, nil case ByteSliceLaterFormatBase64URL: return tagNumExpectedLaterEncodingBase64URL, nil case ByteSliceLaterFormatBase64: return tagNumExpectedLaterEncodingBase64, nil case ByteSliceLaterFormatBase16: return tagNumExpectedLaterEncodingBase16, nil } return 0, errors.New("cbor: invalid ByteSliceLaterFormat " + strconv.Itoa(int(bsefm))) } // ByteArrayMode specifies how to encode byte arrays. type ByteArrayMode int const ( // ByteArrayToByteSlice encodes byte arrays the same way that a byte slice with identical // length and contents is encoded. ByteArrayToByteSlice ByteArrayMode = iota // ByteArrayToArray encodes byte arrays to the CBOR array type with one unsigned integer // item for each byte in the array. ByteArrayToArray maxByteArrayMode ) func (bam ByteArrayMode) valid() bool { return bam >= 0 && bam < maxByteArrayMode } // BinaryMarshalerMode specifies how to encode types that implement encoding.BinaryMarshaler. type BinaryMarshalerMode int const ( // BinaryMarshalerByteString encodes the output of MarshalBinary to a CBOR byte string. BinaryMarshalerByteString BinaryMarshalerMode = iota // BinaryMarshalerNone does not recognize BinaryMarshaler implementations during encode. BinaryMarshalerNone maxBinaryMarshalerMode ) func (bmm BinaryMarshalerMode) valid() bool { return bmm >= 0 && bmm < maxBinaryMarshalerMode } // TextMarshalerMode specifies how to encode types that implement encoding.TextMarshaler. type TextMarshalerMode int const ( // TextMarshalerNone does not recognize TextMarshaler implementations during encode. // This is the default behavior. TextMarshalerNone TextMarshalerMode = iota // TextMarshalerTextString encodes the output of MarshalText to a CBOR text string. TextMarshalerTextString maxTextMarshalerMode ) func (tmm TextMarshalerMode) valid() bool { return tmm >= 0 && tmm < maxTextMarshalerMode } // EncOptions specifies encoding options. type EncOptions struct { // Sort specifies sorting order. Sort SortMode // ShortestFloat specifies the shortest floating-point encoding that preserves // the value being encoded. ShortestFloat ShortestFloatMode // NaNConvert specifies how to encode NaN and it overrides ShortestFloatMode. NaNConvert NaNConvertMode // InfConvert specifies how to encode Inf and it overrides ShortestFloatMode. InfConvert InfConvertMode // BigIntConvert specifies how to encode big.Int values. BigIntConvert BigIntConvertMode // Time specifies how to encode time.Time. Time TimeMode // TimeTag allows time.Time to be encoded with a tag number. // RFC3339 format gets tag number 0, and numeric epoch time tag number 1. TimeTag EncTagMode // IndefLength specifies whether to allow indefinite length CBOR items. IndefLength IndefLengthMode // NilContainers specifies how to encode nil slices and maps. NilContainers NilContainersMode // TagsMd specifies whether to allow CBOR tags (major type 6). TagsMd TagsMode // OmitEmptyMode specifies how to encode struct fields with omitempty tag. OmitEmpty OmitEmptyMode // String specifies which CBOR type to use when encoding Go strings. // - CBOR text string (major type 3) is default // - CBOR byte string (major type 2) String StringMode // FieldName specifies the CBOR type to use when encoding struct field names. FieldName FieldNameMode // ByteSliceLaterFormat specifies which later format conversion hint (CBOR tag 21-23) // to include (if any) when encoding Go byte slice to CBOR byte string. The encoder will // always encode unmodified bytes from the byte slice and just wrap it within // CBOR tag 21, 22, or 23 if specified. // See "Expected Later Encoding for CBOR-to-JSON Converters" in RFC 8949 Section 3.4.5.2. ByteSliceLaterFormat ByteSliceLaterFormatMode // ByteArray specifies how to encode byte arrays. ByteArray ByteArrayMode // BinaryMarshaler specifies how to encode types that implement encoding.BinaryMarshaler. BinaryMarshaler BinaryMarshalerMode // TextMarshaler specifies how to encode types that implement encoding.TextMarshaler. TextMarshaler TextMarshalerMode // JSONMarshalerTranscoder sets the transcoding scheme used to marshal types that implement // json.Marshaler but do not also implement cbor.Marshaler. If nil, encoding behavior is not // influenced by whether or not a type implements json.Marshaler. JSONMarshalerTranscoder Transcoder } // CanonicalEncOptions returns EncOptions for "Canonical CBOR" encoding, // defined in RFC 7049 Section 3.9 with the following rules: // // 1. "Integers must be as small as possible." // 2. "The expression of lengths in major types 2 through 5 must be as short as possible." // 3. The keys in every map must be sorted in length-first sorting order. // See SortLengthFirst for details. // 4. "Indefinite-length items must be made into definite-length items." // 5. "If a protocol allows for IEEE floats, then additional canonicalization rules might // need to be added. One example rule might be to have all floats start as a 64-bit // float, then do a test conversion to a 32-bit float; if the result is the same numeric // value, use the shorter value and repeat the process with a test conversion to a // 16-bit float. (This rule selects 16-bit float for positive and negative Infinity // as well.) Also, there are many representations for NaN. If NaN is an allowed value, // it must always be represented as 0xf97e00." func CanonicalEncOptions() EncOptions { return EncOptions{ Sort: SortCanonical, ShortestFloat: ShortestFloat16, NaNConvert: NaNConvert7e00, InfConvert: InfConvertFloat16, IndefLength: IndefLengthForbidden, } } // CTAP2EncOptions returns EncOptions for "CTAP2 Canonical CBOR" encoding, // defined in CTAP specification, with the following rules: // // 1. "Integers must be encoded as small as possible." // 2. "The representations of any floating-point values are not changed." // 3. "The expression of lengths in major types 2 through 5 must be as short as possible." // 4. "Indefinite-length items must be made into definite-length items."" // 5. The keys in every map must be sorted in bytewise lexicographic order. // See SortBytewiseLexical for details. // 6. "Tags as defined in Section 2.4 in [RFC7049] MUST NOT be present." func CTAP2EncOptions() EncOptions { return EncOptions{ Sort: SortCTAP2, ShortestFloat: ShortestFloatNone, NaNConvert: NaNConvertNone, InfConvert: InfConvertNone, IndefLength: IndefLengthForbidden, TagsMd: TagsForbidden, } } // CoreDetEncOptions returns EncOptions for "Core Deterministic" encoding, // defined in RFC 7049bis with the following rules: // // 1. "Preferred serialization MUST be used. In particular, this means that arguments // (see Section 3) for integers, lengths in major types 2 through 5, and tags MUST // be as short as possible" // "Floating point values also MUST use the shortest form that preserves the value" // 2. "Indefinite-length items MUST NOT appear." // 3. "The keys in every map MUST be sorted in the bytewise lexicographic order of // their deterministic encodings." func CoreDetEncOptions() EncOptions { return EncOptions{ Sort: SortCoreDeterministic, ShortestFloat: ShortestFloat16, NaNConvert: NaNConvert7e00, InfConvert: InfConvertFloat16, IndefLength: IndefLengthForbidden, } } // PreferredUnsortedEncOptions returns EncOptions for "Preferred Serialization" encoding, // defined in RFC 7049bis with the following rules: // // 1. "The preferred serialization always uses the shortest form of representing the argument // (Section 3);" // 2. "it also uses the shortest floating-point encoding that preserves the value being // encoded (see Section 5.5)." // "The preferred encoding for a floating-point value is the shortest floating-point encoding // that preserves its value, e.g., 0xf94580 for the number 5.5, and 0xfa45ad9c00 for the // number 5555.5, unless the CBOR-based protocol specifically excludes the use of the shorter // floating-point encodings. For NaN values, a shorter encoding is preferred if zero-padding // the shorter significand towards the right reconstitutes the original NaN value (for many // applications, the single NaN encoding 0xf97e00 will suffice)." // 3. "Definite length encoding is preferred whenever the length is known at the time the // serialization of the item starts." func PreferredUnsortedEncOptions() EncOptions { return EncOptions{ Sort: SortNone, ShortestFloat: ShortestFloat16, NaNConvert: NaNConvert7e00, InfConvert: InfConvertFloat16, } } // EncMode returns EncMode with immutable options and no tags (safe for concurrency). func (opts EncOptions) EncMode() (EncMode, error) { //nolint:gocritic // ignore hugeParam return opts.encMode() } // UserBufferEncMode returns UserBufferEncMode with immutable options and no tags (safe for concurrency). func (opts EncOptions) UserBufferEncMode() (UserBufferEncMode, error) { //nolint:gocritic // ignore hugeParam return opts.encMode() } // EncModeWithTags returns EncMode with options and tags that are both immutable (safe for concurrency). func (opts EncOptions) EncModeWithTags(tags TagSet) (EncMode, error) { //nolint:gocritic // ignore hugeParam return opts.UserBufferEncModeWithTags(tags) } // UserBufferEncModeWithTags returns UserBufferEncMode with options and tags that are both immutable (safe for concurrency). func (opts EncOptions) UserBufferEncModeWithTags(tags TagSet) (UserBufferEncMode, error) { //nolint:gocritic // ignore hugeParam if opts.TagsMd == TagsForbidden { return nil, errors.New("cbor: cannot create EncMode with TagSet when TagsMd is TagsForbidden") } if tags == nil { return nil, errors.New("cbor: cannot create EncMode with nil value as TagSet") } em, err := opts.encMode() if err != nil { return nil, err } // Copy tags ts := tagSet(make(map[reflect.Type]*tagItem)) syncTags := tags.(*syncTagSet) syncTags.RLock() for contentType, tag := range syncTags.t { if tag.opts.EncTag != EncTagNone { ts[contentType] = tag } } syncTags.RUnlock() if len(ts) > 0 { em.tags = ts } return em, nil } // EncModeWithSharedTags returns EncMode with immutable options and mutable shared tags (safe for concurrency). func (opts EncOptions) EncModeWithSharedTags(tags TagSet) (EncMode, error) { //nolint:gocritic // ignore hugeParam return opts.UserBufferEncModeWithSharedTags(tags) } // UserBufferEncModeWithSharedTags returns UserBufferEncMode with immutable options and mutable shared tags (safe for concurrency). func (opts EncOptions) UserBufferEncModeWithSharedTags(tags TagSet) (UserBufferEncMode, error) { //nolint:gocritic // ignore hugeParam if opts.TagsMd == TagsForbidden { return nil, errors.New("cbor: cannot create EncMode with TagSet when TagsMd is TagsForbidden") } if tags == nil { return nil, errors.New("cbor: cannot create EncMode with nil value as TagSet") } em, err := opts.encMode() if err != nil { return nil, err } em.tags = tags return em, nil } func (opts EncOptions) encMode() (*encMode, error) { //nolint:gocritic // ignore hugeParam if !opts.Sort.valid() { return nil, errors.New("cbor: invalid SortMode " + strconv.Itoa(int(opts.Sort))) } if !opts.ShortestFloat.valid() { return nil, errors.New("cbor: invalid ShortestFloatMode " + strconv.Itoa(int(opts.ShortestFloat))) } if !opts.NaNConvert.valid() { return nil, errors.New("cbor: invalid NaNConvertMode " + strconv.Itoa(int(opts.NaNConvert))) } if !opts.InfConvert.valid() { return nil, errors.New("cbor: invalid InfConvertMode " + strconv.Itoa(int(opts.InfConvert))) } if !opts.BigIntConvert.valid() { return nil, errors.New("cbor: invalid BigIntConvertMode " + strconv.Itoa(int(opts.BigIntConvert))) } if !opts.Time.valid() { return nil, errors.New("cbor: invalid TimeMode " + strconv.Itoa(int(opts.Time))) } if !opts.TimeTag.valid() { return nil, errors.New("cbor: invalid TimeTag " + strconv.Itoa(int(opts.TimeTag))) } if !opts.IndefLength.valid() { return nil, errors.New("cbor: invalid IndefLength " + strconv.Itoa(int(opts.IndefLength))) } if !opts.NilContainers.valid() { return nil, errors.New("cbor: invalid NilContainers " + strconv.Itoa(int(opts.NilContainers))) } if !opts.TagsMd.valid() { return nil, errors.New("cbor: invalid TagsMd " + strconv.Itoa(int(opts.TagsMd))) } if opts.TagsMd == TagsForbidden && opts.TimeTag == EncTagRequired { return nil, errors.New("cbor: cannot set TagsMd to TagsForbidden when TimeTag is EncTagRequired") } if !opts.OmitEmpty.valid() { return nil, errors.New("cbor: invalid OmitEmpty " + strconv.Itoa(int(opts.OmitEmpty))) } stringMajorType, err := opts.String.cborType() if err != nil { return nil, err } if !opts.FieldName.valid() { return nil, errors.New("cbor: invalid FieldName " + strconv.Itoa(int(opts.FieldName))) } byteSliceLaterEncodingTag, err := opts.ByteSliceLaterFormat.encodingTag() if err != nil { return nil, err } if !opts.ByteArray.valid() { return nil, errors.New("cbor: invalid ByteArray " + strconv.Itoa(int(opts.ByteArray))) } if !opts.BinaryMarshaler.valid() { return nil, errors.New("cbor: invalid BinaryMarshaler " + strconv.Itoa(int(opts.BinaryMarshaler))) } if !opts.TextMarshaler.valid() { return nil, errors.New("cbor: invalid TextMarshaler " + strconv.Itoa(int(opts.TextMarshaler))) } em := encMode{ sort: opts.Sort, shortestFloat: opts.ShortestFloat, nanConvert: opts.NaNConvert, infConvert: opts.InfConvert, bigIntConvert: opts.BigIntConvert, time: opts.Time, timeTag: opts.TimeTag, indefLength: opts.IndefLength, nilContainers: opts.NilContainers, tagsMd: opts.TagsMd, omitEmpty: opts.OmitEmpty, stringType: opts.String, stringMajorType: stringMajorType, fieldName: opts.FieldName, byteSliceLaterFormat: opts.ByteSliceLaterFormat, byteSliceLaterEncodingTag: byteSliceLaterEncodingTag, byteArray: opts.ByteArray, binaryMarshaler: opts.BinaryMarshaler, textMarshaler: opts.TextMarshaler, jsonMarshalerTranscoder: opts.JSONMarshalerTranscoder, } return &em, nil } // EncMode is the main interface for CBOR encoding. type EncMode interface { Marshal(v any) ([]byte, error) NewEncoder(w io.Writer) *Encoder EncOptions() EncOptions } // UserBufferEncMode is an interface for CBOR encoding, which extends EncMode by // adding MarshalToBuffer to support user specified buffer rather than encoding // into the built-in buffer pool. type UserBufferEncMode interface { EncMode MarshalToBuffer(v any, buf *bytes.Buffer) error // This private method is to prevent users implementing // this interface and so future additions to it will // not be breaking changes. // See https://go.dev/blog/module-compatibility unexport() } type encMode struct { tags tagProvider sort SortMode shortestFloat ShortestFloatMode nanConvert NaNConvertMode infConvert InfConvertMode bigIntConvert BigIntConvertMode time TimeMode timeTag EncTagMode indefLength IndefLengthMode nilContainers NilContainersMode tagsMd TagsMode omitEmpty OmitEmptyMode stringType StringMode stringMajorType cborType fieldName FieldNameMode byteSliceLaterFormat ByteSliceLaterFormatMode byteSliceLaterEncodingTag uint64 byteArray ByteArrayMode binaryMarshaler BinaryMarshalerMode textMarshaler TextMarshalerMode jsonMarshalerTranscoder Transcoder } var defaultEncMode, _ = EncOptions{}.encMode() // These four decoding modes are used by getMarshalerDecMode. // maxNestedLevels, maxArrayElements, and maxMapPairs are // set to max allowed limits to avoid rejecting Marshaler // output that would have been the allowable output of a // non-Marshaler object that exceeds default limits. var ( marshalerForbidIndefLengthForbidTagsDecMode = decMode{ maxNestedLevels: maxMaxNestedLevels, maxArrayElements: maxMaxArrayElements, maxMapPairs: maxMaxMapPairs, indefLength: IndefLengthForbidden, tagsMd: TagsForbidden, } marshalerAllowIndefLengthForbidTagsDecMode = decMode{ maxNestedLevels: maxMaxNestedLevels, maxArrayElements: maxMaxArrayElements, maxMapPairs: maxMaxMapPairs, indefLength: IndefLengthAllowed, tagsMd: TagsForbidden, } marshalerForbidIndefLengthAllowTagsDecMode = decMode{ maxNestedLevels: maxMaxNestedLevels, maxArrayElements: maxMaxArrayElements, maxMapPairs: maxMaxMapPairs, indefLength: IndefLengthForbidden, tagsMd: TagsAllowed, } marshalerAllowIndefLengthAllowTagsDecMode = decMode{ maxNestedLevels: maxMaxNestedLevels, maxArrayElements: maxMaxArrayElements, maxMapPairs: maxMaxMapPairs, indefLength: IndefLengthAllowed, tagsMd: TagsAllowed, } ) // getMarshalerDecMode returns one of four existing decoding modes // which can be reused (safe for parallel use) for the purpose of // checking if data returned by Marshaler is well-formed. func getMarshalerDecMode(indefLength IndefLengthMode, tagsMd TagsMode) *decMode { switch { case indefLength == IndefLengthAllowed && tagsMd == TagsAllowed: return &marshalerAllowIndefLengthAllowTagsDecMode case indefLength == IndefLengthAllowed && tagsMd == TagsForbidden: return &marshalerAllowIndefLengthForbidTagsDecMode case indefLength == IndefLengthForbidden && tagsMd == TagsAllowed: return &marshalerForbidIndefLengthAllowTagsDecMode case indefLength == IndefLengthForbidden && tagsMd == TagsForbidden: return &marshalerForbidIndefLengthForbidTagsDecMode default: // This should never happen, unless we add new options to // IndefLengthMode or TagsMode without updating this function. return &decMode{ maxNestedLevels: maxMaxNestedLevels, maxArrayElements: maxMaxArrayElements, maxMapPairs: maxMaxMapPairs, indefLength: indefLength, tagsMd: tagsMd, } } } // EncOptions returns user specified options used to create this EncMode. func (em *encMode) EncOptions() EncOptions { return EncOptions{ Sort: em.sort, ShortestFloat: em.shortestFloat, NaNConvert: em.nanConvert, InfConvert: em.infConvert, BigIntConvert: em.bigIntConvert, Time: em.time, TimeTag: em.timeTag, IndefLength: em.indefLength, NilContainers: em.nilContainers, TagsMd: em.tagsMd, OmitEmpty: em.omitEmpty, String: em.stringType, FieldName: em.fieldName, ByteSliceLaterFormat: em.byteSliceLaterFormat, ByteArray: em.byteArray, BinaryMarshaler: em.binaryMarshaler, TextMarshaler: em.textMarshaler, JSONMarshalerTranscoder: em.jsonMarshalerTranscoder, } } func (em *encMode) unexport() {} func (em *encMode) encTagBytes(t reflect.Type) []byte { if em.tags != nil { if tagItem := em.tags.getTagItemFromType(t); tagItem != nil { return tagItem.cborTagNum } } return nil } // Marshal returns the CBOR encoding of v using em encoding mode. // // See the documentation for Marshal for details. func (em *encMode) Marshal(v any) ([]byte, error) { e := getEncodeBuffer() if err := encode(e, em, reflect.ValueOf(v)); err != nil { putEncodeBuffer(e) return nil, err } buf := make([]byte, e.Len()) copy(buf, e.Bytes()) putEncodeBuffer(e) return buf, nil } // MarshalToBuffer encodes v into provided buffer (instead of using built-in buffer pool) // and uses em encoding mode. // // NOTE: Unlike Marshal, the buffer provided to MarshalToBuffer can contain // partially encoded data if error is returned. // // See Marshal for more details. func (em *encMode) MarshalToBuffer(v any, buf *bytes.Buffer) error { if buf == nil { return fmt.Errorf("cbor: encoding buffer provided by user is nil") } return encode(buf, em, reflect.ValueOf(v)) } // NewEncoder returns a new encoder that writes to w using em EncMode. func (em *encMode) NewEncoder(w io.Writer) *Encoder { return &Encoder{w: w, em: em} } // encodeBufferPool caches unused bytes.Buffer objects for later reuse. var encodeBufferPool = sync.Pool{ New: func() any { e := new(bytes.Buffer) e.Grow(32) // TODO: make this configurable return e }, } func getEncodeBuffer() *bytes.Buffer { return encodeBufferPool.Get().(*bytes.Buffer) } func putEncodeBuffer(e *bytes.Buffer) { e.Reset() encodeBufferPool.Put(e) } type encodeFunc func(e *bytes.Buffer, em *encMode, v reflect.Value) error type isEmptyFunc func(em *encMode, v reflect.Value) (empty bool, err error) type isZeroFunc func(v reflect.Value) (zero bool, err error) func encode(e *bytes.Buffer, em *encMode, v reflect.Value) error { if !v.IsValid() { // v is zero value e.Write(cborNil) return nil } vt := v.Type() f, _, _ := getEncodeFunc(vt) if f == nil { return &UnsupportedTypeError{vt} } return f(e, em, v) } func encodeBool(e *bytes.Buffer, em *encMode, v reflect.Value) error { if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } b := cborFalse if v.Bool() { b = cborTrue } e.Write(b) return nil } func encodeInt(e *bytes.Buffer, em *encMode, v reflect.Value) error { if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } i := v.Int() if i >= 0 { encodeHead(e, byte(cborTypePositiveInt), uint64(i)) return nil } i = i*(-1) - 1 encodeHead(e, byte(cborTypeNegativeInt), uint64(i)) return nil } func encodeUint(e *bytes.Buffer, em *encMode, v reflect.Value) error { if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } encodeHead(e, byte(cborTypePositiveInt), v.Uint()) return nil } func encodeFloat(e *bytes.Buffer, em *encMode, v reflect.Value) error { if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } f64 := v.Float() if math.IsNaN(f64) { return encodeNaN(e, em, v) } if math.IsInf(f64, 0) { return encodeInf(e, em, v) } fopt := em.shortestFloat if v.Kind() == reflect.Float64 && (fopt == ShortestFloatNone || cannotFitFloat32(f64)) { // Encode float64 // Don't use encodeFloat64() because it cannot be inlined. const argumentSize = 8 const headSize = 1 + argumentSize var scratch [headSize]byte scratch[0] = byte(cborTypePrimitives) | byte(additionalInformationAsFloat64) binary.BigEndian.PutUint64(scratch[1:], math.Float64bits(f64)) e.Write(scratch[:]) return nil } f32 := float32(f64) if fopt == ShortestFloat16 { var f16 float16.Float16 p := float16.PrecisionFromfloat32(f32) if p == float16.PrecisionExact { // Roundtrip float32->float16->float32 test isn't needed. f16 = float16.Fromfloat32(f32) } else if p == float16.PrecisionUnknown { // Try roundtrip float32->float16->float32 to determine if float32 can fit into float16. f16 = float16.Fromfloat32(f32) if f16.Float32() == f32 { p = float16.PrecisionExact } } if p == float16.PrecisionExact { // Encode float16 // Don't use encodeFloat16() because it cannot be inlined. const argumentSize = 2 const headSize = 1 + argumentSize var scratch [headSize]byte scratch[0] = byte(cborTypePrimitives) | additionalInformationAsFloat16 binary.BigEndian.PutUint16(scratch[1:], uint16(f16)) e.Write(scratch[:]) return nil } } // Encode float32 // Don't use encodeFloat32() because it cannot be inlined. const argumentSize = 4 const headSize = 1 + argumentSize var scratch [headSize]byte scratch[0] = byte(cborTypePrimitives) | additionalInformationAsFloat32 binary.BigEndian.PutUint32(scratch[1:], math.Float32bits(f32)) e.Write(scratch[:]) return nil } func encodeInf(e *bytes.Buffer, em *encMode, v reflect.Value) error { f64 := v.Float() switch em.infConvert { case InfConvertReject: return &UnsupportedValueError{msg: "floating-point infinity"} case InfConvertFloat16: if f64 > 0 { e.Write(cborPositiveInfinity) } else { e.Write(cborNegativeInfinity) } return nil } if v.Kind() == reflect.Float64 { return encodeFloat64(e, f64) } return encodeFloat32(e, float32(f64)) } func encodeNaN(e *bytes.Buffer, em *encMode, v reflect.Value) error { switch em.nanConvert { case NaNConvert7e00: e.Write(cborNaN) return nil case NaNConvertNone: if v.Kind() == reflect.Float64 { return encodeFloat64(e, v.Float()) } f32 := float32NaNFromReflectValue(v) return encodeFloat32(e, f32) case NaNConvertReject: return &UnsupportedValueError{msg: "floating-point NaN"} default: // NaNConvertPreserveSignal, NaNConvertQuiet if v.Kind() == reflect.Float64 { f64 := v.Float() f64bits := math.Float64bits(f64) if em.nanConvert == NaNConvertQuiet && f64bits&(1<<51) == 0 { f64bits |= 1 << 51 // Set quiet bit = 1 f64 = math.Float64frombits(f64bits) } // The lower 29 bits are dropped when converting from float64 to float32. if f64bits&0x1fffffff != 0 { // Encode NaN as float64 because dropped coef bits from float64 to float32 are not all 0s. return encodeFloat64(e, f64) } // Create float32 from float64 manually because float32(f64) always turns on NaN's quiet bits. sign := uint32(f64bits>>32) & (1 << 31) exp := uint32(0x7f800000) coef := uint32((f64bits & 0xfffffffffffff) >> 29) f32bits := sign | exp | coef f32 := math.Float32frombits(f32bits) // The lower 13 bits are dropped when converting from float32 to float16. if f32bits&0x1fff != 0 { // Encode NaN as float32 because dropped coef bits from float32 to float16 are not all 0s. return encodeFloat32(e, f32) } // Encode NaN as float16 f16, _ := float16.FromNaN32ps(f32) // Ignore err because it only returns error when f32 is not a NaN. return encodeFloat16(e, f16) } f32 := float32NaNFromReflectValue(v) f32bits := math.Float32bits(f32) if em.nanConvert == NaNConvertQuiet && f32bits&(1<<22) == 0 { f32bits |= 1 << 22 // Set quiet bit = 1 f32 = math.Float32frombits(f32bits) } // The lower 13 bits are dropped coef bits when converting from float32 to float16. if f32bits&0x1fff != 0 { // Encode NaN as float32 because dropped coef bits from float32 to float16 are not all 0s. return encodeFloat32(e, f32) } f16, _ := float16.FromNaN32ps(f32) // Ignore err because it only returns error when f32 is not a NaN. return encodeFloat16(e, f16) } } func encodeFloat16(e *bytes.Buffer, f16 float16.Float16) error { const argumentSize = 2 const headSize = 1 + argumentSize var scratch [headSize]byte scratch[0] = byte(cborTypePrimitives) | additionalInformationAsFloat16 binary.BigEndian.PutUint16(scratch[1:], uint16(f16)) e.Write(scratch[:]) return nil } func encodeFloat32(e *bytes.Buffer, f32 float32) error { const argumentSize = 4 const headSize = 1 + argumentSize var scratch [headSize]byte scratch[0] = byte(cborTypePrimitives) | additionalInformationAsFloat32 binary.BigEndian.PutUint32(scratch[1:], math.Float32bits(f32)) e.Write(scratch[:]) return nil } func encodeFloat64(e *bytes.Buffer, f64 float64) error { const argumentSize = 8 const headSize = 1 + argumentSize var scratch [headSize]byte scratch[0] = byte(cborTypePrimitives) | additionalInformationAsFloat64 binary.BigEndian.PutUint64(scratch[1:], math.Float64bits(f64)) e.Write(scratch[:]) return nil } func encodeByteString(e *bytes.Buffer, em *encMode, v reflect.Value) error { vk := v.Kind() if vk == reflect.Slice && v.IsNil() && em.nilContainers == NilContainerAsNull { e.Write(cborNil) return nil } if vk == reflect.Slice && v.Type().Elem().Kind() == reflect.Uint8 && em.byteSliceLaterEncodingTag != 0 { encodeHead(e, byte(cborTypeTag), em.byteSliceLaterEncodingTag) } if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } slen := v.Len() if slen == 0 { return e.WriteByte(byte(cborTypeByteString)) } encodeHead(e, byte(cborTypeByteString), uint64(slen)) if vk == reflect.Array { for i := 0; i < slen; i++ { e.WriteByte(byte(v.Index(i).Uint())) } return nil } e.Write(v.Bytes()) return nil } func encodeString(e *bytes.Buffer, em *encMode, v reflect.Value) error { if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } s := v.String() encodeHead(e, byte(em.stringMajorType), uint64(len(s))) e.WriteString(s) return nil } type arrayEncodeFunc struct { f encodeFunc } func (ae arrayEncodeFunc) encode(e *bytes.Buffer, em *encMode, v reflect.Value) error { if em.byteArray == ByteArrayToByteSlice && v.Type().Elem().Kind() == reflect.Uint8 { return encodeByteString(e, em, v) } if v.Kind() == reflect.Slice && v.IsNil() && em.nilContainers == NilContainerAsNull { e.Write(cborNil) return nil } if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } alen := v.Len() if alen == 0 { return e.WriteByte(byte(cborTypeArray)) } encodeHead(e, byte(cborTypeArray), uint64(alen)) for i := 0; i < alen; i++ { if err := ae.f(e, em, v.Index(i)); err != nil { return err } } return nil } // encodeKeyValueFunc encodes key/value pairs in map (v). // If kvs is provided (having the same length as v), length of encoded key and value are stored in kvs. // kvs is used for canonical encoding of map. type encodeKeyValueFunc func(e *bytes.Buffer, em *encMode, v reflect.Value, kvs []keyValue) error type mapEncodeFunc struct { e encodeKeyValueFunc } func (me mapEncodeFunc) encode(e *bytes.Buffer, em *encMode, v reflect.Value) error { if v.IsNil() && em.nilContainers == NilContainerAsNull { e.Write(cborNil) return nil } if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } mlen := v.Len() if mlen == 0 { return e.WriteByte(byte(cborTypeMap)) } encodeHead(e, byte(cborTypeMap), uint64(mlen)) if em.sort == SortNone || em.sort == SortFastShuffle || mlen <= 1 { return me.e(e, em, v, nil) } kvsp := getKeyValues(v.Len()) // for sorting keys defer putKeyValues(kvsp) kvs := *kvsp kvBeginOffset := e.Len() if err := me.e(e, em, v, kvs); err != nil { return err } kvTotalLen := e.Len() - kvBeginOffset // Use the capacity at the tail of the encode buffer as a staging area to rearrange the // encoded pairs into sorted order. e.Grow(kvTotalLen) tmp := e.Bytes()[e.Len() : e.Len()+kvTotalLen] // Can use e.AvailableBuffer() in Go 1.21+. dst := e.Bytes()[kvBeginOffset:] if em.sort == SortBytewiseLexical { sort.Sort(&bytewiseKeyValueSorter{kvs: kvs, data: dst}) } else { sort.Sort(&lengthFirstKeyValueSorter{kvs: kvs, data: dst}) } // This is where the encoded bytes are actually rearranged in the output buffer to reflect // the desired order. sortedOffset := 0 for _, kv := range kvs { copy(tmp[sortedOffset:], dst[kv.offset:kv.nextOffset]) sortedOffset += kv.nextOffset - kv.offset } copy(dst, tmp[:kvTotalLen]) return nil } // keyValue is the position of an encoded pair in a buffer. All offsets are zero-based and relative // to the first byte of the first encoded pair. type keyValue struct { offset int valueOffset int nextOffset int } type bytewiseKeyValueSorter struct { kvs []keyValue data []byte } func (x *bytewiseKeyValueSorter) Len() int { return len(x.kvs) } func (x *bytewiseKeyValueSorter) Swap(i, j int) { x.kvs[i], x.kvs[j] = x.kvs[j], x.kvs[i] } func (x *bytewiseKeyValueSorter) Less(i, j int) bool { kvi, kvj := x.kvs[i], x.kvs[j] return bytes.Compare(x.data[kvi.offset:kvi.valueOffset], x.data[kvj.offset:kvj.valueOffset]) <= 0 } type lengthFirstKeyValueSorter struct { kvs []keyValue data []byte } func (x *lengthFirstKeyValueSorter) Len() int { return len(x.kvs) } func (x *lengthFirstKeyValueSorter) Swap(i, j int) { x.kvs[i], x.kvs[j] = x.kvs[j], x.kvs[i] } func (x *lengthFirstKeyValueSorter) Less(i, j int) bool { kvi, kvj := x.kvs[i], x.kvs[j] if keyLengthDifference := (kvi.valueOffset - kvi.offset) - (kvj.valueOffset - kvj.offset); keyLengthDifference != 0 { return keyLengthDifference < 0 } return bytes.Compare(x.data[kvi.offset:kvi.valueOffset], x.data[kvj.offset:kvj.valueOffset]) <= 0 } var keyValuePool = sync.Pool{} func getKeyValues(length int) *[]keyValue { v := keyValuePool.Get() if v == nil { y := make([]keyValue, length) return &y } x := v.(*[]keyValue) if cap(*x) >= length { *x = (*x)[:length] return x } // []keyValue from the pool does not have enough capacity. // Return it back to the pool and create a new one. keyValuePool.Put(x) y := make([]keyValue, length) return &y } func putKeyValues(x *[]keyValue) { *x = (*x)[:0] keyValuePool.Put(x) } func encodeStructToArray(e *bytes.Buffer, em *encMode, v reflect.Value) (err error) { structType, err := getEncodingStructType(v.Type()) if err != nil { return err } if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } flds := structType.fields encodeHead(e, byte(cborTypeArray), uint64(len(flds))) for i := 0; i < len(flds); i++ { f := flds[i] var fv reflect.Value if len(f.idx) == 1 { fv = v.Field(f.idx[0]) } else { // Get embedded field value. No error is expected. fv, _ = getFieldValue(v, f.idx, func(reflect.Value) (reflect.Value, error) { // Write CBOR nil for null pointer to embedded struct e.Write(cborNil) return reflect.Value{}, nil }) if !fv.IsValid() { continue } } if err := f.ef(e, em, fv); err != nil { return err } } return nil } func encodeStruct(e *bytes.Buffer, em *encMode, v reflect.Value) (err error) { structType, err := getEncodingStructType(v.Type()) if err != nil { return err } flds := structType.getFields(em) start := 0 if em.sort == SortFastShuffle && len(flds) > 0 { start = rand.Intn(len(flds)) //nolint:gosec // Don't need a CSPRNG for deck cutting. } if b := em.encTagBytes(v.Type()); b != nil { e.Write(b) } // Encode head with struct field count. // Head is rewritten later if actual encoded field count is different from struct field count. encodedHeadLen := encodeHead(e, byte(cborTypeMap), uint64(len(flds))) kvbegin := e.Len() kvcount := 0 for offset := 0; offset < len(flds); offset++ { f := flds[(start+offset)%len(flds)] var fv reflect.Value if len(f.idx) == 1 { fv = v.Field(f.idx[0]) } else { // Get embedded field value. No error is expected. fv, _ = getFieldValue(v, f.idx, func(reflect.Value) (reflect.Value, error) { // Skip null pointer to embedded struct return reflect.Value{}, nil }) if !fv.IsValid() { continue } } if f.omitEmpty { empty, err := f.ief(em, fv) if err != nil { return err } if empty { continue } } if f.omitZero { zero, err := f.izf(fv) if err != nil { return err } if zero { continue } } if !f.keyAsInt && em.fieldName == FieldNameToByteString { e.Write(f.cborNameByteString) } else { // int or text string e.Write(f.cborName) } if err := f.ef(e, em, fv); err != nil { return err } kvcount++ } if len(flds) == kvcount { // Encoded element count in head is the same as actual element count. return nil } // Overwrite the bytes that were reserved for the head before encoding the map entries. var actualHeadLen int { headbuf := *bytes.NewBuffer(e.Bytes()[kvbegin-encodedHeadLen : kvbegin-encodedHeadLen : kvbegin]) actualHeadLen = encodeHead(&headbuf, byte(cborTypeMap), uint64(kvcount)) } if actualHeadLen == encodedHeadLen { // The bytes reserved for the encoded head were exactly the right size, so the // encoded entries are already in their final positions. return nil } // We reserved more bytes than needed for the encoded head, based on the number of fields // encoded. The encoded entries are offset to the right by the number of excess reserved // bytes. Shift the entries left to remove the gap. excessReservedBytes := encodedHeadLen - actualHeadLen dst := e.Bytes()[kvbegin-excessReservedBytes : e.Len()-excessReservedBytes] src := e.Bytes()[kvbegin:e.Len()] copy(dst, src) // After shifting, the excess bytes are at the end of the output buffer and they are // garbage. e.Truncate(e.Len() - excessReservedBytes) return nil } func encodeIntf(e *bytes.Buffer, em *encMode, v reflect.Value) error { if v.IsNil() { e.Write(cborNil) return nil } return encode(e, em, v.Elem()) } func encodeTime(e *bytes.Buffer, em *encMode, v reflect.Value) error { t := v.Interface().(time.Time) if t.IsZero() { e.Write(cborNil) // Even if tag is required, encode as CBOR null. return nil } if em.timeTag == EncTagRequired { tagNumber := 1 if em.time == TimeRFC3339 || em.time == TimeRFC3339Nano { tagNumber = 0 } encodeHead(e, byte(cborTypeTag), uint64(tagNumber)) } switch em.time { case TimeUnix: secs := t.Unix() return encodeInt(e, em, reflect.ValueOf(secs)) case TimeUnixMicro: t = t.UTC().Round(time.Microsecond) f := float64(t.UnixNano()) / 1e9 return encodeFloat(e, em, reflect.ValueOf(f)) case TimeUnixDynamic: t = t.UTC().Round(time.Microsecond) secs, nsecs := t.Unix(), uint64(t.Nanosecond()) if nsecs == 0 { return encodeInt(e, em, reflect.ValueOf(secs)) } f := float64(secs) + float64(nsecs)/1e9 return encodeFloat(e, em, reflect.ValueOf(f)) case TimeRFC3339: s := t.Format(time.RFC3339) return encodeString(e, em, reflect.ValueOf(s)) default: // TimeRFC3339Nano s := t.Format(time.RFC3339Nano) return encodeString(e, em, reflect.ValueOf(s)) } } func encodeBigInt(e *bytes.Buffer, em *encMode, v reflect.Value) error { if em.bigIntConvert == BigIntConvertReject { return &UnsupportedTypeError{Type: typeBigInt} } vbi := v.Interface().(big.Int) sign := vbi.Sign() bi := new(big.Int).SetBytes(vbi.Bytes()) // bi is absolute value of v if sign < 0 { // For negative number, convert to CBOR encoded number (-v-1). bi.Sub(bi, big.NewInt(1)) } if em.bigIntConvert == BigIntConvertShortest { if bi.IsUint64() { if sign >= 0 { // Encode as CBOR pos int (major type 0) encodeHead(e, byte(cborTypePositiveInt), bi.Uint64()) return nil } // Encode as CBOR neg int (major type 1) encodeHead(e, byte(cborTypeNegativeInt), bi.Uint64()) return nil } } tagNum := 2 if sign < 0 { tagNum = 3 } // Write tag number encodeHead(e, byte(cborTypeTag), uint64(tagNum)) // Write bignum byte string b := bi.Bytes() encodeHead(e, byte(cborTypeByteString), uint64(len(b))) e.Write(b) return nil } type binaryMarshalerEncoder struct { alternateEncode encodeFunc alternateIsEmpty isEmptyFunc } func (bme binaryMarshalerEncoder) encode(e *bytes.Buffer, em *encMode, v reflect.Value) error { if em.binaryMarshaler != BinaryMarshalerByteString { return bme.alternateEncode(e, em, v) } vt := v.Type() m, ok := v.Interface().(encoding.BinaryMarshaler) if !ok { pv := reflect.New(vt) pv.Elem().Set(v) m = pv.Interface().(encoding.BinaryMarshaler) } data, err := m.MarshalBinary() if err != nil { return err } if b := em.encTagBytes(vt); b != nil { e.Write(b) } encodeHead(e, byte(cborTypeByteString), uint64(len(data))) e.Write(data) return nil } func (bme binaryMarshalerEncoder) isEmpty(em *encMode, v reflect.Value) (bool, error) { if em.binaryMarshaler != BinaryMarshalerByteString { return bme.alternateIsEmpty(em, v) } m, ok := v.Interface().(encoding.BinaryMarshaler) if !ok { pv := reflect.New(v.Type()) pv.Elem().Set(v) m = pv.Interface().(encoding.BinaryMarshaler) } data, err := m.MarshalBinary() if err != nil { return false, err } return len(data) == 0, nil } type textMarshalerEncoder struct { alternateEncode encodeFunc alternateIsEmpty isEmptyFunc } func (tme textMarshalerEncoder) encode(e *bytes.Buffer, em *encMode, v reflect.Value) error { if em.textMarshaler == TextMarshalerNone { return tme.alternateEncode(e, em, v) } vt := v.Type() m, ok := v.Interface().(encoding.TextMarshaler) if !ok { pv := reflect.New(vt) pv.Elem().Set(v) m = pv.Interface().(encoding.TextMarshaler) } data, err := m.MarshalText() if err != nil { return fmt.Errorf("cbor: cannot marshal text for %s: %w", vt, err) } if b := em.encTagBytes(vt); b != nil { e.Write(b) } encodeHead(e, byte(cborTypeTextString), uint64(len(data))) e.Write(data) return nil } func (tme textMarshalerEncoder) isEmpty(em *encMode, v reflect.Value) (bool, error) { if em.textMarshaler == TextMarshalerNone { return tme.alternateIsEmpty(em, v) } m, ok := v.Interface().(encoding.TextMarshaler) if !ok { pv := reflect.New(v.Type()) pv.Elem().Set(v) m = pv.Interface().(encoding.TextMarshaler) } data, err := m.MarshalText() if err != nil { return false, fmt.Errorf("cbor: cannot marshal text for %s: %w", v.Type(), err) } return len(data) == 0, nil } type jsonMarshalerEncoder struct { alternateEncode encodeFunc alternateIsEmpty isEmptyFunc } func (jme jsonMarshalerEncoder) encode(e *bytes.Buffer, em *encMode, v reflect.Value) error { if em.jsonMarshalerTranscoder == nil { return jme.alternateEncode(e, em, v) } vt := v.Type() m, ok := v.Interface().(jsonMarshaler) if !ok { pv := reflect.New(vt) pv.Elem().Set(v) m = pv.Interface().(jsonMarshaler) } json, err := m.MarshalJSON() if err != nil { return err } offset := e.Len() if b := em.encTagBytes(vt); b != nil { e.Write(b) } if err := em.jsonMarshalerTranscoder.Transcode(e, bytes.NewReader(json)); err != nil { return &TranscodeError{err: err, rtype: vt, sourceFormat: "json", targetFormat: "cbor"} } // Validate that the transcode function has written exactly one well-formed data item. d := decoder{data: e.Bytes()[offset:], dm: getMarshalerDecMode(em.indefLength, em.tagsMd)} if err := d.wellformed(false, true); err != nil { e.Truncate(offset) return &TranscodeError{err: err, rtype: vt, sourceFormat: "json", targetFormat: "cbor"} } return nil } func (jme jsonMarshalerEncoder) isEmpty(em *encMode, v reflect.Value) (bool, error) { if em.jsonMarshalerTranscoder == nil { return jme.alternateIsEmpty(em, v) } // As with types implementing cbor.Marshaler, transcoded json.Marshaler values always encode // as exactly one complete CBOR data item. return false, nil } func encodeMarshalerType(e *bytes.Buffer, em *encMode, v reflect.Value) error { if em.tagsMd == TagsForbidden && v.Type() == typeRawTag { return errors.New("cbor: cannot encode cbor.RawTag when TagsMd is TagsForbidden") } m, ok := v.Interface().(Marshaler) if !ok { pv := reflect.New(v.Type()) pv.Elem().Set(v) m = pv.Interface().(Marshaler) } data, err := m.MarshalCBOR() if err != nil { return err } // Verify returned CBOR data item from MarshalCBOR() is well-formed and passes tag validity for builtin tags 0-3. d := decoder{data: data, dm: getMarshalerDecMode(em.indefLength, em.tagsMd)} err = d.wellformed(false, true) if err != nil { return &MarshalerError{typ: v.Type(), err: err} } e.Write(data) return nil } func encodeTag(e *bytes.Buffer, em *encMode, v reflect.Value) error { if em.tagsMd == TagsForbidden { return errors.New("cbor: cannot encode cbor.Tag when TagsMd is TagsForbidden") } t := v.Interface().(Tag) if t.Number == 0 && t.Content == nil { // Marshal uninitialized cbor.Tag e.Write(cborNil) return nil } // Marshal tag number encodeHead(e, byte(cborTypeTag), t.Number) vem := *em // shallow copy // For built-in tags, disable settings that may introduce tag validity errors when // marshaling certain Content values. switch t.Number { case tagNumRFC3339Time: vem.stringType = StringToTextString vem.stringMajorType = cborTypeTextString case tagNumUnsignedBignum, tagNumNegativeBignum: vem.byteSliceLaterFormat = ByteSliceLaterFormatNone vem.byteSliceLaterEncodingTag = 0 } // Marshal tag content return encode(e, &vem, reflect.ValueOf(t.Content)) } // encodeHead writes CBOR head of specified type t and returns number of bytes written. func encodeHead(e *bytes.Buffer, t byte, n uint64) int { if n <= maxAdditionalInformationWithoutArgument { const headSize = 1 e.WriteByte(t | byte(n)) return headSize } if n <= math.MaxUint8 { const headSize = 2 scratch := [headSize]byte{ t | byte(additionalInformationWith1ByteArgument), byte(n), } e.Write(scratch[:]) return headSize } if n <= math.MaxUint16 { const headSize = 3 var scratch [headSize]byte scratch[0] = t | byte(additionalInformationWith2ByteArgument) binary.BigEndian.PutUint16(scratch[1:], uint16(n)) e.Write(scratch[:]) return headSize } if n <= math.MaxUint32 { const headSize = 5 var scratch [headSize]byte scratch[0] = t | byte(additionalInformationWith4ByteArgument) binary.BigEndian.PutUint32(scratch[1:], uint32(n)) e.Write(scratch[:]) return headSize } const headSize = 9 var scratch [headSize]byte scratch[0] = t | byte(additionalInformationWith8ByteArgument) binary.BigEndian.PutUint64(scratch[1:], n) e.Write(scratch[:]) return headSize } type jsonMarshaler interface{ MarshalJSON() ([]byte, error) } var ( typeMarshaler = reflect.TypeOf((*Marshaler)(nil)).Elem() typeBinaryMarshaler = reflect.TypeOf((*encoding.BinaryMarshaler)(nil)).Elem() typeTextMarshaler = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() typeJSONMarshaler = reflect.TypeOf((*jsonMarshaler)(nil)).Elem() typeRawMessage = reflect.TypeOf(RawMessage(nil)) typeByteString = reflect.TypeOf(ByteString("")) ) func getEncodeFuncInternal(t reflect.Type) (ef encodeFunc, ief isEmptyFunc, izf isZeroFunc) { k := t.Kind() if k == reflect.Pointer { return getEncodeIndirectValueFunc(t), isEmptyPtr, getIsZeroFunc(t) } switch t { case typeSimpleValue: return encodeMarshalerType, isEmptyUint, getIsZeroFunc(t) case typeTag: return encodeTag, alwaysNotEmpty, getIsZeroFunc(t) case typeTime: return encodeTime, alwaysNotEmpty, getIsZeroFunc(t) case typeBigInt: return encodeBigInt, alwaysNotEmpty, getIsZeroFunc(t) case typeRawMessage: return encodeMarshalerType, isEmptySlice, getIsZeroFunc(t) case typeByteString: return encodeMarshalerType, isEmptyString, getIsZeroFunc(t) } if reflect.PointerTo(t).Implements(typeMarshaler) { return encodeMarshalerType, alwaysNotEmpty, getIsZeroFunc(t) } if reflect.PointerTo(t).Implements(typeBinaryMarshaler) { defer func() { // capture encoding method used for modes that disable BinaryMarshaler bme := binaryMarshalerEncoder{ alternateEncode: ef, alternateIsEmpty: ief, } ef = bme.encode ief = bme.isEmpty }() } if reflect.PointerTo(t).Implements(typeTextMarshaler) { defer func() { // capture encoding method used for modes that disable TextMarshaler tme := textMarshalerEncoder{ alternateEncode: ef, alternateIsEmpty: ief, } ef = tme.encode ief = tme.isEmpty }() } if reflect.PointerTo(t).Implements(typeJSONMarshaler) { defer func() { // capture encoding method used for modes that don't support transcoding // from types that implement json.Marshaler. jme := jsonMarshalerEncoder{ alternateEncode: ef, alternateIsEmpty: ief, } ef = jme.encode ief = jme.isEmpty }() } switch k { case reflect.Bool: return encodeBool, isEmptyBool, getIsZeroFunc(t) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return encodeInt, isEmptyInt, getIsZeroFunc(t) case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: return encodeUint, isEmptyUint, getIsZeroFunc(t) case reflect.Float32, reflect.Float64: return encodeFloat, isEmptyFloat, getIsZeroFunc(t) case reflect.String: return encodeString, isEmptyString, getIsZeroFunc(t) case reflect.Slice: if t.Elem().Kind() == reflect.Uint8 { return encodeByteString, isEmptySlice, getIsZeroFunc(t) } fallthrough case reflect.Array: f, _, _ := getEncodeFunc(t.Elem()) if f == nil { return nil, nil, nil } return arrayEncodeFunc{f: f}.encode, isEmptySlice, getIsZeroFunc(t) case reflect.Map: f := getEncodeMapFunc(t) if f == nil { return nil, nil, nil } return f, isEmptyMap, getIsZeroFunc(t) case reflect.Struct: // Get struct's special field "_" tag options if f, ok := t.FieldByName("_"); ok { tag := f.Tag.Get("cbor") if tag != "-" { if hasToArrayOption(tag) { return encodeStructToArray, isEmptyStruct, isZeroFieldStruct } } } return encodeStruct, isEmptyStruct, getIsZeroFunc(t) case reflect.Interface: return encodeIntf, isEmptyIntf, getIsZeroFunc(t) } return nil, nil, nil } func getEncodeIndirectValueFunc(t reflect.Type) encodeFunc { for t.Kind() == reflect.Pointer { t = t.Elem() } f, _, _ := getEncodeFunc(t) if f == nil { return nil } return func(e *bytes.Buffer, em *encMode, v reflect.Value) error { for v.Kind() == reflect.Pointer && !v.IsNil() { v = v.Elem() } if v.Kind() == reflect.Pointer && v.IsNil() { e.Write(cborNil) return nil } return f(e, em, v) } } func alwaysNotEmpty(_ *encMode, _ reflect.Value) (empty bool, err error) { return false, nil } func isEmptyBool(_ *encMode, v reflect.Value) (bool, error) { return !v.Bool(), nil } func isEmptyInt(_ *encMode, v reflect.Value) (bool, error) { return v.Int() == 0, nil } func isEmptyUint(_ *encMode, v reflect.Value) (bool, error) { return v.Uint() == 0, nil } func isEmptyFloat(_ *encMode, v reflect.Value) (bool, error) { return v.Float() == 0.0, nil } func isEmptyString(_ *encMode, v reflect.Value) (bool, error) { return v.Len() == 0, nil } func isEmptySlice(_ *encMode, v reflect.Value) (bool, error) { return v.Len() == 0, nil } func isEmptyMap(_ *encMode, v reflect.Value) (bool, error) { return v.Len() == 0, nil } func isEmptyPtr(_ *encMode, v reflect.Value) (bool, error) { return v.IsNil(), nil } func isEmptyIntf(_ *encMode, v reflect.Value) (bool, error) { return v.IsNil(), nil } func isEmptyStruct(em *encMode, v reflect.Value) (bool, error) { structType, err := getEncodingStructType(v.Type()) if err != nil { return false, err } if em.omitEmpty == OmitEmptyGoValue { return false, nil } if structType.toArray { return len(structType.fields) == 0, nil } if len(structType.fields) > len(structType.omitEmptyFieldsIdx) { return false, nil } for _, i := range structType.omitEmptyFieldsIdx { f := structType.fields[i] // Get field value var fv reflect.Value if len(f.idx) == 1 { fv = v.Field(f.idx[0]) } else { // Get embedded field value. No error is expected. fv, _ = getFieldValue(v, f.idx, func(reflect.Value) (reflect.Value, error) { // Skip null pointer to embedded struct return reflect.Value{}, nil }) if !fv.IsValid() { continue } } empty, err := f.ief(em, fv) if err != nil { return false, err } if !empty { return false, nil } } return true, nil } func cannotFitFloat32(f64 float64) bool { f32 := float32(f64) return float64(f32) != f64 } // float32NaNFromReflectValue extracts float32 NaN from reflect.Value while preserving NaN's quiet bit. func float32NaNFromReflectValue(v reflect.Value) float32 { // Keith Randall's workaround for issue https://github.com/golang/go/issues/36400 p := reflect.New(v.Type()) p.Elem().Set(v) f32 := p.Convert(reflect.TypeOf((*float32)(nil))).Elem().Interface().(float32) return f32 } type isZeroer interface { IsZero() bool } var isZeroerType = reflect.TypeOf((*isZeroer)(nil)).Elem() // getIsZeroFunc returns a function for the given type that can be called to determine if a given value is zero. // Types that implement `IsZero() bool` are delegated to for non-nil values. // Types that do not implement `IsZero() bool` use the reflect.Value#IsZero() implementation. // The returned function matches behavior of stdlib encoding/json behavior in Go 1.24+. func getIsZeroFunc(t reflect.Type) isZeroFunc { // Provide a function that uses a type's IsZero method if defined. switch { case t == nil: return isZeroDefault case t.Kind() == reflect.Interface && t.Implements(isZeroerType): return isZeroInterfaceCustom case t.Kind() == reflect.Pointer && t.Implements(isZeroerType): return isZeroPointerCustom case t.Implements(isZeroerType): return isZeroCustom case reflect.PointerTo(t).Implements(isZeroerType): return isZeroAddrCustom default: return isZeroDefault } } // isZeroInterfaceCustom returns true for nil or pointer-to-nil values, // and delegates to the custom IsZero() implementation otherwise. func isZeroInterfaceCustom(v reflect.Value) (bool, error) { kind := v.Kind() switch kind { case reflect.Chan, reflect.Func, reflect.Map, reflect.Pointer, reflect.Interface, reflect.Slice: if v.IsNil() { return true, nil } } switch kind { case reflect.Interface, reflect.Pointer: if elem := v.Elem(); elem.Kind() == reflect.Pointer && elem.IsNil() { return true, nil } } return v.Interface().(isZeroer).IsZero(), nil } // isZeroPointerCustom returns true for nil values, // and delegates to the custom IsZero() implementation otherwise. func isZeroPointerCustom(v reflect.Value) (bool, error) { if v.IsNil() { return true, nil } return v.Interface().(isZeroer).IsZero(), nil } // isZeroCustom delegates to the custom IsZero() implementation. func isZeroCustom(v reflect.Value) (bool, error) { return v.Interface().(isZeroer).IsZero(), nil } // isZeroAddrCustom delegates to the custom IsZero() implementation of the addr of the value. func isZeroAddrCustom(v reflect.Value) (bool, error) { if !v.CanAddr() { // Temporarily box v so we can take the address. v2 := reflect.New(v.Type()).Elem() v2.Set(v) v = v2 } return v.Addr().Interface().(isZeroer).IsZero(), nil } // isZeroDefault calls reflect.Value#IsZero() func isZeroDefault(v reflect.Value) (bool, error) { if !v.IsValid() { // v is zero value return true, nil } return v.IsZero(), nil } // isZeroFieldStruct is used to determine whether to omit toarray structs func isZeroFieldStruct(v reflect.Value) (bool, error) { structType, err := getEncodingStructType(v.Type()) if err != nil { return false, err } return len(structType.fields) == 0, nil } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/encode_map.go000066400000000000000000000034641520540370700262640ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "bytes" "reflect" "sync" ) type mapKeyValueEncodeFunc struct { kf, ef encodeFunc kpool, vpool sync.Pool } func (me *mapKeyValueEncodeFunc) encodeKeyValues(e *bytes.Buffer, em *encMode, v reflect.Value, kvs []keyValue) error { iterk := me.kpool.Get().(*reflect.Value) defer func() { iterk.SetZero() me.kpool.Put(iterk) }() iterv := me.vpool.Get().(*reflect.Value) defer func() { iterv.SetZero() me.vpool.Put(iterv) }() if kvs == nil { for i, iter := 0, v.MapRange(); iter.Next(); i++ { iterk.SetIterKey(iter) iterv.SetIterValue(iter) if err := me.kf(e, em, *iterk); err != nil { return err } if err := me.ef(e, em, *iterv); err != nil { return err } } return nil } initial := e.Len() for i, iter := 0, v.MapRange(); iter.Next(); i++ { iterk.SetIterKey(iter) iterv.SetIterValue(iter) offset := e.Len() if err := me.kf(e, em, *iterk); err != nil { return err } valueOffset := e.Len() if err := me.ef(e, em, *iterv); err != nil { return err } kvs[i] = keyValue{ offset: offset - initial, valueOffset: valueOffset - initial, nextOffset: e.Len() - initial, } } return nil } func getEncodeMapFunc(t reflect.Type) encodeFunc { kf, _, _ := getEncodeFunc(t.Key()) ef, _, _ := getEncodeFunc(t.Elem()) if kf == nil || ef == nil { return nil } mkv := &mapKeyValueEncodeFunc{ kf: kf, ef: ef, kpool: sync.Pool{ New: func() any { rk := reflect.New(t.Key()).Elem() return &rk }, }, vpool: sync.Pool{ New: func() any { rv := reflect.New(t.Elem()).Elem() return &rv }, }, } return mapEncodeFunc{ e: mkv.encodeKeyValues, }.encode } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/omitzero_go124.go000066400000000000000000000003301520540370700267430ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. //go:build go1.24 package cbor var jsonStdlibSupportsOmitzero = true NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/omitzero_pre_go124.go000066400000000000000000000003321520540370700276130ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. //go:build !go1.24 package cbor var jsonStdlibSupportsOmitzero = false NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/simplevalue.go000066400000000000000000000065511520540370700265200ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "errors" "fmt" "reflect" ) // SimpleValue represents CBOR simple value. // CBOR simple value is: // - an extension point like CBOR tag. // - a subset of CBOR major type 7 that isn't floating-point. // - "identified by a number between 0 and 255, but distinct from that number itself". // For example, "a simple value 2 is not equivalent to an integer 2" as a CBOR map key. // // CBOR simple values identified by 20..23 are: "false", "true" , "null", and "undefined". // Other CBOR simple values are currently unassigned/reserved by IANA. type SimpleValue uint8 var ( typeSimpleValue = reflect.TypeOf(SimpleValue(0)) ) // MarshalCBOR encodes SimpleValue as CBOR simple value (major type 7). func (sv SimpleValue) MarshalCBOR() ([]byte, error) { // RFC 8949 3.3. Floating-Point Numbers and Values with No Content says: // "An encoder MUST NOT issue two-byte sequences that start with 0xf8 // (major type 7, additional information 24) and continue with a byte // less than 0x20 (32 decimal). Such sequences are not well-formed. // (This implies that an encoder cannot encode false, true, null, or // undefined in two-byte sequences and that only the one-byte variants // of these are well-formed; more generally speaking, each simple value // only has a single representation variant)." switch { case sv <= maxSimpleValueInAdditionalInformation: return []byte{byte(cborTypePrimitives) | byte(sv)}, nil case sv >= minSimpleValueIn1ByteArgument: return []byte{byte(cborTypePrimitives) | additionalInformationWith1ByteArgument, byte(sv)}, nil default: return nil, &UnsupportedValueError{msg: fmt.Sprintf("SimpleValue(%d)", sv)} } } // UnmarshalCBOR decodes CBOR simple value (major type 7) to SimpleValue. // // Deprecated: No longer used by this codec; kept for compatibility // with user apps that directly call this function. func (sv *SimpleValue) UnmarshalCBOR(data []byte) error { if sv == nil { return errors.New("cbor.SimpleValue: UnmarshalCBOR on nil pointer") } d := decoder{data: data, dm: defaultDecMode} // Check well-formedness of CBOR data item. // SimpleValue.UnmarshalCBOR() is exported, so // the codec needs to support same behavior for: // - Unmarshal(data, *SimpleValue) // - SimpleValue.UnmarshalCBOR(data) err := d.wellformed(false, false) if err != nil { return err } return sv.unmarshalCBOR(data) } // unmarshalCBOR decodes CBOR simple value (major type 7) to SimpleValue. // This function assumes data is well-formed, and does not perform bounds checking. // This function is called by Unmarshal(). func (sv *SimpleValue) unmarshalCBOR(data []byte) error { if sv == nil { return errors.New("cbor.SimpleValue: UnmarshalCBOR on nil pointer") } d := decoder{data: data, dm: defaultDecMode} typ, ai, val := d.getHead() if typ != cborTypePrimitives { return &UnmarshalTypeError{CBORType: typ.String(), GoType: "SimpleValue"} } if ai > additionalInformationWith1ByteArgument { return &UnmarshalTypeError{CBORType: typ.String(), GoType: "SimpleValue", errorMsg: "not simple values"} } // It is safe to cast val to uint8 here because // - data is already verified to be well-formed CBOR simple value and // - val is <= math.MaxUint8. *sv = SimpleValue(val) return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/stream.go000066400000000000000000000173351520540370700254670ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "bytes" "errors" "io" "reflect" ) // Decoder reads and decodes CBOR values from io.Reader. type Decoder struct { r io.Reader d decoder buf []byte off int // next read offset in buf bytesRead int } // NewDecoder returns a new decoder that reads and decodes from r using // the default decoding options. func NewDecoder(r io.Reader) *Decoder { return defaultDecMode.NewDecoder(r) } // Decode reads CBOR value and decodes it into the value pointed to by v. func (dec *Decoder) Decode(v any) error { _, err := dec.readNext() if err != nil { // Return validation error or read error. return err } dec.d.reset(dec.buf[dec.off:]) err = dec.d.value(v) // Increment dec.off even if decoding err is not nil because // dec.d.off points to the next CBOR data item if current // CBOR data item is valid but failed to be decoded into v. // This allows next CBOR data item to be decoded in next // call to this function. dec.off += dec.d.off dec.bytesRead += dec.d.off return err } // Skip skips to the next CBOR data item (if there is any), // otherwise it returns error such as io.EOF, io.UnexpectedEOF, etc. func (dec *Decoder) Skip() error { n, err := dec.readNext() if err != nil { // Return validation error or read error. return err } dec.off += n dec.bytesRead += n return nil } // NumBytesRead returns the number of bytes read. func (dec *Decoder) NumBytesRead() int { return dec.bytesRead } // Buffered returns a reader for data remaining in Decoder's buffer. // Returned reader is valid until the next call to Decode or Skip. func (dec *Decoder) Buffered() io.Reader { return bytes.NewReader(dec.buf[dec.off:]) } // readNext() reads next CBOR data item from Reader to buffer. // It returns the size of next CBOR data item. // It also returns validation error or read error if any. func (dec *Decoder) readNext() (int, error) { var readErr error var validErr error for { // Process any unread data in dec.buf. if dec.off < len(dec.buf) { dec.d.reset(dec.buf[dec.off:]) off := dec.off // Save offset before data validation validErr = dec.d.wellformed(true, false) dec.off = off // Restore offset if validErr == nil { return dec.d.off, nil } if validErr != io.ErrUnexpectedEOF { return 0, validErr } // Process last read error on io.ErrUnexpectedEOF. if readErr != nil { if readErr == io.EOF { // current CBOR data item is incomplete. return 0, io.ErrUnexpectedEOF } return 0, readErr } } // More data is needed and there was no read error. var n int for n == 0 { n, readErr = dec.read() if n == 0 && readErr != nil { // No more data can be read and read error is encountered. // At this point, validErr is either nil or io.ErrUnexpectedEOF. if readErr == io.EOF { if validErr == io.ErrUnexpectedEOF { // current CBOR data item is incomplete. return 0, io.ErrUnexpectedEOF } } return 0, readErr } } // At this point, dec.buf contains new data from last read (n > 0). } } // read() reads data from Reader to buffer. // It returns number of bytes read and any read error encountered. // Postconditions: // - dec.buf contains previously unread data and new data. // - dec.off is 0. func (dec *Decoder) read() (int, error) { // Grow buf if needed. const minRead = 512 if cap(dec.buf)-len(dec.buf)+dec.off < minRead { oldUnreadBuf := dec.buf[dec.off:] dec.buf = make([]byte, len(dec.buf)-dec.off, 2*cap(dec.buf)+minRead) dec.overwriteBuf(oldUnreadBuf) } // Copy unread data over read data and reset off to 0. if dec.off > 0 { dec.overwriteBuf(dec.buf[dec.off:]) } // Read from reader and reslice buf. n, err := dec.r.Read(dec.buf[len(dec.buf):cap(dec.buf)]) dec.buf = dec.buf[0 : len(dec.buf)+n] return n, err } func (dec *Decoder) overwriteBuf(newBuf []byte) { n := copy(dec.buf, newBuf) dec.buf = dec.buf[:n] dec.off = 0 } // Encoder writes CBOR values to io.Writer. type Encoder struct { w io.Writer em *encMode indefTypes []cborType } // NewEncoder returns a new encoder that writes to w using the default encoding options. func NewEncoder(w io.Writer) *Encoder { return defaultEncMode.NewEncoder(w) } // Encode writes the CBOR encoding of v. func (enc *Encoder) Encode(v any) error { if len(enc.indefTypes) > 0 && v != nil { indefType := enc.indefTypes[len(enc.indefTypes)-1] if indefType == cborTypeTextString { k := reflect.TypeOf(v).Kind() if k != reflect.String { return errors.New("cbor: cannot encode item type " + k.String() + " for indefinite-length text string") } } else if indefType == cborTypeByteString { t := reflect.TypeOf(v) k := t.Kind() if (k != reflect.Array && k != reflect.Slice) || t.Elem().Kind() != reflect.Uint8 { return errors.New("cbor: cannot encode item type " + k.String() + " for indefinite-length byte string") } } } buf := getEncodeBuffer() err := encode(buf, enc.em, reflect.ValueOf(v)) if err == nil { _, err = enc.w.Write(buf.Bytes()) } putEncodeBuffer(buf) return err } // StartIndefiniteByteString starts byte string encoding of indefinite length. // Subsequent calls of (*Encoder).Encode() encodes definite length byte strings // ("chunks") as one contiguous string until EndIndefinite is called. func (enc *Encoder) StartIndefiniteByteString() error { return enc.startIndefinite(cborTypeByteString) } // StartIndefiniteTextString starts text string encoding of indefinite length. // Subsequent calls of (*Encoder).Encode() encodes definite length text strings // ("chunks") as one contiguous string until EndIndefinite is called. func (enc *Encoder) StartIndefiniteTextString() error { return enc.startIndefinite(cborTypeTextString) } // StartIndefiniteArray starts array encoding of indefinite length. // Subsequent calls of (*Encoder).Encode() encodes elements of the array // until EndIndefinite is called. func (enc *Encoder) StartIndefiniteArray() error { return enc.startIndefinite(cborTypeArray) } // StartIndefiniteMap starts array encoding of indefinite length. // Subsequent calls of (*Encoder).Encode() encodes elements of the map // until EndIndefinite is called. func (enc *Encoder) StartIndefiniteMap() error { return enc.startIndefinite(cborTypeMap) } // EndIndefinite closes last opened indefinite length value. func (enc *Encoder) EndIndefinite() error { if len(enc.indefTypes) == 0 { return errors.New("cbor: cannot encode \"break\" code outside indefinite length values") } _, err := enc.w.Write([]byte{cborBreakFlag}) if err == nil { enc.indefTypes = enc.indefTypes[:len(enc.indefTypes)-1] } return err } var cborIndefHeader = map[cborType][]byte{ cborTypeByteString: {cborByteStringWithIndefiniteLengthHead}, cborTypeTextString: {cborTextStringWithIndefiniteLengthHead}, cborTypeArray: {cborArrayWithIndefiniteLengthHead}, cborTypeMap: {cborMapWithIndefiniteLengthHead}, } func (enc *Encoder) startIndefinite(typ cborType) error { if enc.em.indefLength == IndefLengthForbidden { return &IndefiniteLengthError{typ} } _, err := enc.w.Write(cborIndefHeader[typ]) if err == nil { enc.indefTypes = append(enc.indefTypes, typ) } return err } // RawMessage is a raw encoded CBOR value. type RawMessage []byte // MarshalCBOR returns m or CBOR nil if m is nil. func (m RawMessage) MarshalCBOR() ([]byte, error) { if len(m) == 0 { return cborNil, nil } return m, nil } // UnmarshalCBOR creates a copy of data and saves to *m. func (m *RawMessage) UnmarshalCBOR(data []byte) error { if m == nil { return errors.New("cbor.RawMessage: UnmarshalCBOR on nil pointer") } *m = append((*m)[0:0], data...) return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/structfields.go000066400000000000000000000155631520540370700267100ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "reflect" "sort" "strings" ) type field struct { name string nameAsInt int64 // used to decoder to match field name with CBOR int cborName []byte cborNameByteString []byte // major type 2 name encoding iff cborName has major type 3 idx []int typ reflect.Type ef encodeFunc ief isEmptyFunc izf isZeroFunc typInfo *typeInfo // used to decoder to reuse type info tagged bool // used to choose dominant field (at the same level tagged fields dominate untagged fields) omitEmpty bool // used to skip empty field omitZero bool // used to skip zero field keyAsInt bool // used to encode/decode field name as int } type fields []*field // indexFieldSorter sorts fields by field idx at each level, breaking ties with idx depth. type indexFieldSorter struct { fields fields } func (x *indexFieldSorter) Len() int { return len(x.fields) } func (x *indexFieldSorter) Swap(i, j int) { x.fields[i], x.fields[j] = x.fields[j], x.fields[i] } func (x *indexFieldSorter) Less(i, j int) bool { iIdx, jIdx := x.fields[i].idx, x.fields[j].idx for k := 0; k < len(iIdx) && k < len(jIdx); k++ { if iIdx[k] != jIdx[k] { return iIdx[k] < jIdx[k] } } return len(iIdx) <= len(jIdx) } // nameLevelAndTagFieldSorter sorts fields by field name, idx depth, and presence of tag. type nameLevelAndTagFieldSorter struct { fields fields } func (x *nameLevelAndTagFieldSorter) Len() int { return len(x.fields) } func (x *nameLevelAndTagFieldSorter) Swap(i, j int) { x.fields[i], x.fields[j] = x.fields[j], x.fields[i] } func (x *nameLevelAndTagFieldSorter) Less(i, j int) bool { fi, fj := x.fields[i], x.fields[j] if fi.name != fj.name { return fi.name < fj.name } if len(fi.idx) != len(fj.idx) { return len(fi.idx) < len(fj.idx) } if fi.tagged != fj.tagged { return fi.tagged } return i < j // Field i and j have the same name, depth, and tagged status. Nothing else matters. } // getFields returns visible fields of struct type t following visibility rules for JSON encoding. func getFields(t reflect.Type) (flds fields, structOptions string) { // Get special field "_" tag options if f, ok := t.FieldByName("_"); ok { tag := f.Tag.Get("cbor") if tag != "-" { structOptions = tag } } // nTypes contains next level anonymous fields' types and indexes // (there can be multiple fields of the same type at the same level) flds, nTypes := appendFields(t, nil, nil, nil) if len(nTypes) > 0 { var cTypes map[reflect.Type][][]int // current level anonymous fields' types and indexes vTypes := map[reflect.Type]bool{t: true} // visited field types at less nested levels for len(nTypes) > 0 { cTypes, nTypes = nTypes, nil for t, idx := range cTypes { // If there are multiple anonymous fields of the same struct type at the same level, all are ignored. if len(idx) > 1 { continue } // Anonymous field of the same type at deeper nested level is ignored. if vTypes[t] { continue } vTypes[t] = true flds, nTypes = appendFields(t, idx[0], flds, nTypes) } } } sort.Sort(&nameLevelAndTagFieldSorter{flds}) // Keep visible fields. j := 0 // index of next unique field for i := 0; i < len(flds); { name := flds[i].name if i == len(flds)-1 || // last field name != flds[i+1].name || // field i has unique field name len(flds[i].idx) < len(flds[i+1].idx) || // field i is at a less nested level than field i+1 (flds[i].tagged && !flds[i+1].tagged) { // field i is tagged while field i+1 is not flds[j] = flds[i] j++ } // Skip fields with the same field name. for i++; i < len(flds) && name == flds[i].name; i++ { //nolint:revive } } if j != len(flds) { flds = flds[:j] } // Sort fields by field index sort.Sort(&indexFieldSorter{flds}) return flds, structOptions } // appendFields appends type t's exportable fields to flds and anonymous struct fields to nTypes . func appendFields( t reflect.Type, idx []int, flds fields, nTypes map[reflect.Type][][]int, ) ( _flds fields, _nTypes map[reflect.Type][][]int, ) { for i := 0; i < t.NumField(); i++ { f := t.Field(i) ft := f.Type for ft.Kind() == reflect.Pointer { ft = ft.Elem() } if !isFieldExportable(f, ft.Kind()) { continue } cborTag := true tag := f.Tag.Get("cbor") if tag == "" { tag = f.Tag.Get("json") cborTag = false } if tag == "-" { continue } tagged := tag != "" // Parse field tag options var tagFieldName string var omitempty, omitzero, keyasint bool for j := 0; tag != ""; j++ { var token string idx := strings.IndexByte(tag, ',') if idx == -1 { token, tag = tag, "" } else { token, tag = tag[:idx], tag[idx+1:] } if j == 0 { tagFieldName = token } else { switch token { case "omitempty": omitempty = true case "omitzero": if cborTag || jsonStdlibSupportsOmitzero { omitzero = true } case "keyasint": keyasint = true } } } fieldName := tagFieldName if tagFieldName == "" { fieldName = f.Name } fIdx := make([]int, len(idx)+1) copy(fIdx, idx) fIdx[len(fIdx)-1] = i if !f.Anonymous || ft.Kind() != reflect.Struct || tagFieldName != "" { flds = append(flds, &field{ name: fieldName, idx: fIdx, typ: f.Type, omitEmpty: omitempty, omitZero: omitzero, keyAsInt: keyasint, tagged: tagged}) } else { if nTypes == nil { nTypes = make(map[reflect.Type][][]int) } nTypes[ft] = append(nTypes[ft], fIdx) } } return flds, nTypes } // isFieldExportable returns true if f is an exportable (regular or anonymous) field or // a nonexportable anonymous field of struct type. // Nonexportable anonymous field of struct type can contain exportable fields. func isFieldExportable(f reflect.StructField, fk reflect.Kind) bool { //nolint:gocritic // ignore hugeParam return f.IsExported() || (f.Anonymous && fk == reflect.Struct) } type embeddedFieldNullPtrFunc func(reflect.Value) (reflect.Value, error) // getFieldValue returns field value of struct v by index. When encountering null pointer // to anonymous (embedded) struct field, f is called with the last traversed field value. func getFieldValue(v reflect.Value, idx []int, f embeddedFieldNullPtrFunc) (fv reflect.Value, err error) { fv = v for i, n := range idx { fv = fv.Field(n) if i < len(idx)-1 { if fv.Kind() == reflect.Pointer && fv.Type().Elem().Kind() == reflect.Struct { if fv.IsNil() { // Null pointer to embedded struct field fv, err = f(fv) if err != nil || !fv.IsValid() { return fv, err } } fv = fv.Elem() } } } return fv, nil } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/tag.go000066400000000000000000000211521520540370700247370ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "errors" "fmt" "reflect" "sync" ) // Tag represents a tagged data item (CBOR major type 6), comprising a tag number and the unmarshaled tag content. // NOTE: The same encoding and decoding options that apply to untagged CBOR data items also applies to tag content // during encoding and decoding. type Tag struct { Number uint64 Content any } // RawTag represents a tagged data item (CBOR major type 6), comprising a tag number and the raw tag content. // The raw tag content (enclosed data item) is a CBOR-encoded data item. // RawTag can be used to delay decoding a CBOR data item or precompute encoding a CBOR data item. type RawTag struct { Number uint64 Content RawMessage } // UnmarshalCBOR sets *t with the tag number and the raw tag content copied from data. // // Deprecated: No longer used by this codec; kept for compatibility // with user apps that directly call this function. func (t *RawTag) UnmarshalCBOR(data []byte) error { if t == nil { return errors.New("cbor.RawTag: UnmarshalCBOR on nil pointer") } d := decoder{data: data, dm: defaultDecMode} // Check if data is a well-formed CBOR data item. // RawTag.UnmarshalCBOR() is exported, so // the codec needs to support same behavior for: // - Unmarshal(data, *RawTag) // - RawTag.UnmarshalCBOR(data) err := d.wellformed(false, false) if err != nil { return err } return t.unmarshalCBOR(data) } // unmarshalCBOR sets *t with the tag number and the raw tag content copied from data. // This function assumes data is well-formed, and does not perform bounds checking. // This function is called by Unmarshal(). func (t *RawTag) unmarshalCBOR(data []byte) error { if t == nil { return errors.New("cbor.RawTag: UnmarshalCBOR on nil pointer") } // Decoding CBOR null and undefined to cbor.RawTag is no-op. if len(data) == 1 && (data[0] == 0xf6 || data[0] == 0xf7) { return nil } d := decoder{data: data, dm: defaultDecMode} // Unmarshal tag number. typ, _, num := d.getHead() if typ != cborTypeTag { return &UnmarshalTypeError{CBORType: typ.String(), GoType: typeRawTag.String()} } t.Number = num // Unmarshal tag content. c := d.data[d.off:] t.Content = make([]byte, len(c)) copy(t.Content, c) return nil } // MarshalCBOR returns CBOR encoding of t. func (t RawTag) MarshalCBOR() ([]byte, error) { if t.Number == 0 && len(t.Content) == 0 { // Marshal uninitialized cbor.RawTag b := make([]byte, len(cborNil)) copy(b, cborNil) return b, nil } e := getEncodeBuffer() encodeHead(e, byte(cborTypeTag), t.Number) content := t.Content if len(content) == 0 { content = cborNil } buf := make([]byte, len(e.Bytes())+len(content)) n := copy(buf, e.Bytes()) copy(buf[n:], content) putEncodeBuffer(e) return buf, nil } // DecTagMode specifies how decoder handles tag number. type DecTagMode int const ( // DecTagIgnored makes decoder ignore tag number (skips if present). DecTagIgnored DecTagMode = iota // DecTagOptional makes decoder verify tag number if it's present. DecTagOptional // DecTagRequired makes decoder verify tag number and tag number must be present. DecTagRequired maxDecTagMode ) func (dtm DecTagMode) valid() bool { return dtm >= 0 && dtm < maxDecTagMode } // EncTagMode specifies how encoder handles tag number. type EncTagMode int const ( // EncTagNone makes encoder not encode tag number. EncTagNone EncTagMode = iota // EncTagRequired makes encoder encode tag number. EncTagRequired maxEncTagMode ) func (etm EncTagMode) valid() bool { return etm >= 0 && etm < maxEncTagMode } // TagOptions specifies how encoder and decoder handle tag number. type TagOptions struct { DecTag DecTagMode EncTag EncTagMode } // TagSet is an interface to add and remove tag info. It is used by EncMode and DecMode // to provide CBOR tag support. type TagSet interface { // Add adds given tag number(s), content type, and tag options to TagSet. Add(opts TagOptions, contentType reflect.Type, num uint64, nestedNum ...uint64) error // Remove removes given tag content type from TagSet. Remove(contentType reflect.Type) tagProvider } type tagProvider interface { getTagItemFromType(t reflect.Type) *tagItem getTypeFromTagNum(num []uint64) reflect.Type } type tagItem struct { num []uint64 cborTagNum []byte contentType reflect.Type opts TagOptions } func (t *tagItem) equalTagNum(num []uint64) bool { // Fast path to compare 1 tag number if len(t.num) == 1 && len(num) == 1 && t.num[0] == num[0] { return true } if len(t.num) != len(num) { return false } for i := 0; i < len(t.num); i++ { if t.num[i] != num[i] { return false } } return true } type ( tagSet map[reflect.Type]*tagItem syncTagSet struct { sync.RWMutex t tagSet } ) func (t tagSet) getTagItemFromType(typ reflect.Type) *tagItem { return t[typ] } func (t tagSet) getTypeFromTagNum(num []uint64) reflect.Type { for typ, tag := range t { if tag.equalTagNum(num) { return typ } } return nil } // NewTagSet returns TagSet (safe for concurrency). func NewTagSet() TagSet { return &syncTagSet{t: make(map[reflect.Type]*tagItem)} } // Add adds given tag number(s), content type, and tag options to TagSet. func (t *syncTagSet) Add(opts TagOptions, contentType reflect.Type, num uint64, nestedNum ...uint64) error { if contentType == nil { return errors.New("cbor: cannot add nil content type to TagSet") } for contentType.Kind() == reflect.Pointer { contentType = contentType.Elem() } tag, err := newTagItem(opts, contentType, num, nestedNum...) if err != nil { return err } t.Lock() defer t.Unlock() for typ, ti := range t.t { if typ == contentType { return errors.New("cbor: content type " + contentType.String() + " already exists in TagSet") } if ti.equalTagNum(tag.num) { return fmt.Errorf("cbor: tag number %v already exists in TagSet", tag.num) } } t.t[contentType] = tag return nil } // Remove removes given tag content type from TagSet. func (t *syncTagSet) Remove(contentType reflect.Type) { for contentType.Kind() == reflect.Pointer { contentType = contentType.Elem() } t.Lock() delete(t.t, contentType) t.Unlock() } func (t *syncTagSet) getTagItemFromType(typ reflect.Type) *tagItem { t.RLock() ti := t.t[typ] t.RUnlock() return ti } func (t *syncTagSet) getTypeFromTagNum(num []uint64) reflect.Type { t.RLock() rt := t.t.getTypeFromTagNum(num) t.RUnlock() return rt } func newTagItem(opts TagOptions, contentType reflect.Type, num uint64, nestedNum ...uint64) (*tagItem, error) { if opts.DecTag == DecTagIgnored && opts.EncTag == EncTagNone { return nil, errors.New("cbor: cannot add tag with DecTagIgnored and EncTagNone options to TagSet") } if contentType.PkgPath() == "" || contentType.Kind() == reflect.Interface { return nil, errors.New("cbor: can only add named types to TagSet, got " + contentType.String()) } if contentType == typeTime { return nil, errors.New("cbor: cannot add time.Time to TagSet, use EncOptions.TimeTag and DecOptions.TimeTag instead") } if contentType == typeBigInt { return nil, errors.New("cbor: cannot add big.Int to TagSet, it's built-in and supported automatically") } if contentType == typeTag { return nil, errors.New("cbor: cannot add cbor.Tag to TagSet") } if contentType == typeRawTag { return nil, errors.New("cbor: cannot add cbor.RawTag to TagSet") } if num == 0 || num == 1 { return nil, errors.New("cbor: cannot add tag number 0 or 1 to TagSet, use EncOptions.TimeTag and DecOptions.TimeTag instead") } if num == 2 || num == 3 { return nil, errors.New("cbor: cannot add tag number 2 or 3 to TagSet, it's built-in and supported automatically") } if num == tagNumSelfDescribedCBOR { return nil, errors.New("cbor: cannot add tag number 55799 to TagSet, it's built-in and ignored automatically") } te := tagItem{num: []uint64{num}, opts: opts, contentType: contentType} te.num = append(te.num, nestedNum...) // Cache encoded tag numbers e := getEncodeBuffer() for _, n := range te.num { encodeHead(e, byte(cborTypeTag), n) } te.cborTagNum = make([]byte, e.Len()) copy(te.cborTagNum, e.Bytes()) putEncodeBuffer(e) return &te, nil } var ( typeTag = reflect.TypeOf(Tag{}) typeRawTag = reflect.TypeOf(RawTag{}) ) // WrongTagError describes mismatch between CBOR tag and registered tag. type WrongTagError struct { RegisteredType reflect.Type RegisteredTagNum []uint64 TagNum []uint64 } func (e *WrongTagError) Error() string { return fmt.Sprintf("cbor: wrong tag number for %s, got %v, expected %v", e.RegisteredType.String(), e.TagNum, e.RegisteredTagNum) } NVIDIA-mig-parted-47bc938/vendor/github.com/fxamacker/cbor/v2/valid.go000066400000000000000000000253001520540370700252620ustar00rootroot00000000000000// Copyright (c) Faye Amacker. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. package cbor import ( "encoding/binary" "errors" "io" "math" "strconv" "github.com/x448/float16" ) // SyntaxError is a description of a CBOR syntax error. type SyntaxError struct { msg string } func (e *SyntaxError) Error() string { return e.msg } // SemanticError is a description of a CBOR semantic error. type SemanticError struct { msg string } func (e *SemanticError) Error() string { return e.msg } // MaxNestedLevelError indicates exceeded max nested level of any combination of CBOR arrays/maps/tags. type MaxNestedLevelError struct { maxNestedLevels int } func (e *MaxNestedLevelError) Error() string { return "cbor: exceeded max nested level " + strconv.Itoa(e.maxNestedLevels) } // MaxArrayElementsError indicates exceeded max number of elements for CBOR arrays. type MaxArrayElementsError struct { maxArrayElements int } func (e *MaxArrayElementsError) Error() string { return "cbor: exceeded max number of elements " + strconv.Itoa(e.maxArrayElements) + " for CBOR array" } // MaxMapPairsError indicates exceeded max number of key-value pairs for CBOR maps. type MaxMapPairsError struct { maxMapPairs int } func (e *MaxMapPairsError) Error() string { return "cbor: exceeded max number of key-value pairs " + strconv.Itoa(e.maxMapPairs) + " for CBOR map" } // IndefiniteLengthError indicates found disallowed indefinite length items. type IndefiniteLengthError struct { t cborType } func (e *IndefiniteLengthError) Error() string { return "cbor: indefinite-length " + e.t.String() + " isn't allowed" } // TagsMdError indicates found disallowed CBOR tags. type TagsMdError struct { } func (e *TagsMdError) Error() string { return "cbor: CBOR tag isn't allowed" } // ExtraneousDataError indicates found extraneous data following well-formed CBOR data item. type ExtraneousDataError struct { numOfBytes int // number of bytes of extraneous data index int // location of extraneous data } func (e *ExtraneousDataError) Error() string { return "cbor: " + strconv.Itoa(e.numOfBytes) + " bytes of extraneous data starting at index " + strconv.Itoa(e.index) } // wellformed checks whether the CBOR data item is well-formed. // allowExtraData indicates if extraneous data is allowed after the CBOR data item. // - use allowExtraData = true when using Decoder.Decode() // - use allowExtraData = false when using Unmarshal() func (d *decoder) wellformed(allowExtraData bool, checkBuiltinTags bool) error { if len(d.data) == d.off { return io.EOF } _, err := d.wellformedInternal(0, checkBuiltinTags) if err == nil { if !allowExtraData && d.off != len(d.data) { err = &ExtraneousDataError{len(d.data) - d.off, d.off} } } return err } // wellformedInternal checks data's well-formedness and returns max depth and error. func (d *decoder) wellformedInternal(depth int, checkBuiltinTags bool) (int, error) { //nolint:gocyclo t, _, val, indefiniteLength, err := d.wellformedHeadWithIndefiniteLengthFlag() if err != nil { return 0, err } switch t { case cborTypeByteString, cborTypeTextString: if indefiniteLength { if d.dm.indefLength == IndefLengthForbidden { return 0, &IndefiniteLengthError{t} } return d.wellformedIndefiniteString(t, depth, checkBuiltinTags) } valInt := int(val) if valInt < 0 { // Detect integer overflow return 0, errors.New("cbor: " + t.String() + " length " + strconv.FormatUint(val, 10) + " is too large, causing integer overflow") } if len(d.data)-d.off < valInt { // valInt+off may overflow integer return 0, io.ErrUnexpectedEOF } d.off += valInt case cborTypeArray, cborTypeMap: depth++ if depth > d.dm.maxNestedLevels { return 0, &MaxNestedLevelError{d.dm.maxNestedLevels} } if indefiniteLength { if d.dm.indefLength == IndefLengthForbidden { return 0, &IndefiniteLengthError{t} } return d.wellformedIndefiniteArrayOrMap(t, depth, checkBuiltinTags) } valInt := int(val) if valInt < 0 { // Detect integer overflow return 0, errors.New("cbor: " + t.String() + " length " + strconv.FormatUint(val, 10) + " is too large, it would cause integer overflow") } if t == cborTypeArray { if valInt > d.dm.maxArrayElements { return 0, &MaxArrayElementsError{d.dm.maxArrayElements} } } else { if valInt > d.dm.maxMapPairs { return 0, &MaxMapPairsError{d.dm.maxMapPairs} } } count := 1 if t == cborTypeMap { count = 2 } maxDepth := depth for j := 0; j < count; j++ { for i := 0; i < valInt; i++ { var dpt int if dpt, err = d.wellformedInternal(depth, checkBuiltinTags); err != nil { return 0, err } if dpt > maxDepth { maxDepth = dpt // Save max depth } } } depth = maxDepth case cborTypeTag: if d.dm.tagsMd == TagsForbidden { return 0, &TagsMdError{} } tagNum := val // Scan nested tag numbers to avoid recursion. for { if len(d.data) == d.off { // Tag number must be followed by tag content. return 0, io.ErrUnexpectedEOF } if checkBuiltinTags { err = validBuiltinTag(tagNum, d.data[d.off]) if err != nil { return 0, err } } if d.dm.bignumTag == BignumTagForbidden && (tagNum == 2 || tagNum == 3) { return 0, &UnacceptableDataItemError{ CBORType: cborTypeTag.String(), Message: "bignum", } } if getType(d.data[d.off]) != cborTypeTag { break } if _, _, tagNum, err = d.wellformedHead(); err != nil { return 0, err } depth++ if depth > d.dm.maxNestedLevels { return 0, &MaxNestedLevelError{d.dm.maxNestedLevels} } } // Check tag content. return d.wellformedInternal(depth, checkBuiltinTags) } return depth, nil } // wellformedIndefiniteString checks indefinite length byte/text string's well-formedness and returns max depth and error. func (d *decoder) wellformedIndefiniteString(t cborType, depth int, checkBuiltinTags bool) (int, error) { var err error for { if len(d.data) == d.off { return 0, io.ErrUnexpectedEOF } if isBreakFlag(d.data[d.off]) { d.off++ break } // Peek ahead to get next type and indefinite length status. nt, ai := parseInitialByte(d.data[d.off]) if t != nt { return 0, &SyntaxError{"cbor: wrong element type " + nt.String() + " for indefinite-length " + t.String()} } if additionalInformation(ai).isIndefiniteLength() { return 0, &SyntaxError{"cbor: indefinite-length " + t.String() + " chunk is not definite-length"} } if depth, err = d.wellformedInternal(depth, checkBuiltinTags); err != nil { return 0, err } } return depth, nil } // wellformedIndefiniteArrayOrMap checks indefinite length array/map's well-formedness and returns max depth and error. func (d *decoder) wellformedIndefiniteArrayOrMap(t cborType, depth int, checkBuiltinTags bool) (int, error) { var err error maxDepth := depth i := 0 for { if len(d.data) == d.off { return 0, io.ErrUnexpectedEOF } if isBreakFlag(d.data[d.off]) { d.off++ break } var dpt int if dpt, err = d.wellformedInternal(depth, checkBuiltinTags); err != nil { return 0, err } if dpt > maxDepth { maxDepth = dpt } i++ if t == cborTypeArray { if i > d.dm.maxArrayElements { return 0, &MaxArrayElementsError{d.dm.maxArrayElements} } } else { if i%2 == 0 && i/2 > d.dm.maxMapPairs { return 0, &MaxMapPairsError{d.dm.maxMapPairs} } } } if t == cborTypeMap && i%2 == 1 { return 0, &SyntaxError{"cbor: unexpected \"break\" code"} } return maxDepth, nil } func (d *decoder) wellformedHeadWithIndefiniteLengthFlag() ( t cborType, ai byte, val uint64, indefiniteLength bool, err error, ) { t, ai, val, err = d.wellformedHead() if err != nil { return } indefiniteLength = additionalInformation(ai).isIndefiniteLength() return } func (d *decoder) wellformedHead() (t cborType, ai byte, val uint64, err error) { dataLen := len(d.data) - d.off if dataLen == 0 { return 0, 0, 0, io.ErrUnexpectedEOF } t, ai = parseInitialByte(d.data[d.off]) val = uint64(ai) d.off++ dataLen-- if ai <= maxAdditionalInformationWithoutArgument { return t, ai, val, nil } if ai == additionalInformationWith1ByteArgument { const argumentSize = 1 if dataLen < argumentSize { return 0, 0, 0, io.ErrUnexpectedEOF } val = uint64(d.data[d.off]) d.off++ if t == cborTypePrimitives && val < 32 { return 0, 0, 0, &SyntaxError{"cbor: invalid simple value " + strconv.Itoa(int(val)) + " for type " + t.String()} } return t, ai, val, nil } if ai == additionalInformationWith2ByteArgument { const argumentSize = 2 if dataLen < argumentSize { return 0, 0, 0, io.ErrUnexpectedEOF } val = uint64(binary.BigEndian.Uint16(d.data[d.off : d.off+argumentSize])) d.off += argumentSize if t == cborTypePrimitives { if err := d.acceptableFloat(float64(float16.Frombits(uint16(val)).Float32())); err != nil { return 0, 0, 0, err } } return t, ai, val, nil } if ai == additionalInformationWith4ByteArgument { const argumentSize = 4 if dataLen < argumentSize { return 0, 0, 0, io.ErrUnexpectedEOF } val = uint64(binary.BigEndian.Uint32(d.data[d.off : d.off+argumentSize])) d.off += argumentSize if t == cborTypePrimitives { if err := d.acceptableFloat(float64(math.Float32frombits(uint32(val)))); err != nil { return 0, 0, 0, err } } return t, ai, val, nil } if ai == additionalInformationWith8ByteArgument { const argumentSize = 8 if dataLen < argumentSize { return 0, 0, 0, io.ErrUnexpectedEOF } val = binary.BigEndian.Uint64(d.data[d.off : d.off+argumentSize]) d.off += argumentSize if t == cborTypePrimitives { if err := d.acceptableFloat(math.Float64frombits(val)); err != nil { return 0, 0, 0, err } } return t, ai, val, nil } if additionalInformation(ai).isIndefiniteLength() { switch t { case cborTypePositiveInt, cborTypeNegativeInt, cborTypeTag: return 0, 0, 0, &SyntaxError{"cbor: invalid additional information " + strconv.Itoa(int(ai)) + " for type " + t.String()} case cborTypePrimitives: // 0xff (break code) should not be outside wellformedIndefinite(). return 0, 0, 0, &SyntaxError{"cbor: unexpected \"break\" code"} } return t, ai, val, nil } // ai == 28, 29, 30 return 0, 0, 0, &SyntaxError{"cbor: invalid additional information " + strconv.Itoa(int(ai)) + " for type " + t.String()} } func (d *decoder) acceptableFloat(f float64) error { switch { case d.dm.nanDec == NaNDecodeForbidden && math.IsNaN(f): return &UnacceptableDataItemError{ CBORType: cborTypePrimitives.String(), Message: "floating-point NaN", } case d.dm.infDec == InfDecodeForbidden && math.IsInf(f, 0): return &UnacceptableDataItemError{ CBORType: cborTypePrimitives.String(), Message: "floating-point infinity", } } return nil } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/000077500000000000000000000000001520540370700217655ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/000077500000000000000000000000001520540370700227305ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/.golangci.yaml000066400000000000000000000006241520540370700254570ustar00rootroot00000000000000version: "2" run: timeout: 1m tests: true linters: default: none enable: # please keep this alphabetized - asasalint - asciicheck - copyloopvar - dupl - errcheck - forcetypeassert - goconst - gocritic - govet - ineffassign - misspell - musttag - revive - staticcheck - unused issues: max-issues-per-linter: 0 max-same-issues: 10 NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/CHANGELOG.md000066400000000000000000000002141520540370700245360ustar00rootroot00000000000000# CHANGELOG ## v1.0.0-rc1 This is the first logged release. Major changes (including breaking changes) have occurred since earlier tags. NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/CONTRIBUTING.md000066400000000000000000000011031520540370700251540ustar00rootroot00000000000000# Contributing Logr is open to pull-requests, provided they fit within the intended scope of the project. Specifically, this library aims to be VERY small and minimalist, with no external dependencies. ## Compatibility This project intends to follow [semantic versioning](http://semver.org) and is very strict about compatibility. Any proposed changes MUST follow those rules. ## Performance As a logging library, logr must be as light-weight as possible. Any proposed code change must include results of running the [benchmark](./benchmark) before and after the change. NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/LICENSE000066400000000000000000000261351520540370700237440ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/README.md000066400000000000000000000460071520540370700242160ustar00rootroot00000000000000# A minimal logging API for Go [![Go Reference](https://pkg.go.dev/badge/github.com/go-logr/logr.svg)](https://pkg.go.dev/github.com/go-logr/logr) [![Go Report Card](https://goreportcard.com/badge/github.com/go-logr/logr)](https://goreportcard.com/report/github.com/go-logr/logr) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/go-logr/logr/badge)](https://securityscorecards.dev/viewer/?platform=github.com&org=go-logr&repo=logr) logr offers an(other) opinion on how Go programs and libraries can do logging without becoming coupled to a particular logging implementation. This is not an implementation of logging - it is an API. In fact it is two APIs with two different sets of users. The `Logger` type is intended for application and library authors. It provides a relatively small API which can be used everywhere you want to emit logs. It defers the actual act of writing logs (to files, to stdout, or whatever) to the `LogSink` interface. The `LogSink` interface is intended for logging library implementers. It is a pure interface which can be implemented by logging frameworks to provide the actual logging functionality. This decoupling allows application and library developers to write code in terms of `logr.Logger` (which has very low dependency fan-out) while the implementation of logging is managed "up stack" (e.g. in or near `main()`.) Application developers can then switch out implementations as necessary. Many people assert that libraries should not be logging, and as such efforts like this are pointless. Those people are welcome to convince the authors of the tens-of-thousands of libraries that *DO* write logs that they are all wrong. In the meantime, logr takes a more practical approach. ## Typical usage Somewhere, early in an application's life, it will make a decision about which logging library (implementation) it actually wants to use. Something like: ``` func main() { // ... other setup code ... // Create the "root" logger. We have chosen the "logimpl" implementation, // which takes some initial parameters and returns a logr.Logger. logger := logimpl.New(param1, param2) // ... other setup code ... ``` Most apps will call into other libraries, create structures to govern the flow, etc. The `logr.Logger` object can be passed to these other libraries, stored in structs, or even used as a package-global variable, if needed. For example: ``` app := createTheAppObject(logger) app.Run() ``` Outside of this early setup, no other packages need to know about the choice of implementation. They write logs in terms of the `logr.Logger` that they received: ``` type appObject struct { // ... other fields ... logger logr.Logger // ... other fields ... } func (app *appObject) Run() { app.logger.Info("starting up", "timestamp", time.Now()) // ... app code ... ``` ## Background If the Go standard library had defined an interface for logging, this project probably would not be needed. Alas, here we are. When the Go developers started developing such an interface with [slog](https://github.com/golang/go/issues/56345), they adopted some of the logr design but also left out some parts and changed others: | Feature | logr | slog | |---------|------|------| | High-level API | `Logger` (passed by value) | `Logger` (passed by [pointer](https://github.com/golang/go/issues/59126)) | | Low-level API | `LogSink` | `Handler` | | Stack unwinding | done by `LogSink` | done by `Logger` | | Skipping helper functions | `WithCallDepth`, `WithCallStackHelper` | [not supported by Logger](https://github.com/golang/go/issues/59145) | | Generating a value for logging on demand | `Marshaler` | `LogValuer` | | Log levels | >= 0, higher meaning "less important" | positive and negative, with 0 for "info" and higher meaning "more important" | | Error log entries | always logged, don't have a verbosity level | normal log entries with level >= `LevelError` | | Passing logger via context | `NewContext`, `FromContext` | no API | | Adding a name to a logger | `WithName` | no API | | Modify verbosity of log entries in a call chain | `V` | no API | | Grouping of key/value pairs | not supported | `WithGroup`, `GroupValue` | | Pass context for extracting additional values | no API | API variants like `InfoCtx` | The high-level slog API is explicitly meant to be one of many different APIs that can be layered on top of a shared `slog.Handler`. logr is one such alternative API, with [interoperability](#slog-interoperability) provided by some conversion functions. ### Inspiration Before you consider this package, please read [this blog post by the inimitable Dave Cheney][warning-makes-no-sense]. We really appreciate what he has to say, and it largely aligns with our own experiences. ### Differences from Dave's ideas The main differences are: 1. Dave basically proposes doing away with the notion of a logging API in favor of `fmt.Printf()`. We disagree, especially when you consider things like output locations, timestamps, file and line decorations, and structured logging. This package restricts the logging API to just 2 types of logs: info and error. Info logs are things you want to tell the user which are not errors. Error logs are, well, errors. If your code receives an `error` from a subordinate function call and is logging that `error` *and not returning it*, use error logs. 2. Verbosity-levels on info logs. This gives developers a chance to indicate arbitrary grades of importance for info logs, without assigning names with semantic meaning such as "warning", "trace", and "debug." Superficially this may feel very similar, but the primary difference is the lack of semantics. Because verbosity is a numerical value, it's safe to assume that an app running with higher verbosity means more (and less important) logs will be generated. ## Implementations (non-exhaustive) There are implementations for the following logging libraries: - **a function** (can bridge to non-structured libraries): [funcr](https://github.com/go-logr/logr/tree/master/funcr) - **a testing.T** (for use in Go tests, with JSON-like output): [testr](https://github.com/go-logr/logr/tree/master/testr) - **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr) - **k8s.io/klog** (for Kubernetes): [klogr](https://git.k8s.io/klog/klogr) - **a testing.T** (with klog-like text output): [ktesting](https://git.k8s.io/klog/ktesting) - **go.uber.org/zap**: [zapr](https://github.com/go-logr/zapr) - **log** (the Go standard library logger): [stdr](https://github.com/go-logr/stdr) - **github.com/sirupsen/logrus**: [logrusr](https://github.com/bombsimon/logrusr) - **github.com/wojas/genericr**: [genericr](https://github.com/wojas/genericr) (makes it easy to implement your own backend) - **logfmt** (Heroku style [logging](https://www.brandur.org/logfmt)): [logfmtr](https://github.com/iand/logfmtr) - **github.com/rs/zerolog**: [zerologr](https://github.com/go-logr/zerologr) - **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0) - **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing) ## slog interoperability Interoperability goes both ways, using the `logr.Logger` API with a `slog.Handler` and using the `slog.Logger` API with a `logr.LogSink`. `FromSlogHandler` and `ToSlogHandler` convert between a `logr.Logger` and a `slog.Handler`. As usual, `slog.New` can be used to wrap such a `slog.Handler` in the high-level slog API. ### Using a `logr.LogSink` as backend for slog Ideally, a logr sink implementation should support both logr and slog by implementing both the normal logr interface(s) and `SlogSink`. Because of a conflict in the parameters of the common `Enabled` method, it is [not possible to implement both slog.Handler and logr.Sink in the same type](https://github.com/golang/go/issues/59110). If both are supported, log calls can go from the high-level APIs to the backend without the need to convert parameters. `FromSlogHandler` and `ToSlogHandler` can convert back and forth without adding additional wrappers, with one exception: when `Logger.V` was used to adjust the verbosity for a `slog.Handler`, then `ToSlogHandler` has to use a wrapper which adjusts the verbosity for future log calls. Such an implementation should also support values that implement specific interfaces from both packages for logging (`logr.Marshaler`, `slog.LogValuer`, `slog.GroupValue`). logr does not convert those. Not supporting slog has several drawbacks: - Recording source code locations works correctly if the handler gets called through `slog.Logger`, but may be wrong in other cases. That's because a `logr.Sink` does its own stack unwinding instead of using the program counter provided by the high-level API. - slog levels <= 0 can be mapped to logr levels by negating the level without a loss of information. But all slog levels > 0 (e.g. `slog.LevelWarning` as used by `slog.Logger.Warn`) must be mapped to 0 before calling the sink because logr does not support "more important than info" levels. - The slog group concept is supported by prefixing each key in a key/value pair with the group names, separated by a dot. For structured output like JSON it would be better to group the key/value pairs inside an object. - Special slog values and interfaces don't work as expected. - The overhead is likely to be higher. These drawbacks are severe enough that applications using a mixture of slog and logr should switch to a different backend. ### Using a `slog.Handler` as backend for logr Using a plain `slog.Handler` without support for logr works better than the other direction: - All logr verbosity levels can be mapped 1:1 to their corresponding slog level by negating them. - Stack unwinding is done by the `SlogSink` and the resulting program counter is passed to the `slog.Handler`. - Names added via `Logger.WithName` are gathered and recorded in an additional attribute with `logger` as key and the names separated by slash as value. - `Logger.Error` is turned into a log record with `slog.LevelError` as level and an additional attribute with `err` as key, if an error was provided. The main drawback is that `logr.Marshaler` will not be supported. Types should ideally support both `logr.Marshaler` and `slog.Valuer`. If compatibility with logr implementations without slog support is not important, then `slog.Valuer` is sufficient. ### Context support for slog Storing a logger in a `context.Context` is not supported by slog. `NewContextWithSlogLogger` and `FromContextAsSlogLogger` can be used to fill this gap. They store and retrieve a `slog.Logger` pointer under the same context key that is also used by `NewContext` and `FromContext` for `logr.Logger` value. When `NewContextWithSlogLogger` is followed by `FromContext`, the latter will automatically convert the `slog.Logger` to a `logr.Logger`. `FromContextAsSlogLogger` does the same for the other direction. With this approach, binaries which use either slog or logr are as efficient as possible with no unnecessary allocations. This is also why the API stores a `slog.Logger` pointer: when storing a `slog.Handler`, creating a `slog.Logger` on retrieval would need to allocate one. The downside is that switching back and forth needs more allocations. Because logr is the API that is already in use by different packages, in particular Kubernetes, the recommendation is to use the `logr.Logger` API in code which uses contextual logging. An alternative to adding values to a logger and storing that logger in the context is to store the values in the context and to configure a logging backend to extract those values when emitting log entries. This only works when log calls are passed the context, which is not supported by the logr API. With the slog API, it is possible, but not required. https://github.com/veqryn/slog-context is a package for slog which provides additional support code for this approach. It also contains wrappers for the context functions in logr, so developers who prefer to not use the logr APIs directly can use those instead and the resulting code will still be interoperable with logr. ## FAQ ### Conceptual #### Why structured logging? - **Structured logs are more easily queryable**: Since you've got key-value pairs, it's much easier to query your structured logs for particular values by filtering on the contents of a particular key -- think searching request logs for error codes, Kubernetes reconcilers for the name and namespace of the reconciled object, etc. - **Structured logging makes it easier to have cross-referenceable logs**: Similarly to searchability, if you maintain conventions around your keys, it becomes easy to gather all log lines related to a particular concept. - **Structured logs allow better dimensions of filtering**: if you have structure to your logs, you've got more precise control over how much information is logged -- you might choose in a particular configuration to log certain keys but not others, only log lines where a certain key matches a certain value, etc., instead of just having v-levels and names to key off of. - **Structured logs better represent structured data**: sometimes, the data that you want to log is inherently structured (think tuple-link objects.) Structured logs allow you to preserve that structure when outputting. #### Why V-levels? **V-levels give operators an easy way to control the chattiness of log operations**. V-levels provide a way for a given package to distinguish the relative importance or verbosity of a given log message. Then, if a particular logger or package is logging too many messages, the user of the package can simply change the v-levels for that library. #### Why not named levels, like Info/Warning/Error? Read [Dave Cheney's post][warning-makes-no-sense]. Then read [Differences from Dave's ideas](#differences-from-daves-ideas). #### Why not allow format strings, too? **Format strings negate many of the benefits of structured logs**: - They're not easily searchable without resorting to fuzzy searching, regular expressions, etc. - They don't store structured data well, since contents are flattened into a string. - They're not cross-referenceable. - They don't compress easily, since the message is not constant. (Unless you turn positional parameters into key-value pairs with numerical keys, at which point you've gotten key-value logging with meaningless keys.) ### Practical #### Why key-value pairs, and not a map? Key-value pairs are *much* easier to optimize, especially around allocations. Zap (a structured logger that inspired logr's interface) has [performance measurements](https://github.com/uber-go/zap#performance) that show this quite nicely. While the interface ends up being a little less obvious, you get potentially better performance, plus avoid making users type `map[string]string{}` every time they want to log. #### What if my V-levels differ between libraries? That's fine. Control your V-levels on a per-logger basis, and use the `WithName` method to pass different loggers to different libraries. Generally, you should take care to ensure that you have relatively consistent V-levels within a given logger, however, as this makes deciding on what verbosity of logs to request easier. #### But I really want to use a format string! That's not actually a question. Assuming your question is "how do I convert my mental model of logging with format strings to logging with constant messages": 1. Figure out what the error actually is, as you'd write in a TL;DR style, and use that as a message. 2. For every place you'd write a format specifier, look to the word before it, and add that as a key value pair. For instance, consider the following examples (all taken from spots in the Kubernetes codebase): - `klog.V(4).Infof("Client is returning errors: code %v, error %v", responseCode, err)` becomes `logger.Error(err, "client returned an error", "code", responseCode)` - `klog.V(4).Infof("Got a Retry-After %ds response for attempt %d to %v", seconds, retries, url)` becomes `logger.V(4).Info("got a retry-after response when requesting url", "attempt", retries, "after seconds", seconds, "url", url)` If you *really* must use a format string, use it in a key's value, and call `fmt.Sprintf` yourself. For instance: `log.Printf("unable to reflect over type %T")` becomes `logger.Info("unable to reflect over type", "type", fmt.Sprintf("%T"))`. In general though, the cases where this is necessary should be few and far between. #### How do I choose my V-levels? This is basically the only hard constraint: increase V-levels to denote more verbose or more debug-y logs. Otherwise, you can start out with `0` as "you always want to see this", `1` as "common logging that you might *possibly* want to turn off", and `10` as "I would like to performance-test your log collection stack." Then gradually choose levels in between as you need them, working your way down from 10 (for debug and trace style logs) and up from 1 (for chattier info-type logs). For reference, slog pre-defines -4 for debug logs (corresponds to 4 in logr), which matches what is [recommended for Kubernetes](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md#what-method-to-use). #### How do I choose my keys? Keys are fairly flexible, and can hold more or less any string value. For best compatibility with implementations and consistency with existing code in other projects, there are a few conventions you should consider. - Make your keys human-readable. - Constant keys are generally a good idea. - Be consistent across your codebase. - Keys should naturally match parts of the message string. - Use lower case for simple keys and [lowerCamelCase](https://en.wiktionary.org/wiki/lowerCamelCase) for more complex ones. Kubernetes is one example of a project that has [adopted that convention](https://github.com/kubernetes/community/blob/HEAD/contributors/devel/sig-instrumentation/migration-to-structured-logging.md#name-arguments). While key names are mostly unrestricted (and spaces are acceptable), it's generally a good idea to stick to printable ascii characters, or at least match the general character set of your log lines. #### Why should keys be constant values? The point of structured logging is to make later log processing easier. Your keys are, effectively, the schema of each log message. If you use different keys across instances of the same log line, you will make your structured logs much harder to use. `Sprintf()` is for values, not for keys! #### Why is this not a pure interface? The Logger type is implemented as a struct in order to allow the Go compiler to optimize things like high-V `Info` logs that are not triggered. Not all of these implementations are implemented yet, but this structure was suggested as a way to ensure they *can* be implemented. All of the real work is behind the `LogSink` interface. [warning-makes-no-sense]: http://dave.cheney.net/2015/11/05/lets-talk-about-logging NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/SECURITY.md000066400000000000000000000013271520540370700245240ustar00rootroot00000000000000# Security Policy If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released. You may submit the report in the following ways: - send an email to go-logr-security@googlegroups.com - send us a [private vulnerability report](https://github.com/go-logr/logr/security/advisories/new) Please provide the following information in your report: - A description of the vulnerability and its impact - How to reproduce the issue We ask that you give us 90 days to work on a fix before public exposure. NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/context.go000066400000000000000000000017671520540370700247560ustar00rootroot00000000000000/* Copyright 2023 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package logr // contextKey is how we find Loggers in a context.Context. With Go < 1.21, // the value is always a Logger value. With Go >= 1.21, the value can be a // Logger value or a slog.Logger pointer. type contextKey struct{} // notFoundError exists to carry an IsNotFound method. type notFoundError struct{} func (notFoundError) Error() string { return "no logr.Logger was present" } func (notFoundError) IsNotFound() bool { return true } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/context_noslog.go000066400000000000000000000025371520540370700263330ustar00rootroot00000000000000//go:build !go1.21 // +build !go1.21 /* Copyright 2019 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package logr import ( "context" ) // FromContext returns a Logger from ctx or an error if no Logger is found. func FromContext(ctx context.Context) (Logger, error) { if v, ok := ctx.Value(contextKey{}).(Logger); ok { return v, nil } return Logger{}, notFoundError{} } // FromContextOrDiscard returns a Logger from ctx. If no Logger is found, this // returns a Logger that discards all log messages. func FromContextOrDiscard(ctx context.Context) Logger { if v, ok := ctx.Value(contextKey{}).(Logger); ok { return v } return Discard() } // NewContext returns a new Context, derived from ctx, which carries the // provided Logger. func NewContext(ctx context.Context, logger Logger) context.Context { return context.WithValue(ctx, contextKey{}, logger) } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/context_slog.go000066400000000000000000000043551520540370700257760ustar00rootroot00000000000000//go:build go1.21 // +build go1.21 /* Copyright 2019 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package logr import ( "context" "fmt" "log/slog" ) // FromContext returns a Logger from ctx or an error if no Logger is found. func FromContext(ctx context.Context) (Logger, error) { v := ctx.Value(contextKey{}) if v == nil { return Logger{}, notFoundError{} } switch v := v.(type) { case Logger: return v, nil case *slog.Logger: return FromSlogHandler(v.Handler()), nil default: // Not reached. panic(fmt.Sprintf("unexpected value type for logr context key: %T", v)) } } // FromContextAsSlogLogger returns a slog.Logger from ctx or nil if no such Logger is found. func FromContextAsSlogLogger(ctx context.Context) *slog.Logger { v := ctx.Value(contextKey{}) if v == nil { return nil } switch v := v.(type) { case Logger: return slog.New(ToSlogHandler(v)) case *slog.Logger: return v default: // Not reached. panic(fmt.Sprintf("unexpected value type for logr context key: %T", v)) } } // FromContextOrDiscard returns a Logger from ctx. If no Logger is found, this // returns a Logger that discards all log messages. func FromContextOrDiscard(ctx context.Context) Logger { if logger, err := FromContext(ctx); err == nil { return logger } return Discard() } // NewContext returns a new Context, derived from ctx, which carries the // provided Logger. func NewContext(ctx context.Context, logger Logger) context.Context { return context.WithValue(ctx, contextKey{}, logger) } // NewContextWithSlogLogger returns a new Context, derived from ctx, which carries the // provided slog.Logger. func NewContextWithSlogLogger(ctx context.Context, logger *slog.Logger) context.Context { return context.WithValue(ctx, contextKey{}, logger) } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/discard.go000066400000000000000000000015011520540370700246650ustar00rootroot00000000000000/* Copyright 2020 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package logr // Discard returns a Logger that discards all messages logged to it. It can be // used whenever the caller is not interested in the logs. Logger instances // produced by this function always compare as equal. func Discard() Logger { return New(nil) } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/logr.go000066400000000000000000000503431520540370700242270ustar00rootroot00000000000000/* Copyright 2019 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // This design derives from Dave Cheney's blog: // http://dave.cheney.net/2015/11/05/lets-talk-about-logging // Package logr defines a general-purpose logging API and abstract interfaces // to back that API. Packages in the Go ecosystem can depend on this package, // while callers can implement logging with whatever backend is appropriate. // // # Usage // // Logging is done using a Logger instance. Logger is a concrete type with // methods, which defers the actual logging to a LogSink interface. The main // methods of Logger are Info() and Error(). Arguments to Info() and Error() // are key/value pairs rather than printf-style formatted strings, emphasizing // "structured logging". // // With Go's standard log package, we might write: // // log.Printf("setting target value %s", targetValue) // // With logr's structured logging, we'd write: // // logger.Info("setting target", "value", targetValue) // // Errors are much the same. Instead of: // // log.Printf("failed to open the pod bay door for user %s: %v", user, err) // // We'd write: // // logger.Error(err, "failed to open the pod bay door", "user", user) // // Info() and Error() are very similar, but they are separate methods so that // LogSink implementations can choose to do things like attach additional // information (such as stack traces) on calls to Error(). Error() messages are // always logged, regardless of the current verbosity. If there is no error // instance available, passing nil is valid. // // # Verbosity // // Often we want to log information only when the application in "verbose // mode". To write log lines that are more verbose, Logger has a V() method. // The higher the V-level of a log line, the less critical it is considered. // Log-lines with V-levels that are not enabled (as per the LogSink) will not // be written. Level V(0) is the default, and logger.V(0).Info() has the same // meaning as logger.Info(). Negative V-levels have the same meaning as V(0). // Error messages do not have a verbosity level and are always logged. // // Where we might have written: // // if flVerbose >= 2 { // log.Printf("an unusual thing happened") // } // // We can write: // // logger.V(2).Info("an unusual thing happened") // // # Logger Names // // Logger instances can have name strings so that all messages logged through // that instance have additional context. For example, you might want to add // a subsystem name: // // logger.WithName("compactor").Info("started", "time", time.Now()) // // The WithName() method returns a new Logger, which can be passed to // constructors or other functions for further use. Repeated use of WithName() // will accumulate name "segments". These name segments will be joined in some // way by the LogSink implementation. It is strongly recommended that name // segments contain simple identifiers (letters, digits, and hyphen), and do // not contain characters that could muddle the log output or confuse the // joining operation (e.g. whitespace, commas, periods, slashes, brackets, // quotes, etc). // // # Saved Values // // Logger instances can store any number of key/value pairs, which will be // logged alongside all messages logged through that instance. For example, // you might want to create a Logger instance per managed object: // // With the standard log package, we might write: // // log.Printf("decided to set field foo to value %q for object %s/%s", // targetValue, object.Namespace, object.Name) // // With logr we'd write: // // // Elsewhere: set up the logger to log the object name. // obj.logger = mainLogger.WithValues( // "name", obj.name, "namespace", obj.namespace) // // // later on... // obj.logger.Info("setting foo", "value", targetValue) // // # Best Practices // // Logger has very few hard rules, with the goal that LogSink implementations // might have a lot of freedom to differentiate. There are, however, some // things to consider. // // The log message consists of a constant message attached to the log line. // This should generally be a simple description of what's occurring, and should // never be a format string. Variable information can then be attached using // named values. // // Keys are arbitrary strings, but should generally be constant values. Values // may be any Go value, but how the value is formatted is determined by the // LogSink implementation. // // Logger instances are meant to be passed around by value. Code that receives // such a value can call its methods without having to check whether the // instance is ready for use. // // The zero logger (= Logger{}) is identical to Discard() and discards all log // entries. Code that receives a Logger by value can simply call it, the methods // will never crash. For cases where passing a logger is optional, a pointer to Logger // should be used. // // # Key Naming Conventions // // Keys are not strictly required to conform to any specification or regex, but // it is recommended that they: // - be human-readable and meaningful (not auto-generated or simple ordinals) // - be constant (not dependent on input data) // - contain only printable characters // - not contain whitespace or punctuation // - use lower case for simple keys and lowerCamelCase for more complex ones // // These guidelines help ensure that log data is processed properly regardless // of the log implementation. For example, log implementations will try to // output JSON data or will store data for later database (e.g. SQL) queries. // // While users are generally free to use key names of their choice, it's // generally best to avoid using the following keys, as they're frequently used // by implementations: // - "caller": the calling information (file/line) of a particular log line // - "error": the underlying error value in the `Error` method // - "level": the log level // - "logger": the name of the associated logger // - "msg": the log message // - "stacktrace": the stack trace associated with a particular log line or // error (often from the `Error` message) // - "ts": the timestamp for a log line // // Implementations are encouraged to make use of these keys to represent the // above concepts, when necessary (for example, in a pure-JSON output form, it // would be necessary to represent at least message and timestamp as ordinary // named values). // // # Break Glass // // Implementations may choose to give callers access to the underlying // logging implementation. The recommended pattern for this is: // // // Underlier exposes access to the underlying logging implementation. // // Since callers only have a logr.Logger, they have to know which // // implementation is in use, so this interface is less of an abstraction // // and more of way to test type conversion. // type Underlier interface { // GetUnderlying() // } // // Logger grants access to the sink to enable type assertions like this: // // func DoSomethingWithImpl(log logr.Logger) { // if underlier, ok := log.GetSink().(impl.Underlier); ok { // implLogger := underlier.GetUnderlying() // ... // } // } // // Custom `With*` functions can be implemented by copying the complete // Logger struct and replacing the sink in the copy: // // // WithFooBar changes the foobar parameter in the log sink and returns a // // new logger with that modified sink. It does nothing for loggers where // // the sink doesn't support that parameter. // func WithFoobar(log logr.Logger, foobar int) logr.Logger { // if foobarLogSink, ok := log.GetSink().(FoobarSink); ok { // log = log.WithSink(foobarLogSink.WithFooBar(foobar)) // } // return log // } // // Don't use New to construct a new Logger with a LogSink retrieved from an // existing Logger. Source code attribution might not work correctly and // unexported fields in Logger get lost. // // Beware that the same LogSink instance may be shared by different logger // instances. Calling functions that modify the LogSink will affect all of // those. package logr // New returns a new Logger instance. This is primarily used by libraries // implementing LogSink, rather than end users. Passing a nil sink will create // a Logger which discards all log lines. func New(sink LogSink) Logger { logger := Logger{} logger.setSink(sink) if sink != nil { sink.Init(runtimeInfo) } return logger } // setSink stores the sink and updates any related fields. It mutates the // logger and thus is only safe to use for loggers that are not currently being // used concurrently. func (l *Logger) setSink(sink LogSink) { l.sink = sink } // GetSink returns the stored sink. func (l Logger) GetSink() LogSink { return l.sink } // WithSink returns a copy of the logger with the new sink. func (l Logger) WithSink(sink LogSink) Logger { l.setSink(sink) return l } // Logger is an interface to an abstract logging implementation. This is a // concrete type for performance reasons, but all the real work is passed on to // a LogSink. Implementations of LogSink should provide their own constructors // that return Logger, not LogSink. // // The underlying sink can be accessed through GetSink and be modified through // WithSink. This enables the implementation of custom extensions (see "Break // Glass" in the package documentation). Normally the sink should be used only // indirectly. type Logger struct { sink LogSink level int } // Enabled tests whether this Logger is enabled. For example, commandline // flags might be used to set the logging verbosity and disable some info logs. func (l Logger) Enabled() bool { // Some implementations of LogSink look at the caller in Enabled (e.g. // different verbosity levels per package or file), but we only pass one // CallDepth in (via Init). This means that all calls from Logger to the // LogSink's Enabled, Info, and Error methods must have the same number of // frames. In other words, Logger methods can't call other Logger methods // which call these LogSink methods unless we do it the same in all paths. return l.sink != nil && l.sink.Enabled(l.level) } // Info logs a non-error message with the given key/value pairs as context. // // The msg argument should be used to add some constant description to the log // line. The key/value pairs can then be used to add additional variable // information. The key/value pairs must alternate string keys and arbitrary // values. func (l Logger) Info(msg string, keysAndValues ...any) { if l.sink == nil { return } if l.sink.Enabled(l.level) { // see comment in Enabled if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { withHelper.GetCallStackHelper()() } l.sink.Info(l.level, msg, keysAndValues...) } } // Error logs an error, with the given message and key/value pairs as context. // It functions similarly to Info, but may have unique behavior, and should be // preferred for logging errors (see the package documentations for more // information). The log message will always be emitted, regardless of // verbosity level. // // The msg argument should be used to add context to any underlying error, // while the err argument should be used to attach the actual error that // triggered this log line, if present. The err parameter is optional // and nil may be passed instead of an error instance. func (l Logger) Error(err error, msg string, keysAndValues ...any) { if l.sink == nil { return } if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { withHelper.GetCallStackHelper()() } l.sink.Error(err, msg, keysAndValues...) } // V returns a new Logger instance for a specific verbosity level, relative to // this Logger. In other words, V-levels are additive. A higher verbosity // level means a log message is less important. Negative V-levels are treated // as 0. func (l Logger) V(level int) Logger { if l.sink == nil { return l } if level < 0 { level = 0 } l.level += level return l } // GetV returns the verbosity level of the logger. If the logger's LogSink is // nil as in the Discard logger, this will always return 0. func (l Logger) GetV() int { // 0 if l.sink nil because of the if check in V above. return l.level } // WithValues returns a new Logger instance with additional key/value pairs. // See Info for documentation on how key/value pairs work. func (l Logger) WithValues(keysAndValues ...any) Logger { if l.sink == nil { return l } l.setSink(l.sink.WithValues(keysAndValues...)) return l } // WithName returns a new Logger instance with the specified name element added // to the Logger's name. Successive calls with WithName append additional // suffixes to the Logger's name. It's strongly recommended that name segments // contain only letters, digits, and hyphens (see the package documentation for // more information). func (l Logger) WithName(name string) Logger { if l.sink == nil { return l } l.setSink(l.sink.WithName(name)) return l } // WithCallDepth returns a Logger instance that offsets the call stack by the // specified number of frames when logging call site information, if possible. // This is useful for users who have helper functions between the "real" call // site and the actual calls to Logger methods. If depth is 0 the attribution // should be to the direct caller of this function. If depth is 1 the // attribution should skip 1 call frame, and so on. Successive calls to this // are additive. // // If the underlying log implementation supports a WithCallDepth(int) method, // it will be called and the result returned. If the implementation does not // support CallDepthLogSink, the original Logger will be returned. // // To skip one level, WithCallStackHelper() should be used instead of // WithCallDepth(1) because it works with implementions that support the // CallDepthLogSink and/or CallStackHelperLogSink interfaces. func (l Logger) WithCallDepth(depth int) Logger { if l.sink == nil { return l } if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { l.setSink(withCallDepth.WithCallDepth(depth)) } return l } // WithCallStackHelper returns a new Logger instance that skips the direct // caller when logging call site information, if possible. This is useful for // users who have helper functions between the "real" call site and the actual // calls to Logger methods and want to support loggers which depend on marking // each individual helper function, like loggers based on testing.T. // // In addition to using that new logger instance, callers also must call the // returned function. // // If the underlying log implementation supports a WithCallDepth(int) method, // WithCallDepth(1) will be called to produce a new logger. If it supports a // WithCallStackHelper() method, that will be also called. If the // implementation does not support either of these, the original Logger will be // returned. func (l Logger) WithCallStackHelper() (func(), Logger) { if l.sink == nil { return func() {}, l } var helper func() if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { l.setSink(withCallDepth.WithCallDepth(1)) } if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { helper = withHelper.GetCallStackHelper() } else { helper = func() {} } return helper, l } // IsZero returns true if this logger is an uninitialized zero value func (l Logger) IsZero() bool { return l.sink == nil } // RuntimeInfo holds information that the logr "core" library knows which // LogSinks might want to know. type RuntimeInfo struct { // CallDepth is the number of call frames the logr library adds between the // end-user and the LogSink. LogSink implementations which choose to print // the original logging site (e.g. file & line) should climb this many // additional frames to find it. CallDepth int } // runtimeInfo is a static global. It must not be changed at run time. var runtimeInfo = RuntimeInfo{ CallDepth: 1, } // LogSink represents a logging implementation. End-users will generally not // interact with this type. type LogSink interface { // Init receives optional information about the logr library for LogSink // implementations that need it. Init(info RuntimeInfo) // Enabled tests whether this LogSink is enabled at the specified V-level. // For example, commandline flags might be used to set the logging // verbosity and disable some info logs. Enabled(level int) bool // Info logs a non-error message with the given key/value pairs as context. // The level argument is provided for optional logging. This method will // only be called when Enabled(level) is true. See Logger.Info for more // details. Info(level int, msg string, keysAndValues ...any) // Error logs an error, with the given message and key/value pairs as // context. See Logger.Error for more details. Error(err error, msg string, keysAndValues ...any) // WithValues returns a new LogSink with additional key/value pairs. See // Logger.WithValues for more details. WithValues(keysAndValues ...any) LogSink // WithName returns a new LogSink with the specified name appended. See // Logger.WithName for more details. WithName(name string) LogSink } // CallDepthLogSink represents a LogSink that knows how to climb the call stack // to identify the original call site and can offset the depth by a specified // number of frames. This is useful for users who have helper functions // between the "real" call site and the actual calls to Logger methods. // Implementations that log information about the call site (such as file, // function, or line) would otherwise log information about the intermediate // helper functions. // // This is an optional interface and implementations are not required to // support it. type CallDepthLogSink interface { // WithCallDepth returns a LogSink that will offset the call // stack by the specified number of frames when logging call // site information. // // If depth is 0, the LogSink should skip exactly the number // of call frames defined in RuntimeInfo.CallDepth when Info // or Error are called, i.e. the attribution should be to the // direct caller of Logger.Info or Logger.Error. // // If depth is 1 the attribution should skip 1 call frame, and so on. // Successive calls to this are additive. WithCallDepth(depth int) LogSink } // CallStackHelperLogSink represents a LogSink that knows how to climb // the call stack to identify the original call site and can skip // intermediate helper functions if they mark themselves as // helper. Go's testing package uses that approach. // // This is useful for users who have helper functions between the // "real" call site and the actual calls to Logger methods. // Implementations that log information about the call site (such as // file, function, or line) would otherwise log information about the // intermediate helper functions. // // This is an optional interface and implementations are not required // to support it. Implementations that choose to support this must not // simply implement it as WithCallDepth(1), because // Logger.WithCallStackHelper will call both methods if they are // present. This should only be implemented for LogSinks that actually // need it, as with testing.T. type CallStackHelperLogSink interface { // GetCallStackHelper returns a function that must be called // to mark the direct caller as helper function when logging // call site information. GetCallStackHelper() func() } // Marshaler is an optional interface that logged values may choose to // implement. Loggers with structured output, such as JSON, should // log the object return by the MarshalLog method instead of the // original value. type Marshaler interface { // MarshalLog can be used to: // - ensure that structs are not logged as strings when the original // value has a String method: return a different type without a // String method // - select which fields of a complex type should get logged: // return a simpler struct with fewer fields // - log unexported fields: return a different struct // with exported fields // // It may return any value of any type. MarshalLog() any } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/sloghandler.go000066400000000000000000000131241520540370700255620ustar00rootroot00000000000000//go:build go1.21 // +build go1.21 /* Copyright 2023 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package logr import ( "context" "log/slog" ) type slogHandler struct { // May be nil, in which case all logs get discarded. sink LogSink // Non-nil if sink is non-nil and implements SlogSink. slogSink SlogSink // groupPrefix collects values from WithGroup calls. It gets added as // prefix to value keys when handling a log record. groupPrefix string // levelBias can be set when constructing the handler to influence the // slog.Level of log records. A positive levelBias reduces the // slog.Level value. slog has no API to influence this value after the // handler got created, so it can only be set indirectly through // Logger.V. levelBias slog.Level } var _ slog.Handler = &slogHandler{} // groupSeparator is used to concatenate WithGroup names and attribute keys. const groupSeparator = "." // GetLevel is used for black box unit testing. func (l *slogHandler) GetLevel() slog.Level { return l.levelBias } func (l *slogHandler) Enabled(_ context.Context, level slog.Level) bool { return l.sink != nil && (level >= slog.LevelError || l.sink.Enabled(l.levelFromSlog(level))) } func (l *slogHandler) Handle(ctx context.Context, record slog.Record) error { if l.slogSink != nil { // Only adjust verbosity level of log entries < slog.LevelError. if record.Level < slog.LevelError { record.Level -= l.levelBias } return l.slogSink.Handle(ctx, record) } // No need to check for nil sink here because Handle will only be called // when Enabled returned true. kvList := make([]any, 0, 2*record.NumAttrs()) record.Attrs(func(attr slog.Attr) bool { kvList = attrToKVs(attr, l.groupPrefix, kvList) return true }) if record.Level >= slog.LevelError { l.sinkWithCallDepth().Error(nil, record.Message, kvList...) } else { level := l.levelFromSlog(record.Level) l.sinkWithCallDepth().Info(level, record.Message, kvList...) } return nil } // sinkWithCallDepth adjusts the stack unwinding so that when Error or Info // are called by Handle, code in slog gets skipped. // // This offset currently (Go 1.21.0) works for calls through // slog.New(ToSlogHandler(...)). There's no guarantee that the call // chain won't change. Wrapping the handler will also break unwinding. It's // still better than not adjusting at all.... // // This cannot be done when constructing the handler because FromSlogHandler needs // access to the original sink without this adjustment. A second copy would // work, but then WithAttrs would have to be called for both of them. func (l *slogHandler) sinkWithCallDepth() LogSink { if sink, ok := l.sink.(CallDepthLogSink); ok { return sink.WithCallDepth(2) } return l.sink } func (l *slogHandler) WithAttrs(attrs []slog.Attr) slog.Handler { if l.sink == nil || len(attrs) == 0 { return l } clone := *l if l.slogSink != nil { clone.slogSink = l.slogSink.WithAttrs(attrs) clone.sink = clone.slogSink } else { kvList := make([]any, 0, 2*len(attrs)) for _, attr := range attrs { kvList = attrToKVs(attr, l.groupPrefix, kvList) } clone.sink = l.sink.WithValues(kvList...) } return &clone } func (l *slogHandler) WithGroup(name string) slog.Handler { if l.sink == nil { return l } if name == "" { // slog says to inline empty groups return l } clone := *l if l.slogSink != nil { clone.slogSink = l.slogSink.WithGroup(name) clone.sink = clone.slogSink } else { clone.groupPrefix = addPrefix(clone.groupPrefix, name) } return &clone } // attrToKVs appends a slog.Attr to a logr-style kvList. It handle slog Groups // and other details of slog. func attrToKVs(attr slog.Attr, groupPrefix string, kvList []any) []any { attrVal := attr.Value.Resolve() if attrVal.Kind() == slog.KindGroup { groupVal := attrVal.Group() grpKVs := make([]any, 0, 2*len(groupVal)) prefix := groupPrefix if attr.Key != "" { prefix = addPrefix(groupPrefix, attr.Key) } for _, attr := range groupVal { grpKVs = attrToKVs(attr, prefix, grpKVs) } kvList = append(kvList, grpKVs...) } else if attr.Key != "" { kvList = append(kvList, addPrefix(groupPrefix, attr.Key), attrVal.Any()) } return kvList } func addPrefix(prefix, name string) string { if prefix == "" { return name } if name == "" { return prefix } return prefix + groupSeparator + name } // levelFromSlog adjusts the level by the logger's verbosity and negates it. // It ensures that the result is >= 0. This is necessary because the result is // passed to a LogSink and that API did not historically document whether // levels could be negative or what that meant. // // Some example usage: // // logrV0 := getMyLogger() // logrV2 := logrV0.V(2) // slogV2 := slog.New(logr.ToSlogHandler(logrV2)) // slogV2.Debug("msg") // =~ logrV2.V(4) =~ logrV0.V(6) // slogV2.Info("msg") // =~ logrV2.V(0) =~ logrV0.V(2) // slogv2.Warn("msg") // =~ logrV2.V(-4) =~ logrV0.V(0) func (l *slogHandler) levelFromSlog(level slog.Level) int { result := -level result += l.levelBias // in case the original Logger had a V level if result < 0 { result = 0 // because LogSink doesn't expect negative V levels } return int(result) } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/slogr.go000066400000000000000000000072171520540370700244140ustar00rootroot00000000000000//go:build go1.21 // +build go1.21 /* Copyright 2023 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package logr import ( "context" "log/slog" ) // FromSlogHandler returns a Logger which writes to the slog.Handler. // // The logr verbosity level is mapped to slog levels such that V(0) becomes // slog.LevelInfo and V(4) becomes slog.LevelDebug. func FromSlogHandler(handler slog.Handler) Logger { if handler, ok := handler.(*slogHandler); ok { if handler.sink == nil { return Discard() } return New(handler.sink).V(int(handler.levelBias)) } return New(&slogSink{handler: handler}) } // ToSlogHandler returns a slog.Handler which writes to the same sink as the Logger. // // The returned logger writes all records with level >= slog.LevelError as // error log entries with LogSink.Error, regardless of the verbosity level of // the Logger: // // logger := // slog.New(ToSlogHandler(logger.V(10))).Error(...) -> logSink.Error(...) // // The level of all other records gets reduced by the verbosity // level of the Logger and the result is negated. If it happens // to be negative, then it gets replaced by zero because a LogSink // is not expected to handled negative levels: // // slog.New(ToSlogHandler(logger)).Debug(...) -> logger.GetSink().Info(level=4, ...) // slog.New(ToSlogHandler(logger)).Warning(...) -> logger.GetSink().Info(level=0, ...) // slog.New(ToSlogHandler(logger)).Info(...) -> logger.GetSink().Info(level=0, ...) // slog.New(ToSlogHandler(logger.V(4))).Info(...) -> logger.GetSink().Info(level=4, ...) func ToSlogHandler(logger Logger) slog.Handler { if sink, ok := logger.GetSink().(*slogSink); ok && logger.GetV() == 0 { return sink.handler } handler := &slogHandler{sink: logger.GetSink(), levelBias: slog.Level(logger.GetV())} if slogSink, ok := handler.sink.(SlogSink); ok { handler.slogSink = slogSink } return handler } // SlogSink is an optional interface that a LogSink can implement to support // logging through the slog.Logger or slog.Handler APIs better. It then should // also support special slog values like slog.Group. When used as a // slog.Handler, the advantages are: // // - stack unwinding gets avoided in favor of logging the pre-recorded PC, // as intended by slog // - proper grouping of key/value pairs via WithGroup // - verbosity levels > slog.LevelInfo can be recorded // - less overhead // // Both APIs (Logger and slog.Logger/Handler) then are supported equally // well. Developers can pick whatever API suits them better and/or mix // packages which use either API in the same binary with a common logging // implementation. // // This interface is necessary because the type implementing the LogSink // interface cannot also implement the slog.Handler interface due to the // different prototype of the common Enabled method. // // An implementation could support both interfaces in two different types, but then // additional interfaces would be needed to convert between those types in FromSlogHandler // and ToSlogHandler. type SlogSink interface { LogSink Handle(ctx context.Context, record slog.Record) error WithAttrs(attrs []slog.Attr) SlogSink WithGroup(name string) SlogSink } NVIDIA-mig-parted-47bc938/vendor/github.com/go-logr/logr/slogsink.go000066400000000000000000000056651520540370700251240ustar00rootroot00000000000000//go:build go1.21 // +build go1.21 /* Copyright 2023 The logr Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package logr import ( "context" "log/slog" "runtime" "time" ) var ( _ LogSink = &slogSink{} _ CallDepthLogSink = &slogSink{} _ Underlier = &slogSink{} ) // Underlier is implemented by the LogSink returned by NewFromLogHandler. type Underlier interface { // GetUnderlying returns the Handler used by the LogSink. GetUnderlying() slog.Handler } const ( // nameKey is used to log the `WithName` values as an additional attribute. nameKey = "logger" // errKey is used to log the error parameter of Error as an additional attribute. errKey = "err" ) type slogSink struct { callDepth int name string handler slog.Handler } func (l *slogSink) Init(info RuntimeInfo) { l.callDepth = info.CallDepth } func (l *slogSink) GetUnderlying() slog.Handler { return l.handler } func (l *slogSink) WithCallDepth(depth int) LogSink { newLogger := *l newLogger.callDepth += depth return &newLogger } func (l *slogSink) Enabled(level int) bool { return l.handler.Enabled(context.Background(), slog.Level(-level)) } func (l *slogSink) Info(level int, msg string, kvList ...interface{}) { l.log(nil, msg, slog.Level(-level), kvList...) } func (l *slogSink) Error(err error, msg string, kvList ...interface{}) { l.log(err, msg, slog.LevelError, kvList...) } func (l *slogSink) log(err error, msg string, level slog.Level, kvList ...interface{}) { var pcs [1]uintptr // skip runtime.Callers, this function, Info/Error, and all helper functions above that. runtime.Callers(3+l.callDepth, pcs[:]) record := slog.NewRecord(time.Now(), level, msg, pcs[0]) if l.name != "" { record.AddAttrs(slog.String(nameKey, l.name)) } if err != nil { record.AddAttrs(slog.Any(errKey, err)) } record.Add(kvList...) _ = l.handler.Handle(context.Background(), record) } func (l slogSink) WithName(name string) LogSink { if l.name != "" { l.name += "/" } l.name += name return &l } func (l slogSink) WithValues(kvList ...interface{}) LogSink { l.handler = l.handler.WithAttrs(kvListToAttrs(kvList...)) return &l } func kvListToAttrs(kvList ...interface{}) []slog.Attr { // We don't need the record itself, only its Add method. record := slog.NewRecord(time.Time{}, 0, "", 0) record.Add(kvList...) attrs := make([]slog.Attr, 0, record.NumAttrs()) record.Attrs(func(attr slog.Attr) bool { attrs = append(attrs, attr) return true }) return attrs } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/000077500000000000000000000000001520540370700224555ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/000077500000000000000000000000001520540370700250275ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/.editorconfig000066400000000000000000000010331520540370700275010ustar00rootroot00000000000000# top-most EditorConfig file root = true # Unix-style newlines with a newline ending every file [*] end_of_line = lf insert_final_newline = true indent_style = space indent_size = 2 trim_trailing_whitespace = true # Set default charset [*.{js,py,go,scala,rb,java,html,css,less,sass,md}] charset = utf-8 # Tab indentation (no size specified) [*.go] indent_style = tab [*.md] trim_trailing_whitespace = false # Matches the exact files either package.json or .travis.yml [{package.json,.travis.yml}] indent_style = space indent_size = 2 NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/.gitignore000066400000000000000000000000141520540370700270120ustar00rootroot00000000000000secrets.yml NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/.golangci.yml000066400000000000000000000016701520540370700274170ustar00rootroot00000000000000linters-settings: govet: check-shadowing: true golint: min-confidence: 0 gocyclo: min-complexity: 45 maligned: suggest-new: true dupl: threshold: 200 goconst: min-len: 2 min-occurrences: 3 linters: enable-all: true disable: - maligned - unparam - lll - gochecknoinits - gochecknoglobals - funlen - godox - gocognit - whitespace - wsl - wrapcheck - testpackage - nlreturn - gomnd - exhaustivestruct - goerr113 - errorlint - nestif - godot - gofumpt - paralleltest - tparallel - thelper - ifshort - exhaustruct - varnamelen - gci - depguard - errchkjson - inamedparam - nonamedreturns - musttag - ireturn - forcetypeassert - cyclop # deprecated linters - deadcode - interfacer - scopelint - varcheck - structcheck - golint - nosnakecase NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.md000066400000000000000000000062411520540370700276310ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at ivan+abuse@flanders.co.nz. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/LICENSE000066400000000000000000000261361520540370700260440ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/README.md000066400000000000000000000022661520540370700263140ustar00rootroot00000000000000# gojsonpointer [![Build Status](https://github.com/go-openapi/jsonpointer/actions/workflows/go-test.yml/badge.svg)](https://github.com/go-openapi/jsonpointer/actions?query=workflow%3A"go+test") [![codecov](https://codecov.io/gh/go-openapi/jsonpointer/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/jsonpointer) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) [![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/jsonpointer/master/LICENSE) [![Go Reference](https://pkg.go.dev/badge/github.com/go-openapi/jsonpointer.svg)](https://pkg.go.dev/github.com/go-openapi/jsonpointer) [![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/jsonpointer)](https://goreportcard.com/report/github.com/go-openapi/jsonpointer) An implementation of JSON Pointer - Go language ## Status Completed YES Tested YES ## References http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07 ### Note The 4.Evaluation part of the previous reference, starting with 'If the currently referenced value is a JSON array, the reference token MUST contain either...' is not implemented. NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonpointer/pointer.go000066400000000000000000000325631520540370700270470ustar00rootroot00000000000000// Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // author sigu-399 // author-github https://github.com/sigu-399 // author-mail sigu.399@gmail.com // // repository-name jsonpointer // repository-desc An implementation of JSON Pointer - Go language // // description Main and unique file. // // created 25-02-2013 package jsonpointer import ( "encoding/json" "errors" "fmt" "reflect" "strconv" "strings" "github.com/go-openapi/swag" ) const ( emptyPointer = `` pointerSeparator = `/` invalidStart = `JSON pointer must be empty or start with a "` + pointerSeparator notFound = `Can't find the pointer in the document` ) var jsonPointableType = reflect.TypeOf(new(JSONPointable)).Elem() var jsonSetableType = reflect.TypeOf(new(JSONSetable)).Elem() // JSONPointable is an interface for structs to implement when they need to customize the // json pointer process type JSONPointable interface { JSONLookup(string) (any, error) } // JSONSetable is an interface for structs to implement when they need to customize the // json pointer process type JSONSetable interface { JSONSet(string, any) error } // New creates a new json pointer for the given string func New(jsonPointerString string) (Pointer, error) { var p Pointer err := p.parse(jsonPointerString) return p, err } // Pointer the json pointer reprsentation type Pointer struct { referenceTokens []string } // "Constructor", parses the given string JSON pointer func (p *Pointer) parse(jsonPointerString string) error { var err error if jsonPointerString != emptyPointer { if !strings.HasPrefix(jsonPointerString, pointerSeparator) { err = errors.New(invalidStart) } else { referenceTokens := strings.Split(jsonPointerString, pointerSeparator) p.referenceTokens = append(p.referenceTokens, referenceTokens[1:]...) } } return err } // Get uses the pointer to retrieve a value from a JSON document func (p *Pointer) Get(document any) (any, reflect.Kind, error) { return p.get(document, swag.DefaultJSONNameProvider) } // Set uses the pointer to set a value from a JSON document func (p *Pointer) Set(document any, value any) (any, error) { return document, p.set(document, value, swag.DefaultJSONNameProvider) } // GetForToken gets a value for a json pointer token 1 level deep func GetForToken(document any, decodedToken string) (any, reflect.Kind, error) { return getSingleImpl(document, decodedToken, swag.DefaultJSONNameProvider) } // SetForToken gets a value for a json pointer token 1 level deep func SetForToken(document any, decodedToken string, value any) (any, error) { return document, setSingleImpl(document, value, decodedToken, swag.DefaultJSONNameProvider) } func isNil(input any) bool { if input == nil { return true } kind := reflect.TypeOf(input).Kind() switch kind { //nolint:exhaustive case reflect.Ptr, reflect.Map, reflect.Slice, reflect.Chan: return reflect.ValueOf(input).IsNil() default: return false } } func getSingleImpl(node any, decodedToken string, nameProvider *swag.NameProvider) (any, reflect.Kind, error) { rValue := reflect.Indirect(reflect.ValueOf(node)) kind := rValue.Kind() if isNil(node) { return nil, kind, fmt.Errorf("nil value has not field %q", decodedToken) } switch typed := node.(type) { case JSONPointable: r, err := typed.JSONLookup(decodedToken) if err != nil { return nil, kind, err } return r, kind, nil case *any: // case of a pointer to interface, that is not resolved by reflect.Indirect return getSingleImpl(*typed, decodedToken, nameProvider) } switch kind { //nolint:exhaustive case reflect.Struct: nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) if !ok { return nil, kind, fmt.Errorf("object has no field %q", decodedToken) } fld := rValue.FieldByName(nm) return fld.Interface(), kind, nil case reflect.Map: kv := reflect.ValueOf(decodedToken) mv := rValue.MapIndex(kv) if mv.IsValid() { return mv.Interface(), kind, nil } return nil, kind, fmt.Errorf("object has no key %q", decodedToken) case reflect.Slice: tokenIndex, err := strconv.Atoi(decodedToken) if err != nil { return nil, kind, err } sLength := rValue.Len() if tokenIndex < 0 || tokenIndex >= sLength { return nil, kind, fmt.Errorf("index out of bounds array[0,%d] index '%d'", sLength-1, tokenIndex) } elem := rValue.Index(tokenIndex) return elem.Interface(), kind, nil default: return nil, kind, fmt.Errorf("invalid token reference %q", decodedToken) } } func setSingleImpl(node, data any, decodedToken string, nameProvider *swag.NameProvider) error { rValue := reflect.Indirect(reflect.ValueOf(node)) if ns, ok := node.(JSONSetable); ok { // pointer impl return ns.JSONSet(decodedToken, data) } if rValue.Type().Implements(jsonSetableType) { return node.(JSONSetable).JSONSet(decodedToken, data) } switch rValue.Kind() { //nolint:exhaustive case reflect.Struct: nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) if !ok { return fmt.Errorf("object has no field %q", decodedToken) } fld := rValue.FieldByName(nm) if fld.IsValid() { fld.Set(reflect.ValueOf(data)) } return nil case reflect.Map: kv := reflect.ValueOf(decodedToken) rValue.SetMapIndex(kv, reflect.ValueOf(data)) return nil case reflect.Slice: tokenIndex, err := strconv.Atoi(decodedToken) if err != nil { return err } sLength := rValue.Len() if tokenIndex < 0 || tokenIndex >= sLength { return fmt.Errorf("index out of bounds array[0,%d] index '%d'", sLength, tokenIndex) } elem := rValue.Index(tokenIndex) if !elem.CanSet() { return fmt.Errorf("can't set slice index %s to %v", decodedToken, data) } elem.Set(reflect.ValueOf(data)) return nil default: return fmt.Errorf("invalid token reference %q", decodedToken) } } func (p *Pointer) get(node any, nameProvider *swag.NameProvider) (any, reflect.Kind, error) { if nameProvider == nil { nameProvider = swag.DefaultJSONNameProvider } kind := reflect.Invalid // Full document when empty if len(p.referenceTokens) == 0 { return node, kind, nil } for _, token := range p.referenceTokens { decodedToken := Unescape(token) r, knd, err := getSingleImpl(node, decodedToken, nameProvider) if err != nil { return nil, knd, err } node = r } rValue := reflect.ValueOf(node) kind = rValue.Kind() return node, kind, nil } func (p *Pointer) set(node, data any, nameProvider *swag.NameProvider) error { knd := reflect.ValueOf(node).Kind() if knd != reflect.Ptr && knd != reflect.Struct && knd != reflect.Map && knd != reflect.Slice && knd != reflect.Array { return errors.New("only structs, pointers, maps and slices are supported for setting values") } if nameProvider == nil { nameProvider = swag.DefaultJSONNameProvider } // Full document when empty if len(p.referenceTokens) == 0 { return nil } lastI := len(p.referenceTokens) - 1 for i, token := range p.referenceTokens { isLastToken := i == lastI decodedToken := Unescape(token) if isLastToken { return setSingleImpl(node, data, decodedToken, nameProvider) } rValue := reflect.Indirect(reflect.ValueOf(node)) kind := rValue.Kind() if rValue.Type().Implements(jsonPointableType) { r, err := node.(JSONPointable).JSONLookup(decodedToken) if err != nil { return err } fld := reflect.ValueOf(r) if fld.CanAddr() && fld.Kind() != reflect.Interface && fld.Kind() != reflect.Map && fld.Kind() != reflect.Slice && fld.Kind() != reflect.Ptr { node = fld.Addr().Interface() continue } node = r continue } switch kind { //nolint:exhaustive case reflect.Struct: nm, ok := nameProvider.GetGoNameForType(rValue.Type(), decodedToken) if !ok { return fmt.Errorf("object has no field %q", decodedToken) } fld := rValue.FieldByName(nm) if fld.CanAddr() && fld.Kind() != reflect.Interface && fld.Kind() != reflect.Map && fld.Kind() != reflect.Slice && fld.Kind() != reflect.Ptr { node = fld.Addr().Interface() continue } node = fld.Interface() case reflect.Map: kv := reflect.ValueOf(decodedToken) mv := rValue.MapIndex(kv) if !mv.IsValid() { return fmt.Errorf("object has no key %q", decodedToken) } if mv.CanAddr() && mv.Kind() != reflect.Interface && mv.Kind() != reflect.Map && mv.Kind() != reflect.Slice && mv.Kind() != reflect.Ptr { node = mv.Addr().Interface() continue } node = mv.Interface() case reflect.Slice: tokenIndex, err := strconv.Atoi(decodedToken) if err != nil { return err } sLength := rValue.Len() if tokenIndex < 0 || tokenIndex >= sLength { return fmt.Errorf("index out of bounds array[0,%d] index '%d'", sLength, tokenIndex) } elem := rValue.Index(tokenIndex) if elem.CanAddr() && elem.Kind() != reflect.Interface && elem.Kind() != reflect.Map && elem.Kind() != reflect.Slice && elem.Kind() != reflect.Ptr { node = elem.Addr().Interface() continue } node = elem.Interface() default: return fmt.Errorf("invalid token reference %q", decodedToken) } } return nil } // DecodedTokens returns the decoded tokens func (p *Pointer) DecodedTokens() []string { result := make([]string, 0, len(p.referenceTokens)) for _, t := range p.referenceTokens { result = append(result, Unescape(t)) } return result } // IsEmpty returns true if this is an empty json pointer // this indicates that it points to the root document func (p *Pointer) IsEmpty() bool { return len(p.referenceTokens) == 0 } // Pointer to string representation function func (p *Pointer) String() string { if len(p.referenceTokens) == 0 { return emptyPointer } pointerString := pointerSeparator + strings.Join(p.referenceTokens, pointerSeparator) return pointerString } func (p *Pointer) Offset(document string) (int64, error) { dec := json.NewDecoder(strings.NewReader(document)) var offset int64 for _, ttk := range p.DecodedTokens() { tk, err := dec.Token() if err != nil { return 0, err } switch tk := tk.(type) { case json.Delim: switch tk { case '{': offset, err = offsetSingleObject(dec, ttk) if err != nil { return 0, err } case '[': offset, err = offsetSingleArray(dec, ttk) if err != nil { return 0, err } default: return 0, fmt.Errorf("invalid token %#v", tk) } default: return 0, fmt.Errorf("invalid token %#v", tk) } } return offset, nil } func offsetSingleObject(dec *json.Decoder, decodedToken string) (int64, error) { for dec.More() { offset := dec.InputOffset() tk, err := dec.Token() if err != nil { return 0, err } switch tk := tk.(type) { case json.Delim: switch tk { case '{': if err = drainSingle(dec); err != nil { return 0, err } case '[': if err = drainSingle(dec); err != nil { return 0, err } } case string: if tk == decodedToken { return offset, nil } default: return 0, fmt.Errorf("invalid token %#v", tk) } } return 0, fmt.Errorf("token reference %q not found", decodedToken) } func offsetSingleArray(dec *json.Decoder, decodedToken string) (int64, error) { idx, err := strconv.Atoi(decodedToken) if err != nil { return 0, fmt.Errorf("token reference %q is not a number: %v", decodedToken, err) } var i int for i = 0; i < idx && dec.More(); i++ { tk, err := dec.Token() if err != nil { return 0, err } if delim, isDelim := tk.(json.Delim); isDelim { switch delim { case '{': if err = drainSingle(dec); err != nil { return 0, err } case '[': if err = drainSingle(dec); err != nil { return 0, err } } } } if !dec.More() { return 0, fmt.Errorf("token reference %q not found", decodedToken) } return dec.InputOffset(), nil } // drainSingle drains a single level of object or array. // The decoder has to guarantee the beginning delim (i.e. '{' or '[') has been consumed. func drainSingle(dec *json.Decoder) error { for dec.More() { tk, err := dec.Token() if err != nil { return err } if delim, isDelim := tk.(json.Delim); isDelim { switch delim { case '{': if err = drainSingle(dec); err != nil { return err } case '[': if err = drainSingle(dec); err != nil { return err } } } } // Consumes the ending delim if _, err := dec.Token(); err != nil { return err } return nil } // Specific JSON pointer encoding here // ~0 => ~ // ~1 => / // ... and vice versa const ( encRefTok0 = `~0` encRefTok1 = `~1` decRefTok0 = `~` decRefTok1 = `/` ) // Unescape unescapes a json pointer reference token string to the original representation func Unescape(token string) string { step1 := strings.ReplaceAll(token, encRefTok1, decRefTok1) step2 := strings.ReplaceAll(step1, encRefTok0, decRefTok0) return step2 } // Escape escapes a pointer reference token string func Escape(token string) string { step1 := strings.ReplaceAll(token, decRefTok0, encRefTok0) step2 := strings.ReplaceAll(step1, decRefTok1, encRefTok1) return step2 } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/000077500000000000000000000000001520540370700253055ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/.gitignore000066400000000000000000000000141520540370700272700ustar00rootroot00000000000000secrets.yml NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/.golangci.yml000066400000000000000000000014321520540370700276710ustar00rootroot00000000000000linters-settings: govet: check-shadowing: true gocyclo: min-complexity: 30 maligned: suggest-new: true dupl: threshold: 100 goconst: min-len: 2 min-occurrences: 4 paralleltest: ignore-missing: true linters: enable-all: true disable: - maligned - lll - gochecknoglobals - godox - gocognit - whitespace - wsl - funlen - gochecknoglobals - gochecknoinits - scopelint - wrapcheck - exhaustivestruct - exhaustive - nlreturn - testpackage - gci - gofumpt - goerr113 - gomnd - tparallel - nestif - godot - errorlint - varcheck - interfacer - deadcode - golint - ifshort - structcheck - nosnakecase - varnamelen - exhaustruct NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md000066400000000000000000000062411520540370700301070ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at ivan+abuse@flanders.co.nz. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/LICENSE000066400000000000000000000261361520540370700263220ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/README.md000066400000000000000000000016541520540370700265720ustar00rootroot00000000000000# gojsonreference [![Build Status](https://travis-ci.org/go-openapi/jsonreference.svg?branch=master)](https://travis-ci.org/go-openapi/jsonreference) [![codecov](https://codecov.io/gh/go-openapi/jsonreference/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/jsonreference) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) [![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/jsonreference/master/LICENSE) [![GoDoc](https://godoc.org/github.com/go-openapi/jsonreference?status.svg)](http://godoc.org/github.com/go-openapi/jsonreference) An implementation of JSON Reference - Go language ## Status Feature complete. Stable API ## Dependencies https://github.com/go-openapi/jsonpointer ## References http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07 http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03 NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/internal/000077500000000000000000000000001520540370700271215ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/internal/normalize_url.go000066400000000000000000000032551520540370700323370ustar00rootroot00000000000000package internal import ( "net/url" "regexp" "strings" ) const ( defaultHTTPPort = ":80" defaultHTTPSPort = ":443" ) // Regular expressions used by the normalizations var rxPort = regexp.MustCompile(`(:\d+)/?$`) var rxDupSlashes = regexp.MustCompile(`/{2,}`) // NormalizeURL will normalize the specified URL // This was added to replace a previous call to the no longer maintained purell library: // The call that was used looked like the following: // // url.Parse(purell.NormalizeURL(parsed, purell.FlagsSafe|purell.FlagRemoveDuplicateSlashes)) // // To explain all that was included in the call above, purell.FlagsSafe was really just the following: // - FlagLowercaseScheme // - FlagLowercaseHost // - FlagRemoveDefaultPort // - FlagRemoveDuplicateSlashes (and this was mixed in with the |) // // This also normalizes the URL into its urlencoded form by removing RawPath and RawFragment. func NormalizeURL(u *url.URL) { lowercaseScheme(u) lowercaseHost(u) removeDefaultPort(u) removeDuplicateSlashes(u) u.RawPath = "" u.RawFragment = "" } func lowercaseScheme(u *url.URL) { if len(u.Scheme) > 0 { u.Scheme = strings.ToLower(u.Scheme) } } func lowercaseHost(u *url.URL) { if len(u.Host) > 0 { u.Host = strings.ToLower(u.Host) } } func removeDefaultPort(u *url.URL) { if len(u.Host) > 0 { scheme := strings.ToLower(u.Scheme) u.Host = rxPort.ReplaceAllStringFunc(u.Host, func(val string) string { if (scheme == "http" && val == defaultHTTPPort) || (scheme == "https" && val == defaultHTTPSPort) { return "" } return val }) } } func removeDuplicateSlashes(u *url.URL) { if len(u.Path) > 0 { u.Path = rxDupSlashes.ReplaceAllString(u.Path, "/") } } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/jsonreference/reference.go000066400000000000000000000075011520540370700275750ustar00rootroot00000000000000// Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // author sigu-399 // author-github https://github.com/sigu-399 // author-mail sigu.399@gmail.com // // repository-name jsonreference // repository-desc An implementation of JSON Reference - Go language // // description Main and unique file. // // created 26-02-2013 package jsonreference import ( "errors" "net/url" "strings" "github.com/go-openapi/jsonpointer" "github.com/go-openapi/jsonreference/internal" ) const ( fragmentRune = `#` ) // New creates a new reference for the given string func New(jsonReferenceString string) (Ref, error) { var r Ref err := r.parse(jsonReferenceString) return r, err } // MustCreateRef parses the ref string and panics when it's invalid. // Use the New method for a version that returns an error func MustCreateRef(ref string) Ref { r, err := New(ref) if err != nil { panic(err) } return r } // Ref represents a json reference object type Ref struct { referenceURL *url.URL referencePointer jsonpointer.Pointer HasFullURL bool HasURLPathOnly bool HasFragmentOnly bool HasFileScheme bool HasFullFilePath bool } // GetURL gets the URL for this reference func (r *Ref) GetURL() *url.URL { return r.referenceURL } // GetPointer gets the json pointer for this reference func (r *Ref) GetPointer() *jsonpointer.Pointer { return &r.referencePointer } // String returns the best version of the url for this reference func (r *Ref) String() string { if r.referenceURL != nil { return r.referenceURL.String() } if r.HasFragmentOnly { return fragmentRune + r.referencePointer.String() } return r.referencePointer.String() } // IsRoot returns true if this reference is a root document func (r *Ref) IsRoot() bool { return r.referenceURL != nil && !r.IsCanonical() && !r.HasURLPathOnly && r.referenceURL.Fragment == "" } // IsCanonical returns true when this pointer starts with http(s):// or file:// func (r *Ref) IsCanonical() bool { return (r.HasFileScheme && r.HasFullFilePath) || (!r.HasFileScheme && r.HasFullURL) } // "Constructor", parses the given string JSON reference func (r *Ref) parse(jsonReferenceString string) error { parsed, err := url.Parse(jsonReferenceString) if err != nil { return err } internal.NormalizeURL(parsed) r.referenceURL = parsed refURL := r.referenceURL if refURL.Scheme != "" && refURL.Host != "" { r.HasFullURL = true } else { if refURL.Path != "" { r.HasURLPathOnly = true } else if refURL.RawQuery == "" && refURL.Fragment != "" { r.HasFragmentOnly = true } } r.HasFileScheme = refURL.Scheme == "file" r.HasFullFilePath = strings.HasPrefix(refURL.Path, "/") // invalid json-pointer error means url has no json-pointer fragment. simply ignore error r.referencePointer, _ = jsonpointer.New(refURL.Fragment) return nil } // Inherits creates a new reference from a parent and a child // If the child cannot inherit from the parent, an error is returned func (r *Ref) Inherits(child Ref) (*Ref, error) { childURL := child.GetURL() parentURL := r.GetURL() if childURL == nil { return nil, errors.New("child url is nil") } if parentURL == nil { return &child, nil } ref, err := New(parentURL.ResolveReference(childURL).String()) if err != nil { return nil, err } return &ref, nil } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/000077500000000000000000000000001520540370700234165ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/.editorconfig000066400000000000000000000010331520540370700260700ustar00rootroot00000000000000# top-most EditorConfig file root = true # Unix-style newlines with a newline ending every file [*] end_of_line = lf insert_final_newline = true indent_style = space indent_size = 2 trim_trailing_whitespace = true # Set default charset [*.{js,py,go,scala,rb,java,html,css,less,sass,md}] charset = utf-8 # Tab indentation (no size specified) [*.go] indent_style = tab [*.md] trim_trailing_whitespace = false # Matches the exact files either package.json or .travis.yml [{package.json,.travis.yml}] indent_style = space indent_size = 2 NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/.gitattributes000066400000000000000000000001131520540370700263040ustar00rootroot00000000000000# gofmt always uses LF, whereas Git uses CRLF on Windows. *.go text eol=lf NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/.gitignore000066400000000000000000000000461520540370700254060ustar00rootroot00000000000000secrets.yml vendor Godeps .idea *.out NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/.golangci.yml000066400000000000000000000016521520540370700260060ustar00rootroot00000000000000linters-settings: govet: check-shadowing: true golint: min-confidence: 0 gocyclo: min-complexity: 45 maligned: suggest-new: true dupl: threshold: 200 goconst: min-len: 3 min-occurrences: 3 linters: enable-all: true disable: - maligned - lll - gochecknoinits - gochecknoglobals - funlen - godox - gocognit - whitespace - wsl - wrapcheck - testpackage - nlreturn - gomnd - exhaustivestruct - goerr113 - errorlint - nestif - godot - gofumpt - paralleltest - tparallel - thelper - ifshort - exhaustruct - varnamelen - gci - depguard - errchkjson - inamedparam - nonamedreturns - musttag - ireturn - forcetypeassert - cyclop # deprecated linters - deadcode - interfacer - scopelint - varcheck - structcheck - golint - nosnakecase NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/BENCHMARK.md000066400000000000000000000044741520540370700252430ustar00rootroot00000000000000# Benchmarks ## Name mangling utilities ```bash go test -bench XXX -run XXX -benchtime 30s ``` ### Benchmarks at b3e7a5386f996177e4808f11acb2aa93a0f660df ``` goos: linux goarch: amd64 pkg: github.com/go-openapi/swag cpu: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz BenchmarkToXXXName/ToGoName-4 862623 44101 ns/op 10450 B/op 732 allocs/op BenchmarkToXXXName/ToVarName-4 853656 40728 ns/op 10468 B/op 734 allocs/op BenchmarkToXXXName/ToFileName-4 1268312 27813 ns/op 9785 B/op 617 allocs/op BenchmarkToXXXName/ToCommandName-4 1276322 27903 ns/op 9785 B/op 617 allocs/op BenchmarkToXXXName/ToHumanNameLower-4 895334 40354 ns/op 10472 B/op 731 allocs/op BenchmarkToXXXName/ToHumanNameTitle-4 882441 40678 ns/op 10566 B/op 749 allocs/op ``` ### Benchmarks after PR #79 ~ x10 performance improvement and ~ /100 memory allocations. ``` goos: linux goarch: amd64 pkg: github.com/go-openapi/swag cpu: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz BenchmarkToXXXName/ToGoName-4 9595830 3991 ns/op 42 B/op 5 allocs/op BenchmarkToXXXName/ToVarName-4 9194276 3984 ns/op 62 B/op 7 allocs/op BenchmarkToXXXName/ToFileName-4 17002711 2123 ns/op 147 B/op 7 allocs/op BenchmarkToXXXName/ToCommandName-4 16772926 2111 ns/op 147 B/op 7 allocs/op BenchmarkToXXXName/ToHumanNameLower-4 9788331 3749 ns/op 92 B/op 6 allocs/op BenchmarkToXXXName/ToHumanNameTitle-4 9188260 3941 ns/op 104 B/op 6 allocs/op ``` ``` goos: linux goarch: amd64 pkg: github.com/go-openapi/swag cpu: AMD Ryzen 7 5800X 8-Core Processor BenchmarkToXXXName/ToGoName-16 18527378 1972 ns/op 42 B/op 5 allocs/op BenchmarkToXXXName/ToVarName-16 15552692 2093 ns/op 62 B/op 7 allocs/op BenchmarkToXXXName/ToFileName-16 32161176 1117 ns/op 147 B/op 7 allocs/op BenchmarkToXXXName/ToCommandName-16 32256634 1137 ns/op 147 B/op 7 allocs/op BenchmarkToXXXName/ToHumanNameLower-16 18599661 1946 ns/op 92 B/op 6 allocs/op BenchmarkToXXXName/ToHumanNameTitle-16 17581353 2054 ns/op 105 B/op 6 allocs/op ``` NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md000066400000000000000000000062411520540370700262200ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at ivan+abuse@flanders.co.nz. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/LICENSE000066400000000000000000000261361520540370700244330ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/README.md000066400000000000000000000023561520540370700247030ustar00rootroot00000000000000# Swag [![Build Status](https://github.com/go-openapi/swag/actions/workflows/go-test.yml/badge.svg)](https://github.com/go-openapi/swag/actions?query=workflow%3A"go+test") [![codecov](https://codecov.io/gh/go-openapi/swag/branch/master/graph/badge.svg)](https://codecov.io/gh/go-openapi/swag) [![Slack Status](https://slackin.goswagger.io/badge.svg)](https://slackin.goswagger.io) [![license](http://img.shields.io/badge/license-Apache%20v2-orange.svg)](https://raw.githubusercontent.com/go-openapi/swag/master/LICENSE) [![Go Reference](https://pkg.go.dev/badge/github.com/go-openapi/swag.svg)](https://pkg.go.dev/github.com/go-openapi/swag) [![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/swag)](https://goreportcard.com/report/github.com/go-openapi/swag) Contains a bunch of helper functions for go-openapi and go-swagger projects. You may also use it standalone for your projects. * convert between value and pointers for builtin types * convert from string to builtin types (wraps strconv) * fast json concatenation * search in path * load from file or http * name mangling This repo has only few dependencies outside of the standard library: * YAML utilities depend on `gopkg.in/yaml.v3` * `github.com/mailru/easyjson v0.7.7` NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/convert.go000066400000000000000000000123221520540370700254250ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "math" "strconv" "strings" ) // same as ECMA Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER const ( maxJSONFloat = float64(1<<53 - 1) // 9007199254740991.0 2^53 - 1 minJSONFloat = -float64(1<<53 - 1) //-9007199254740991.0 -2^53 - 1 epsilon float64 = 1e-9 ) // IsFloat64AJSONInteger allow for integers [-2^53, 2^53-1] inclusive func IsFloat64AJSONInteger(f float64) bool { if math.IsNaN(f) || math.IsInf(f, 0) || f < minJSONFloat || f > maxJSONFloat { return false } fa := math.Abs(f) g := float64(uint64(f)) ga := math.Abs(g) diff := math.Abs(f - g) // more info: https://floating-point-gui.de/errors/comparison/#look-out-for-edge-cases switch { case f == g: // best case return true case f == float64(int64(f)) || f == float64(uint64(f)): // optimistic case return true case f == 0 || g == 0 || diff < math.SmallestNonzeroFloat64: // very close to 0 values return diff < (epsilon * math.SmallestNonzeroFloat64) } // check the relative error return diff/math.Min(fa+ga, math.MaxFloat64) < epsilon } var evaluatesAsTrue map[string]struct{} func init() { evaluatesAsTrue = map[string]struct{}{ "true": {}, "1": {}, "yes": {}, "ok": {}, "y": {}, "on": {}, "selected": {}, "checked": {}, "t": {}, "enabled": {}, } } // ConvertBool turn a string into a boolean func ConvertBool(str string) (bool, error) { _, ok := evaluatesAsTrue[strings.ToLower(str)] return ok, nil } // ConvertFloat32 turn a string into a float32 func ConvertFloat32(str string) (float32, error) { f, err := strconv.ParseFloat(str, 32) if err != nil { return 0, err } return float32(f), nil } // ConvertFloat64 turn a string into a float64 func ConvertFloat64(str string) (float64, error) { return strconv.ParseFloat(str, 64) } // ConvertInt8 turn a string into an int8 func ConvertInt8(str string) (int8, error) { i, err := strconv.ParseInt(str, 10, 8) if err != nil { return 0, err } return int8(i), nil } // ConvertInt16 turn a string into an int16 func ConvertInt16(str string) (int16, error) { i, err := strconv.ParseInt(str, 10, 16) if err != nil { return 0, err } return int16(i), nil } // ConvertInt32 turn a string into an int32 func ConvertInt32(str string) (int32, error) { i, err := strconv.ParseInt(str, 10, 32) if err != nil { return 0, err } return int32(i), nil } // ConvertInt64 turn a string into an int64 func ConvertInt64(str string) (int64, error) { return strconv.ParseInt(str, 10, 64) } // ConvertUint8 turn a string into an uint8 func ConvertUint8(str string) (uint8, error) { i, err := strconv.ParseUint(str, 10, 8) if err != nil { return 0, err } return uint8(i), nil } // ConvertUint16 turn a string into an uint16 func ConvertUint16(str string) (uint16, error) { i, err := strconv.ParseUint(str, 10, 16) if err != nil { return 0, err } return uint16(i), nil } // ConvertUint32 turn a string into an uint32 func ConvertUint32(str string) (uint32, error) { i, err := strconv.ParseUint(str, 10, 32) if err != nil { return 0, err } return uint32(i), nil } // ConvertUint64 turn a string into an uint64 func ConvertUint64(str string) (uint64, error) { return strconv.ParseUint(str, 10, 64) } // FormatBool turns a boolean into a string func FormatBool(value bool) string { return strconv.FormatBool(value) } // FormatFloat32 turns a float32 into a string func FormatFloat32(value float32) string { return strconv.FormatFloat(float64(value), 'f', -1, 32) } // FormatFloat64 turns a float64 into a string func FormatFloat64(value float64) string { return strconv.FormatFloat(value, 'f', -1, 64) } // FormatInt8 turns an int8 into a string func FormatInt8(value int8) string { return strconv.FormatInt(int64(value), 10) } // FormatInt16 turns an int16 into a string func FormatInt16(value int16) string { return strconv.FormatInt(int64(value), 10) } // FormatInt32 turns an int32 into a string func FormatInt32(value int32) string { return strconv.Itoa(int(value)) } // FormatInt64 turns an int64 into a string func FormatInt64(value int64) string { return strconv.FormatInt(value, 10) } // FormatUint8 turns an uint8 into a string func FormatUint8(value uint8) string { return strconv.FormatUint(uint64(value), 10) } // FormatUint16 turns an uint16 into a string func FormatUint16(value uint16) string { return strconv.FormatUint(uint64(value), 10) } // FormatUint32 turns an uint32 into a string func FormatUint32(value uint32) string { return strconv.FormatUint(uint64(value), 10) } // FormatUint64 turns an uint64 into a string func FormatUint64(value uint64) string { return strconv.FormatUint(value, 10) } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/convert_types.go000066400000000000000000000365231520540370700266620ustar00rootroot00000000000000package swag import "time" // This file was taken from the aws go sdk // String returns a pointer to of the string value passed in. func String(v string) *string { return &v } // StringValue returns the value of the string pointer passed in or // "" if the pointer is nil. func StringValue(v *string) string { if v != nil { return *v } return "" } // StringSlice converts a slice of string values into a slice of // string pointers func StringSlice(src []string) []*string { dst := make([]*string, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // StringValueSlice converts a slice of string pointers into a slice of // string values func StringValueSlice(src []*string) []string { dst := make([]string, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // StringMap converts a string map of string values into a string // map of string pointers func StringMap(src map[string]string) map[string]*string { dst := make(map[string]*string) for k, val := range src { v := val dst[k] = &v } return dst } // StringValueMap converts a string map of string pointers into a string // map of string values func StringValueMap(src map[string]*string) map[string]string { dst := make(map[string]string) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Bool returns a pointer to of the bool value passed in. func Bool(v bool) *bool { return &v } // BoolValue returns the value of the bool pointer passed in or // false if the pointer is nil. func BoolValue(v *bool) bool { if v != nil { return *v } return false } // BoolSlice converts a slice of bool values into a slice of // bool pointers func BoolSlice(src []bool) []*bool { dst := make([]*bool, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // BoolValueSlice converts a slice of bool pointers into a slice of // bool values func BoolValueSlice(src []*bool) []bool { dst := make([]bool, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // BoolMap converts a string map of bool values into a string // map of bool pointers func BoolMap(src map[string]bool) map[string]*bool { dst := make(map[string]*bool) for k, val := range src { v := val dst[k] = &v } return dst } // BoolValueMap converts a string map of bool pointers into a string // map of bool values func BoolValueMap(src map[string]*bool) map[string]bool { dst := make(map[string]bool) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Int returns a pointer to of the int value passed in. func Int(v int) *int { return &v } // IntValue returns the value of the int pointer passed in or // 0 if the pointer is nil. func IntValue(v *int) int { if v != nil { return *v } return 0 } // IntSlice converts a slice of int values into a slice of // int pointers func IntSlice(src []int) []*int { dst := make([]*int, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // IntValueSlice converts a slice of int pointers into a slice of // int values func IntValueSlice(src []*int) []int { dst := make([]int, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // IntMap converts a string map of int values into a string // map of int pointers func IntMap(src map[string]int) map[string]*int { dst := make(map[string]*int) for k, val := range src { v := val dst[k] = &v } return dst } // IntValueMap converts a string map of int pointers into a string // map of int values func IntValueMap(src map[string]*int) map[string]int { dst := make(map[string]int) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Int32 returns a pointer to of the int32 value passed in. func Int32(v int32) *int32 { return &v } // Int32Value returns the value of the int32 pointer passed in or // 0 if the pointer is nil. func Int32Value(v *int32) int32 { if v != nil { return *v } return 0 } // Int32Slice converts a slice of int32 values into a slice of // int32 pointers func Int32Slice(src []int32) []*int32 { dst := make([]*int32, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // Int32ValueSlice converts a slice of int32 pointers into a slice of // int32 values func Int32ValueSlice(src []*int32) []int32 { dst := make([]int32, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // Int32Map converts a string map of int32 values into a string // map of int32 pointers func Int32Map(src map[string]int32) map[string]*int32 { dst := make(map[string]*int32) for k, val := range src { v := val dst[k] = &v } return dst } // Int32ValueMap converts a string map of int32 pointers into a string // map of int32 values func Int32ValueMap(src map[string]*int32) map[string]int32 { dst := make(map[string]int32) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Int64 returns a pointer to of the int64 value passed in. func Int64(v int64) *int64 { return &v } // Int64Value returns the value of the int64 pointer passed in or // 0 if the pointer is nil. func Int64Value(v *int64) int64 { if v != nil { return *v } return 0 } // Int64Slice converts a slice of int64 values into a slice of // int64 pointers func Int64Slice(src []int64) []*int64 { dst := make([]*int64, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // Int64ValueSlice converts a slice of int64 pointers into a slice of // int64 values func Int64ValueSlice(src []*int64) []int64 { dst := make([]int64, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // Int64Map converts a string map of int64 values into a string // map of int64 pointers func Int64Map(src map[string]int64) map[string]*int64 { dst := make(map[string]*int64) for k, val := range src { v := val dst[k] = &v } return dst } // Int64ValueMap converts a string map of int64 pointers into a string // map of int64 values func Int64ValueMap(src map[string]*int64) map[string]int64 { dst := make(map[string]int64) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Uint16 returns a pointer to of the uint16 value passed in. func Uint16(v uint16) *uint16 { return &v } // Uint16Value returns the value of the uint16 pointer passed in or // 0 if the pointer is nil. func Uint16Value(v *uint16) uint16 { if v != nil { return *v } return 0 } // Uint16Slice converts a slice of uint16 values into a slice of // uint16 pointers func Uint16Slice(src []uint16) []*uint16 { dst := make([]*uint16, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // Uint16ValueSlice converts a slice of uint16 pointers into a slice of // uint16 values func Uint16ValueSlice(src []*uint16) []uint16 { dst := make([]uint16, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // Uint16Map converts a string map of uint16 values into a string // map of uint16 pointers func Uint16Map(src map[string]uint16) map[string]*uint16 { dst := make(map[string]*uint16) for k, val := range src { v := val dst[k] = &v } return dst } // Uint16ValueMap converts a string map of uint16 pointers into a string // map of uint16 values func Uint16ValueMap(src map[string]*uint16) map[string]uint16 { dst := make(map[string]uint16) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Uint returns a pointer to of the uint value passed in. func Uint(v uint) *uint { return &v } // UintValue returns the value of the uint pointer passed in or // 0 if the pointer is nil. func UintValue(v *uint) uint { if v != nil { return *v } return 0 } // UintSlice converts a slice of uint values into a slice of // uint pointers func UintSlice(src []uint) []*uint { dst := make([]*uint, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // UintValueSlice converts a slice of uint pointers into a slice of // uint values func UintValueSlice(src []*uint) []uint { dst := make([]uint, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // UintMap converts a string map of uint values into a string // map of uint pointers func UintMap(src map[string]uint) map[string]*uint { dst := make(map[string]*uint) for k, val := range src { v := val dst[k] = &v } return dst } // UintValueMap converts a string map of uint pointers into a string // map of uint values func UintValueMap(src map[string]*uint) map[string]uint { dst := make(map[string]uint) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Uint32 returns a pointer to of the uint32 value passed in. func Uint32(v uint32) *uint32 { return &v } // Uint32Value returns the value of the uint32 pointer passed in or // 0 if the pointer is nil. func Uint32Value(v *uint32) uint32 { if v != nil { return *v } return 0 } // Uint32Slice converts a slice of uint32 values into a slice of // uint32 pointers func Uint32Slice(src []uint32) []*uint32 { dst := make([]*uint32, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // Uint32ValueSlice converts a slice of uint32 pointers into a slice of // uint32 values func Uint32ValueSlice(src []*uint32) []uint32 { dst := make([]uint32, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // Uint32Map converts a string map of uint32 values into a string // map of uint32 pointers func Uint32Map(src map[string]uint32) map[string]*uint32 { dst := make(map[string]*uint32) for k, val := range src { v := val dst[k] = &v } return dst } // Uint32ValueMap converts a string map of uint32 pointers into a string // map of uint32 values func Uint32ValueMap(src map[string]*uint32) map[string]uint32 { dst := make(map[string]uint32) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Uint64 returns a pointer to of the uint64 value passed in. func Uint64(v uint64) *uint64 { return &v } // Uint64Value returns the value of the uint64 pointer passed in or // 0 if the pointer is nil. func Uint64Value(v *uint64) uint64 { if v != nil { return *v } return 0 } // Uint64Slice converts a slice of uint64 values into a slice of // uint64 pointers func Uint64Slice(src []uint64) []*uint64 { dst := make([]*uint64, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // Uint64ValueSlice converts a slice of uint64 pointers into a slice of // uint64 values func Uint64ValueSlice(src []*uint64) []uint64 { dst := make([]uint64, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // Uint64Map converts a string map of uint64 values into a string // map of uint64 pointers func Uint64Map(src map[string]uint64) map[string]*uint64 { dst := make(map[string]*uint64) for k, val := range src { v := val dst[k] = &v } return dst } // Uint64ValueMap converts a string map of uint64 pointers into a string // map of uint64 values func Uint64ValueMap(src map[string]*uint64) map[string]uint64 { dst := make(map[string]uint64) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Float32 returns a pointer to of the float32 value passed in. func Float32(v float32) *float32 { return &v } // Float32Value returns the value of the float32 pointer passed in or // 0 if the pointer is nil. func Float32Value(v *float32) float32 { if v != nil { return *v } return 0 } // Float32Slice converts a slice of float32 values into a slice of // float32 pointers func Float32Slice(src []float32) []*float32 { dst := make([]*float32, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // Float32ValueSlice converts a slice of float32 pointers into a slice of // float32 values func Float32ValueSlice(src []*float32) []float32 { dst := make([]float32, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // Float32Map converts a string map of float32 values into a string // map of float32 pointers func Float32Map(src map[string]float32) map[string]*float32 { dst := make(map[string]*float32) for k, val := range src { v := val dst[k] = &v } return dst } // Float32ValueMap converts a string map of float32 pointers into a string // map of float32 values func Float32ValueMap(src map[string]*float32) map[string]float32 { dst := make(map[string]float32) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Float64 returns a pointer to of the float64 value passed in. func Float64(v float64) *float64 { return &v } // Float64Value returns the value of the float64 pointer passed in or // 0 if the pointer is nil. func Float64Value(v *float64) float64 { if v != nil { return *v } return 0 } // Float64Slice converts a slice of float64 values into a slice of // float64 pointers func Float64Slice(src []float64) []*float64 { dst := make([]*float64, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // Float64ValueSlice converts a slice of float64 pointers into a slice of // float64 values func Float64ValueSlice(src []*float64) []float64 { dst := make([]float64, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // Float64Map converts a string map of float64 values into a string // map of float64 pointers func Float64Map(src map[string]float64) map[string]*float64 { dst := make(map[string]*float64) for k, val := range src { v := val dst[k] = &v } return dst } // Float64ValueMap converts a string map of float64 pointers into a string // map of float64 values func Float64ValueMap(src map[string]*float64) map[string]float64 { dst := make(map[string]float64) for k, val := range src { if val != nil { dst[k] = *val } } return dst } // Time returns a pointer to of the time.Time value passed in. func Time(v time.Time) *time.Time { return &v } // TimeValue returns the value of the time.Time pointer passed in or // time.Time{} if the pointer is nil. func TimeValue(v *time.Time) time.Time { if v != nil { return *v } return time.Time{} } // TimeSlice converts a slice of time.Time values into a slice of // time.Time pointers func TimeSlice(src []time.Time) []*time.Time { dst := make([]*time.Time, len(src)) for i := 0; i < len(src); i++ { dst[i] = &(src[i]) } return dst } // TimeValueSlice converts a slice of time.Time pointers into a slice of // time.Time values func TimeValueSlice(src []*time.Time) []time.Time { dst := make([]time.Time, len(src)) for i := 0; i < len(src); i++ { if src[i] != nil { dst[i] = *(src[i]) } } return dst } // TimeMap converts a string map of time.Time values into a string // map of time.Time pointers func TimeMap(src map[string]time.Time) map[string]*time.Time { dst := make(map[string]*time.Time) for k, val := range src { v := val dst[k] = &v } return dst } // TimeValueMap converts a string map of time.Time pointers into a string // map of time.Time values func TimeValueMap(src map[string]*time.Time) map[string]time.Time { dst := make(map[string]time.Time) for k, val := range src { if val != nil { dst[k] = *val } } return dst } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/doc.go000066400000000000000000000020731520540370700245140ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /* Package swag contains a bunch of helper functions for go-openapi and go-swagger projects. You may also use it standalone for your projects. - convert between value and pointers for builtin types - convert from string to builtin types (wraps strconv) - fast json concatenation - search in path - load from file or http - name mangling This repo has only few dependencies outside of the standard library: - YAML utilities depend on gopkg.in/yaml.v2 */ package swag NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/file.go000066400000000000000000000016411520540370700246660ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import "mime/multipart" // File represents an uploaded file. type File struct { Data multipart.File Header *multipart.FileHeader } // Read bytes from the file func (f *File) Read(p []byte) (n int, err error) { return f.Data.Read(p) } // Close the file func (f *File) Close() error { return f.Data.Close() } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/initialism_index.go000066400000000000000000000106721520540370700273040ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "sort" "strings" "sync" ) var ( // commonInitialisms are common acronyms that are kept as whole uppercased words. commonInitialisms *indexOfInitialisms // initialisms is a slice of sorted initialisms initialisms []string // a copy of initialisms pre-baked as []rune initialismsRunes [][]rune initialismsUpperCased [][]rune isInitialism func(string) bool maxAllocMatches int ) func init() { // Taken from https://github.com/golang/lint/blob/3390df4df2787994aea98de825b964ac7944b817/lint.go#L732-L769 configuredInitialisms := map[string]bool{ "ACL": true, "API": true, "ASCII": true, "CPU": true, "CSS": true, "DNS": true, "EOF": true, "GUID": true, "HTML": true, "HTTPS": true, "HTTP": true, "ID": true, "IP": true, "IPv4": true, "IPv6": true, "JSON": true, "LHS": true, "OAI": true, "QPS": true, "RAM": true, "RHS": true, "RPC": true, "SLA": true, "SMTP": true, "SQL": true, "SSH": true, "TCP": true, "TLS": true, "TTL": true, "UDP": true, "UI": true, "UID": true, "UUID": true, "URI": true, "URL": true, "UTF8": true, "VM": true, "XML": true, "XMPP": true, "XSRF": true, "XSS": true, } // a thread-safe index of initialisms commonInitialisms = newIndexOfInitialisms().load(configuredInitialisms) initialisms = commonInitialisms.sorted() initialismsRunes = asRunes(initialisms) initialismsUpperCased = asUpperCased(initialisms) maxAllocMatches = maxAllocHeuristic(initialismsRunes) // a test function isInitialism = commonInitialisms.isInitialism } func asRunes(in []string) [][]rune { out := make([][]rune, len(in)) for i, initialism := range in { out[i] = []rune(initialism) } return out } func asUpperCased(in []string) [][]rune { out := make([][]rune, len(in)) for i, initialism := range in { out[i] = []rune(upper(trim(initialism))) } return out } func maxAllocHeuristic(in [][]rune) int { heuristic := make(map[rune]int) for _, initialism := range in { heuristic[initialism[0]]++ } var maxAlloc int for _, val := range heuristic { if val > maxAlloc { maxAlloc = val } } return maxAlloc } // AddInitialisms add additional initialisms func AddInitialisms(words ...string) { for _, word := range words { // commonInitialisms[upper(word)] = true commonInitialisms.add(upper(word)) } // sort again initialisms = commonInitialisms.sorted() initialismsRunes = asRunes(initialisms) initialismsUpperCased = asUpperCased(initialisms) } // indexOfInitialisms is a thread-safe implementation of the sorted index of initialisms. // Since go1.9, this may be implemented with sync.Map. type indexOfInitialisms struct { sortMutex *sync.Mutex index *sync.Map } func newIndexOfInitialisms() *indexOfInitialisms { return &indexOfInitialisms{ sortMutex: new(sync.Mutex), index: new(sync.Map), } } func (m *indexOfInitialisms) load(initial map[string]bool) *indexOfInitialisms { m.sortMutex.Lock() defer m.sortMutex.Unlock() for k, v := range initial { m.index.Store(k, v) } return m } func (m *indexOfInitialisms) isInitialism(key string) bool { _, ok := m.index.Load(key) return ok } func (m *indexOfInitialisms) add(key string) *indexOfInitialisms { m.index.Store(key, true) return m } func (m *indexOfInitialisms) sorted() (result []string) { m.sortMutex.Lock() defer m.sortMutex.Unlock() m.index.Range(func(key, _ interface{}) bool { k := key.(string) result = append(result, k) return true }) sort.Sort(sort.Reverse(byInitialism(result))) return } type byInitialism []string func (s byInitialism) Len() int { return len(s) } func (s byInitialism) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s byInitialism) Less(i, j int) bool { if len(s[i]) != len(s[j]) { return len(s[i]) < len(s[j]) } return strings.Compare(s[i], s[j]) > 0 } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/json.go000066400000000000000000000175051520540370700247260ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "bytes" "encoding/json" "log" "reflect" "strings" "sync" "github.com/mailru/easyjson/jlexer" "github.com/mailru/easyjson/jwriter" ) // nullJSON represents a JSON object with null type var nullJSON = []byte("null") // DefaultJSONNameProvider the default cache for types var DefaultJSONNameProvider = NewNameProvider() const comma = byte(',') var closers map[byte]byte func init() { closers = map[byte]byte{ '{': '}', '[': ']', } } type ejMarshaler interface { MarshalEasyJSON(w *jwriter.Writer) } type ejUnmarshaler interface { UnmarshalEasyJSON(w *jlexer.Lexer) } // WriteJSON writes json data, prefers finding an appropriate interface to short-circuit the marshaler // so it takes the fastest option available. func WriteJSON(data interface{}) ([]byte, error) { if d, ok := data.(ejMarshaler); ok { jw := new(jwriter.Writer) d.MarshalEasyJSON(jw) return jw.BuildBytes() } if d, ok := data.(json.Marshaler); ok { return d.MarshalJSON() } return json.Marshal(data) } // ReadJSON reads json data, prefers finding an appropriate interface to short-circuit the unmarshaler // so it takes the fastest option available func ReadJSON(data []byte, value interface{}) error { trimmedData := bytes.Trim(data, "\x00") if d, ok := value.(ejUnmarshaler); ok { jl := &jlexer.Lexer{Data: trimmedData} d.UnmarshalEasyJSON(jl) return jl.Error() } if d, ok := value.(json.Unmarshaler); ok { return d.UnmarshalJSON(trimmedData) } return json.Unmarshal(trimmedData, value) } // DynamicJSONToStruct converts an untyped json structure into a struct func DynamicJSONToStruct(data interface{}, target interface{}) error { // TODO: convert straight to a json typed map (mergo + iterate?) b, err := WriteJSON(data) if err != nil { return err } return ReadJSON(b, target) } // ConcatJSON concatenates multiple json objects efficiently func ConcatJSON(blobs ...[]byte) []byte { if len(blobs) == 0 { return nil } last := len(blobs) - 1 for blobs[last] == nil || bytes.Equal(blobs[last], nullJSON) { // strips trailing null objects last-- if last < 0 { // there was nothing but "null"s or nil... return nil } } if last == 0 { return blobs[0] } var opening, closing byte var idx, a int buf := bytes.NewBuffer(nil) for i, b := range blobs[:last+1] { if b == nil || bytes.Equal(b, nullJSON) { // a null object is in the list: skip it continue } if len(b) > 0 && opening == 0 { // is this an array or an object? opening, closing = b[0], closers[b[0]] } if opening != '{' && opening != '[' { continue // don't know how to concatenate non container objects } if len(b) < 3 { // yep empty but also the last one, so closing this thing if i == last && a > 0 { if err := buf.WriteByte(closing); err != nil { log.Println(err) } } continue } idx = 0 if a > 0 { // we need to join with a comma for everything beyond the first non-empty item if err := buf.WriteByte(comma); err != nil { log.Println(err) } idx = 1 // this is not the first or the last so we want to drop the leading bracket } if i != last { // not the last one, strip brackets if _, err := buf.Write(b[idx : len(b)-1]); err != nil { log.Println(err) } } else { // last one, strip only the leading bracket if _, err := buf.Write(b[idx:]); err != nil { log.Println(err) } } a++ } // somehow it ended up being empty, so provide a default value if buf.Len() == 0 { if err := buf.WriteByte(opening); err != nil { log.Println(err) } if err := buf.WriteByte(closing); err != nil { log.Println(err) } } return buf.Bytes() } // ToDynamicJSON turns an object into a properly JSON typed structure func ToDynamicJSON(data interface{}) interface{} { // TODO: convert straight to a json typed map (mergo + iterate?) b, err := json.Marshal(data) if err != nil { log.Println(err) } var res interface{} if err := json.Unmarshal(b, &res); err != nil { log.Println(err) } return res } // FromDynamicJSON turns an object into a properly JSON typed structure func FromDynamicJSON(data, target interface{}) error { b, err := json.Marshal(data) if err != nil { log.Println(err) } return json.Unmarshal(b, target) } // NameProvider represents an object capable of translating from go property names // to json property names // This type is thread-safe. type NameProvider struct { lock *sync.Mutex index map[reflect.Type]nameIndex } type nameIndex struct { jsonNames map[string]string goNames map[string]string } // NewNameProvider creates a new name provider func NewNameProvider() *NameProvider { return &NameProvider{ lock: &sync.Mutex{}, index: make(map[reflect.Type]nameIndex), } } func buildnameIndex(tpe reflect.Type, idx, reverseIdx map[string]string) { for i := 0; i < tpe.NumField(); i++ { targetDes := tpe.Field(i) if targetDes.PkgPath != "" { // unexported continue } if targetDes.Anonymous { // walk embedded structures tree down first buildnameIndex(targetDes.Type, idx, reverseIdx) continue } if tag := targetDes.Tag.Get("json"); tag != "" { parts := strings.Split(tag, ",") if len(parts) == 0 { continue } nm := parts[0] if nm == "-" { continue } if nm == "" { // empty string means we want to use the Go name nm = targetDes.Name } idx[nm] = targetDes.Name reverseIdx[targetDes.Name] = nm } } } func newNameIndex(tpe reflect.Type) nameIndex { var idx = make(map[string]string, tpe.NumField()) var reverseIdx = make(map[string]string, tpe.NumField()) buildnameIndex(tpe, idx, reverseIdx) return nameIndex{jsonNames: idx, goNames: reverseIdx} } // GetJSONNames gets all the json property names for a type func (n *NameProvider) GetJSONNames(subject interface{}) []string { n.lock.Lock() defer n.lock.Unlock() tpe := reflect.Indirect(reflect.ValueOf(subject)).Type() names, ok := n.index[tpe] if !ok { names = n.makeNameIndex(tpe) } res := make([]string, 0, len(names.jsonNames)) for k := range names.jsonNames { res = append(res, k) } return res } // GetJSONName gets the json name for a go property name func (n *NameProvider) GetJSONName(subject interface{}, name string) (string, bool) { tpe := reflect.Indirect(reflect.ValueOf(subject)).Type() return n.GetJSONNameForType(tpe, name) } // GetJSONNameForType gets the json name for a go property name on a given type func (n *NameProvider) GetJSONNameForType(tpe reflect.Type, name string) (string, bool) { n.lock.Lock() defer n.lock.Unlock() names, ok := n.index[tpe] if !ok { names = n.makeNameIndex(tpe) } nme, ok := names.goNames[name] return nme, ok } func (n *NameProvider) makeNameIndex(tpe reflect.Type) nameIndex { names := newNameIndex(tpe) n.index[tpe] = names return names } // GetGoName gets the go name for a json property name func (n *NameProvider) GetGoName(subject interface{}, name string) (string, bool) { tpe := reflect.Indirect(reflect.ValueOf(subject)).Type() return n.GetGoNameForType(tpe, name) } // GetGoNameForType gets the go name for a given type for a json property name func (n *NameProvider) GetGoNameForType(tpe reflect.Type, name string) (string, bool) { n.lock.Lock() defer n.lock.Unlock() names, ok := n.index[tpe] if !ok { names = n.makeNameIndex(tpe) } nme, ok := names.jsonNames[name] return nme, ok } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/loading.go000066400000000000000000000136301520540370700253650ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "fmt" "io" "log" "net/http" "net/url" "os" "path" "path/filepath" "runtime" "strings" "time" ) // LoadHTTPTimeout the default timeout for load requests var LoadHTTPTimeout = 30 * time.Second // LoadHTTPBasicAuthUsername the username to use when load requests require basic auth var LoadHTTPBasicAuthUsername = "" // LoadHTTPBasicAuthPassword the password to use when load requests require basic auth var LoadHTTPBasicAuthPassword = "" // LoadHTTPCustomHeaders an optional collection of custom HTTP headers for load requests var LoadHTTPCustomHeaders = map[string]string{} // LoadFromFileOrHTTP loads the bytes from a file or a remote http server based on the path passed in func LoadFromFileOrHTTP(pth string) ([]byte, error) { return LoadStrategy(pth, os.ReadFile, loadHTTPBytes(LoadHTTPTimeout))(pth) } // LoadFromFileOrHTTPWithTimeout loads the bytes from a file or a remote http server based on the path passed in // timeout arg allows for per request overriding of the request timeout func LoadFromFileOrHTTPWithTimeout(pth string, timeout time.Duration) ([]byte, error) { return LoadStrategy(pth, os.ReadFile, loadHTTPBytes(timeout))(pth) } // LoadStrategy returns a loader function for a given path or URI. // // The load strategy returns the remote load for any path starting with `http`. // So this works for any URI with a scheme `http` or `https`. // // The fallback strategy is to call the local loader. // // The local loader takes a local file system path (absolute or relative) as argument, // or alternatively a `file://...` URI, **without host** (see also below for windows). // // There are a few liberalities, initially intended to be tolerant regarding the URI syntax, // especially on windows. // // Before the local loader is called, the given path is transformed: // - percent-encoded characters are unescaped // - simple paths (e.g. `./folder/file`) are passed as-is // - on windows, occurrences of `/` are replaced by `\`, so providing a relative path such a `folder/file` works too. // // For paths provided as URIs with the "file" scheme, please note that: // - `file://` is simply stripped. // This means that the host part of the URI is not parsed at all. // For example, `file:///folder/file" becomes "/folder/file`, // but `file://localhost/folder/file` becomes `localhost/folder/file` on unix systems. // Similarly, `file://./folder/file` yields `./folder/file`. // - on windows, `file://...` can take a host so as to specify an UNC share location. // // Reminder about windows-specifics: // - `file://host/folder/file` becomes an UNC path like `\\host\folder\file` (no port specification is supported) // - `file:///c:/folder/file` becomes `C:\folder\file` // - `file://c:/folder/file` is tolerated (without leading `/`) and becomes `c:\folder\file` func LoadStrategy(pth string, local, remote func(string) ([]byte, error)) func(string) ([]byte, error) { if strings.HasPrefix(pth, "http") { return remote } return func(p string) ([]byte, error) { upth, err := url.PathUnescape(p) if err != nil { return nil, err } if !strings.HasPrefix(p, `file://`) { // regular file path provided: just normalize slashes return local(filepath.FromSlash(upth)) } if runtime.GOOS != "windows" { // crude processing: this leaves full URIs with a host with a (mostly) unexpected result upth = strings.TrimPrefix(upth, `file://`) return local(filepath.FromSlash(upth)) } // windows-only pre-processing of file://... URIs // support for canonical file URIs on windows. u, err := url.Parse(filepath.ToSlash(upth)) if err != nil { return nil, err } if u.Host != "" { // assume UNC name (volume share) // NOTE: UNC port not yet supported // when the "host" segment is a drive letter: // file://C:/folder/... => C:\folder upth = path.Clean(strings.Join([]string{u.Host, u.Path}, `/`)) if !strings.HasSuffix(u.Host, ":") && u.Host[0] != '.' { // tolerance: if we have a leading dot, this can't be a host // file://host/share/folder\... ==> \\host\share\path\folder upth = "//" + upth } } else { // no host, let's figure out if this is a drive letter upth = strings.TrimPrefix(upth, `file://`) first, _, _ := strings.Cut(strings.TrimPrefix(u.Path, "/"), "/") if strings.HasSuffix(first, ":") { // drive letter in the first segment: // file:///c:/folder/... ==> strip the leading slash upth = strings.TrimPrefix(upth, `/`) } } return local(filepath.FromSlash(upth)) } } func loadHTTPBytes(timeout time.Duration) func(path string) ([]byte, error) { return func(path string) ([]byte, error) { client := &http.Client{Timeout: timeout} req, err := http.NewRequest(http.MethodGet, path, nil) //nolint:noctx if err != nil { return nil, err } if LoadHTTPBasicAuthUsername != "" && LoadHTTPBasicAuthPassword != "" { req.SetBasicAuth(LoadHTTPBasicAuthUsername, LoadHTTPBasicAuthPassword) } for key, val := range LoadHTTPCustomHeaders { req.Header.Set(key, val) } resp, err := client.Do(req) defer func() { if resp != nil { if e := resp.Body.Close(); e != nil { log.Println(e) } } }() if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("could not access document at %q [%s] ", path, resp.Status) } return io.ReadAll(resp.Body) } } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/name_lexem.go000066400000000000000000000035661520540370700260710ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "unicode" "unicode/utf8" ) type ( lexemKind uint8 nameLexem struct { original string matchedInitialism string kind lexemKind } ) const ( lexemKindCasualName lexemKind = iota lexemKindInitialismName ) func newInitialismNameLexem(original, matchedInitialism string) nameLexem { return nameLexem{ kind: lexemKindInitialismName, original: original, matchedInitialism: matchedInitialism, } } func newCasualNameLexem(original string) nameLexem { return nameLexem{ kind: lexemKindCasualName, original: original, } } func (l nameLexem) GetUnsafeGoName() string { if l.kind == lexemKindInitialismName { return l.matchedInitialism } var ( first rune rest string ) for i, orig := range l.original { if i == 0 { first = orig continue } if i > 0 { rest = l.original[i:] break } } if len(l.original) > 1 { b := poolOfBuffers.BorrowBuffer(utf8.UTFMax + len(rest)) defer func() { poolOfBuffers.RedeemBuffer(b) }() b.WriteRune(unicode.ToUpper(first)) b.WriteString(lower(rest)) return b.String() } return l.original } func (l nameLexem) GetOriginal() string { return l.original } func (l nameLexem) IsInitialism() bool { return l.kind == lexemKindInitialismName } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/net.go000066400000000000000000000021051520540370700245310ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "net" "strconv" ) // SplitHostPort splits a network address into a host and a port. // The port is -1 when there is no port to be found func SplitHostPort(addr string) (host string, port int, err error) { h, p, err := net.SplitHostPort(addr) if err != nil { return "", -1, err } if p == "" { return "", -1, &net.AddrError{Err: "missing port in address", Addr: addr} } pi, err := strconv.Atoi(p) if err != nil { return "", -1, err } return h, pi, nil } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/path.go000066400000000000000000000032031520540370700246770ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "os" "path/filepath" "runtime" "strings" ) const ( // GOPATHKey represents the env key for gopath GOPATHKey = "GOPATH" ) // FindInSearchPath finds a package in a provided lists of paths func FindInSearchPath(searchPath, pkg string) string { pathsList := filepath.SplitList(searchPath) for _, path := range pathsList { if evaluatedPath, err := filepath.EvalSymlinks(filepath.Join(path, "src", pkg)); err == nil { if _, err := os.Stat(evaluatedPath); err == nil { return evaluatedPath } } } return "" } // FindInGoSearchPath finds a package in the $GOPATH:$GOROOT func FindInGoSearchPath(pkg string) string { return FindInSearchPath(FullGoSearchPath(), pkg) } // FullGoSearchPath gets the search paths for finding packages func FullGoSearchPath() string { allPaths := os.Getenv(GOPATHKey) if allPaths == "" { allPaths = filepath.Join(os.Getenv("HOME"), "go") } if allPaths != "" { allPaths = strings.Join([]string{allPaths, runtime.GOROOT()}, ":") } else { allPaths = runtime.GOROOT() } return allPaths } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/split.go000066400000000000000000000254161520540370700251100ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "bytes" "sync" "unicode" "unicode/utf8" ) type ( splitter struct { initialisms []string initialismsRunes [][]rune initialismsUpperCased [][]rune // initialisms cached in their trimmed, upper-cased version postSplitInitialismCheck bool } splitterOption func(*splitter) initialismMatch struct { body []rune start, end int complete bool } initialismMatches []initialismMatch ) type ( // memory pools of temporary objects. // // These are used to recycle temporarily allocated objects // and relieve the GC from undue pressure. matchesPool struct { *sync.Pool } buffersPool struct { *sync.Pool } lexemsPool struct { *sync.Pool } splittersPool struct { *sync.Pool } ) var ( // poolOfMatches holds temporary slices for recycling during the initialism match process poolOfMatches = matchesPool{ Pool: &sync.Pool{ New: func() any { s := make(initialismMatches, 0, maxAllocMatches) return &s }, }, } poolOfBuffers = buffersPool{ Pool: &sync.Pool{ New: func() any { return new(bytes.Buffer) }, }, } poolOfLexems = lexemsPool{ Pool: &sync.Pool{ New: func() any { s := make([]nameLexem, 0, maxAllocMatches) return &s }, }, } poolOfSplitters = splittersPool{ Pool: &sync.Pool{ New: func() any { s := newSplitter() return &s }, }, } ) // nameReplaceTable finds a word representation for special characters. func nameReplaceTable(r rune) (string, bool) { switch r { case '@': return "At ", true case '&': return "And ", true case '|': return "Pipe ", true case '$': return "Dollar ", true case '!': return "Bang ", true case '-': return "", true case '_': return "", true default: return "", false } } // split calls the splitter. // // Use newSplitter for more control and options func split(str string) []string { s := poolOfSplitters.BorrowSplitter() lexems := s.split(str) result := make([]string, 0, len(*lexems)) for _, lexem := range *lexems { result = append(result, lexem.GetOriginal()) } poolOfLexems.RedeemLexems(lexems) poolOfSplitters.RedeemSplitter(s) return result } func newSplitter(options ...splitterOption) splitter { s := splitter{ postSplitInitialismCheck: false, initialisms: initialisms, initialismsRunes: initialismsRunes, initialismsUpperCased: initialismsUpperCased, } for _, option := range options { option(&s) } return s } // withPostSplitInitialismCheck allows to catch initialisms after main split process func withPostSplitInitialismCheck(s *splitter) { s.postSplitInitialismCheck = true } func (p matchesPool) BorrowMatches() *initialismMatches { s := p.Get().(*initialismMatches) *s = (*s)[:0] // reset slice, keep allocated capacity return s } func (p buffersPool) BorrowBuffer(size int) *bytes.Buffer { s := p.Get().(*bytes.Buffer) s.Reset() if s.Cap() < size { s.Grow(size) } return s } func (p lexemsPool) BorrowLexems() *[]nameLexem { s := p.Get().(*[]nameLexem) *s = (*s)[:0] // reset slice, keep allocated capacity return s } func (p splittersPool) BorrowSplitter(options ...splitterOption) *splitter { s := p.Get().(*splitter) s.postSplitInitialismCheck = false // reset options for _, apply := range options { apply(s) } return s } func (p matchesPool) RedeemMatches(s *initialismMatches) { p.Put(s) } func (p buffersPool) RedeemBuffer(s *bytes.Buffer) { p.Put(s) } func (p lexemsPool) RedeemLexems(s *[]nameLexem) { p.Put(s) } func (p splittersPool) RedeemSplitter(s *splitter) { p.Put(s) } func (m initialismMatch) isZero() bool { return m.start == 0 && m.end == 0 } func (s splitter) split(name string) *[]nameLexem { nameRunes := []rune(name) matches := s.gatherInitialismMatches(nameRunes) if matches == nil { return poolOfLexems.BorrowLexems() } return s.mapMatchesToNameLexems(nameRunes, matches) } func (s splitter) gatherInitialismMatches(nameRunes []rune) *initialismMatches { var matches *initialismMatches for currentRunePosition, currentRune := range nameRunes { // recycle these allocations as we loop over runes // with such recycling, only 2 slices should be allocated per call // instead of o(n). newMatches := poolOfMatches.BorrowMatches() // check current initialism matches if matches != nil { // skip first iteration for _, match := range *matches { if keepCompleteMatch := match.complete; keepCompleteMatch { *newMatches = append(*newMatches, match) continue } // drop failed match currentMatchRune := match.body[currentRunePosition-match.start] if currentMatchRune != currentRune { continue } // try to complete ongoing match if currentRunePosition-match.start == len(match.body)-1 { // we are close; the next step is to check the symbol ahead // if it is a small letter, then it is not the end of match // but beginning of the next word if currentRunePosition < len(nameRunes)-1 { nextRune := nameRunes[currentRunePosition+1] if newWord := unicode.IsLower(nextRune); newWord { // oh ok, it was the start of a new word continue } } match.complete = true match.end = currentRunePosition } *newMatches = append(*newMatches, match) } } // check for new initialism matches for i := range s.initialisms { initialismRunes := s.initialismsRunes[i] if initialismRunes[0] == currentRune { *newMatches = append(*newMatches, initialismMatch{ start: currentRunePosition, body: initialismRunes, complete: false, }) } } if matches != nil { poolOfMatches.RedeemMatches(matches) } matches = newMatches } // up to the caller to redeem this last slice return matches } func (s splitter) mapMatchesToNameLexems(nameRunes []rune, matches *initialismMatches) *[]nameLexem { nameLexems := poolOfLexems.BorrowLexems() var lastAcceptedMatch initialismMatch for _, match := range *matches { if !match.complete { continue } if firstMatch := lastAcceptedMatch.isZero(); firstMatch { s.appendBrokenDownCasualString(nameLexems, nameRunes[:match.start]) *nameLexems = append(*nameLexems, s.breakInitialism(string(match.body))) lastAcceptedMatch = match continue } if overlappedMatch := match.start <= lastAcceptedMatch.end; overlappedMatch { continue } middle := nameRunes[lastAcceptedMatch.end+1 : match.start] s.appendBrokenDownCasualString(nameLexems, middle) *nameLexems = append(*nameLexems, s.breakInitialism(string(match.body))) lastAcceptedMatch = match } // we have not found any accepted matches if lastAcceptedMatch.isZero() { *nameLexems = (*nameLexems)[:0] s.appendBrokenDownCasualString(nameLexems, nameRunes) } else if lastAcceptedMatch.end+1 != len(nameRunes) { rest := nameRunes[lastAcceptedMatch.end+1:] s.appendBrokenDownCasualString(nameLexems, rest) } poolOfMatches.RedeemMatches(matches) return nameLexems } func (s splitter) breakInitialism(original string) nameLexem { return newInitialismNameLexem(original, original) } func (s splitter) appendBrokenDownCasualString(segments *[]nameLexem, str []rune) { currentSegment := poolOfBuffers.BorrowBuffer(len(str)) // unlike strings.Builder, bytes.Buffer initial storage can reused defer func() { poolOfBuffers.RedeemBuffer(currentSegment) }() addCasualNameLexem := func(original string) { *segments = append(*segments, newCasualNameLexem(original)) } addInitialismNameLexem := func(original, match string) { *segments = append(*segments, newInitialismNameLexem(original, match)) } var addNameLexem func(string) if s.postSplitInitialismCheck { addNameLexem = func(original string) { for i := range s.initialisms { if isEqualFoldIgnoreSpace(s.initialismsUpperCased[i], original) { addInitialismNameLexem(original, s.initialisms[i]) return } } addCasualNameLexem(original) } } else { addNameLexem = addCasualNameLexem } for _, rn := range str { if replace, found := nameReplaceTable(rn); found { if currentSegment.Len() > 0 { addNameLexem(currentSegment.String()) currentSegment.Reset() } if replace != "" { addNameLexem(replace) } continue } if !unicode.In(rn, unicode.L, unicode.M, unicode.N, unicode.Pc) { if currentSegment.Len() > 0 { addNameLexem(currentSegment.String()) currentSegment.Reset() } continue } if unicode.IsUpper(rn) { if currentSegment.Len() > 0 { addNameLexem(currentSegment.String()) } currentSegment.Reset() } currentSegment.WriteRune(rn) } if currentSegment.Len() > 0 { addNameLexem(currentSegment.String()) } } // isEqualFoldIgnoreSpace is the same as strings.EqualFold, but // it ignores leading and trailing blank spaces in the compared // string. // // base is assumed to be composed of upper-cased runes, and be already // trimmed. // // This code is heavily inspired from strings.EqualFold. func isEqualFoldIgnoreSpace(base []rune, str string) bool { var i, baseIndex int // equivalent to b := []byte(str), but without data copy b := hackStringBytes(str) for i < len(b) { if c := b[i]; c < utf8.RuneSelf { // fast path for ASCII if c != ' ' && c != '\t' { break } i++ continue } // unicode case r, size := utf8.DecodeRune(b[i:]) if !unicode.IsSpace(r) { break } i += size } if i >= len(b) { return len(base) == 0 } for _, baseRune := range base { if i >= len(b) { break } if c := b[i]; c < utf8.RuneSelf { // single byte rune case (ASCII) if baseRune >= utf8.RuneSelf { return false } baseChar := byte(baseRune) if c != baseChar && !('a' <= c && c <= 'z' && c-'a'+'A' == baseChar) { return false } baseIndex++ i++ continue } // unicode case r, size := utf8.DecodeRune(b[i:]) if unicode.ToUpper(r) != baseRune { return false } baseIndex++ i += size } if baseIndex != len(base) { return false } // all passed: now we should only have blanks for i < len(b) { if c := b[i]; c < utf8.RuneSelf { // fast path for ASCII if c != ' ' && c != '\t' { return false } i++ continue } // unicode case r, size := utf8.DecodeRune(b[i:]) if !unicode.IsSpace(r) { return false } i += size } return true } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/string_bytes.go000066400000000000000000000003161520540370700264610ustar00rootroot00000000000000package swag import "unsafe" // hackStringBytes returns the (unsafe) underlying bytes slice of a string. func hackStringBytes(str string) []byte { return unsafe.Slice(unsafe.StringData(str), len(str)) } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/util.go000066400000000000000000000212621520540370700247250ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "reflect" "strings" "unicode" "unicode/utf8" ) // GoNamePrefixFunc sets an optional rule to prefix go names // which do not start with a letter. // // The prefix function is assumed to return a string that starts with an upper case letter. // // e.g. to help convert "123" into "{prefix}123" // // The default is to prefix with "X" var GoNamePrefixFunc func(string) string func prefixFunc(name, in string) string { if GoNamePrefixFunc == nil { return "X" + in } return GoNamePrefixFunc(name) + in } const ( // collectionFormatComma = "csv" collectionFormatSpace = "ssv" collectionFormatTab = "tsv" collectionFormatPipe = "pipes" collectionFormatMulti = "multi" ) // JoinByFormat joins a string array by a known format (e.g. swagger's collectionFormat attribute): // // ssv: space separated value // tsv: tab separated value // pipes: pipe (|) separated value // csv: comma separated value (default) func JoinByFormat(data []string, format string) []string { if len(data) == 0 { return data } var sep string switch format { case collectionFormatSpace: sep = " " case collectionFormatTab: sep = "\t" case collectionFormatPipe: sep = "|" case collectionFormatMulti: return data default: sep = "," } return []string{strings.Join(data, sep)} } // SplitByFormat splits a string by a known format: // // ssv: space separated value // tsv: tab separated value // pipes: pipe (|) separated value // csv: comma separated value (default) func SplitByFormat(data, format string) []string { if data == "" { return nil } var sep string switch format { case collectionFormatSpace: sep = " " case collectionFormatTab: sep = "\t" case collectionFormatPipe: sep = "|" case collectionFormatMulti: return nil default: sep = "," } var result []string for _, s := range strings.Split(data, sep) { if ts := strings.TrimSpace(s); ts != "" { result = append(result, ts) } } return result } // Removes leading whitespaces func trim(str string) string { return strings.TrimSpace(str) } // Shortcut to strings.ToUpper() func upper(str string) string { return strings.ToUpper(trim(str)) } // Shortcut to strings.ToLower() func lower(str string) string { return strings.ToLower(trim(str)) } // Camelize an uppercased word func Camelize(word string) string { camelized := poolOfBuffers.BorrowBuffer(len(word)) defer func() { poolOfBuffers.RedeemBuffer(camelized) }() for pos, ru := range []rune(word) { if pos > 0 { camelized.WriteRune(unicode.ToLower(ru)) } else { camelized.WriteRune(unicode.ToUpper(ru)) } } return camelized.String() } // ToFileName lowercases and underscores a go type name func ToFileName(name string) string { in := split(name) out := make([]string, 0, len(in)) for _, w := range in { out = append(out, lower(w)) } return strings.Join(out, "_") } // ToCommandName lowercases and underscores a go type name func ToCommandName(name string) string { in := split(name) out := make([]string, 0, len(in)) for _, w := range in { out = append(out, lower(w)) } return strings.Join(out, "-") } // ToHumanNameLower represents a code name as a human series of words func ToHumanNameLower(name string) string { s := poolOfSplitters.BorrowSplitter(withPostSplitInitialismCheck) in := s.split(name) poolOfSplitters.RedeemSplitter(s) out := make([]string, 0, len(*in)) for _, w := range *in { if !w.IsInitialism() { out = append(out, lower(w.GetOriginal())) } else { out = append(out, trim(w.GetOriginal())) } } poolOfLexems.RedeemLexems(in) return strings.Join(out, " ") } // ToHumanNameTitle represents a code name as a human series of words with the first letters titleized func ToHumanNameTitle(name string) string { s := poolOfSplitters.BorrowSplitter(withPostSplitInitialismCheck) in := s.split(name) poolOfSplitters.RedeemSplitter(s) out := make([]string, 0, len(*in)) for _, w := range *in { original := trim(w.GetOriginal()) if !w.IsInitialism() { out = append(out, Camelize(original)) } else { out = append(out, original) } } poolOfLexems.RedeemLexems(in) return strings.Join(out, " ") } // ToJSONName camelcases a name which can be underscored or pascal cased func ToJSONName(name string) string { in := split(name) out := make([]string, 0, len(in)) for i, w := range in { if i == 0 { out = append(out, lower(w)) continue } out = append(out, Camelize(trim(w))) } return strings.Join(out, "") } // ToVarName camelcases a name which can be underscored or pascal cased func ToVarName(name string) string { res := ToGoName(name) if isInitialism(res) { return lower(res) } if len(res) <= 1 { return lower(res) } return lower(res[:1]) + res[1:] } // ToGoName translates a swagger name which can be underscored or camel cased to a name that golint likes func ToGoName(name string) string { s := poolOfSplitters.BorrowSplitter(withPostSplitInitialismCheck) lexems := s.split(name) poolOfSplitters.RedeemSplitter(s) defer func() { poolOfLexems.RedeemLexems(lexems) }() lexemes := *lexems if len(lexemes) == 0 { return "" } result := poolOfBuffers.BorrowBuffer(len(name)) defer func() { poolOfBuffers.RedeemBuffer(result) }() // check if not starting with a letter, upper case firstPart := lexemes[0].GetUnsafeGoName() if lexemes[0].IsInitialism() { firstPart = upper(firstPart) } if c := firstPart[0]; c < utf8.RuneSelf { // ASCII switch { case 'A' <= c && c <= 'Z': result.WriteString(firstPart) case 'a' <= c && c <= 'z': result.WriteByte(c - 'a' + 'A') result.WriteString(firstPart[1:]) default: result.WriteString(prefixFunc(name, firstPart)) // NOTE: no longer check if prefixFunc returns a string that starts with uppercase: // assume this is always the case } } else { // unicode firstRune, _ := utf8.DecodeRuneInString(firstPart) switch { case !unicode.IsLetter(firstRune): result.WriteString(prefixFunc(name, firstPart)) case !unicode.IsUpper(firstRune): result.WriteString(prefixFunc(name, firstPart)) /* result.WriteRune(unicode.ToUpper(firstRune)) result.WriteString(firstPart[offset:]) */ default: result.WriteString(firstPart) } } for _, lexem := range lexemes[1:] { goName := lexem.GetUnsafeGoName() // to support old behavior if lexem.IsInitialism() { goName = upper(goName) } result.WriteString(goName) } return result.String() } // ContainsStrings searches a slice of strings for a case-sensitive match func ContainsStrings(coll []string, item string) bool { for _, a := range coll { if a == item { return true } } return false } // ContainsStringsCI searches a slice of strings for a case-insensitive match func ContainsStringsCI(coll []string, item string) bool { for _, a := range coll { if strings.EqualFold(a, item) { return true } } return false } type zeroable interface { IsZero() bool } // IsZero returns true when the value passed into the function is a zero value. // This allows for safer checking of interface values. func IsZero(data interface{}) bool { v := reflect.ValueOf(data) // check for nil data switch v.Kind() { //nolint:exhaustive case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: if v.IsNil() { return true } } // check for things that have an IsZero method instead if vv, ok := data.(zeroable); ok { return vv.IsZero() } // continue with slightly more complex reflection switch v.Kind() { //nolint:exhaustive case reflect.String: return v.Len() == 0 case reflect.Bool: return !v.Bool() case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return v.Int() == 0 case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: return v.Uint() == 0 case reflect.Float32, reflect.Float64: return v.Float() == 0 case reflect.Struct, reflect.Array: return reflect.DeepEqual(data, reflect.Zero(v.Type()).Interface()) case reflect.Invalid: return true default: return false } } // CommandLineOptionsGroup represents a group of user-defined command line options type CommandLineOptionsGroup struct { ShortDescription string LongDescription string Options interface{} } NVIDIA-mig-parted-47bc938/vendor/github.com/go-openapi/swag/yaml.go000066400000000000000000000267401520540370700247200ustar00rootroot00000000000000// Copyright 2015 go-swagger maintainers // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package swag import ( "encoding/json" "errors" "fmt" "path/filepath" "reflect" "sort" "strconv" "github.com/mailru/easyjson/jlexer" "github.com/mailru/easyjson/jwriter" yaml "gopkg.in/yaml.v3" ) // YAMLMatcher matches yaml func YAMLMatcher(path string) bool { ext := filepath.Ext(path) return ext == ".yaml" || ext == ".yml" } // YAMLToJSON converts YAML unmarshaled data into json compatible data func YAMLToJSON(data interface{}) (json.RawMessage, error) { jm, err := transformData(data) if err != nil { return nil, err } b, err := WriteJSON(jm) return json.RawMessage(b), err } // BytesToYAMLDoc converts a byte slice into a YAML document func BytesToYAMLDoc(data []byte) (interface{}, error) { var document yaml.Node // preserve order that is present in the document if err := yaml.Unmarshal(data, &document); err != nil { return nil, err } if document.Kind != yaml.DocumentNode || len(document.Content) != 1 || document.Content[0].Kind != yaml.MappingNode { return nil, errors.New("only YAML documents that are objects are supported") } return &document, nil } func yamlNode(root *yaml.Node) (interface{}, error) { switch root.Kind { case yaml.DocumentNode: return yamlDocument(root) case yaml.SequenceNode: return yamlSequence(root) case yaml.MappingNode: return yamlMapping(root) case yaml.ScalarNode: return yamlScalar(root) case yaml.AliasNode: return yamlNode(root.Alias) default: return nil, fmt.Errorf("unsupported YAML node type: %v", root.Kind) } } func yamlDocument(node *yaml.Node) (interface{}, error) { if len(node.Content) != 1 { return nil, fmt.Errorf("unexpected YAML Document node content length: %d", len(node.Content)) } return yamlNode(node.Content[0]) } func yamlMapping(node *yaml.Node) (interface{}, error) { m := make(JSONMapSlice, len(node.Content)/2) var j int for i := 0; i < len(node.Content); i += 2 { var nmi JSONMapItem k, err := yamlStringScalarC(node.Content[i]) if err != nil { return nil, fmt.Errorf("unable to decode YAML map key: %w", err) } nmi.Key = k v, err := yamlNode(node.Content[i+1]) if err != nil { return nil, fmt.Errorf("unable to process YAML map value for key %q: %w", k, err) } nmi.Value = v m[j] = nmi j++ } return m, nil } func yamlSequence(node *yaml.Node) (interface{}, error) { s := make([]interface{}, 0) for i := 0; i < len(node.Content); i++ { v, err := yamlNode(node.Content[i]) if err != nil { return nil, fmt.Errorf("unable to decode YAML sequence value: %w", err) } s = append(s, v) } return s, nil } const ( // See https://yaml.org/type/ yamlStringScalar = "tag:yaml.org,2002:str" yamlIntScalar = "tag:yaml.org,2002:int" yamlBoolScalar = "tag:yaml.org,2002:bool" yamlFloatScalar = "tag:yaml.org,2002:float" yamlTimestamp = "tag:yaml.org,2002:timestamp" yamlNull = "tag:yaml.org,2002:null" ) func yamlScalar(node *yaml.Node) (interface{}, error) { switch node.LongTag() { case yamlStringScalar: return node.Value, nil case yamlBoolScalar: b, err := strconv.ParseBool(node.Value) if err != nil { return nil, fmt.Errorf("unable to process scalar node. Got %q. Expecting bool content: %w", node.Value, err) } return b, nil case yamlIntScalar: i, err := strconv.ParseInt(node.Value, 10, 64) if err != nil { return nil, fmt.Errorf("unable to process scalar node. Got %q. Expecting integer content: %w", node.Value, err) } return i, nil case yamlFloatScalar: f, err := strconv.ParseFloat(node.Value, 64) if err != nil { return nil, fmt.Errorf("unable to process scalar node. Got %q. Expecting float content: %w", node.Value, err) } return f, nil case yamlTimestamp: return node.Value, nil case yamlNull: return nil, nil //nolint:nilnil default: return nil, fmt.Errorf("YAML tag %q is not supported", node.LongTag()) } } func yamlStringScalarC(node *yaml.Node) (string, error) { if node.Kind != yaml.ScalarNode { return "", fmt.Errorf("expecting a string scalar but got %q", node.Kind) } switch node.LongTag() { case yamlStringScalar, yamlIntScalar, yamlFloatScalar: return node.Value, nil default: return "", fmt.Errorf("YAML tag %q is not supported as map key", node.LongTag()) } } // JSONMapSlice represent a JSON object, with the order of keys maintained type JSONMapSlice []JSONMapItem // MarshalJSON renders a JSONMapSlice as JSON func (s JSONMapSlice) MarshalJSON() ([]byte, error) { w := &jwriter.Writer{Flags: jwriter.NilMapAsEmpty | jwriter.NilSliceAsEmpty} s.MarshalEasyJSON(w) return w.BuildBytes() } // MarshalEasyJSON renders a JSONMapSlice as JSON, using easyJSON func (s JSONMapSlice) MarshalEasyJSON(w *jwriter.Writer) { w.RawByte('{') ln := len(s) last := ln - 1 for i := 0; i < ln; i++ { s[i].MarshalEasyJSON(w) if i != last { // last item w.RawByte(',') } } w.RawByte('}') } // UnmarshalJSON makes a JSONMapSlice from JSON func (s *JSONMapSlice) UnmarshalJSON(data []byte) error { l := jlexer.Lexer{Data: data} s.UnmarshalEasyJSON(&l) return l.Error() } // UnmarshalEasyJSON makes a JSONMapSlice from JSON, using easyJSON func (s *JSONMapSlice) UnmarshalEasyJSON(in *jlexer.Lexer) { if in.IsNull() { in.Skip() return } var result JSONMapSlice in.Delim('{') for !in.IsDelim('}') { var mi JSONMapItem mi.UnmarshalEasyJSON(in) result = append(result, mi) } *s = result } func (s JSONMapSlice) MarshalYAML() (interface{}, error) { var n yaml.Node n.Kind = yaml.DocumentNode var nodes []*yaml.Node for _, item := range s { nn, err := json2yaml(item.Value) if err != nil { return nil, err } ns := []*yaml.Node{ { Kind: yaml.ScalarNode, Tag: yamlStringScalar, Value: item.Key, }, nn, } nodes = append(nodes, ns...) } n.Content = []*yaml.Node{ { Kind: yaml.MappingNode, Content: nodes, }, } return yaml.Marshal(&n) } func isNil(input interface{}) bool { if input == nil { return true } kind := reflect.TypeOf(input).Kind() switch kind { //nolint:exhaustive case reflect.Ptr, reflect.Map, reflect.Slice, reflect.Chan: return reflect.ValueOf(input).IsNil() default: return false } } func json2yaml(item interface{}) (*yaml.Node, error) { if isNil(item) { return &yaml.Node{ Kind: yaml.ScalarNode, Value: "null", }, nil } switch val := item.(type) { case JSONMapSlice: var n yaml.Node n.Kind = yaml.MappingNode for i := range val { childNode, err := json2yaml(&val[i].Value) if err != nil { return nil, err } n.Content = append(n.Content, &yaml.Node{ Kind: yaml.ScalarNode, Tag: yamlStringScalar, Value: val[i].Key, }, childNode) } return &n, nil case map[string]interface{}: var n yaml.Node n.Kind = yaml.MappingNode keys := make([]string, 0, len(val)) for k := range val { keys = append(keys, k) } sort.Strings(keys) for _, k := range keys { v := val[k] childNode, err := json2yaml(v) if err != nil { return nil, err } n.Content = append(n.Content, &yaml.Node{ Kind: yaml.ScalarNode, Tag: yamlStringScalar, Value: k, }, childNode) } return &n, nil case []interface{}: var n yaml.Node n.Kind = yaml.SequenceNode for i := range val { childNode, err := json2yaml(val[i]) if err != nil { return nil, err } n.Content = append(n.Content, childNode) } return &n, nil case string: return &yaml.Node{ Kind: yaml.ScalarNode, Tag: yamlStringScalar, Value: val, }, nil case float64: return &yaml.Node{ Kind: yaml.ScalarNode, Tag: yamlFloatScalar, Value: strconv.FormatFloat(val, 'f', -1, 64), }, nil case int64: return &yaml.Node{ Kind: yaml.ScalarNode, Tag: yamlIntScalar, Value: strconv.FormatInt(val, 10), }, nil case uint64: return &yaml.Node{ Kind: yaml.ScalarNode, Tag: yamlIntScalar, Value: strconv.FormatUint(val, 10), }, nil case bool: return &yaml.Node{ Kind: yaml.ScalarNode, Tag: yamlBoolScalar, Value: strconv.FormatBool(val), }, nil default: return nil, fmt.Errorf("unhandled type: %T", val) } } // JSONMapItem represents the value of a key in a JSON object held by JSONMapSlice type JSONMapItem struct { Key string Value interface{} } // MarshalJSON renders a JSONMapItem as JSON func (s JSONMapItem) MarshalJSON() ([]byte, error) { w := &jwriter.Writer{Flags: jwriter.NilMapAsEmpty | jwriter.NilSliceAsEmpty} s.MarshalEasyJSON(w) return w.BuildBytes() } // MarshalEasyJSON renders a JSONMapItem as JSON, using easyJSON func (s JSONMapItem) MarshalEasyJSON(w *jwriter.Writer) { w.String(s.Key) w.RawByte(':') w.Raw(WriteJSON(s.Value)) } // UnmarshalJSON makes a JSONMapItem from JSON func (s *JSONMapItem) UnmarshalJSON(data []byte) error { l := jlexer.Lexer{Data: data} s.UnmarshalEasyJSON(&l) return l.Error() } // UnmarshalEasyJSON makes a JSONMapItem from JSON, using easyJSON func (s *JSONMapItem) UnmarshalEasyJSON(in *jlexer.Lexer) { key := in.UnsafeString() in.WantColon() value := in.Interface() in.WantComma() s.Key = key s.Value = value } func transformData(input interface{}) (out interface{}, err error) { format := func(t interface{}) (string, error) { switch k := t.(type) { case string: return k, nil case uint: return strconv.FormatUint(uint64(k), 10), nil case uint8: return strconv.FormatUint(uint64(k), 10), nil case uint16: return strconv.FormatUint(uint64(k), 10), nil case uint32: return strconv.FormatUint(uint64(k), 10), nil case uint64: return strconv.FormatUint(k, 10), nil case int: return strconv.Itoa(k), nil case int8: return strconv.FormatInt(int64(k), 10), nil case int16: return strconv.FormatInt(int64(k), 10), nil case int32: return strconv.FormatInt(int64(k), 10), nil case int64: return strconv.FormatInt(k, 10), nil default: return "", fmt.Errorf("unexpected map key type, got: %T", k) } } switch in := input.(type) { case yaml.Node: return yamlNode(&in) case *yaml.Node: return yamlNode(in) case map[interface{}]interface{}: o := make(JSONMapSlice, 0, len(in)) for ke, va := range in { var nmi JSONMapItem if nmi.Key, err = format(ke); err != nil { return nil, err } v, ert := transformData(va) if ert != nil { return nil, ert } nmi.Value = v o = append(o, nmi) } return o, nil case []interface{}: len1 := len(in) o := make([]interface{}, len1) for i := 0; i < len1; i++ { o[i], err = transformData(in[i]) if err != nil { return nil, err } } return o, nil } return input, nil } // YAMLDoc loads a yaml document from either http or a file and converts it to json func YAMLDoc(path string) (json.RawMessage, error) { yamlDoc, err := YAMLData(path) if err != nil { return nil, err } data, err := YAMLToJSON(yamlDoc) if err != nil { return nil, err } return data, nil } // YAMLData loads a yaml document from either http or a file func YAMLData(path string) (interface{}, error) { data, err := LoadFromFileOrHTTP(path) if err != nil { return nil, err } return BytesToYAMLDoc(data) } NVIDIA-mig-parted-47bc938/vendor/github.com/godbus/000077500000000000000000000000001520540370700217025ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/godbus/dbus/000077500000000000000000000000001520540370700226375ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/godbus/dbus/v5/000077500000000000000000000000001520540370700231715ustar00rootroot00000000000000NVIDIA-mig-parted-47bc938/vendor/github.com/godbus/dbus/v5/CONTRIBUTING.md000066400000000000000000000027141520540370700254260ustar00rootroot00000000000000# How to Contribute ## Getting Started - Fork the repository on GitHub - Read the [README](README.markdown) for build and test instructions - Play with the project, submit bugs, submit patches! ## Contribution Flow This is a rough outline of what a contributor's workflow looks like: - Create a topic branch from where you want to base your work (usually master). - Make commits of logical units. - Make sure your commit messages are in the proper format (see below). - Push your changes to a topic branch in your fork of the repository. - Make sure the tests pass, and add any new tests as appropriate. - Submit a pull request to the original repository. Thanks for your contributions! ### Format of the Commit Message We follow a rough convention for commit messages that is designed to answer two questions: what changed and why. The subject line should feature the what and the body of the commit should describe the why. ``` scripts: add the test-cluster command this uses tmux to setup a test cluster that you can easily kill and start for debugging. Fixes #38 ``` The format can be described more formally as follows: ``` :