|
@@ -189,6 +189,7 @@ static void ncsi_channel_monitor(unsigned long data)
|
|
|
struct ncsi_channel *nc = (struct ncsi_channel *)data;
|
|
|
struct ncsi_package *np = nc->package;
|
|
|
struct ncsi_dev_priv *ndp = np->ndp;
|
|
|
+ struct ncsi_channel_mode *ncm;
|
|
|
struct ncsi_cmd_arg nca;
|
|
|
bool enabled, chained;
|
|
|
unsigned int monitor_state;
|
|
@@ -228,20 +229,21 @@ static void ncsi_channel_monitor(unsigned long data)
|
|
|
case NCSI_CHANNEL_MONITOR_WAIT ... NCSI_CHANNEL_MONITOR_WAIT_MAX:
|
|
|
break;
|
|
|
default:
|
|
|
- if (!(ndp->flags & NCSI_DEV_HWA) &&
|
|
|
- state == NCSI_CHANNEL_ACTIVE) {
|
|
|
+ if (!(ndp->flags & NCSI_DEV_HWA)) {
|
|
|
ncsi_report_link(ndp, true);
|
|
|
ndp->flags |= NCSI_DEV_RESHUFFLE;
|
|
|
}
|
|
|
|
|
|
ncsi_stop_channel_monitor(nc);
|
|
|
|
|
|
+ ncm = &nc->modes[NCSI_MODE_LINK];
|
|
|
spin_lock_irqsave(&nc->lock, flags);
|
|
|
nc->state = NCSI_CHANNEL_INVISIBLE;
|
|
|
+ ncm->data[2] &= ~0x1;
|
|
|
spin_unlock_irqrestore(&nc->lock, flags);
|
|
|
|
|
|
spin_lock_irqsave(&ndp->lock, flags);
|
|
|
- nc->state = NCSI_CHANNEL_INACTIVE;
|
|
|
+ nc->state = NCSI_CHANNEL_ACTIVE;
|
|
|
list_add_tail_rcu(&nc->link, &ndp->channel_queue);
|
|
|
spin_unlock_irqrestore(&ndp->lock, flags);
|
|
|
ncsi_process_next_channel(ndp);
|