|
|
|
@ -132,6 +132,7 @@ static int fpga_tx(struct solos_card *); |
|
|
|
|
static irqreturn_t solos_irq(int irq, void *dev_id); |
|
|
|
|
static struct atm_vcc* find_vcc(struct atm_dev *dev, short vpi, int vci); |
|
|
|
|
static int list_vccs(int vci); |
|
|
|
|
static void release_vccs(struct atm_dev *dev); |
|
|
|
|
static int atm_init(struct solos_card *); |
|
|
|
|
static void atm_remove(struct solos_card *); |
|
|
|
|
static int send_command(struct solos_card *card, int dev, const char *buf, size_t size); |
|
|
|
@ -332,7 +333,10 @@ static int process_status(struct solos_card *card, int port, struct sk_buff *skb |
|
|
|
|
str = next_string(skb); |
|
|
|
|
if (!strcmp(str, "Showtime")) |
|
|
|
|
state = ATM_PHY_SIG_FOUND; |
|
|
|
|
else state = ATM_PHY_SIG_LOST; |
|
|
|
|
else { |
|
|
|
|
state = ATM_PHY_SIG_LOST; |
|
|
|
|
release_vccs(card->atmdev[port]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
card->atmdev[port]->link_rate = rate_down; |
|
|
|
|
card->atmdev[port]->signal = state; |
|
|
|
@ -683,7 +687,7 @@ static int list_vccs(int vci) |
|
|
|
|
vcc->vci); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
for(i=0; i<32; i++){ |
|
|
|
|
for(i = 0; i < VCC_HTABLE_SIZE; i++){ |
|
|
|
|
head = &vcc_hash[i]; |
|
|
|
|
sk_for_each(s, node, head) { |
|
|
|
|
num_found ++; |
|
|
|
@ -699,6 +703,28 @@ static int list_vccs(int vci) |
|
|
|
|
return num_found; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void release_vccs(struct atm_dev *dev) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
write_lock_irq(&vcc_sklist_lock); |
|
|
|
|
for (i = 0; i < VCC_HTABLE_SIZE; i++) { |
|
|
|
|
struct hlist_head *head = &vcc_hash[i]; |
|
|
|
|
struct hlist_node *node, *tmp; |
|
|
|
|
struct sock *s; |
|
|
|
|
struct atm_vcc *vcc; |
|
|
|
|
|
|
|
|
|
sk_for_each_safe(s, node, tmp, head) { |
|
|
|
|
vcc = atm_sk(s); |
|
|
|
|
if (vcc->dev == dev) { |
|
|
|
|
vcc_release_async(vcc, -EPIPE); |
|
|
|
|
sk_del_node_init(s); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
write_unlock_irq(&vcc_sklist_lock); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int popen(struct atm_vcc *vcc) |
|
|
|
|
{ |
|
|
|
|