1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Index: dahdi-linux-2.4.0/drivers/dahdi/zaphfc.c
===================================================================
--- dahdi-linux-2.4.0.orig/drivers/dahdi/zaphfc.c 2010-10-26 14:41:21.000000000 +0300
+++ dahdi-linux-2.4.0/drivers/dahdi/zaphfc.c 2010-10-26 14:50:14.000000000 +0300
@@ -617,7 +617,7 @@
}
static int zthfc_startup(struct dahdi_span *span) {
- struct dahdi_hfc *zthfc = span->pvt;
+ struct dahdi_hfc *zthfc = container_of(span, struct dahdi_hfc, span);
struct hfc_card *hfctmp = zthfc->card;
int alreadyrunning;
@@ -663,6 +663,19 @@
return 0;
}
+static const struct dahdi_span_ops zaphfc_span_ops = {
+ .owner = THIS_MODULE,
+ .spanconfig = zthfc_spanconfig,
+ .chanconfig = zthfc_chanconfig,
+ .startup = zthfc_startup,
+ .shutdown = zthfc_shutdown,
+ .maint = zthfc_maint,
+ .rbsbits = zthfc_rbsbits,
+ .open = zthfc_open,
+ .close = zthfc_close,
+ .ioctl = zthfc_ioctl,
+};
+
static int zthfc_initialize(struct dahdi_hfc *zthfc) {
struct hfc_card *hfctmp = zthfc->card;
int i;
@@ -676,15 +689,7 @@
sprintf(zthfc->span.desc, "HFC-S PCI A ISDN card %d [TE]", hfc_dev_count + 1);
}
- zthfc->span.spanconfig = zthfc_spanconfig;
- zthfc->span.chanconfig = zthfc_chanconfig;
- zthfc->span.startup = zthfc_startup;
- zthfc->span.shutdown = zthfc_shutdown;
- zthfc->span.maint = zthfc_maint;
- zthfc->span.rbsbits = zthfc_rbsbits;
- zthfc->span.open = zthfc_open;
- zthfc->span.close = zthfc_close;
- zthfc->span.ioctl = zthfc_ioctl;
+ zthfc->span.ops = &zaphfc_span_ops;
zthfc->span.channels = 3;
zthfc->span.chans = zthfc->_chans;
@@ -695,7 +700,6 @@
zthfc->span.linecompat = DAHDI_CONFIG_AMI | DAHDI_CONFIG_CCS; // <--- this is really BS
zthfc->span.offset = 0;
init_waitqueue_head(&zthfc->span.maintq);
- zthfc->span.pvt = zthfc;
for (i = 0; i < zthfc->span.channels; i++) {
memset(&(zthfc->chans[i]), 0x0, sizeof(struct dahdi_chan));
|