Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 205737
b: refs/heads/master
c: c4ca3d5
h: refs/heads/master
i:
  205735: ea54247
v: v3
  • Loading branch information
Omar Ramirez Luna authored and Greg Kroah-Hartman committed Jun 23, 2010
1 parent 8faf300 commit 66b43b6
Show file tree
Hide file tree
Showing 13 changed files with 7,361 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 999e07d63289f7a401972cf390f569ffcd3d3a7b
refs/heads/master: c4ca3d5a4b02b484fdb1bab59489699b94998fad
163 changes: 163 additions & 0 deletions trunk/drivers/staging/tidspbridge/pmgr/chnl.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
/*
* chnl.c
*
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
*
* DSP API channel interface: multiplexes data streams through the single
* physical link managed by a Bridge Bridge driver.
*
* Copyright (C) 2005-2006 Texas Instruments, Inc.
*
* This package is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/

/* ----------------------------------- Host OS */
#include <dspbridge/host_os.h>

/* ----------------------------------- DSP/BIOS Bridge */
#include <dspbridge/std.h>
#include <dspbridge/dbdefs.h>

/* ----------------------------------- Trace & Debug */
#include <dspbridge/dbc.h>

/* ----------------------------------- OS Adaptation Layer */
#include <dspbridge/cfg.h>
#include <dspbridge/sync.h>

/* ----------------------------------- Platform Manager */
#include <dspbridge/proc.h>
#include <dspbridge/dev.h>

/* ----------------------------------- Others */
#include <dspbridge/chnlpriv.h>
#include <chnlobj.h>

/* ----------------------------------- This */
#include <dspbridge/chnl.h>

/* ----------------------------------- Globals */
static u32 refs;

/*
* ======== chnl_create ========
* Purpose:
* Create a channel manager object, responsible for opening new channels
* and closing old ones for a given 'Bridge board.
*/
int chnl_create(OUT struct chnl_mgr **phChnlMgr,
struct dev_object *hdev_obj,
IN CONST struct chnl_mgrattrs *pMgrAttrs)
{
int status;
struct chnl_mgr *hchnl_mgr;
struct chnl_mgr_ *chnl_mgr_obj = NULL;

DBC_REQUIRE(refs > 0);
DBC_REQUIRE(phChnlMgr != NULL);
DBC_REQUIRE(pMgrAttrs != NULL);

*phChnlMgr = NULL;

/* Validate args: */
if ((0 < pMgrAttrs->max_channels) &&
(pMgrAttrs->max_channels <= CHNL_MAXCHANNELS))
status = 0;
else if (pMgrAttrs->max_channels == 0)
status = -EINVAL;
else
status = -ECHRNG;

if (pMgrAttrs->word_size == 0)
status = -EINVAL;

if (DSP_SUCCEEDED(status)) {
status = dev_get_chnl_mgr(hdev_obj, &hchnl_mgr);
if (DSP_SUCCEEDED(status) && hchnl_mgr != NULL)
status = -EEXIST;

}

if (DSP_SUCCEEDED(status)) {
struct bridge_drv_interface *intf_fxns;
dev_get_intf_fxns(hdev_obj, &intf_fxns);
/* Let Bridge channel module finish the create: */
status = (*intf_fxns->pfn_chnl_create) (&hchnl_mgr, hdev_obj,
pMgrAttrs);
if (DSP_SUCCEEDED(status)) {
/* Fill in DSP API channel module's fields of the
* chnl_mgr structure */
chnl_mgr_obj = (struct chnl_mgr_ *)hchnl_mgr;
chnl_mgr_obj->intf_fxns = intf_fxns;
/* Finally, return the new channel manager handle: */
*phChnlMgr = hchnl_mgr;
}
}

DBC_ENSURE(DSP_FAILED(status) || chnl_mgr_obj);

return status;
}

/*
* ======== chnl_destroy ========
* Purpose:
* Close all open channels, and destroy the channel manager.
*/
int chnl_destroy(struct chnl_mgr *hchnl_mgr)
{
struct chnl_mgr_ *chnl_mgr_obj = (struct chnl_mgr_ *)hchnl_mgr;
struct bridge_drv_interface *intf_fxns;
int status;

DBC_REQUIRE(refs > 0);

if (chnl_mgr_obj) {
intf_fxns = chnl_mgr_obj->intf_fxns;
/* Let Bridge channel module destroy the chnl_mgr: */
status = (*intf_fxns->pfn_chnl_destroy) (hchnl_mgr);
} else {
status = -EFAULT;
}

return status;
}

/*
* ======== chnl_exit ========
* Purpose:
* Discontinue usage of the CHNL module.
*/
void chnl_exit(void)
{
DBC_REQUIRE(refs > 0);

refs--;

DBC_ENSURE(refs >= 0);
}

/*
* ======== chnl_init ========
* Purpose:
* Initialize the CHNL module's private state.
*/
bool chnl_init(void)
{
bool ret = true;

DBC_REQUIRE(refs >= 0);

if (ret)
refs++;

DBC_ENSURE((ret && (refs > 0)) || (!ret && (refs >= 0)));

return ret;
}
46 changes: 46 additions & 0 deletions trunk/drivers/staging/tidspbridge/pmgr/chnlobj.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* chnlobj.h
*
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
*
* Structure subcomponents of channel class library channel objects which
* are exposed to DSP API from Bridge driver.
*
* Copyright (C) 2005-2006 Texas Instruments, Inc.
*
* This package is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/

#ifndef CHNLOBJ_
#define CHNLOBJ_

#include <dspbridge/chnldefs.h>
#include <dspbridge/dspdefs.h>

/*
* This struct is the first field in a chnl_mgr struct. Other. implementation
* specific fields follow this structure in memory.
*/
struct chnl_mgr_ {
/* These must be the first fields in a chnl_mgr struct: */

/* Function interface to Bridge driver. */
struct bridge_drv_interface *intf_fxns;
};

/*
* This struct is the first field in a chnl_object struct. Other,
* implementation specific fields follow this structure in memory.
*/
struct chnl_object_ {
/* These must be the first fields in a chnl_object struct: */
struct chnl_mgr_ *chnl_mgr_obj; /* Pointer back to channel manager. */
};

#endif /* CHNLOBJ_ */
Loading

0 comments on commit 66b43b6

Please sign in to comment.