blob: 884d16396c6dd2395d39b1faf6bc2181ccd3b1b5 [file] [log] [blame]
Harald Welteb68899d2009-01-06 21:47:18 +00001/* Paging helper and manager.... */
2/* (C) 2009 by Holger Hans Peter Freyther <zecke@selfish.org>
3 * All Rights Reserved
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 */
20
21#ifndef PAGING_H
22#define PAGING_H
23
24#include <malloc.h>
25#include <string.h>
26
27#include "linuxlist.h"
28#include "gsm_data.h"
29#include "gsm_subscriber.h"
Harald Welte38c2f132009-01-06 23:10:57 +000030#include "timer.h"
Harald Welteb68899d2009-01-06 21:47:18 +000031
32/**
33 * A pending paging request
34 */
35struct paging_request {
36 struct llist_head entry;
37 struct gsm_subscriber *subscr;
38 struct gsm_bts *bts;
Harald Welte4fc898a2009-02-01 17:57:04 +000039 int requests;
Harald Welte38c2f132009-01-06 23:10:57 +000040
41 int chan_type;
Harald Welteb68899d2009-01-06 21:47:18 +000042};
43
44/*
45 * struct for each bts we serve...
46 */
47struct paging_bts {
48 /* public callbacks */
49 void (*channel_allocated)(struct gsm_lchan *lchan);
50
51 /* list for each bts */
52 struct llist_head bts_list;
53
54 /* pending requests */
55 struct llist_head pending_requests;
Harald Welte38c2f132009-01-06 23:10:57 +000056 struct paging_request *last_request;
Harald Welteb68899d2009-01-06 21:47:18 +000057 struct gsm_bts *bts;
Harald Welte38c2f132009-01-06 23:10:57 +000058
59 /* tick timer */
60 struct timer_list page_timer;
Harald Welteb68899d2009-01-06 21:47:18 +000061};
62
63/* call once for every gsm_bts... */
64struct paging_bts* page_allocate(struct gsm_bts *bts);
65
66/* schedule paging request */
Harald Welte38c2f132009-01-06 23:10:57 +000067void page_request(struct gsm_bts *bts, struct gsm_subscriber *subscr, int type);
Harald Welteb68899d2009-01-06 21:47:18 +000068
Harald Welte763da002009-02-06 12:52:14 +000069/* stop paging requests */
70void page_request_stop(struct gsm_bts *bts, struct gsm_subscriber *subscr);
71
Harald Welteb68899d2009-01-06 21:47:18 +000072#endif