/**************************************************************************** * * close - cleanup filedescriptor and private state * ****************************************************************************/ static int ci_char_fop_close(struct inode *inode, struct file *filp) { ci_private_char_t *priv = (ci_private_char_t *) filp->private_data; EFCH_TRACE("%s:", __FUNCTION__); /* cleanup private state */ filp->private_data = 0; ci_resource_table_dtor(&priv->rt); ci_free(priv); return 0; }
static ci_boolean_t efab_vi_rm_nopage_nic(struct efrm_vi *virs, unsigned *pfn_ptr, unsigned long offset) { unsigned long len; int queue_type; if( virs->q[EFHW_EVQ].capacity != 0 ) { len = efhw_iopages_size(&virs->q[EFHW_EVQ].pages); if( offset < len ) { *pfn_ptr = efhw_iopages_pfn(&virs->q[EFHW_EVQ].pages, offset >> PAGE_SHIFT); EFCH_TRACE("%s: Matched the EVQ", __FUNCTION__); return CI_TRUE; }
/**************************************************************************** * * open - create a new file descriptor and hang private state * ****************************************************************************/ static int ci_char_fop_open(struct inode *inode, struct file *filp) { ci_private_char_t *priv; EFCH_TRACE("%s:", __FUNCTION__); if ((priv = CI_ALLOC_OBJ(ci_private_char_t)) == NULL) return -ENOMEM; CI_ZERO(priv); /* priv->cpcp_vi = NULL; */ init_waitqueue_head(&priv->cpcp_poll_queue); ci_resource_table_ctor(&priv->rt, ci_is_sysadmin() ? CI_CAP_BAR | CI_CAP_PHYS | CI_CAP_DRV : 0); filp->private_data = (void*) priv; return 0; }