1#![no_std]
2
3use nic_queues::{RxDescriptor, TxDescriptor};
4
5#[repr(C)]
10#[derive(Clone, Copy, Default)]
11pub struct LegacyRxDesc {
12 pub addr: u64,
13 pub length: u16,
14 pub checksum: u16,
15 pub status: u8,
16 pub errors: u8,
17 pub special: u16,
18}
19
20const RX_DD: u8 = 1 << 0;
21
22impl RxDescriptor for LegacyRxDesc {
23 fn set_buffer_addr(&mut self, phys: u64) {
24 self.addr = phys;
25 }
26 fn is_done(&self) -> bool {
27 self.status & RX_DD != 0
28 }
29 fn packet_length(&self) -> u16 {
30 self.length
31 }
32 fn clear_status(&mut self) {
33 self.status = 0;
34 self.length = 0;
35 self.errors = 0;
36 }
37}
38
39#[repr(C)]
44#[derive(Clone, Copy, Default)]
45pub struct LegacyTxDesc {
46 pub addr: u64,
47 pub length: u16,
48 pub cso: u8,
49 pub cmd: u8,
50 pub status: u8,
51 pub css: u8,
52 pub special: u16,
53}
54
55const TX_DD: u8 = 1 << 0;
56const TX_CMD_EOP: u8 = 1 << 0;
57const TX_CMD_IFCS: u8 = 1 << 1;
58const TX_CMD_RS: u8 = 1 << 3;
59
60impl TxDescriptor for LegacyTxDesc {
61 fn set_buffer(&mut self, phys: u64, len: u16) {
62 self.addr = phys;
63 self.length = len;
64 }
65 fn set_eop_ifcs_rs(&mut self) {
66 self.cmd = TX_CMD_EOP | TX_CMD_IFCS | TX_CMD_RS;
67 }
68 fn is_done(&self) -> bool {
69 self.status & TX_DD != 0
70 }
71 fn clear(&mut self) {
72 *self = Self::default();
73 }
74}
75
76pub mod regs {
81 pub const CTRL: usize = 0x0000;
82 pub const STATUS: usize = 0x0008;
83 pub const EERD: usize = 0x0014;
84 pub const ICR: usize = 0x00C0;
85 pub const ITR: usize = 0x00C4;
88 pub const ICS: usize = 0x00C8;
89 pub const IMS: usize = 0x00D0;
90 pub const IMC: usize = 0x00D8;
91 pub const RCTL: usize = 0x0100;
92 pub const TCTL: usize = 0x0400;
93 pub const RDBAL: usize = 0x2800;
94 pub const RDBAH: usize = 0x2804;
95 pub const RDLEN: usize = 0x2808;
96 pub const RDH: usize = 0x2810;
97 pub const RDT: usize = 0x2818;
98 pub const RDTR: usize = 0x2820;
99 pub const RADV: usize = 0x282C;
100 pub const TDBAL: usize = 0x3800;
101 pub const TDBAH: usize = 0x3804;
102 pub const TDLEN: usize = 0x3808;
103 pub const TDH: usize = 0x3810;
104 pub const TDT: usize = 0x3818;
105 pub const TIDV: usize = 0x3820;
106 pub const TADV: usize = 0x382C;
107 pub const RAL0: usize = 0x5400;
108 pub const RAH0: usize = 0x5404;
109 pub const VET: usize = 0x0008;
110 pub const VFTA: usize = 0x5200;
111}
112
113pub mod ctrl {
114 pub const SLU: u32 = 1 << 6;
115 pub const RST: u32 = 1 << 26;
116}
117
118pub mod rctl {
119 pub const EN: u32 = 1 << 1;
120 pub const SBP: u32 = 1 << 2;
121 pub const UPE: u32 = 1 << 3;
122 pub const MPE: u32 = 1 << 4;
123 pub const BAM: u32 = 1 << 15;
124 pub const BSIZE_2048: u32 = 0;
125 pub const BSIZE_4096: u32 = 1 << 25;
126 pub const BSIZE_8192: u32 = 1 << 16 | 1 << 25;
127 pub const SECRC: u32 = 1 << 26;
128}
129
130pub mod tctl {
131 pub const EN: u32 = 1 << 1;
132 pub const PSP: u32 = 1 << 3;
133 pub const CT_SHIFT: u32 = 4;
134 pub const COLD_SHIFT: u32 = 12;
135}
136
137pub mod int_bits {
138 pub const TXDW: u32 = 1 << 0;
139 pub const TXQE: u32 = 1 << 1;
140 pub const LSC: u32 = 1 << 2;
141 pub const RXDMT0: u32 = 1 << 4;
142 pub const RXO: u32 = 1 << 6;
143 pub const RXT0: u32 = 1 << 7;
144 pub const MDAC: u32 = 1 << 9;
145 pub const RXCFG: u32 = 1 << 10;
146 pub const GPI0: u32 = 1 << 11;
147 pub const GPI1: u32 = 1 << 12;
148}
149
150pub mod eerd {
151 pub const START: u32 = 1 << 0;
152 pub const DONE: u32 = 1 << 4;
153 pub const ADDR_SHIFT: u32 = 8;
154 pub const DATA_SHIFT: u32 = 16;
155}
156
157pub mod rx_status {
159 pub const DD: u8 = 1 << 0;
160 pub const EOP: u8 = 1 << 1;
161 pub const IXSM: u8 = 1 << 3;
162 pub const UDP: u8 = 1 << 4;
163 pub const TCP: u8 = 1 << 5;
164 pub const IPCS: u8 = 1 << 6;
165 pub const PIF: u8 = 1 << 7;
166}
167
168pub mod rx_errors {
170 pub const CE: u8 = 1 << 0;
171 pub const SE: u8 = 1 << 1;
172 pub const SEQ: u8 = 1 << 3;
173 pub const CPRS: u8 = 1 << 4;
174 pub const TCPE: u8 = 1 << 5;
175 pub const IPE: u8 = 1 << 6;
176}
177
178pub mod tx_status {
180 pub const DD: u8 = 1 << 0;
181 pub const EC: u8 = 1 << 1;
182 pub const LC: u8 = 1 << 2;
183 pub const TU: u8 = 1 << 3;
184}