1*dfb99b05SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2*dfb99b05SThomas Gleixner // Copyright 2014 Cisco Systems, Inc. All rights reserved.
3c8806b6cSNarsimhulu Musini
4c8806b6cSNarsimhulu Musini #include <linux/kernel.h>
5c8806b6cSNarsimhulu Musini #include <linux/errno.h>
6c8806b6cSNarsimhulu Musini #include <linux/types.h>
7c8806b6cSNarsimhulu Musini #include <linux/pci.h>
8c8806b6cSNarsimhulu Musini #include <linux/delay.h>
9c8806b6cSNarsimhulu Musini #include "vnic_dev.h"
10c8806b6cSNarsimhulu Musini #include "vnic_intr.h"
11c8806b6cSNarsimhulu Musini
svnic_intr_free(struct vnic_intr * intr)12c8806b6cSNarsimhulu Musini void svnic_intr_free(struct vnic_intr *intr)
13c8806b6cSNarsimhulu Musini {
14c8806b6cSNarsimhulu Musini intr->ctrl = NULL;
15c8806b6cSNarsimhulu Musini }
16c8806b6cSNarsimhulu Musini
svnic_intr_alloc(struct vnic_dev * vdev,struct vnic_intr * intr,unsigned int index)17c8806b6cSNarsimhulu Musini int svnic_intr_alloc(struct vnic_dev *vdev, struct vnic_intr *intr,
18c8806b6cSNarsimhulu Musini unsigned int index)
19c8806b6cSNarsimhulu Musini {
20c8806b6cSNarsimhulu Musini intr->index = index;
21c8806b6cSNarsimhulu Musini intr->vdev = vdev;
22c8806b6cSNarsimhulu Musini
23c8806b6cSNarsimhulu Musini intr->ctrl = svnic_dev_get_res(vdev, RES_TYPE_INTR_CTRL, index);
24c8806b6cSNarsimhulu Musini if (!intr->ctrl) {
25c8806b6cSNarsimhulu Musini pr_err("Failed to hook INTR[%d].ctrl resource\n",
26c8806b6cSNarsimhulu Musini index);
27c8806b6cSNarsimhulu Musini return -EINVAL;
28c8806b6cSNarsimhulu Musini }
29c8806b6cSNarsimhulu Musini
30c8806b6cSNarsimhulu Musini return 0;
31c8806b6cSNarsimhulu Musini }
32c8806b6cSNarsimhulu Musini
svnic_intr_init(struct vnic_intr * intr,unsigned int coalescing_timer,unsigned int coalescing_type,unsigned int mask_on_assertion)33c8806b6cSNarsimhulu Musini void svnic_intr_init(struct vnic_intr *intr, unsigned int coalescing_timer,
34c8806b6cSNarsimhulu Musini unsigned int coalescing_type, unsigned int mask_on_assertion)
35c8806b6cSNarsimhulu Musini {
36c8806b6cSNarsimhulu Musini iowrite32(coalescing_timer, &intr->ctrl->coalescing_timer);
37c8806b6cSNarsimhulu Musini iowrite32(coalescing_type, &intr->ctrl->coalescing_type);
38c8806b6cSNarsimhulu Musini iowrite32(mask_on_assertion, &intr->ctrl->mask_on_assertion);
39c8806b6cSNarsimhulu Musini iowrite32(0, &intr->ctrl->int_credits);
40c8806b6cSNarsimhulu Musini }
41c8806b6cSNarsimhulu Musini
svnic_intr_clean(struct vnic_intr * intr)42c8806b6cSNarsimhulu Musini void svnic_intr_clean(struct vnic_intr *intr)
43c8806b6cSNarsimhulu Musini {
44c8806b6cSNarsimhulu Musini iowrite32(0, &intr->ctrl->int_credits);
45c8806b6cSNarsimhulu Musini }
46