Mercurial > archived > louis > epitech > mq > rathaxes
annotate rathaxes_sample_e1000_rewrite_device_dependent_code.patch @ 131:c209851a82de
Wip, start a rewrite of the e1000 device dependent code
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Fri, 03 Jan 2014 15:01:47 +0100 |
parents | |
children | f2e4dd91dc6f |
rev | line source |
---|---|
131
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1 # HG changeset patch |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
2 # Parent 7d00455945ec97c5851ac0d735da7c3cfbd8e39c |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
3 rathaxes: rewrite/refactor all the e1000 device dependent code |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
4 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
5 diff --git a/notes.txt b/notes.txt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
6 new file mode 100644 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
7 --- /dev/null |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
8 +++ b/notes.txt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
9 @@ -0,0 +1,9 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
10 +- Too much changes to not start over; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
11 +- Lack of methods is extremely annoying and requires a lot of workarounds (e.g: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
12 + see the register read/write/set/unset methods on e1000::Context); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
13 +- I'm using a pointcut inside the ethernet context "decl data_types" to inject |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
14 + my hardware context; it's impossible to get it back without hardcoding stuff, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
15 + because the ethernet subsystem isn't aware of the type of the field (so I |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
16 + can't write an attribute). Being able to just inject a type (instead of a |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
17 + whole structure field) might not be the best solution but would solve this |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
18 + issue/use case. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
19 diff --git a/rathaxes/samples/e1000/CMakeLists.txt b/rathaxes/samples/e1000/CMakeLists.txt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
20 --- a/rathaxes/samples/e1000/CMakeLists.txt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
21 +++ b/rathaxes/samples/e1000/CMakeLists.txt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
22 @@ -9,7 +9,6 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
23 pci.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
24 socket.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
25 ethernet.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
26 - e1000.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
27 BLT |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
28 log.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
29 lkm.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
30 @@ -17,9 +16,8 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
31 dma.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
32 pci.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
33 socket.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
34 - e1000.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
35 ethernet.blt) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
36 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
37 -IF (LINUX_KBUILD_DIR) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
38 - ADD_RATHAXES_LKM(e1000 e1000_src) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
39 -ENDIF (LINUX_KBUILD_DIR) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
40 +#IF (LINUX_KBUILD_DIR) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
41 +# ADD_RATHAXES_LKM(e1000 e1000_src) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
42 +#ENDIF (LINUX_KBUILD_DIR) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
43 diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
44 --- a/rathaxes/samples/e1000/e1000.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
45 +++ b/rathaxes/samples/e1000/e1000.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
46 @@ -170,14 +170,15 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
47 for (i = 0; i != ${config.rx_ring_size}; ++i) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
48 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
49 ${Socket::SKBuff.ref} skbuff = &hw_ctx->rx_ring.skbuffs[i]; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
50 - // XXX #46: ${rtx_ether_ctx.init_rx_skbuff(local.skbuff, config.rx_buffer_len)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
51 - if (rtx_ethernet_init_rx_skbuff(${local.skbuff}, ${config.rx_buffer_len})) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
52 + // XXX #46: ${rtx_ether_ctx.alloc_rx_skbuff(local.skbuff, config.rx_buffer_len)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
53 + if (rtx_ethernet_alloc_rx_skbuff(${local.skbuff}, ${config.rx_buffer_len})) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
54 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
55 ${Log::info("adapter_init_rx: cannot allocate a skbuff for the rx ring")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
56 goto err_skbuffs_alloc; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
57 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
58 - // XXX #46: ${local.skbuff.map_from(rtx_ether_ctx.device)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
59 - if (rtx_socket_skbuff_map(${local.skbuff}, ${rtx_ether_ctx.device}, RTX_DMA_FROM_DEVICE)) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
60 + /* XXX: recuperer le dma handle et le placer correctement dans le descripteur. */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
61 + ${DMA::map(local.rtx_ether_ctx.device, local.skbuff.data, local.skbuff.len, RTX_DMA_FROM_DEVICE)} |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
62 + if (${DMA::map(local.rtx_ether_ctx.device, local.skbuff.data, local.skbuff.len, RTX_DMA_FROM_DEVICE)}) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
63 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
64 ${Log::info("adapter_init_rx: cannot dma-map a skbuff for the rx ring")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
65 goto err_skbuffs_map; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
66 diff --git a/rathaxes/samples/e1000/e1000ng.blt b/rathaxes/samples/e1000/e1000ng.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
67 new file mode 100755 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
68 --- /dev/null |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
69 +++ b/rathaxes/samples/e1000/e1000ng.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
70 @@ -0,0 +1,717 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
71 +with e1000ng, Ethernet, Socket, DMA, PCI, LKM, Log, Builtin |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
72 +{ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
73 + template type e1000::Register() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
74 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
75 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
76 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
77 + E1000_CTRL = 0x00000, /* Device Control - RW */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
78 + E1000_CTRL_DUP = 0x00004, /* Device Control Duplicate (Shadow) - RW */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
79 + E1000_STATUS = 0x00008, /* Device Status - RO */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
80 + E1000_EEPROM_FLASH = 0x00010, /* EEPROM/Flash Control - RW */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
81 + E1000_EEPROM_READ = 0x00014, /* EEPROM Read - RW */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
82 + E1000_CTRL_EXT = 0x00018, /* Extended Device Control - RW */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
83 + E1000_FLA = 0x0001C, /* Flash Access - RW */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
84 + E1000_MDIC = 0x00020, /* MDI Control - RW */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
85 + E1000_IMS = 0x000D0, /* Interrupt Mask Set */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
86 + E1000_IMC = 0x000D8, /* Interrupt Mask Clear */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
87 + E1000_ICR = 0x000C0, /* Interrupt Cause Read - R/clr */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
88 + E1000_FCAL = 0x00028, /* Flow Control Address Low */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
89 + E1000_FCAH = 0x0002c, /* Flow Control Address High */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
90 + E1000_FCT = 0x00030, /* Flow Control Type */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
91 + E1000_RCTL = 0x00100, /* Receive Control */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
92 + E1000_FCTTV = 0x00170, /* Flow Control Transmit Timer Value */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
93 + E1000_TCTL = 0x00400, /* Transmit Control */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
94 + E1000_CRCERRS = 0x04000, /* CRC Error Count (base address of the statistic register spaces) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
95 + E1000_RAL = 0x05400, /* Receive Address Low */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
96 + E1000_RAH = 0x05404, /* Receive Address High */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
97 + E1000_MTA = 0x05200, /* Multicast Table Array */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
98 + E1000_RDBAL = 0x02800, /* Receive Descriptor Base Address (Low 32 bits) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
99 + E1000_RDBAH = 0x02804, /* Receive Descriptor Base Address (High 32 bits) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
100 + E1000_RDLEN = 0x02808, /* Receive Descriptor Length */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
101 + E1000_RDH = 0x02810, /* Receive Descriptor Head */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
102 + E1000_RDT = 0x02818, /* Receive Descriptor Tail */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
103 + E1000_TDBAL = 0x03800, /* Transmit Descriptor Base Address (Low 32 bits) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
104 + E1000_TDBAH = 0x03804, /* Transmit Descriptor Base Address (High 33 bits) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
105 + E1000_TDLEN = 0x03808, /* Transmit Descriptor Length */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
106 + E1000_TDH = 0x03810, /* Transmit Descriptor Head */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
107 + E1000_TDT = 0x03818, /* Transmit Descriptor Tail */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
108 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
109 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
110 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
111 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
112 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
113 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
114 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
115 + template type e1000::Commands() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
116 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
117 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
118 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
119 + E1000_CMD_FD = 0x00000001, /* Full duplex.0=half; 1=full */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
120 + E1000_CMD_BEM = 0x00000002, /* Endian Mode.0=little,1=big */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
121 + E1000_CMD_PRIOR = 0x00000004, /* Priority on PCI. 0=rx,1=fair */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
122 + E1000_CMD_GIO_MASTER_DISABLE = 0x00000004, /* Blocks new Master requests */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
123 + E1000_CMD_LRST = 0x00000008, /* Link reset. 0=normal,1=reset */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
124 + E1000_CMD_TME = 0x00000010, /* Test mode. 0=normal,1=test */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
125 + E1000_CMD_SLE = 0x00000020, /* Serial Link on 0=dis,1=en */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
126 + E1000_CMD_ASDE = 0x00000020, /* Auto-speed detect enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
127 + E1000_CMD_SLU = 0x00000040, /* Set link up (Force Link) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
128 + E1000_CMD_ILOS = 0x00000080, /* Invert Loss-Of Signal */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
129 + E1000_CMD_SPD_SEL = 0x00000300, /* Speed Select Mask */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
130 + E1000_CMD_SPD_10 = 0x00000000, /* Force 10Mb */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
131 + E1000_CMD_SPD_100 = 0x00000100, /* Force 100Mb */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
132 + E1000_CMD_SPD_1000 = 0x00000200, /* Force 1Gb */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
133 + E1000_CMD_BEM32 = 0x00000400, /* Big Endian 32 mode */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
134 + E1000_CMD_FRCSPD = 0x00000800, /* Force Speed */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
135 + E1000_CMD_FRCDPX = 0x00001000, /* Force Duplex */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
136 + E1000_CMD_D_UD_EN = 0x00002000, /* Dock/Undock enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
137 + E1000_CMD_D_UD_POLARITY = 0x00004000, /* Defined polarity of Dock/Undock indication in SDP[0] */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
138 + E1000_CMD_FORCE_PHY_RESET = 0x00008000, /* Reset both PHY ports, through PHYRST_N pin */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
139 + E1000_CMD_EXT_LINK_EN = 0x00010000, /* enable link status from external LINK_0 and LINK_1 pins */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
140 + E1000_CMD_SWDPIN0 = 0x00040000, /* SWDPIN 0 value */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
141 + E1000_CMD_SWDPIN1 = 0x00080000, /* SWDPIN 1 value */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
142 + E1000_CMD_SWDPIN2 = 0x00100000, /* SWDPIN 2 value */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
143 + E1000_CMD_SWDPIN3 = 0x00200000, /* SWDPIN 3 value */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
144 + E1000_CMD_SWDPIO0 = 0x00400000, /* SWDPIN 0 Input or output */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
145 + E1000_CMD_SWDPIO1 = 0x00800000, /* SWDPIN 1 input or output */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
146 + E1000_CMD_SWDPIO2 = 0x01000000, /* SWDPIN 2 input or output */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
147 + E1000_CMD_SWDPIO3 = 0x02000000, /* SWDPIN 3 input or output */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
148 + E1000_CMD_RST = 0x04000000, /* Global reset */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
149 + E1000_CMD_RFCE = 0x08000000, /* Receive Flow Control enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
150 + E1000_CMD_TFCE = 0x10000000, /* Transmit flow control enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
151 + E1000_CMD_RTE = 0x20000000, /* Routing tag enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
152 + E1000_CMD_VME = 0x40000000, /* IEEE VLAN mode enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
153 + E1000_CMD_PHY_RST = 0x80000000, /* PHY Reset */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
154 + E1000_CMD_SW2FW_INT = 0x02000000, /* Initiate an interrupt to manageability engine */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
155 + E1000_INTR_TXDW = 0x00000001, /* Transmit desc written back */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
156 + E1000_INTR_TXQE = 0x00000002, /* Transmit Queue empty */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
157 + E1000_INTR_LSC = 0x00000004, /* Link Status Change */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
158 + E1000_INTR_RXSEQ = 0x00000008, /* rx sequence error */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
159 + E1000_INTR_RXDMT0 = 0x00000010, /* rx desc min. threshold (0) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
160 + E1000_INTR_RXO = 0x00000040, /* rx overrun */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
161 + E1000_INTR_RXT0 = 0x00000080, /* rx timer intr (ring 0) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
162 + E1000_INTR_MDAC = 0x00000200, /* MDIO access complete */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
163 + E1000_RAH_AV = (1 << 31), /* Set the MAC Address as Valid */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
164 + E1000_RCTL_EN = (1 << 1), /* Receiver Enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
165 + E1000_RCTL_BSEX = (1 << 25), /* Buffer Size Extension */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
166 + E1000_RCTL_BSIZE_256 = ((1 << 16) | (1 << 17)), |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
167 + E1000_RCTL_BSIZE_512 = (1 << 17), |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
168 + E1000_RCTL_BSIZE_1024 = (1 << 16), |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
169 + E1000_RCTL_BSIZE_2048 = 0, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
170 + E1000_RCTL_BSIZE_4096 = (E1000_RCTL_BSEX | (1 << 16) | (1 << 17)), |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
171 + E1000_RCTL_BSIZE_8192 = (E1000_RCTL_BSEX | (1 << 17)), |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
172 + E1000_RCTL_BSIZE_16384 = (E1000_RCTL_BSEX | (1 << 16)), |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
173 + E1000_TCTL_EN = (1 << 1), /* Transmitter Enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
174 + E1000_TCTL_PSP = (1 << 3), /* Pad Short Packet */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
175 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
176 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
177 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
178 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
179 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
180 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
181 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
182 + template type e1000::TxDescriptorFlag() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
183 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
184 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
185 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
186 + E1000_TXD_DTYP_D = 0x00100000, /* Data Descriptor */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
187 + E1000_TXD_DTYP_C = 0x00000000, /* Context Descriptor */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
188 + E1000_TXD_POPTS_IXSM = 0x01, /* Insert IP checksum */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
189 + E1000_TXD_POPTS_TXSM = 0x02, /* Insert TCP/UDP checksum */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
190 + E1000_TXD_CMD_EOP = 0x01000000, /* End of Packet */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
191 + E1000_TXD_CMD_IFCS = 0x02000000, /* Insert FCS (Ethernet CRC) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
192 + E1000_TXD_CMD_IC = 0x04000000, /* Insert Checksum */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
193 + E1000_TXD_CMD_RS = 0x08000000, /* Report Status */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
194 + E1000_TXD_CMD_RPS = 0x10000000, /* Report Packet Sent */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
195 + E1000_TXD_CMD_DEXT = 0x20000000, /* Descriptor extension (0 = legacy) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
196 + E1000_TXD_CMD_VLE = 0x40000000, /* Add VLAN tag */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
197 + E1000_TXD_CMD_IDE = 0x80000000, /* Enable Tidv register */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
198 + E1000_TXD_STAT_DD = 0x00000001, /* Descriptor Done */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
199 + E1000_TXD_STAT_EC = 0x00000002, /* Excess Collisions */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
200 + E1000_TXD_STAT_LC = 0x00000004, /* Late Collisions */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
201 + E1000_TXD_STAT_TU = 0x00000008, /* Transmit underrun */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
202 + E1000_TXD_CMD_TCP = 0x01000000, /* TCP packet */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
203 + E1000_TXD_CMD_IP = 0x02000000, /* IP packet */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
204 + E1000_TXD_CMD_TSE = 0x04000000, /* TCP Seg enable */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
205 + E1000_TXD_STAT_TC = 0x00000004, /* Tx Underrun */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
206 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
207 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
208 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
209 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
210 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
211 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
212 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
213 + template type e1000::RxDescriptor() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
214 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
215 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
216 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
217 + __le64 buff_addr; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
218 + __le16 length; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
219 + __le16 csum; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
220 + unsigned char status; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
221 + unsigned char errors; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
222 + __le16 special; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
223 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
224 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
225 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
226 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
227 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
228 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
229 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
230 + // This is a generic tx descriptor for the e1000. When you use TCP |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
231 + // Segmentation Offload (TSO) the hardware actually uses two types of |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
232 + // tx descriptors in its tx ring: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
233 + // - context descriptors: this descriptor doesn't actually point to data to |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
234 + // send but initialize the offloading engine for the data descriptor that |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
235 + // follow; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
236 + // - data descriptors: this descriptor points to data from the skbuffs. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
237 + template type e1000::TxDescriptor() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
238 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
239 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
240 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
241 + __le64 buff_addr; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
242 + union { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
243 + __le32 data; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
244 + struct { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
245 + __le16 length; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
246 + unsigned char csum_offset; /* CSO */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
247 + unsigned char cmd; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
248 + } fields; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
249 + } lower; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
250 + union { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
251 + __le32 data; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
252 + struct { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
253 + unsigned char status; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
254 + unsigned char csum_start; /* CSS */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
255 + __le16 special; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
256 + } fields; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
257 + } upper; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
258 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
259 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
260 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
261 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
262 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
263 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
264 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
265 + template type e1000::Buffer() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
266 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
267 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
268 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
269 + ${Socket::SKBuff} sk_buff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
270 + ${DMA::DMAHandle} dma; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
271 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
272 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
273 + method init(Socket::SKBuff sk_buff, DMA::DMAHandle dma) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
274 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
275 + ${self.sk_buff} = ${sk_buff}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
276 + ${self.dma} = ${dma}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
277 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
278 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
279 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
280 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
281 + sk_buff: ${self}->sk_buff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
282 + dma: ${self}->dma; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
283 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
284 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
285 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
286 + template type e1000::MMIO |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
287 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
288 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
289 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
290 + unsigned char *io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
291 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
292 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
293 + // XXX: we'll need those functions until we get working methods (#46): |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
294 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
295 + chunk LKM::prototypes() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
296 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
297 + static unsigned int rtx_e1000_reg_read32(${e1000::MMIO}, ${e1000::Register}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
298 + static void rtx_e1000_reg_write32(${e1000:::MMIO}, ${e1000::Register}, ${Builtin::number}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
299 + static void rtx_e1000_reg_set32(${e1000:::MMIO}, ${e1000::Register}, ${Builtin::number}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
300 + static void rtx_e1000_reg_unset32(${e1000:::MMIO}, ${e1000::Register}, ${Builtin::number}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
301 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
302 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
303 + chunk LKM::code() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
304 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
305 + static unsigned int rtx_e1000_reg_read32(${e1000::MMIO} io, ${e1000::Register} reg) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
306 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
307 + return ioread32(${local.io.io} + reg); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
308 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
309 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
310 + static void rtx_e1000_reg_write32(${e1000:::MMIO} io, ${e1000::Register} reg, ${Builtin::number} value) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
311 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
312 + return iowrite32(value, ${local.io.io} + reg); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
313 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
314 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
315 + static void rtx_e1000_reg_set32(${e1000:::MMIO} io, ${e1000::Register} reg, ${Builtin::number} value) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
316 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
317 + return iowrite32(rtx_e1000_reg_read32(io, reg) | value, ${local.io.io} + reg); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
318 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
319 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
320 + static void rtx_e1000_reg_unset32(${e1000:::MMIO} io, ${e1000::Register} reg, ${Builtin::number} value) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
321 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
322 + return iowrite32(rtx_e1000_reg_read32(io, reg) & ~value, ${local.io.io} + reg); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
323 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
324 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
325 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
326 + method init(Builtin::symbol io) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
327 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
328 + ${self.io} = ${io}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
329 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
330 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
331 + method read32(${e1000::Register} reg) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
332 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
333 + ioread32(${self.io} + ${local.reg}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
334 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
335 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
336 + method write32(${e1000::Register} reg, ${Builtin::number} value) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
337 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
338 + iowrite32(${local.value}, ${self.io} + ${local.reg}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
339 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
340 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
341 + method set32(${e1000::Register} reg, ${Builtin::number} value) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
342 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
343 + iowrite32(ioread32(${self.io} + ${local.reg}) | value, ${self.io} + ${local.reg}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
344 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
345 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
346 + method unset32(${e1000::Register} reg, ${Builtin::number} value) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
347 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
348 + iowrite32(ioread32(${self.io} + ${local.reg}) & ~value, ${self.io} + ${local.reg}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
349 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
350 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
351 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
352 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
353 + io: ((unsigned char *)(${self})); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
354 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
355 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
356 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
357 + template type e1000::Ring() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
358 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
359 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
360 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
361 + ${e1000::MMIO} io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
362 + ${DMA::DMAHandle} dma; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
363 + ${Builtin::symbol.ref} descs; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
364 + ${Builtin::number} size; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
365 + ${e1000::Buffer.ref} buffs; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
366 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
367 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
368 + chunk LKM::prototypes() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
369 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
370 + static void rtx_e1000_ring_init(${e1000::Ring.ref}, ${e1000::MMIO}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
371 + ${Builtin::number}, ${Builtin::number}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
372 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
373 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
374 + chunk LKM::code() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
375 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
376 + static void rtx_e1000_ring_init(${e1000::Ring.ref} self, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
377 + ${e1000::MMIO} io, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
378 + ${Builtin::number} desc_count, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
379 + ${Builtin::number} desc_size) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
380 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
381 + memset(self, 0, sizeof(*self)); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
382 + self->size = ALIGN(desc_count * desc_size, 4096); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
383 + self->io = io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
384 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
385 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
386 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
387 + method init(e1000::MMIO io, Builtin::number desc_count, Builtin::number desc_size) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
388 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
389 + rtx_e1000_ring_init(&${self}, ${io}, ${desc_count}, ${desc_size}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
390 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
391 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
392 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
393 + template type e1000::RxRing() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
394 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
395 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
396 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
397 + ${e1000::Ring} ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
398 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
399 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
400 + chunk LKM::prototypes() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
401 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
402 + static int rtx_e1000_alloc_rx_ressources(${e1000::RxRing.ref}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
403 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
404 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
405 + chunk LKM::code() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
406 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
407 + static int rtx_e1000_alloc_rx_ressources(${e1000::RxRing.ref} self) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
408 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
409 + return 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
410 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
411 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
412 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
413 + chunk Ethernet::adapter_init_rx(Ethernet::Device rtx_ether_ctx) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
414 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
415 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
416 + ${e1000::Context.ref} hw_ctx = &${rtx_ether_ctx}->hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
417 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
418 + /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
419 + * Receive initialization (section 14.4): |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
420 + * |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
421 + * 1. Program the receive address, in RAL/RAH; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
422 + * 2. Initialize the Multicast Table Array; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
423 + * 3. Program the interrupt mask register (done in |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
424 + * e1000::activate_device_interruption); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
425 + * 4. Allocate the receive descriptor ring and map it to make it |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
426 + * accessible by the device; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
427 + * 5. Write the start address of the ring in RDBAL/RDBAH and set |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
428 + * RDLEN (Receive Descriptor Length) to the size of the ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
429 + * 6. Set the RDH/RDT (Receive Descriptor Head/Tail) indexes to the |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
430 + * beginning and end of the ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
431 + * 7. Make sure that RCTL.BSIZE and .BSEX are at 0 to configure the |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
432 + * receive buffer size to 2048 bytes (e1000::rx_buffer_len). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
433 + * 8. Set RCTL.EN to enable the receiver. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
434 + * |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
435 + * The ugly casts here are caused by the lack of CNorm unstrict. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
436 + */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
437 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
438 + int i; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
439 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
440 + /* 1. Program the receive address */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
441 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
442 + /* (We should use uint{32,16}_t but CNorm doesn't know them yet) */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
443 + rtx_e1000_register_write32(hw_ctx, E1000_RAL, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
444 + *(unsigned int *)(${rtx_ether_ctx.dev_addr})); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
445 + /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
446 + * The 16 upper bits of RAH also store the AS bits (which should be |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
447 + * 0) and the AV bit (should be 1 to set the address as valid). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
448 + */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
449 + rtx_e1000_register_write32(hw_ctx, E1000_RAH, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
450 + *(unsigned short *)(&${rtx_ether_ctx.dev_addr}[4])); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
451 + rtx_e1000_register_set32(hw_ctx, E1000_RAH, E1000_RAH_AV); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
452 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
453 + ${Log::info("adapter_init_rx: receive address programmed")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
454 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
455 + /* 2. Initialize the MTA */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
456 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
457 + for (i = 0; i != 128; ++i) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
458 + rtx_e1000_register_write32(hw_ctx, E1000_MTA + i * 4, 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
459 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
460 + ${Log::info("adapter_init_rx: MTA init done")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
461 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
462 + /* 4. Setup the receive descriptor ring */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
463 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
464 + /* Allocate the descriptors */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
465 + hw_ctx->rx_ring.size = ${config.rx_ring_size} * sizeof(*hw_ctx->rx_ring.base); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
466 + hw_ctx->rx_ring.size = ALIGN(hw_ctx->rx_ring.size, 4096); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
467 + hw_ctx->rx_ring.base = ${DMA::alloc_coherent( |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
468 + rtx_ether_ctx.device, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
469 + local.hw_ctx.rx_ring.size, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
470 + local.hw_ctx.rx_ring.dma_base.dma_handle |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
471 + )}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
472 + if (!hw_ctx->rx_ring.base) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
473 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
474 + ${Log::info("adapter_init_rx: cannot allocate the descriptors for the rx ring")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
475 + goto err_rx_ring_alloc; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
476 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
477 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
478 + ${Log::info("adapter_init_rx: rx descriptors allocated")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
479 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
480 + /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
481 + * Allocate the skbuffs, map them for DMA, and write their address |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
482 + * in the corresponding descriptor. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
483 + */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
484 + for (i = 0; i != ${config.rx_ring_size}; ++i) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
485 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
486 + ${Socket::SKBuff.ref} skbuff = &hw_ctx->rx_ring.skbuffs[i]; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
487 + // XXX #46: ${rtx_ether_ctx.alloc_rx_skbuff(local.skbuff, config.rx_buffer_len)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
488 + if (rtx_ethernet_alloc_rx_skbuff(${local.skbuff}, ${config.rx_buffer_len})) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
489 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
490 + ${Log::info("adapter_init_rx: cannot allocate a skbuff for the rx ring")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
491 + goto err_skbuffs_alloc; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
492 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
493 + /* XXX: recuperer le dma handle et le placer correctement dans le descripteur. */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
494 + ${DMA::map(local.rtx_ether_ctx.device, local.skbuff.data, local.skbuff.len, RTX_DMA_FROM_DEVICE)} |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
495 + if (${DMA::map(local.rtx_ether_ctx.device, local.skbuff.data, local.skbuff.len, RTX_DMA_FROM_DEVICE)}) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
496 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
497 + ${Log::info("adapter_init_rx: cannot dma-map a skbuff for the rx ring")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
498 + goto err_skbuffs_map; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
499 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
500 + hw_ctx->rx_ring.base[i].buff_addr = cpu_to_le64(${local.skbuff.sk_buff}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
501 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
502 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
503 + // ${Log::info("adapter_init_rx: skbuffs allocated}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
504 + pr_info("rtx_e1k: adapter_init_rx: skbuffs allocated, headlen=%d", skb_headlen((struct sk_buff *)hw_ctx->rx_ring.skbuffs[i - 1].skbuff)); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
505 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
506 + /* 5. Save the emplacement and the size of the ring in RDBA/RDLEN */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
507 + rtx_e1000_register_write32(hw_ctx, E1000_RDBAL, hw_ctx->rx_ring.dma_base & 0xffffffff); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
508 + rtx_e1000_register_write32(hw_ctx, E1000_RDBAH, hw_ctx->rx_ring.dma_base >> 32); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
509 + rtx_e1000_register_write32(hw_ctx, E1000_RDLEN, hw_ctx->rx_ring.size); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
510 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
511 + /* 6. Setup RDH/RDT */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
512 + rtx_e1000_register_write32(hw_ctx, E1000_RDH, 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
513 + rtx_e1000_register_write32(hw_ctx, E1000_RDT, ${config.rx_ring_size} - 1); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
514 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
515 + /* 7. Configure the buffer size, */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
516 + rtx_e1000_register_set32(hw_ctx, E1000_RCTL, E1000_RCTL_BSIZE_${config.rx_buffer_len}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
517 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
518 + /* 8. Enable the receiver */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
519 + rtx_e1000_register_set32(hw_ctx, E1000_RCTL, E1000_RCTL_EN); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
520 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
521 + ${Log::info("adapter_init_rx: receive registers configured and receiver enabled")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
522 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
523 + /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
524 + * XXX: We can't return here since we are not in a function but |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
525 + * in a chunk of code (injected in a function). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
526 + */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
527 + goto init_rx_ok; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
528 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
529 + err_skbuffs_alloc: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
530 + while (i--) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
531 + dma_unmap_single( |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
532 + ${rtx_ether_ctx.device}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
533 + /* XXX Leaking cast because of the array: */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
534 + *((dma_addr_t *)&(hw_ctx->rx_ring.skbuffs[i].dma_handle)), |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
535 + ${config.rx_buffer_len}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
536 + DMA_FROM_DEVICE); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
537 + err_skbuffs_map: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
538 + /* XXX leaking cast: */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
539 + dev_kfree_skb((struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
540 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
541 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
542 + dma_free_coherent(${rtx_ether_ctx.device}, hw_ctx->rx_ring.size, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
543 + hw_ctx->rx_ring.base, hw_ctx->rx_ring.dma_base); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
544 + err_rx_ring_alloc: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
545 + /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
546 + * XXX: Likewise, if there is something else to rollback in the |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
547 + * enclosing function, this won't be done. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
548 + */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
549 + return -ENOMEM; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
550 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
551 + init_rx_ok: (void)0; /* NOP, to make this a valid label. */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
552 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
553 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
554 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
555 + method init(e1000::MMIO io, Builtin::number desc_count) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
556 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
557 + ${self.ring.init(local.io, local.desc_count, self.desc_size)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
558 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
559 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
560 + method alloc() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
561 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
562 + rtx_e1000_alloc_rx_ressources(${self}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
563 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
564 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
565 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
566 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
567 + descs: ((${self})->descs); // TODO: fix cast pour directement avoir les descs |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
568 + desc_size: sizeof(/* XXX ${e1000::RxDescriptor} */int); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
569 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
570 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
571 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
572 + template type e1000::TxRing() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
573 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
574 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
575 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
576 + ${e1000::Ring} ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
577 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
578 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
579 + chunk LKM::prototypes() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
580 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
581 + static int rtx_e1000_alloc_tx_ressources(${e1000::TxRing.ref}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
582 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
583 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
584 + chunk LKM::code() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
585 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
586 + static int rtx_e1000_alloc_tx_ressources(${e1000::TxRing.ref} self) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
587 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
588 + return 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
589 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
590 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
591 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
592 + method init(e1000::MMIO io, Builtin::number desc_count) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
593 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
594 + ${self.ring.init(local.io, local.desc_count, self.desc_size)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
595 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
596 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
597 + method alloc() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
598 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
599 + rtx_e1000_alloc_tx_ressources(${self}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
600 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
601 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
602 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
603 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
604 + descs: ((${self})->descs); // TODO: fix cast pour directement avoir les descs |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
605 + desc_size: sizeof(/* XXX ${e1000::TxDescriptor} */int); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
606 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
607 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
608 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
609 + template type e1000::Context() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
610 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
611 + decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
612 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
613 + ${e1000::MMIO} io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
614 + ${e1000::TxRing} tx_ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
615 + ${e1000::RxRing} rx_ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
616 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
617 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
618 + chunk LKM::includes() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
619 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
620 + #include <linux/types.h> |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
621 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
622 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
623 + chunk LKM::prototypes() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
624 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
625 + static void rtx_e1000_print_status(${e1000::Context.ref}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
626 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
627 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
628 + chunk LKM::code() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
629 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
630 + static void rtx_e1000_print_status(${e1000::Context.ref} hw_ctx) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
631 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
632 + unsigned int status = rtx_e1000_reg_read32(hw_ctx, E1000_STATUS); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
633 + ${Log::info("card status:")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
634 + // XXX We can't use Log::info below because it just accept a |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
635 + // string (as opposed to a format string with its parameters): |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
636 + pr_info("\tRegister value: 0x%x\n", status); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
637 + pr_info("\tMode: %s\n", (status & 1) ? "Full": "Half"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
638 + pr_info("\tLink: %s\n", (status & 2) ? "Up" : "Down"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
639 + pr_info("\tTransmission: %s\n", (status & 4) ? "Paused" : "Ok"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
640 + pr_info("\tInterface: %s\n", (status & 3) == 3 ? "Up" : "Down"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
641 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
642 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
643 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
644 + chunk Ethernet::HardwareContext() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
645 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
646 + ${e1000::Context} hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
647 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
648 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
649 + chunk Ethernet::adapter_init_context(Ethernet::Device rtx_ether_ctx, Builtin::symbol ioaddr) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
650 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
651 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
652 + ${e1000::Context.ref} hw_ctx = &${local.rtx_ether_ctx}->hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
653 + ${local.hw_ctx.io.init(local.ioaddr)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
654 + ${local.hw_ctx.rx_ring.init(local.hw_ctx.io, config.rx_ring_size)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
655 + ${local.hw_ctx.tx_ring.init(local.hw_ctx.io, config.tx_ring_size)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
656 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
657 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
658 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
659 + chunk Ethernet::adapter_reset(Ethernet::Device rtx_ether_ctx) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
660 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
661 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
662 + ${e1000::Context.ref} hw_ctx = &${local.rtx_ether_ctx}->hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
663 + // XXX #46: ${local.hw_ctx.io.write32(E1000_CTRL, E1000_CMD_RST)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
664 + rtx_e1000_reg_write32(hw_ctx, E1000_CTRL, E1000_CMD_RST); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
665 + udelay(10); // TODO: abstract this too... |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
666 + ${Log::info("adapter has been reset")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
667 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
668 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
669 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
670 + chunk Ethernet::adapter_load_mac_address(Ethernet::Device rtx_ether_ctx) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
671 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
672 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
673 + ${e1000::Context.ref} hw_ctx = &${local.rtx_ether_ctx}->hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
674 + // Shamelessly borrowed from Minix |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
675 + for (int i = 0; i < 3; ++i) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
676 + rtx_e1000_reg_write32(hw_ctx, E1000_EEPROM_READ, (i << 8) | 1); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
677 + int value; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
678 + do { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
679 + value = rtx_e1000_reg_read32(hw_ctx, E1000_EEPROM_READ); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
680 + } while ((value & (1 << 4)) == 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
681 + value >>= 16; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
682 + // NOTE: I'm not sure if Ethernet::Device should be |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
683 + // accessed directly here. But since we need to take it in |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
684 + // parameter (so we can get back our e1000::Context) it |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
685 + // seems inadequate to set this in another way: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
686 + ${local.rtx_ether_ctx.dev_addr}[i * 2] = value & 0xff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
687 + ${local.rtx_ether_ctx.dev_addr}[i * 2 + 1] = (value >> 8) & 0xff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
688 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
689 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
690 + ${Log::info("mac address loaded from the EEPROM")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
691 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
692 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
693 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
694 + chunk Ethernet::adapter_setup_rx_tx(Ethernet::Device rtx_ether_ctx) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
695 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
696 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
697 + ${e1000::Context.ref} hw_ctx = &${local.rtx_ether_ctx}->hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
698 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
699 + // "General Configuration" (section 14.3): |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
700 + // |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
701 + // - CTRL.ASDE/CTRL.SLU: Let the PHY handle the speed detection & |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
702 + // negociation; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
703 + // - CTRL.LRST/FRCSPD: Unset them to initiate the auto-negociation; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
704 + // - CTRL.PHY_RST: Unset it; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
705 + // - CTRL.ILOS: Unset it (ILOS is Invert Loss Of Signal); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
706 + // - CTRL.VME: Make sure it's not set to disable VLAN support; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
707 + // - Set the control flow registers to 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
708 + // - Finally, initialize all the statistic registers from |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
709 + // E1000_CRCERRS to E1000_TSCTFC. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
710 + // |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
711 + // XXX #46: Use the read/write/set/unset methods on Context |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
712 + rtx_e1000_reg_set32(hw_ctx, E1000_CTRL, E1000_CMD_ASDE|E1000_CMD_SLU); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
713 + rtx_e1000_reg_unset32( |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
714 + hw_ctx, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
715 + E1000_CTRL, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
716 + E1000_CMD_LRST|E1000_CMD_FRCSPD|E1000_CMD_PHY_RST| |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
717 + E1000_CMD_ILOS|E1000_CMD_VME |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
718 + ); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
719 + rtx_e1000_reg_write32(hw_ctx, E1000_FCAH, 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
720 + rtx_e1000_reg_write32(hw_ctx, E1000_FCAL, 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
721 + rtx_e1000_reg_write32(hw_ctx, E1000_FCT, 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
722 + rtx_e1000_reg_write32(hw_ctx, E1000_FCTTV, 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
723 + for (int i = 0; i != 64; ++i) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
724 + rtx_e1000_reg_write32(hw_ctx, E1000_CRCERRS + i * 4, 0); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
725 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
726 + ${Log::info("adapter_setup: general configuration done")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
727 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
728 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
729 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
730 + chunk Ethernet::adapter_enable_interrupts(Ethernet::Device) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
731 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
732 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
733 + ${e1000::Context.ref} hw_ctx = &${local.rtx_ether_ctx}->hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
734 + rtx_e1000_reg_write32( |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
735 + hw_ctx, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
736 + E1000_IMS, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
737 + E1000_INTR_TXDW|E1000_INTR_TXQE|E1000_INTR_LSC| |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
738 + E1000_INTR_RXO|E1000_INTR_RXT0 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
739 + ); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
740 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
741 + // XXX We should probably move that elsewhere (it just used to |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
742 + // be done right after we enabled interrupts when this was |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
743 + // still in lkm.rtx): |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
744 + ${local.hw_ctx.print_status()}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
745 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
746 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
747 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
748 + chunk Ethernet::handle_interrupt(Ethernet::Device rtx_ether_ctx) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
749 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
750 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
751 + ${e1000::Context.ref} hw_ctx = &${local.rtx_ether_ctx}->hw_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
752 + unsigned int icr = rtx_e1000_reg_read32(hw_ctx, E1000_ICR); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
753 + pr_info("%s: interrupt received, ICR: 0x%x", ${config.name}, icr); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
754 + if (icr) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
755 + if (icr & E1000_INTR_LSC) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
756 + ${Log::info("handle_interrupt: cable link status changed, dumping card status:")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
757 + ${local.hw_ctx.print_status()}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
758 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
759 + if (icr & (E1000_INTR_TXQE|E1000_INTR_TXDW)) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
760 + ${Log::info("handle_interrupt: TxRing: packet(s) sent")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
761 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
762 + if (icr & E1000_INTR_RXT0) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
763 + ${Log::info("handle_interrupt: RxRing: packet(s) received")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
764 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
765 + if (icr & E1000_INTR_RXO) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
766 + ${Log::info("handle_interrupt: RxRing: overrun")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
767 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
768 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
769 + // XXX: This sucks since we don't know the pointcut context: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
770 + return IRQ_HANDLED; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
771 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
772 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
773 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
774 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
775 + method print_status() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
776 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
777 + rtx_e1000_print_status(${self}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
778 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
779 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
780 + map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
781 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
782 + io: ${self}->io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
783 + rx_ring: ${self}->rx_ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
784 + tx_ring: ${self}->tx_ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
785 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
786 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
787 +} |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
788 diff --git a/rathaxes/samples/e1000/e1000ng.rti b/rathaxes/samples/e1000/e1000ng.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
789 new file mode 100755 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
790 --- /dev/null |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
791 +++ b/rathaxes/samples/e1000/e1000ng.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
792 @@ -0,0 +1,122 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
793 +interface e1000ng : Socket, Ethernet, DMA, PCI, LKM, Builtin |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
794 +{ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
795 + required variable Builtin::number rx_ring_size; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
796 + required variable Builtin::number tx_ring_size; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
797 + required variable Builtin::number rx_buffer_len; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
798 + required variable Builtin::number tx_max_data_per_desc; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
799 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
800 + // Hardware values/data structures, should probably be in the front-end: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
801 + provided type Register { decl data_types(); } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
802 + provided type Command { decl data_types(); } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
803 + provided type TxDescriptorFlag { decl data_types(); } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
804 + provided type RxDescriptor { decl data_types(); } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
805 + provided type TxDescriptor { decl data_types(); } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
806 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
807 + provided type Buffer |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
808 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
809 + decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
810 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
811 + method init(Socket::SKBuff, DMA::DMAHandle); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
812 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
813 + attribute Socket::SKBuff.ref sk_buff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
814 + attribute DMA::DMAHandle.ref dma; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
815 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
816 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
817 + // I wish we could just leave those methods in the Context type but we also |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
818 + // need them from the rings and that would mean a circular dependency |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
819 + // between the context and the rings and Rathaxes can't handle it. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
820 + provided type MMIO |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
821 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
822 + decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
823 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
824 + chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
825 + chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
826 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
827 + method init(Builtin::symbol); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
828 + method read32(Register); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
829 + method write32(Register, Builtin::number); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
830 + method set32(Register, Builtin::number); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
831 + method unset32(Register, Builtin::number); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
832 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
833 + attribute Builtin::symbol io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
834 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
835 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
836 + provided type Ring |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
837 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
838 + decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
839 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
840 + chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
841 + chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
842 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
843 + method init(MMIO, Builtin::number, Builtin::number); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
844 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
845 + attribute MMIO io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
846 + attribute DMA:DMAHandle dma; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
847 + attribute Builtin::number size; // Total size in bytes |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
848 + attribute Builtin::symbol.ref descs; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
849 + attribute Buffer.ref buffs; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
850 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
851 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
852 + provided type RxRing |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
853 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
854 + decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
855 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
856 + chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
857 + chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
858 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
859 + method init(MMIO, Builtin::number); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
860 + method alloc(); // Returns != 0 on failure |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
861 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
862 + attribute RxDescriptor descs; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
863 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
864 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
865 + provided type TxRing |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
866 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
867 + decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
868 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
869 + chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
870 + chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
871 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
872 + method init(MMIO, Builtin::number); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
873 + method alloc(); // Returns != 0 on failure |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
874 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
875 + attribute TxDescriptor descs; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
876 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
877 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
878 + provided type Context |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
879 + { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
880 + decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
881 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
882 + chunk LKM::includes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
883 + chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
884 + chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
885 + chunk Ethernet::HardwareContext(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
886 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
887 + // NOTE: Those callbacks/hooks should probably be in the front-end: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
888 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
889 + // Init the hardware context structure, doesn't allocate anything. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
890 + chunk Ethernet::adapter_init_context(Ethernet::Device, Builtin::symbol); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
891 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
892 + // Reset the adapter |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
893 + chunk Ethernet::adapter_reset(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
894 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
895 + // Load the MAC address from the EEPROM and save it into the |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
896 + // dev_addr field/attribute of Ethernet::Device. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
897 + chunk Ethernet::adapter_load_mac_address(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
898 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
899 + // Prepare the device and the resources for rx/tx. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
900 + chunk Ethernet::adapter_setup_rx_tx(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
901 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
902 + // Enable interrupts. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
903 + chunk Ethernet::adapter_enable_interrupts(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
904 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
905 + // Interrupt handler. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
906 + chunk Ethernet::handle_interrupt(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
907 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
908 + method print_status(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
909 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
910 + attribute MMIO io; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
911 + attribute RxRing.scalar rx_ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
912 + attribute TxRing.scalar tx_ring; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
913 + } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
914 +} |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
915 diff --git a/rathaxes/samples/e1000/ethernet.blt b/rathaxes/samples/e1000/ethernet.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
916 --- a/rathaxes/samples/e1000/ethernet.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
917 +++ b/rathaxes/samples/e1000/ethernet.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
918 @@ -106,7 +106,7 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
919 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
920 ${Socket::AbstractSKBuff} k_sk_buff = netdev_alloc_skb(${local.self.net_device.k_net_dev}, ${local.size}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
921 if (${local.k_sk_buff) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
922 - ${local.sk_buff.init(local.k_sk_buff, local.size)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
923 + ${local.sk_buff.init(local.k_sk_buff)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
924 return 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
925 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
926 return 1; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
927 @@ -164,34 +164,30 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
928 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
929 static int rtx_ethernet_open(struct net_device *dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
930 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
931 - /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
932 - * XXX The casts are here because the compiler doesn't resolve |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
933 - * "enclosed" type (e.g: local.var.enclosed) correctly. |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
934 - */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
935 ${Ethernet::AbstractDevice.ref} rtx_net_dev; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
936 { /* XXX: I end up with a placeholder if I don't open a scope */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
937 ${local.rtx_net_dev.init(local.dev)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
938 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
939 ${Ethernet::Device.ref} rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
940 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
941 - int error; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
942 + ${pointcut Ethernet::adapter_setup_rx_tx(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
943 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
944 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
945 - ${Log::info("installing the interrupt handler")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
946 + ${Log::info("Installing the interrupt handler")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
947 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
948 - error = request_irq(${local.rtx_ether_ctx.irq}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
949 - rtx_ethernet_interrupt_handler, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
950 - IRQF_SHARED, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
951 - ${config.name}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
952 - dev); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
953 - if (error) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
954 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
955 + int error = request_irq( |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
956 + ${local.rtx_ether_ctx.irq}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
957 + rtx_ethernet_interrupt_handler, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
958 + IRQF_SHARED, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
959 + ${config.name}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
960 + dev |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
961 + ); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
962 + if (error) { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
963 ${Log::info("Cannot register the interrupt handler")}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
964 return error; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
965 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
966 - ${pointcut Ethernet::adapter_setup(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
967 - ${pointcut Ethernet::adapter_init_rx(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
968 - ${pointcut Ethernet::adapter_init_tx(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
969 - ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
970 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
971 + ${pointcut Ethernet::adapter_enable_interrupts(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
972 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
973 return 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
974 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
975 @@ -269,7 +265,7 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
976 ${Ethernet::Device.ref} rtx_ether_ctx; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
977 rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
978 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
979 - ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
980 + ${pointcut Ethernet::handle_interrupt(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
981 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
982 return IRQ_NONE; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
983 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
984 @@ -342,12 +338,8 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
985 * XXX: the asssignments/casts are here to circumvent |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
986 * typing issues in the compiler (see previous XXX). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
987 */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
988 - int bars = ${rtx_pci_dev.bars}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
989 unsigned char /* __iomem */ *ioaddr = ${rtx_pci_dev.ioaddr}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
990 - ${cast local.bars as Builtin::number}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
991 - ${pointcut Ethernet::adapter_init_context(local.rtx_ether_ctx, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
992 - local.bars, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
993 - local.ioaddr)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
994 + ${pointcut Ethernet::adapter_init_context(local.rtx_ether_ctx, local.ioaddr)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
995 ${pointcut Ethernet::adapter_reset(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
996 ${pointcut Ethernet::adapter_load_mac_address(local.rtx_ether_ctx)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
997 memcpy(${local.rtx_ether_ctx.perm_addr}, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
998 diff --git a/rathaxes/samples/e1000/ethernet.rti b/rathaxes/samples/e1000/ethernet.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
999 --- a/rathaxes/samples/e1000/ethernet.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1000 +++ b/rathaxes/samples/e1000/ethernet.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1001 @@ -28,8 +28,12 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1002 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1003 provided type Device |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1004 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1005 + decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1006 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1007 chunk LKM::includes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1008 - decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1009 + chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1010 + chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1011 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1012 pointcut Ethernet::HardwareContext(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1013 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1014 method init(Ethernet::AbstractDevice, PCI::AbstractDevice); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1015 @@ -51,7 +55,7 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1016 attribute Builtin::symbol.scalar irq; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1017 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1018 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1019 - required sequence open(Ethernet::Device) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1020 + provided sequence open(Ethernet::Device) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1021 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1022 provided chunk LKM::includes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1023 provided chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1024 @@ -62,9 +66,8 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1025 * Controller Software Developper manual. (You can find it in the |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1026 * doc/hardware directory). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1027 */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1028 - provided pointcut Ethernet::adapter_setup(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1029 - provided pointcut Ethernet::adapter_init_rx(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1030 - provided pointcut Ethernet::adapter_init_tx(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1031 + provided pointcut Ethernet::adapter_setup_rx_tx(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1032 + provided pointcut Ethernet::adapter_enable_interrupts(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1033 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1034 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1035 required sequence send(Ethernet::Device, Socket::AbstractSKBuff) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1036 @@ -79,10 +82,12 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1037 provided chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1038 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1039 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1040 - required sequence interrupt_handler(Ethernet::Device) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1041 + provided sequence interrupt_handler(Ethernet::Device) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1042 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1043 provided chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1044 provided chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1045 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1046 + provided pointcut Ethernet::handle_interrupt(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1047 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1048 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1049 provided sequence init() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1050 @@ -90,9 +95,7 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1051 provided chunk LKM::data(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1052 provided chunk PCI::pci_probe_hook(PCI::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1053 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1054 - provided pointcut Ethernet::adapter_init_context(Ethernet::Device, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1055 - Builtin::number, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1056 - Builtin::symbol); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1057 + provided pointcut Ethernet::adapter_init_context(Ethernet::Device, Builtin::symbol); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1058 provided pointcut Ethernet::adapter_reset(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1059 provided pointcut Ethernet::adapter_load_mac_address(Ethernet::Device); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1060 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1061 diff --git a/rathaxes/samples/e1000/lkm.rtx b/rathaxes/samples/e1000/lkm.rtx |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1062 --- a/rathaxes/samples/e1000/lkm.rtx |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1063 +++ b/rathaxes/samples/e1000/lkm.rtx |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1064 @@ -1,34 +1,5 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1065 device LKM use LKM, PCI, Ethernet, Log, Socket |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1066 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1067 - Ethernet::open(Ethernet::Device dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1068 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1069 - Log::info("opening the device"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1070 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1071 - e1000::activate_device_interruption(dev); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1072 - Log::info("interruption enabled"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1073 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1074 - e1000::print_status(dev); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1075 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1076 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1077 - Ethernet::close(Ethernet::Device dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1078 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1079 - Log::info("closing the device"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1080 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1081 - /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1082 - * Note: some calls to release resources must be done when IRQs are |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1083 - * enabled (dma_free_coherent() for example). So we have to cleanup our |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1084 - * stuff before free_interrupt_handler(). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1085 - */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1086 - e1000::free_rx_tx(dev); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1087 - Log::info("free'ed up rx/tx resources"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1088 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1089 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1090 - Ethernet::interrupt_handler(Ethernet::Device dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1091 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1092 - Log::info("got an interruption"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1093 - e1000::handle_interrupt(dev); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1094 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1095 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1096 Ethernet::send(Ethernet::Device dev, Socket::AbstractSKBuff skb) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1097 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1098 Log::info("we have one packet to transmit!"); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1099 diff --git a/rathaxes/samples/e1000/socket.blt b/rathaxes/samples/e1000/socket.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1100 --- a/rathaxes/samples/e1000/socket.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1101 +++ b/rathaxes/samples/e1000/socket.blt |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1102 @@ -22,16 +22,12 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1103 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1104 decl data_types() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1105 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1106 - ${Socket::AbstractSKBuff.ref} skbuff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1107 - ${DMA::AbstractDMAHandle.scalar} dma_handle; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1108 - unsigned int size; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1109 + ${Socket::AbstractSKBuff.ref} skbuff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1110 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1111 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1112 chunk LKM::prototypes() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1113 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1114 static void rtx_socket_skbuff_dump_infos(${Socket::SKBuff.ref}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1115 - static int rtx_socket_skbuff_map(${Socket::SKBuff.ref}, ${Device::AbstractDevice.ref}, ${DMA::DMADirection.scalar}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1116 - static void rtx_socket_skbuff_unmap_and_free(${Socket::SKBuff.ref}, ${Device::AbstractDevice.ref}, ${DMA::DMADirection.scalar}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1117 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1118 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1119 chunk LKM::code() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1120 @@ -63,85 +59,6 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1121 shinfo->nr_frags, shinfo->gso_size, shinfo->gso_segs, shinfo->gso_type |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1122 ); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1123 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1124 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1125 - static int rtx_socket_skbuff_map(${Socket::SKBuff.ref} self, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1126 - ${Device::AbstractDevice.ref} dev, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1127 - ${DMA::DMADirection.scalar} direction) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1128 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1129 - WARN_ON(!${local.self.sk_buff}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1130 - WARN_ON(${local.self.dma_handle}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1131 - /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1132 - * TODO: we don't support skbuffs with paged data yet (see also |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1133 - * http://vger.kernel.org/~davem/skb_data.html). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1134 - */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1135 - WARN_ON(skb_is_nonlinear(${local.self.sk_buff.k_sk_buff})); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1136 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1137 - unsigned int len = ${local.self.size}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1138 - ${cast local.len as Builtin::number}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1139 - ${local.self.dma_handle} = ${DMA::map(local.dev, local.self.sk_buff.k_sk_buff, local.len, local.direction)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1140 - int err = ${DMA::mapping_error(local.dev, local.self.dma_handle)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1141 - if (err) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1142 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1143 - ${local.self.dma_handle} = 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1144 - return err; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1145 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1146 - return 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1147 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1148 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1149 - static void rtx_socket_skbuff_unmap_and_free(${Socket::SKBuff.ref} self, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1150 - ${Device::AbstractDevice.ref} dev, |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1151 - ${DMA::DMADirection} direction) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1152 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1153 - WARN_ON(!${local.self.sk_buff}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1154 - WARN_ON(skb_is_nonlinear(${local.self.sk_buff.k_sk_buff}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1155 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1156 - if (${local.self.dma_handle}) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1157 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1158 - unsigned int len = ${local.self.size}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1159 - ${cast local.len as Builtin::number}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1160 - ${DMA::unmap(local.dev, local.self.dma_handle, local.len, local.direction)}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1161 - ${local.self.dma_handle} = 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1162 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1163 - dev_kfree_skb_any(${local.self.sk_buff.k_sk_buff}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1164 - ${local.self.sk_buff} = NULL; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1165 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1166 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1167 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1168 - /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1169 - * XXX: the rathaxes argument kernel_skb is not actually bound to the |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1170 - * correct C variable from Ethernet::send() (so I named it as the C |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1171 - * variable I needed) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1172 - */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1173 - method init(Socket::AbstractSKBuff kernel_skb, Builtin::number size) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1174 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1175 - ${self.sk_buff} = ${kernel_skb}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1176 - ${self.size} = ${size}; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1177 - ${self.dma_handle} = 0; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1178 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1179 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1180 - method dump_infos() |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1181 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1182 - rtx_socket_skbuff_dump_infos(${self}); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1183 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1184 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1185 - method map_to(Device::AbstractDevice dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1186 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1187 - rtx_socket_skbuff_map(${self}, ${dev}, RTX_DMA_TO_DEVICE); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1188 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1189 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1190 - method map_from(Device::AbstractDevice dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1191 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1192 - rtx_socket_skbuff_map(${self}, ${dev}, RTX_DMA_FROM_DEVICE); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1193 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1194 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1195 - method unmap_to_and_free(Device::AbstractDevice dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1196 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1197 - rtx_socket_skbuff_unmap_and_free(${self}, ${dev}, RTX_DMA_TO_DEVICE); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1198 - } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1199 - |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1200 - method unmap_from_and_free(Device::AbstractDevice dev) |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1201 - { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1202 - rtx_socket_skbuff_unmap_and_free(${self}, ${dev}, RTX_DMA_FROM_DEVICE); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1203 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1204 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1205 map |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1206 @@ -151,13 +68,9 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1207 // management can be abstracted from the user. But this is at least |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1208 // useful for internal use: |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1209 sk_buff: (${self})->skbuff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1210 - // XXX: We need to cast here so we can do things like |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1211 - // var.dma_handle = 0; but the type shouldn't be hardcoded (at the |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1212 - // same time ${DMA:AbstractDMAHandle} couldn't be used because that |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1213 - // would yield to a struct type which you can't assign directly; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1214 - // but maybe doing the ->data in that case would be acceptable). |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1215 - dma_handle: (*((dma_addr_t *)&(${self})->dma_handle)); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1216 - size: (${self})->size; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1217 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1218 + data: ((struct sk_buff *)((${self})->sk_buff))->data; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1219 + len: ((struct sk_buff *)((${self})->sk_buff))->len; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1220 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1221 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1222 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1223 diff --git a/rathaxes/samples/e1000/socket.rti b/rathaxes/samples/e1000/socket.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1224 --- a/rathaxes/samples/e1000/socket.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1225 +++ b/rathaxes/samples/e1000/socket.rti |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1226 @@ -12,20 +12,14 @@ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1227 { |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1228 chunk LKM::prototypes(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1229 chunk LKM::code(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1230 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1231 decl data_types(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1232 - method init(Socket::AbstractSKBuff, Builtin::number); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1233 + |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1234 + method init(Socket::AbstractSKBuff); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1235 method dump_infos(); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1236 - /* |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1237 - * map_to and map_from return a non-zero value on failure (which |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1238 - * doesn't correspond to an errno value): |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1239 - */ |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1240 - method map_to(Device::AbstractDevice); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1241 - method map_from(Device::AbstractDevice); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1242 - method unmap_to_and_free(Device::AbstractDevice); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1243 - method unmap_from_and_free(Device::AbstractDevice); |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1244 |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1245 - attribute Socket::AbstractSKBuff.ref sk_buff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1246 - attribute DMA::AbstractDMAHandle.scalar dma_handle; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1247 - attribute Builtin::number.scalar size; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1248 + attribute Socket::AbstractSKBuff.ref sk_buff; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1249 + attribute Builtin::symbol.ref data; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1250 + attribute Builtin::number.scalar len; |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1251 } |
c209851a82de
Wip, start a rewrite of the e1000 device dependent code
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1252 } |