Mercurial > archived > louis > epitech > mq > rathaxes
annotate rathaxes_trying_to_fix_the_abstract_type_nightmare_in_e1000.patch @ 103:d9af98faac8a
Wip on abstract type nightmare
author | Louis Opter <louis@lse.epita.fr> |
---|---|
date | Tue, 19 Mar 2013 23:16:02 -0700 |
parents | 8e8aa342078b |
children |
rev | line source |
---|---|
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
1 # HG changeset patch |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
2 # Parent 7a2c9e5880145d2d42cd5bc01dbc2b6e96689934 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
3 |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
4 diff --git a/rathaxes/samples/e1000/device.blt b/rathaxes/samples/e1000/device.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
5 --- a/rathaxes/samples/e1000/device.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
6 +++ b/rathaxes/samples/e1000/device.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
7 @@ -18,7 +18,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
8 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
9 map |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
10 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
11 - data: ${self}->data; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
12 + k_device: ((struct device *)${self}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
13 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
14 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
15 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
16 diff --git a/rathaxes/samples/e1000/device.rti b/rathaxes/samples/e1000/device.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
17 --- a/rathaxes/samples/e1000/device.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
18 +++ b/rathaxes/samples/e1000/device.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
19 @@ -5,6 +5,6 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
20 decl data_types(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
21 chunk LKM::includes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
22 method init(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
23 - attribute Builtin::symbol data; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
24 + attribute Builtin::symbol k_device; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
25 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
26 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
27 diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
28 --- a/rathaxes/samples/e1000/e1000.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
29 +++ b/rathaxes/samples/e1000/e1000.blt |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
30 @@ -171,13 +171,17 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
31 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
32 static int rtx_e1000_tx_ring_tso_cksum_offload(${e1000::TxRing} *self, ${Socket::SKBuff} *skb) |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
33 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
34 - ${Socket::AbstractSKBuff} *abs_skb = skb->skbuff; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
35 - ${cast local.abs_skb as Socket::AbstractSKBuff}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
36 - return skb_is_gso(&${local.abs_skb.data}) || ${local.abs_skb.data}.ip_summed == CHECKSUM_PARTIAL; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
37 + /* XXX We can't use ${skb} here because it's a pointer */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
38 + ${Socket::AbstractSKBuff} *k_skb = skb->skbuff; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
39 + ${cast local.k_skb as Socket::AbstractSKBuff}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
40 + return skb_is_gso(${local.k_skb.k_sk_buff}) || ${local.k_skb.k_sk_buff}->ip_summed == CHECKSUM_PARTIAL; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
41 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
42 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
43 static void rtx_e1000_tx_ring_put(${e1000::TxRing} *self, ${Socket::SKBuff} *skb) |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
44 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
45 + /* XXX We can't use ${skb} here because it's a pointer */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
46 + ${Socket::AbstractSKBuff} *k_skb = skb->skbuff; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
47 + ${cast local.k_skb as Socket::AbstractSKBuff}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
48 WARN_ON(!skb); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
49 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
50 /* |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
51 @@ -188,17 +192,15 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
52 * code shouldn't be aware of it and use something more |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
53 * abstract. |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
54 */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
55 - ${Socket::AbstractSKBuff} *abs_skb = skb->skbuff; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
56 - ${cast local.abs_skb as Socket::AbstractSKBuff}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
57 ${e1000::TxDescriptor} *tx_desc = &self->base[self->tail]; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
58 tx_desc->lower.data = cpu_to_le32( |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
59 E1000_TXD_CMD_EOP | |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
60 E1000_TXD_CMD_IFCS | |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
61 E1000_TXD_CMD_RS | |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
62 - skb_headlen(&${local.abs_skb.data})); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
63 + skb_headlen(${local.k_skb.k_sk_buff})); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
64 tx_desc->upper.data = 0; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
65 tx_desc->buff_addr = cpu_to_le64(skb->dma_handle); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
66 - memcpy(&self->skbuffs[self->tail], skb, sizeof(*skb)); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
67 + memcpy(&self->skbuffs[self->tail], ${local.k_skb.k_sk_buff}, sizeof(*${local.k_skb.k_sk_buff})); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
68 self->tail = (self->tail + 1) % ${config.tx_ring_size}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
69 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
70 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
71 @@ -249,7 +251,6 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
72 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
73 int bars; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
74 unsigned char /* __iomem */ *ioaddr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
75 - int irq; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
76 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
77 ${e1000::RxRing} rx_ring; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
78 ${e1000::TxRing} tx_ring; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
79 @@ -267,14 +268,12 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
80 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
81 chunk Ethernet::adapter_init_context(Ethernet::Device rtx_ether_ctx, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
82 Builtin::number bars, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
83 - Builtin::symbol ioaddr, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
84 - Builtin::number irq) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
85 + Builtin::symbol ioaddr) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
86 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
87 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
88 ${e1000::Context} *hw_ctx = &${rtx_ether_ctx}->hw_ctx; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
89 hw_ctx->bars = ${bars}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
90 hw_ctx->ioaddr = ${ioaddr}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
91 - hw_ctx->irq = ${irq}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
92 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
93 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
94 |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
95 @@ -606,68 +605,6 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
96 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
97 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
98 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
99 - template sequence e1000::setup_interrupt_handler(Ethernet::Device rtx_ether_ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
100 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
101 - chunk LKM::includes() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
102 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
103 - #include <linux/interrupt.h> |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
104 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
105 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
106 - chunk LKM::prototypes() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
107 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
108 - static int e1000_setup_interrupt_handler(${Ethernet::Device} *); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
109 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
110 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
111 - chunk LKM::code() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
112 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
113 - static int e1000_setup_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
114 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
115 - int error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
116 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
117 - error = request_irq(rtx_ether_ctx->hw_ctx.irq, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
118 - rtx_ethernet_interrupt_handler, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
119 - IRQF_SHARED, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
120 - ${config.name}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
121 - rtx_ether_ctx); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
122 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
123 - if (error) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
124 - ${Log::info("cannot register the interrupt handler")}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
125 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
126 - return error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
127 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
128 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
129 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
130 - chunk ::CALL() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
131 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
132 - int error = e1000_setup_interrupt_handler(${rtx_ether_ctx}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
133 - if (error) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
134 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
135 - return error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
136 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
137 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
138 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
139 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
140 - template sequence free_interrupt_handler(Ethernet::Device rtx_ether_ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
141 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
142 - chunk prototypes() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
143 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
144 - static void e1000_free_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
145 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
146 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
147 - chunk code() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
148 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
149 - static void e1000_free_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
150 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
151 - free_irq(rtx_ether_ctx->hw_ctx.irq, rtx_ether_ctx); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
152 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
153 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
154 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
155 - chunk ::CALL() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
156 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
157 - e1000_free_interrupt_handler(${rtx_ether_ctx}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
158 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
159 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
160 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
161 template sequence activate_device_interruption(Ethernet::Device rtx_ether_ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
162 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
163 chunk ::CALL() |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
164 @@ -798,7 +735,7 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
165 hw_ctx->rx_ring.size = ${config.rx_ring_size} * sizeof(*hw_ctx->rx_ring.base); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
166 hw_ctx->rx_ring.size = ALIGN(hw_ctx->rx_ring.size, 4096); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
167 hw_ctx->rx_ring.base = dma_alloc_coherent( |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
168 - &${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
169 + ${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
170 hw_ctx->rx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
171 &hw_ctx->rx_ring.dma_base, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
172 GFP_KERNEL); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
173 @@ -816,12 +753,10 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
174 * Allocate the skbuffs, map them for DMA, and write their address |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
175 * in the corresponding descriptor. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
176 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
177 - ${Ethernet::AbstractDevice} *rtx_ether_dev = ${rtx_ether_ctx.net_device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
178 - ${cast local.rtx_ether_dev as Ethernet::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
179 for (i = 0; i != ${config.rx_ring_size}; ++i) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
180 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
181 - hw_ctx->rx_ring.skbuffs[i].skbuff = (${Socket::AbstractSKBuff}*) netdev_alloc_skb( |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
182 - &${rtx_ether_dev.netdev}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
183 + hw_ctx->rx_ring.skbuffs[i].skbuff = (${Socket::AbstractSKBuff}*)netdev_alloc_skb( |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
184 + ${rtx_ether_ctx.net_device.k_net_dev}, /* XXX: .k_net_dev isn't expanded here */ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
185 ${config.rx_buffer_len}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
186 if (!hw_ctx->rx_ring.skbuffs[i].skbuff) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
187 { |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
188 @@ -829,11 +764,11 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
189 goto err_skbuffs_alloc; |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
190 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
191 hw_ctx->rx_ring.skbuffs[i].dma_handle = dma_map_single( |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
192 - &${rtx_ether_ctx.device}, |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
193 - &hw_ctx->rx_ring.skbuffs[i].skbuff->data, |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
194 + ${rtx_ether_ctx.device}, |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
195 + (struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff, /* XXX leaking cast */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
196 ${config.rx_buffer_len}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
197 DMA_FROM_DEVICE); |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
198 - int dma_error = dma_mapping_error(&${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
199 + int dma_error = dma_mapping_error(${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
200 hw_ctx->rx_ring.skbuffs[i].dma_handle); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
201 if (dma_error) |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
202 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
203 @@ -885,7 +820,7 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
204 hw_ctx->tx_ring.size = ${config.tx_ring_size} * sizeof(*hw_ctx->tx_ring.base); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
205 hw_ctx->tx_ring.size = ALIGN(hw_ctx->tx_ring.size, 4096); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
206 hw_ctx->tx_ring.base = dma_alloc_coherent( |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
207 - &${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
208 + ${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
209 hw_ctx->tx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
210 &hw_ctx->tx_ring.dma_base, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
211 GFP_KERNEL); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
212 @@ -928,15 +863,16 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
213 while (i--) |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
214 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
215 dma_unmap_single( |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
216 - &${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
217 + ${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
218 hw_ctx->rx_ring.skbuffs[i].dma_handle, |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
219 ${config.rx_buffer_len}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
220 DMA_FROM_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
221 err_skbuffs_map: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
222 - dev_kfree_skb(&hw_ctx->rx_ring.skbuffs[i].skbuff->data); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
223 + /* XXX leaking cast: */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
224 + dev_kfree_skb((struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
225 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
226 |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
227 - dma_free_coherent(&${rtx_ether_ctx.device}, hw_ctx->rx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
228 + dma_free_coherent(${rtx_ether_ctx.device}, hw_ctx->rx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
229 hw_ctx->rx_ring.base, hw_ctx->rx_ring.dma_base); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
230 err_rx_ring_alloc: |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
231 return -ENOMEM; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
232 @@ -954,8 +890,13 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
233 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
234 chunk ::CALL() |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
235 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
236 - ${e1000::Context} *hw_ctx; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
237 - hw_ctx = &${rtx_ether_ctx}->hw_ctx; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
238 + /* |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
239 + * XXX: Not generated if named "hw_ctx" (which is funny because |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
240 + * it's used and works in the template right above this one): |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
241 + */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
242 + ${e1000::Context} *hw_ctx_; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
243 + ${cast local.hw_ctx_ as e1000::Context}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
244 + hw_ctx_ = &${rtx_ether_ctx}->hw_ctx; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
245 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
246 /* |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
247 * Free the rx ring: |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
248 @@ -965,22 +906,23 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
249 for (int i = 0; i != ${config.rx_ring_size}; ++i) |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
250 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
251 dma_unmap_single( |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
252 - &${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
253 - (dma_addr_t)hw_ctx->rx_ring.skbuffs[i].dma_handle, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
254 + ${rtx_ether_ctx.device}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
255 + (dma_addr_t)hw_ctx_->rx_ring.skbuffs[i].dma_handle, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
256 ${config.rx_buffer_len}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
257 DMA_FROM_DEVICE); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
258 - dev_kfree_skb(&hw_ctx->rx_ring.skbuffs[i].skbuff->data); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
259 + /* XXX Go through the rtx types (Socket::SKBuff, AbstractSKBuff) */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
260 + dev_kfree_skb(hw_ctx_->rx_ring.skbuffs[i].skbuff); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
261 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
262 - dma_free_coherent(&${rtx_ether_ctx.device}, hw_ctx->rx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
263 - hw_ctx->rx_ring.base, hw_ctx->rx_ring.dma_base); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
264 + dma_free_coherent(${rtx_ether_ctx.device}, hw_ctx_->rx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
265 + hw_ctx_->rx_ring.base, hw_ctx_->rx_ring.dma_base); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
266 ${Log::info("free_rx_tx: rx ring free'ed")}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
267 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
268 /* |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
269 * Free the tx ring: |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
270 * - Free the descriptors array. |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
271 */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
272 - dma_free_coherent(&${rtx_ether_ctx.device}, hw_ctx->tx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
273 - hw_ctx->tx_ring.base, hw_ctx->tx_ring.dma_base); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
274 + dma_free_coherent(${rtx_ether_ctx.device}, hw_ctx_->tx_ring.size, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
275 + hw_ctx_->tx_ring.base, hw_ctx_->tx_ring.dma_base); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
276 ${Log::info("free_rx_tx: tx ring free'ed")}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
277 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
278 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
279 @@ -1038,13 +980,13 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
280 ${local.skb.init(kernel_skb)}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
281 hw_ctx = &${rtx_ether_ctx}->hw_ctx; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
282 tx_ring = &hw_ctx->tx_ring; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
283 - devp = (${Device::AbstractDevice}*) &${rtx_ether_ctx.device}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
284 + devp = (${Device::AbstractDevice}*)${rtx_ether_ctx.device}; |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
285 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
286 ${Log::info("xmit: skbuff details:")}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
287 /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
288 - * skb is not expand on the bound C variable (should be rtx_skbuff), |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
289 - * which is funny because it works for the sequence template call |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
290 - * right after. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
291 + * skb does not expand on the bound C variable (should be |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
292 + * rtx_skbuff), which is funny because it works for the |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
293 + * sequence template call right after. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
294 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
295 /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
296 * XXX: doesn't work (I tried to pass self explicitely too): |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
297 @@ -1077,8 +1019,8 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
298 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
299 /* 2. Map the data */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
300 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
301 - /* XXX: ${local.skb.map_to(local.devp)}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
302 - if (rtx_socket_skbuff_map(&skb, &${devp.data}, DMA_TO_DEVICE)) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
303 + /* XXX: ${local.skb.map_to(devp.k_device)}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
304 + if (rtx_socket_skbuff_map(&skb, ${devp.k_device}, DMA_TO_DEVICE)) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
305 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
306 ${Log::info("xmit: can't DMA map a SKbuff")}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
307 goto err_skb_map_to; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
308 @@ -1097,7 +1039,7 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
309 err_offload: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
310 err_skb_map_to: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
311 /* XXX: ${local.skb.unmap_to_and_free(local.dev)}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
312 - rtx_socket_skbuff_unmap_and_free(&skb, &${devp.data}, DMA_TO_DEVICE); |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
313 + rtx_socket_skbuff_unmap_and_free(&skb, ${devp.k_device}, DMA_TO_DEVICE); |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
314 return NETDEV_TX_OK; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
315 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
316 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
317 diff --git a/rathaxes/samples/e1000/e1000.rti b/rathaxes/samples/e1000/e1000.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
318 --- a/rathaxes/samples/e1000/e1000.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
319 +++ b/rathaxes/samples/e1000/e1000.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
320 @@ -13,8 +13,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
321 /* Callbacks/Hooks which should probably be in the front-end: */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
322 chunk Ethernet::adapter_init_context(Ethernet::Device, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
323 Builtin::number, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
324 - Builtin::symbol, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
325 - Builtin::number); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
326 + Builtin::symbol); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
327 chunk Ethernet::adapter_reset(Ethernet::Device); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
328 chunk Ethernet::adapter_load_mac_address(Ethernet::Device); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
329 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
330 @@ -85,21 +84,6 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
331 provided chunk ::CALL(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
332 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
333 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
334 - provided sequence setup_interrupt_handler(Ethernet::Device) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
335 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
336 - provided chunk LKM::includes(); // works without this one |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
337 - provided chunk LKM::prototypes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
338 - provided chunk LKM::code(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
339 - provided chunk ::CALL(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
340 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
341 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
342 - provided sequence free_interrupt_handler(Ethernet::Device) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
343 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
344 - provided chunk LKM::prototypes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
345 - provided chunk LKM::code(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
346 - provided chunk ::CALL(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
347 - } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
348 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
349 provided sequence activate_device_interruption(Ethernet::Device) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
350 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
351 provided chunk ::CALL(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
352 diff --git a/rathaxes/samples/e1000/ethernet.blt b/rathaxes/samples/e1000/ethernet.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
353 --- a/rathaxes/samples/e1000/ethernet.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
354 +++ b/rathaxes/samples/e1000/ethernet.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
355 @@ -1,4 +1,4 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
356 -with Ethernet, PCI, LKM, Log |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
357 +with Ethernet, PCI, LKM, Log, Builtin |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
358 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
359 template type Ethernet::ProtocolId() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
360 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
361 @@ -51,7 +51,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
362 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
363 decl data_types() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
364 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
365 - struct net_device ndev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
366 + struct net_device data; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
367 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
368 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
369 chunk LKM::includes() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
370 @@ -59,9 +59,15 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
371 #include <linux/netdevice.h> |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
372 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
373 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
374 + method init(Builtin::symbol dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
375 + { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
376 + ${self} = (${Ethernet::AbstractDevice} *)${dev}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
377 + } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
378 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
379 map |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
380 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
381 - netdev: ${self}->ndev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
382 + k_net_dev: ((struct net_device *)${self}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
383 + rtx_ether_ctx: netdev_priv((struct net_device *)${self}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
384 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
385 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
386 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
387 @@ -88,29 +94,43 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
388 #include <linux/etherdevice.h> |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
389 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
390 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
391 - method init(Ethernet::AbstractDevice net_dev, PCI::AbstractDevice pci_dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
392 + /* XXX: if the first arg is not called rtx_net_dev, it breaks. */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
393 + method init(Ethernet::AbstractDevice rtx_net_dev, PCI::AbstractDevice pci_dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
394 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
395 - ${self} = netdev_priv(&${net_dev.netdev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
396 + ${self} = ${rtx_net_dev.rtx_ether_ctx}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
397 /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
398 * We can use -> because we know that ${self} will be always a |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
399 * pointer, but the ambiguity sucks. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
400 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
401 ${self}->pci_dev = ${pci_dev}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
402 - ${self}->net_dev = ${net_dev}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
403 + ${self}->net_dev = ${rtx_net_dev}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
404 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
405 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
406 map |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
407 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
408 - device: ${self}->pci_dev->data.dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
409 + /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
410 + * XXX: I'd like to be able to do things like: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
411 + * device: ${self.pci_dev.k_pci_dev}->dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
412 + * |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
413 + * Also, using ${PCI::AbstractDevice} instead of directly struct |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
414 + * pci_dev doesn't work. |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
415 + */ |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
416 + device: (&((struct pci_dev *)(${self})->pci_dev)->dev); |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
417 pci_device: ${self}->pci_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
418 net_device: ${self}->net_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
419 - perm_addr: ${self}->net_dev->ndev.perm_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
420 - dev_addr: ${self}->net_dev->ndev.dev_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
421 + perm_addr: ((struct net_device *)(${self})->net_dev)->perm_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
422 + dev_addr: ((struct net_device *)(${self})->net_dev)->dev_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
423 + irq: ((struct pci_dev *)(${self})->pci_dev)->irq; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
424 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
425 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
426 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
427 template sequence Ethernet::open(Ethernet::Device dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
428 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
429 + chunk LKM::includes() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
430 + { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
431 + #include <linux/interrupt.h> |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
432 + } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
433 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
434 chunk LKM::prototypes() |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
435 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
436 static int rtx_ethernet_open(struct net_device *); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
437 @@ -120,12 +140,40 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
438 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
439 static int rtx_ethernet_open(struct net_device *dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
440 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
441 - ${Ethernet::Device} *rtx_ether_ctx = netdev_priv(dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
442 + /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
443 + * XXX The casts are here because the compiler doesn't resolve |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
444 + * "enclosed" type (e.g: local.var.enclosed) correctly. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
445 + */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
446 + ${Ethernet::AbstractDevice} *rtx_net_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
447 + ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
448 + { /* XXX: I end up with a placeholder if I don't open a scope */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
449 + ${local.rtx_net_dev.init(local.dev)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
450 + } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
451 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
452 + ${Ethernet::Device} *rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
453 ${cast local.rtx_ether_ctx as Ethernet::Device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
454 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
455 + int error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
456 + { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
457 + ${Log::info("installing the interrupt handler")}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
458 + } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
459 + error = request_irq(${local.rtx_ether_ctx.irq}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
460 + rtx_ethernet_interrupt_handler, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
461 + IRQF_SHARED, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
462 + ${config.name}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
463 + ${local.rtx_net_dev.k_net_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
464 + if (error) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
465 + { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
466 + ${Log::info("Cannot register the interrupt handler")}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
467 + goto error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
468 + } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
469 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
470 ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
471 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
472 return 0; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
473 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
474 + error: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
475 + return error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
476 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
477 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
478 } |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
479 @@ -162,10 +210,24 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
480 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
481 static int rtx_ethernet_close(struct net_device *dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
482 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
483 - ${Ethernet::Device} *rtx_ether_ctx = netdev_priv(dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
484 + ${Ethernet::AbstractDevice} *rtx_net_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
485 + ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
486 + { /* XXX: I end up with a placeholder if I don't open a scope */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
487 + ${local.rtx_net_dev.init(local.dev)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
488 + } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
489 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
490 + ${Ethernet::Device} *rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
491 ${cast local.rtx_ether_ctx as Ethernet::Device}; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
492 - ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
493 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
494 + /* TODO: change this pointcut into a pointcut/adapter/callback: */ |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
495 + { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
496 + ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
497 + } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
498 + |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
499 + free_irq(${local.rtx_ether_ctx.irq}, ${local.rtx_net_dev.k_net_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
500 + { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
501 + ${Log::info("interrupt handler free'ed")}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
502 + } |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
503 |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
504 return 0; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
505 } |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
506 @@ -187,9 +249,13 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
507 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
508 static enum irqreturn rtx_ethernet_interrupt_handler(int irq, void *dev_id) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
509 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
510 - ${Ethernet::Device} *rtx_ether_ctx = dev_id; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
511 + ${Ethernet::AbstractDevice} *rtx_net_dev = dev_id; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
512 + ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
513 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
514 + ${Ethernet::Device} *rtx_ether_ctx; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
515 ${cast local.rtx_ether_ctx as Ethernet::Device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
516 + rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
517 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
518 ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
519 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
520 return IRQ_NONE; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
521 @@ -219,23 +285,26 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
522 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
523 chunk PCI::pci_probe_hook(PCI::Device rtx_pci_dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
524 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
525 + ${Ethernet::AbstractDevice} *rtx_net_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
526 ${Ethernet::Device} *rtx_ether_ctx; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
527 - ${Ethernet::AbstractDevice} *net_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
528 - ${cast local.net_dev as Ethernet::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
529 + ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
530 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
531 - net_dev = (${Ethernet::AbstractDevice}*) alloc_etherdev(sizeof(*rtx_ether_ctx)); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
532 - if (!net_dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
533 + /* Cast the result back into our "transparent wrapper" type */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
534 + rtx_net_dev = (${Ethernet::AbstractDevice}*)alloc_etherdev(sizeof(*rtx_ether_ctx)); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
535 + if (!rtx_net_dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
536 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
537 ${Log::info("cannot allocate the ethernet device context")}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
538 error = -ENOMEM; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
539 goto fail; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
540 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
541 - SET_NETDEV_DEV(&${local.net_dev.netdev}, ${rtx_pci_dev.device}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
542 - strlcpy(${local.net_dev.netdev}.name, ${config.ifname}, sizeof(${local.net_dev.netdev}.name)); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
543 - ${local.net_dev.netdev}.irq = ${rtx_pci_dev.irq}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
544 - ${local.net_dev.netdev}.netdev_ops = &rtx_ether_ops; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
545 + SET_NETDEV_DEV(${local.rtx_net_dev.k_net_dev}, ${rtx_pci_dev.device}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
546 + strlcpy(${local.rtx_net_dev.k_net_dev}->name, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
547 + ${config.ifname}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
548 + sizeof(${local.rtx_net_dev.k_net_dev}->name)); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
549 + ${local.rtx_net_dev.k_net_dev}->irq = ${rtx_pci_dev.irq}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
550 + ${local.rtx_net_dev.k_net_dev}->netdev_ops = &rtx_ether_ops; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
551 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
552 - error = register_netdev(&${local.net_dev.netdev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
553 + error = register_netdev(${local.rtx_net_dev.k_net_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
554 if (error) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
555 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
556 ${Log::info("cannot register the driver in the net subsystem")}; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
557 @@ -247,14 +316,11 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
558 * XXX: the cast is here because the compiler resolve the |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
559 * type of rtx_pci_dev.pci_device to the type of |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
560 * rtx_pci_dev instead of the type of rtx_pci_dev.pci_device. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
561 - * |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
562 - * Also, I'm getting placeholder in the generated code if |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
563 - * I don't open a scope here. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
564 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
565 - { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
566 - ${PCI::AbstractDevice} *rtx_pdev = ${rtx_pci_dev.pci_device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
567 - ${cast local.rtx_pdev as PCI::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
568 - ${local.rtx_ether_ctx.init(local.net_dev, local.rtx_pdev)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
569 + ${PCI::AbstractDevice} *workaround = ${rtx_pci_dev.pci_device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
570 + ${cast local.workaround as PCI::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
571 + { /* XXX: I end up with a placeholder if I don't open a scope */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
572 + ${local.rtx_ether_ctx.init(local.rtx_net_dev, local.workaround)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
573 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
574 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
575 /* Register ourselves in the parent context: */ |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
576 @@ -267,19 +333,16 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
577 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
578 int bars = ${rtx_pci_dev.bars}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
579 unsigned char /* __iomem */ *ioaddr = ${rtx_pci_dev.ioaddr}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
580 - int irq = ${rtx_pci_dev.irq}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
581 ${cast local.bars as Builtin::number}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
582 - ${cast local.irq as Builtin::number}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
583 ${cast local.rtx_ether_ctx as Ethernet::Device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
584 ${pointcut Ethernet::adapter_init_context(local.rtx_ether_ctx, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
585 local.bars, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
586 - local.ioaddr, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
587 - local.irq)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
588 + local.ioaddr)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
589 ${pointcut Ethernet::adapter_reset(local.rtx_ether_ctx)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
590 ${pointcut Ethernet::adapter_load_mac_address(local.rtx_ether_ctx)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
591 memcpy(${local.rtx_ether_ctx.perm_addr}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
592 ${local.rtx_ether_ctx.dev_addr}, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
593 - ${local.net_dev.netdev}.addr_len); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
594 + ${local.rtx_net_dev.k_net_dev}->addr_len); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
595 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
596 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
597 /* This chunk should be removed (see #26) */ |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
598 @@ -296,15 +359,15 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
599 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
600 chunk PCI::pci_remove_hook(PCI::Device rtx_pci_dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
601 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
602 - ${Ethernet::Device} *rtx_ether_ctx = ${rtx_pci_dev.context}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
603 - ${Ethernet::AbstractDevice} *rtx_ether_dev = (${Ethernet::AbstractDevice}*) ${local.rtx_ether_ctx.net_device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
604 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
605 + ${Ethernet::Device} *rtx_ether_ctx = ${rtx_pci_dev.rtx_drv_context}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
606 + ${cast local.rtx_ether_ctx as Ethernet::Device}; /* XXX */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
607 BUG_ON(!rtx_ether_ctx); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
608 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
609 - ${cast local.rtx_ether_ctx as Ethernet::Device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
610 - ${cast local.rtx_ether_dev as Ethernet::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
611 - unregister_netdev(&${local.rtx_ether_dev.netdev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
612 - free_netdev(&${local.rtx_ether_dev.netdev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
613 + ${Ethernet::AbstractDevice} *rtx_net_dev = ${local.rtx_ether_ctx.net_device}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
614 + ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; /* XXX */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
615 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
616 + unregister_netdev(${local.rtx_net_dev.k_net_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
617 + free_netdev(${local.rtx_net_dev.k_net_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
618 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
619 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
620 /* This chunk should be removed (see #26) */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
621 diff --git a/rathaxes/samples/e1000/ethernet.rti b/rathaxes/samples/e1000/ethernet.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
622 --- a/rathaxes/samples/e1000/ethernet.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
623 +++ b/rathaxes/samples/e1000/ethernet.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
624 @@ -16,8 +16,15 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
625 provided type AbstractDevice |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
626 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
627 chunk LKM::includes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
628 + method init(Builtin::symbol); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
629 decl data_types(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
630 - attribute Builtin::symbol netdev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
631 + |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
632 + attribute Builtin::symbol k_net_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
633 + /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
634 + * XXX: should be a Ethernet::Device, but that causes a circular |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
635 + * dependency. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
636 + */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
637 + attribute Builtin::symbol rtx_ether_ctx; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
638 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
639 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
640 provided type Device |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
641 @@ -34,12 +41,14 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
642 * I'd like to use better names here, but I'd like to understand the |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
643 * difference between the two first: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
644 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
645 - attribute Builtin::symbol perm_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
646 - attribute Builtin::symbol dev_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
647 + attribute Builtin::symbol perm_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
648 + attribute Builtin::symbol dev_addr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
649 + attribute Builtin::symbol irq; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
650 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
651 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
652 required sequence open(Ethernet::Device) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
653 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
654 + provided chunk LKM::includes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
655 provided chunk LKM::prototypes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
656 provided chunk LKM::code(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
657 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
658 @@ -69,8 +78,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
659 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
660 provided pointcut Ethernet::adapter_init_context(Ethernet::Device, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
661 Builtin::number, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
662 - Builtin::symbol, |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
663 - Builtin::number); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
664 + Builtin::symbol); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
665 provided pointcut Ethernet::adapter_reset(Ethernet::Device); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
666 provided pointcut Ethernet::adapter_load_mac_address(Ethernet::Device); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
667 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
668 diff --git a/rathaxes/samples/e1000/lkm.rtx b/rathaxes/samples/e1000/lkm.rtx |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
669 --- a/rathaxes/samples/e1000/lkm.rtx |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
670 +++ b/rathaxes/samples/e1000/lkm.rtx |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
671 @@ -4,13 +4,6 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
672 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
673 Log::info("opening the device"); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
674 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
675 - /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
676 - * Maybe e1000::create_device should be called from here, to be |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
677 - * more coherent. |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
678 - */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
679 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
680 - e1000::setup_interrupt_handler(dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
681 - Log::info("interrupt handler installed"); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
682 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
683 e1000::set_up_device(dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
684 Log::info("device activated"); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
685 @@ -32,9 +25,6 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
686 */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
687 e1000::free_rx_tx(dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
688 Log::info("free'ed up rx/tx resources"); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
689 - |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
690 - e1000::free_interrupt_handler(dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
691 - Log::info("interrupt handler free'ed"); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
692 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
693 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
694 Ethernet::interrupt_handler(Ethernet::Device dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
695 diff --git a/rathaxes/samples/e1000/pci.blt b/rathaxes/samples/e1000/pci.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
696 --- a/rathaxes/samples/e1000/pci.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
697 +++ b/rathaxes/samples/e1000/pci.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
698 @@ -16,15 +16,15 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
699 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
700 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
701 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
702 - method set_context(Builtin::symbol ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
703 + method set_rtx_context(Builtin::symbol ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
704 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
705 - pci_set_drvdata(&${self}->data, ${ctx}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
706 + pci_set_drvdata(${self.k_pci_dev}, ${ctx}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
707 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
708 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
709 map |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
710 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
711 - data: ${self}->data; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
712 - drv_data: pci_get_drvdata(&${self}->data); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
713 + k_pci_dev: ((struct pci_dev *)${self}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
714 + rtx_pci_ctx: pci_get_drvdata((struct pci_dev *)${self}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
715 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
716 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
717 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
718 @@ -52,13 +52,13 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
719 int error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
720 ${PCI::AbstractDevice} *enable_pdev = self->pdev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
721 ${cast local.enable_pdev as PCI::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
722 - error = pci_enable_device(&${local.enable_pdev.data}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
723 + error = pci_enable_device(${local.enable_pdev.k_pci_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
724 if (error) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
725 return error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
726 - error = pci_request_selected_regions(&${local.enable_pdev.data}, self->bars, ${config.name}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
727 + error = pci_request_selected_regions(${local.enable_pdev.k_pci_dev}, self->bars, ${config.name}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
728 if (error) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
729 return error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
730 - pci_set_master(&${local.enable_pdev.data}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
731 + pci_set_master(${local.enable_pdev.k_pci_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
732 return 0; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
733 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
734 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
735 @@ -68,8 +68,8 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
736 ${cast local.disable_pdev as PCI::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
737 if (self->ioaddr) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
738 iounmap(self->ioaddr); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
739 - pci_release_selected_regions(&${local.disable_pdev.data}, self->bars); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
740 - pci_disable_device(&${local.disable_pdev.data}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
741 + pci_release_selected_regions(${local.disable_pdev.k_pci_dev}, self->bars); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
742 + pci_disable_device(${local.disable_pdev.k_pci_dev}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
743 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
744 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
745 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
746 @@ -78,7 +78,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
747 ${PCI::AbstractDevice} * workaround = (${PCI::AbstractDevice}*)pdev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
748 ${cast local.workaround as PCI::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
749 ${self}->pdev = ${pdev}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
750 - ${self}->bars = pci_select_bars(&${local.workaround.data}, IORESOURCE_MEM); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
751 + ${self}->bars = pci_select_bars(${local.workaround.k_pci_dev}, IORESOURCE_MEM); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
752 ${self}->ioaddr = NULL; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
753 ${self}->context = NULL; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
754 } |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
755 @@ -97,20 +97,20 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
756 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
757 ${PCI::AbstractDevice} *select_ioaddr_pdev = ${self}->pdev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
758 ${cast local.select_ioaddr_pdev as PCI::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
759 - ${self}->ioaddr = pci_ioremap_bar(&${local.select_ioaddr_pdev.data}, ${bar}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
760 + ${self}->ioaddr = pci_ioremap_bar(${local.select_ioaddr_pdev.k_pci_dev}, ${bar}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
761 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
762 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
763 - method set_context(Builtin::symbol ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
764 + method set_rtx_drv_context(Builtin::symbol ctx) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
765 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
766 ${self}->context = ctx; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
767 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
768 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
769 map |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
770 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
771 - context: ${self}->context; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
772 - device: &${self}->pdev->data.dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
773 + rtx_drv_context: ${self}->context; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
774 + device: &((struct pci_dev *)(${self})->pdev)->dev; |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
775 pci_device: ${self}->pdev; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
776 - irq: ${self}->pdev->data.irq; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
777 + irq: ((struct pci_dev *)(${self})->pdev)->irq; |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
778 bars: ${self}->bars; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
779 ioaddr: ${self}->ioaddr; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
780 BAR_0: 0; |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
781 @@ -151,7 +151,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
782 ${local.rtx_pci_dev.init(local.rtx_pdev)}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
783 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
784 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
785 - /* ${local.pdev.set_context(local.rtx_pci_dev)}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
786 + /* ${local.pdev.set_rtx_context(local.rtx_pci_dev)}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
787 pci_set_drvdata(pdev, rtx_pci_dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
788 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
789 /* ${local.rtx_pci_dev.enable()}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
790 @@ -184,7 +184,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
791 return 0; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
792 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
793 fail: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
794 - /* ${local.pdev.set_context(NULL)}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
795 + /* ${local.pdev.set_rtx_drv_context(NULL)}; */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
796 pci_set_drvdata(pdev, NULL); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
797 kfree(rtx_pci_dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
798 return error; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
799 @@ -210,7 +210,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
800 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
801 ${PCI::AbstractDevice} *rtx_pdev = (${PCI::AbstractDevice}*)pdev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
802 ${cast local.rtx_pdev as PCI::AbstractDevice}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
803 - ${PCI::Device} *rtx_pci_dev = ${rtx_pdev.drv_data}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
804 + ${PCI::Device} *rtx_pci_dev = ${rtx_pdev.rtx_pci_ctx}; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
805 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
806 BUG_ON(!rtx_pci_dev); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
807 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
808 diff --git a/rathaxes/samples/e1000/pci.rti b/rathaxes/samples/e1000/pci.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
809 --- a/rathaxes/samples/e1000/pci.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
810 +++ b/rathaxes/samples/e1000/pci.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
811 @@ -10,10 +10,15 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
812 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
813 chunk LKM::includes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
814 method init(PCI::AbstractDevice); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
815 - method set_context(Builtin::symbol); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
816 + /* |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
817 + * XXX: the argument should be a PCI::Device but that causes a circular |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
818 + * dependency: |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
819 + */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
820 + method set_rtx_context(Builtin::symbol); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
821 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
822 - attribute Builtin::symbol data; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
823 - attribute Builtin::symbol drv_data; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
824 + attribute Builtin::symbol k_pci_dev; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
825 + /* XXX: should be PCI::Device (see above point) */ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
826 + attribute Builtin::symbol rtx_pci_ctx; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
827 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
828 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
829 provided type PCI::Device |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
830 @@ -27,9 +32,9 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
831 method enable(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
832 method disable(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
833 method select_ioaddr(Builtin::number); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
834 - method set_context(Builtin::symbol); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
835 + method set_rtx_drv_context(Builtin::symbol); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
836 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
837 - attribute Builtin::symbol context; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
838 + attribute Builtin::symbol rtx_drv_context; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
839 attribute Device::AbstractDevice device; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
840 attribute PCI::AbstractDevice pci_device; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
841 attribute Builtin::symbol ioaddr; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
842 diff --git a/rathaxes/samples/e1000/socket.blt b/rathaxes/samples/e1000/socket.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
843 --- a/rathaxes/samples/e1000/socket.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
844 +++ b/rathaxes/samples/e1000/socket.blt |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
845 @@ -14,7 +14,7 @@ |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
846 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
847 map |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
848 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
849 - data: ${self}->data; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
850 + k_sk_buff: ((struct sk_buff *)${self}); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
851 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
852 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
853 |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
854 @@ -46,11 +46,12 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
855 */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
856 ${Socket::AbstractSKBuff} *skb = self->skbuff; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
857 ${cast local.skb as Socket::AbstractSKBuff}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
858 - ${Ethernet::ProtocolId} ethernet_proto = { .id = be16_to_cpu(${local.skb.data}.protocol) }; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
859 + ${Ethernet::ProtocolId} ethernet_proto = { .id = be16_to_cpu(${local.skb.k_sk_buff}->protocol) }; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
860 + |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
861 static const char * const ip_summed_values[] = { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
862 "none", "unnecessary", "complete", "partial" |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
863 }; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
864 - struct skb_shared_info *shinfo = skb_shinfo(&${local.skb.data}); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
865 + struct skb_shared_info *shinfo = skb_shinfo(${local.skb.k_sk_buff}); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
866 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
867 pr_info( |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
868 "\t protocol = %#-5x (%s) ip_summed = %d (%s)\n" |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
869 @@ -59,8 +60,8 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
870 "\t gso_size = %-5u gso_segs = %-5u gso_type = %-5u", |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
871 /* XXX: can't use ${local.ethernet_proto.id} here (issue #52): */ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
872 ethernet_proto.id, ${local.ethernet_proto.str}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
873 - ${local.skb.data}.ip_summed, ip_summed_values[${local.skb.data}.ip_summed], |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
874 - ${local.skb.data}.len, ${local.skb.data}.data_len, skb_headlen(&${local.skb.data}), |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
875 + ${local.skb.k_sk_buff}->ip_summed, ip_summed_values[${local.skb.k_sk_buff}->ip_summed], |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
876 + ${local.skb.k_sk_buff}->len, ${local.skb.k_sk_buff}->data_len, skb_headlen(${local.skb.k_sk_buff}), |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
877 shinfo->nr_frags, shinfo->gso_size, shinfo->gso_segs, shinfo->gso_type |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
878 ); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
879 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
880 @@ -72,14 +73,13 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
881 ${Socket::AbstractSKBuff} *skb = self->skbuff; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
882 ${cast local.skb as Socket::AbstractSKBuff}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
883 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
884 - WARN_ON(!skb); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
885 - WARN_ON(!${local.skb.data}.data); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
886 + WARN_ON(!${local.skb.k_sk_buff}); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
887 WARN_ON(self->dma_handle); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
888 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
889 self->dma_handle = dma_map_single( |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
890 dev, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
891 - &${local.skb.data}.data, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
892 - skb_headlen(&${local.skb.data}), |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
893 + ${local.skb.k_sk_buff}, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
894 + skb_headlen(${local.skb.k_sk_buff}), |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
895 direction); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
896 int err = dma_mapping_error(dev, self->dma_handle); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
897 if (err) |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
898 @@ -97,18 +97,17 @@ |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
899 ${Socket::AbstractSKBuff} *skb = self->skbuff; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
900 ${cast local.skb as Socket::AbstractSKBuff}; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
901 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
902 - WARN_ON(!${local.skb}); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
903 - WARN_ON(!${local.skb.data}.data); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
904 + WARN_ON(!${local.skb.k_sk_buff}); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
905 |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
906 if (self->dma_handle) |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
907 { |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
908 dma_unmap_single(dev, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
909 self->dma_handle, |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
910 - skb_headlen(&${local.skb.data}), |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
911 + skb_headlen(${local.skb.k_sk_buff}), |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
912 direction); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
913 self->dma_handle = 0; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
914 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
915 - dev_kfree_skb_any(&${local.skb.data}); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
916 + dev_kfree_skb_any(${local.skb.k_sk_buff}); |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
917 self->skbuff = 0; |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
918 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
919 } |
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
920 @@ -131,22 +130,22 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
921 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
922 method map_to(Device::AbstractDevice dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
923 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
924 - rtx_socket_skbuff_map(${self}, &${dev.data}, DMA_TO_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
925 + rtx_socket_skbuff_map(${self}, ${dev.k_device}, DMA_TO_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
926 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
927 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
928 method map_from(Device::AbstractDevice dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
929 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
930 - rtx_socket_skbuff_map(${self}, &${dev.data}, DMA_FROM_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
931 + rtx_socket_skbuff_map(${self}, ${dev.k_device}, DMA_FROM_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
932 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
933 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
934 method unmap_to_and_free(Device::AbstractDevice dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
935 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
936 - rtx_socket_skbuff_unmap_and_free(${self}, &${dev.data}, DMA_TO_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
937 + rtx_socket_skbuff_unmap_and_free(${self}, ${dev.k_device}, DMA_TO_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
938 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
939 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
940 method unmap_from_and_free(Device::AbstractDevice dev) |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
941 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
942 - rtx_socket_skbuff_unmap_and_free(${self}, &${dev.data}, DMA_FROM_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
943 + rtx_socket_skbuff_unmap_and_free(${self}, ${dev.k_device}, DMA_FROM_DEVICE); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
944 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
945 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
946 map |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
947 diff --git a/rathaxes/samples/e1000/socket.rti b/rathaxes/samples/e1000/socket.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
948 --- a/rathaxes/samples/e1000/socket.rti |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
949 +++ b/rathaxes/samples/e1000/socket.rti |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
950 @@ -5,7 +5,8 @@ |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
951 { |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
952 chunk LKM::includes(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
953 decl data_types(); |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
954 - attribute Builtin::symbol data; |
103
d9af98faac8a
Wip on abstract type nightmare
Louis Opter <louis@lse.epita.fr>
parents:
102
diff
changeset
|
955 + |
102
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
956 + attribute Builtin::symbol k_sk_buff; |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
957 } |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
958 |
8e8aa342078b
Close the series on the slides and backup some wip on the abstract type nightmare in e1000
Louis Opter <louis@lse.epita.fr>
parents:
diff
changeset
|
959 provided type SKBuff |