Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca605b7d authored by Sowmini Varadhan's avatar Sowmini Varadhan Committed by David S. Miller
Browse files

sparc64: Add vio_set_intr() to enable/disable Rx interrupts



The vio_set_intr() API should be used by VIO consumers to enable/disable
Rx interrupts to facilitate deferred processing in softirq/bottom-half
context.

Signed-off-by: default avatarSowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d0aedcd4
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -298,6 +298,7 @@ struct vio_dev {


	unsigned int		tx_irq;
	unsigned int		tx_irq;
	unsigned int		rx_irq;
	unsigned int		rx_irq;
	u64			rx_ino;


	struct device		dev;
	struct device		dev;
};
};
@@ -453,5 +454,6 @@ int vio_driver_init(struct vio_driver_state *vio, struct vio_dev *vdev,
		    char *name);
		    char *name);


void vio_port_up(struct vio_driver_state *vio);
void vio_port_up(struct vio_driver_state *vio);
int vio_set_intr(unsigned long dev_ino, int state);


#endif /* _SPARC64_VIO_H */
#endif /* _SPARC64_VIO_H */
+12 −1
Original line number Original line Diff line number Diff line
@@ -180,8 +180,10 @@ static void vio_fill_channel_info(struct mdesc_handle *hp, u64 mp,
			vdev->tx_irq = sun4v_build_virq(cdev_cfg_handle, *irq);
			vdev->tx_irq = sun4v_build_virq(cdev_cfg_handle, *irq);


		irq = mdesc_get_property(hp, target, "rx-ino", NULL);
		irq = mdesc_get_property(hp, target, "rx-ino", NULL);
		if (irq)
		if (irq) {
			vdev->rx_irq = sun4v_build_virq(cdev_cfg_handle, *irq);
			vdev->rx_irq = sun4v_build_virq(cdev_cfg_handle, *irq);
			vdev->rx_ino = *irq;
		}


		chan_id = mdesc_get_property(hp, target, "id", NULL);
		chan_id = mdesc_get_property(hp, target, "id", NULL);
		if (chan_id)
		if (chan_id)
@@ -189,6 +191,15 @@ static void vio_fill_channel_info(struct mdesc_handle *hp, u64 mp,
	}
	}
}
}


int vio_set_intr(unsigned long dev_ino, int state)
{
	int err;

	err = sun4v_vintr_set_valid(cdev_cfg_handle, dev_ino, state);
	return err;
}
EXPORT_SYMBOL(vio_set_intr);

static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
static struct vio_dev *vio_create_one(struct mdesc_handle *hp, u64 mp,
				      struct device *parent)
				      struct device *parent)
{
{