Ejemplo n.º 1
0
/****************************************************************************
 *
 * 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;  
} 
Ejemplo n.º 2
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;
    }
Ejemplo n.º 3
0
/****************************************************************************
 *
 * 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; 
}