blob: 9047f1a3a8035db85e1800f05bca306029bca7f1 [file] [log] [blame]
Holger Hans Peter Freythercedf8902013-10-19 20:47:12 +02001/*
2 *
3 * Copyright (C) 2012 Ivan Klyuchnikov
4 * Copyright (C) 2012 Andreas Eversberg <jolly@eversberg.eu>
5 * Copyright (C) 2013 by Holger Hans Peter Freyther
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 */
21#pragma once
22
23#include <stdint.h>
24
25extern "C" {
26#include <osmocom/core/linuxlist.h>
27}
28
Holger Hans Peter Freyther35cc1c02014-07-02 14:48:44 +020029struct BTS;
Holger Hans Peter Freythercedf8902013-10-19 20:47:12 +020030class PollController;
31struct gprs_rlcmac_sba;
Holger Hans Peter Freytherdea63b92013-10-26 18:56:43 +020032struct gprs_rlcmac_pdch;
Holger Hans Peter Freythercedf8902013-10-19 20:47:12 +020033
34/*
35 * single block allocation entry
36 */
37struct gprs_rlcmac_sba {
38 struct llist_head list;
Holger Hans Peter Freyther09ef27a2013-10-20 16:37:05 +020039 uint8_t trx_no;
40 uint8_t ts_no;
Holger Hans Peter Freythercedf8902013-10-19 20:47:12 +020041 uint32_t fn;
42 uint8_t ta;
43};
44
45/**
46 * I help to manage SingleBlockAssignment (SBA).
47 *
48 * TODO: Add a flush method..
49 */
50class SBAController {
51 friend class PollController;
52public:
53 SBAController(BTS &bts);
54
55 int alloc(uint8_t *_trx, uint8_t *_ts, uint32_t *_fn, uint8_t ta);
56 gprs_rlcmac_sba *find(uint8_t trx, uint8_t ts, uint32_t fn);
Holger Hans Peter Freytherdea63b92013-10-26 18:56:43 +020057 gprs_rlcmac_sba *find(const gprs_rlcmac_pdch *pdch, uint32_t fn);
Holger Hans Peter Freythercedf8902013-10-19 20:47:12 +020058
59 uint32_t sched(uint8_t trx, uint8_t ts, uint32_t fn, uint8_t block_nr);
60
61 int timeout(struct gprs_rlcmac_sba *sba);
Holger Hans Peter Freyther09ef27a2013-10-20 16:37:05 +020062 void free_resources(struct gprs_rlcmac_pdch *pdch);
Holger Hans Peter Freythercedf8902013-10-19 20:47:12 +020063
Holger Hans Peter Freytherb98dd9e2013-10-27 10:20:37 +010064 void free_sba(gprs_rlcmac_sba *sba);
65
Holger Hans Peter Freythercedf8902013-10-19 20:47:12 +020066private:
67 BTS &m_bts;
68 llist_head m_sbas;
69};