2008-09-15 09:17:11 -07:00
/*
2010-06-24 10:52:26 +00:00
* Copyright 2008 - 2010 Cisco Systems , Inc . All rights reserved .
2008-09-15 09:17:11 -07:00
* Copyright 2007 Nuova Systems , Inc . All rights reserved .
*
* This program is free software ; you may redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; version 2 of the License .
*
* 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 .
*
*/
# include <linux/kernel.h>
# include <linux/errno.h>
# include <linux/types.h>
# include <linux/pci.h>
# include <linux/delay.h>
# include "vnic_dev.h"
# include "vnic_intr.h"
void vnic_intr_free ( struct vnic_intr * intr )
{
intr - > ctrl = NULL ;
}
int vnic_intr_alloc ( struct vnic_dev * vdev , struct vnic_intr * intr ,
unsigned int index )
{
intr - > index = index ;
intr - > vdev = vdev ;
intr - > ctrl = vnic_dev_get_res ( vdev , RES_TYPE_INTR_CTRL , index ) ;
if ( ! intr - > ctrl ) {
2010-06-24 10:50:56 +00:00
pr_err ( " Failed to hook INTR[%d].ctrl resource \n " , index ) ;
2008-09-15 09:17:11 -07:00
return - EINVAL ;
}
return 0 ;
}
2011-06-17 07:56:48 +00:00
void vnic_intr_init ( struct vnic_intr * intr , u32 coalescing_timer ,
2008-09-15 09:17:11 -07:00
unsigned int coalescing_type , unsigned int mask_on_assertion )
{
2009-12-23 13:27:54 +00:00
vnic_intr_coalescing_timer_set ( intr , coalescing_timer ) ;
2008-09-15 09:17:11 -07:00
iowrite32 ( coalescing_type , & intr - > ctrl - > coalescing_type ) ;
iowrite32 ( mask_on_assertion , & intr - > ctrl - > mask_on_assertion ) ;
iowrite32 ( 0 , & intr - > ctrl - > int_credits ) ;
}
2009-12-23 13:27:54 +00:00
void vnic_intr_coalescing_timer_set ( struct vnic_intr * intr ,
2011-06-17 07:56:48 +00:00
u32 coalescing_timer )
2009-12-23 13:27:54 +00:00
{
2011-06-17 07:56:48 +00:00
iowrite32 ( vnic_dev_intr_coal_timer_usec_to_hw ( intr - > vdev ,
coalescing_timer ) , & intr - > ctrl - > coalescing_timer ) ;
2009-12-23 13:27:54 +00:00
}
2008-09-15 09:17:11 -07:00
void vnic_intr_clean ( struct vnic_intr * intr )
{
iowrite32 ( 0 , & intr - > ctrl - > int_credits ) ;
}