return NULL;
}
-static void dialout_next(struct fsm_inst *fi, int pr, void *arg);
+static int dialout_next(struct fsm_inst *fi, int pr, void *arg);
/* Initiate dialout. */
-static void
+static int
dialout_first(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
if (ISDN_NET_DIALMODE(*mlp) == ISDN_NET_DM_OFF) {
isdn_net_unbind_channel(idev);
- return;
+ return -EPERM;
}
if (list_empty(&mlp->phone[1])) {
isdn_net_unbind_channel(idev);
- return;
+ return -EINVAL;
}
idev->dial = 0;
idev->dialretry = 0;
- dialout_next(fi, pr, arg);
+ return dialout_next(fi, pr, arg);
}
/* Try dialing the next number. */
-static void
+static int
dialout_next(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
/* Dial */
isdn_slot_dial(idev->isdn_slot, &dial);
+ return 0;
}
/* If we didn't connect within dialtimeout, we give up for now
* and wait for dialwait jiffies before trying again.
*/
-static void
+static int
dial_timeout(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
}
if (idev->dialretry >= mlp->dialmax) {
isdn_net_hangup(idev);
- return;
+ return 0;
}
idev->dial_event = EV_TIMER_DIAL_WAIT;
mod_timer(&idev->dial_timer, jiffies + mlp->dialwait);
+ return 0;
}
-static void
+static int
connect_fail(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
isdn_slot_all_eaz(idev->isdn_slot);
printk(KERN_INFO "%s: connection failed\n", idev->name);
isdn_net_unbind_channel(idev);
+ return 0;
}
-static void
+static int
out_dconn(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
fsm_change_state(&idev->fi, ST_OUT_WAIT_BCONN);
isdn_slot_command(idev->isdn_slot, ISDN_CMD_ACCEPTB, &cmd);
+ return 0;
}
-static void
+static int
in_dconn(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
fsm_change_state(&idev->fi, ST_IN_WAIT_BCONN);
isdn_slot_command(idev->isdn_slot, ISDN_CMD_ACCEPTB, &cmd);
+ return 0;
}
-static void
+static int
bconn(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
isdn_net_add_to_bundle(mlp, idev);
- printk(KERN_INFO "isdn_net: %s connected\n", idev->name);
+ printk(KERN_INFO "%s connected\n", idev->name);
/* If first Chargeinfo comes before B-Channel connect,
* we correct the timestamp here.
*/
mlp->ops->connected(idev);
else
isdn_net_dev_wake_queue(idev);
+
+ return 0;
}
-static void
+static int
bhup(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
printk(KERN_INFO "%s: disconnected\n", idev->name);
fsm_change_state(fi, ST_WAIT_DHUP);
isdn_net_rm_from_bundle(idev);
+ return 0;
}
-static void
+static int
dhup(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
printk(KERN_INFO "%s: Chargesum is %d\n", idev->name, idev->charge);
isdn_slot_all_eaz(idev->isdn_slot);
isdn_net_unbind_channel(idev);
+ return 0;
}
/* Check if it's time for idle hang-up */
-static void
+static int
check_hup(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
}
if (idev->outgoing || mlp->hupflags & ISDN_INHUP) {
isdn_net_hangup(idev);
- return;
+ return 0;
}
mod_timer:
mod_timer(&idev->dial_timer, idev->dial_timer.expires + HZ);
+ return 0;
}
/* Charge-info from TelCo. */
-static void
+static int
got_cinf(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
}
idev->chargetime = jiffies;
dbg_net_dial("%s: got CINF\n", idev->name);
+ return 0;
}
/* Perform hangup for a net-interface. */
fsm_event(&idev->fi, pr, arg);
}
-static void
+static int
hang_up(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
isdn_net_hangup(idev);
+ return 0;
}
-static void
+static int
got_bsent(struct fsm_inst *fi, int pr, void *arg)
{
isdn_net_dev *idev = fi->userdata;
isdn_ctrl *c = arg;
isdn_net_bsent(idev, c);
+ return 0;
}
static struct fsm_node isdn_net_fn_tbl[] = {