Skip to content

Commit 6098779

Browse files
authored
Fix wrong calculation of data_buffer_pointer of transfer::Normal (#154)
1 parent 4c84664 commit 6098779

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
- CI now uses `giraffate/clippy-action@` instead of `actions-rs/clippy-check` for Clippy check.
99

1010
### Fixed
11+
- `transfer::Normal`'s data_buffer_pointer calculation is fixed.
1112
- The path to the workflow status is fixed.
1213
- Removed an outdated lint `unaligned_references`.
1314

src/ring/trb/transfer.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ impl Normal {
177177
let l: u64 = self.0[0].into();
178178
let u: u64 = self.0[1].into();
179179

180-
(l << 32) | u
180+
(u << 32) | l
181181
}
182182

183183
rw_field!([2](0..=16), trb_transfer_length, "TRB Transfer Length", u32);
@@ -527,3 +527,26 @@ pub enum TransferType {
527527
/// In Data Stage.
528528
In = 3,
529529
}
530+
531+
#[cfg(test)]
532+
mod test {
533+
use super::*;
534+
535+
#[test]
536+
fn normal_data_buffer_pointer() {
537+
let mut normal = Normal::new();
538+
let pointer = 0x12345678_9abcdef0;
539+
normal.set_data_buffer_pointer(pointer);
540+
let pointer_read = normal.data_buffer_pointer();
541+
assert_eq!(pointer, pointer_read);
542+
}
543+
544+
#[test]
545+
fn isoch_data_buffer_pointer() {
546+
let mut isoch = Isoch::new();
547+
let pointer = 0xabcd1234_567890ef;
548+
isoch.set_data_buffer_pointer(pointer);
549+
let pointer_read = isoch.data_buffer_pointer();
550+
assert_eq!(pointer, pointer_read);
551+
}
552+
}

0 commit comments

Comments
 (0)