[svn-commits] sruffell: branch linux/sruffell/dahdi-linux-cmdqueue r6035 - /linux/team/sruf...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Tue Feb 24 15:30:12 CST 2009
Author: sruffell
Date: Tue Feb 24 15:30:12 2009
New Revision: 6035
URL: http://svn.digium.com/svn-view/dahdi?view=rev&rev=6035
Log:
Use atomic operations for more of the span flags and remove all the inisr /
inatomic code in the register read / write routines.
Modified:
linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/base.c
linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/wcte12xp.h
Modified: linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/base.c
URL: http://svn.digium.com/svn-view/dahdi/linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/base.c?view=diff&rev=6035&r1=6034&r2=6035
==============================================================================
--- linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/base.c (original)
+++ linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/base.c Tue Feb 24 15:30:12 2009
@@ -229,28 +229,20 @@
static inline int t1_setreg_full(struct t1 *wc, int addr, int val, int vpm_num)
{
- const int inatomic = in_atomic() ? 1 : 0;
struct command *cmd;
- do {
- cmd = get_free_cmd(wc);
- if (cmd) {
- cmd->address = addr;
- cmd->data = val;
- cmd->flags |= __CMD_WR;
- if (vpm_num >= 0) {
- cmd->flags |= __CMD_VPM;
- cmd->vpm_num = vpm_num;
- }
- submit_cmd(wc, cmd);
- return 0;
- }
- if (!inatomic)
- msleep(1);
- else
- return -1;
- } while (1);
- /* should never get here. */
- return -1;
+ might_sleep();
+ while (!(cmd = get_free_cmd(wc))) {
+ msleep(1);
+ }
+ cmd->address = addr;
+ cmd->data = val;
+ cmd->flags |= __CMD_WR;
+ if (vpm_num >= 0) {
+ cmd->flags |= __CMD_VPM;
+ cmd->vpm_num = vpm_num;
+ }
+ submit_cmd(wc, cmd);
+ return 0;
}
static inline int t1_setreg(struct t1 *wc, int addr, int val)
@@ -261,33 +253,21 @@
static inline int t1_getreg_full(struct t1 *wc, int addr, int vpm_num)
{
struct command *cmd = NULL;
- int ret = 0;
- int inisr = in_atomic() ? 1 : 0;
-retry:
- cmd = get_free_cmd(wc);
- if (cmd) {
- cmd->address = addr;
- cmd->data = 0x00;
- cmd->flags = __CMD_RD;
- if (inisr) {
- cmd->flags |= __CMD_ISR;
- }
- if (vpm_num > -1) {
- cmd->flags |= __CMD_VPM;
- cmd->vpm_num = vpm_num;
- }
- submit_cmd(wc, cmd);
- } else if (!inisr) {
- msleep(500);
- goto retry;
- } else {
- /* We're in atomic context...we need to just exit. */
- return -1;
- }
-
- if (inisr)
- return 0;
-
+ int ret;
+
+ might_sleep();
+
+ while (!(cmd = get_free_cmd(wc)))
+ msleep(1);
+
+ cmd->address = addr;
+ cmd->data = 0x00;
+ cmd->flags = __CMD_RD;
+ if (vpm_num > -1) {
+ cmd->flags |= __CMD_VPM;
+ cmd->vpm_num = vpm_num;
+ }
+ submit_cmd(wc, cmd);
wait_for_completion(&cmd->complete);
ret = cmd->data;
free_cmd(wc, cmd);
@@ -604,23 +584,18 @@
static int t1xxp_shutdown(struct dahdi_span *span)
{
struct t1 *wc = span->pvt;
- unsigned long flags;
-
t1_setreg(wc, 0x46, 0x41); /* GCR: Interrupt on Activation/Deactivation of AIX, LOS */
- spin_lock_irqsave(&wc->reglock, flags);
- span->flags &= ~DAHDI_FLAG_RUNNING;
- spin_unlock_irqrestore(&wc->reglock, flags);
+ clear_bit(DAHDI_FLAGBIT_RUNNING, &span->flags);
return 0;
}
static int t1xxp_chanconfig(struct dahdi_chan *chan, int sigtype)
{
struct t1 *wc = chan->pvt;
- int alreadyrunning = chan->span->flags & DAHDI_FLAG_RUNNING;
-
- if (alreadyrunning && (wc->spantype != TYPE_E1))
+ if (test_bit(DAHDI_FLAGBIT_RUNNING, &chan->span->flags) &&
+ (wc->spantype != TYPE_E1)) {
__t1xxp_set_clear(wc, chan->channo);
-
+ }
return 0;
}
@@ -636,7 +611,7 @@
wc->ctlreg &= ~0x80;
/* If already running, apply changes immediately */
- if (span->flags & DAHDI_FLAG_RUNNING)
+ if (test_bit(DAHDI_FLAGBIT_RUNNING, &span->flags))
return t1xxp_startup(span);
return 0;
Modified: linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/wcte12xp.h
URL: http://svn.digium.com/svn-view/dahdi/linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/wcte12xp.h?view=diff&rev=6035&r1=6034&r2=6035
==============================================================================
--- linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/wcte12xp.h (original)
+++ linux/team/sruffell/dahdi-linux-cmdqueue/drivers/dahdi/wcte12xp/wcte12xp.h Tue Feb 24 15:30:12 2009
@@ -51,7 +51,7 @@
#define PCI_WINDOW_SIZE ((2 * 2 * 2 * SFRAME_SIZE) + (2 * ERING_SIZE * 4))
-#define MAX_COMMANDS 7*7*2*2 /* 42 bytes /3 (cntl,addr,data) /2 (cs) */
+#define MAX_COMMANDS 16
#define NUM_EC 4
More information about the svn-commits
mailing list