diff options
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lib.rs b/src/lib.rs index ba8acd347..8e30522be 100644 --- a/src/lib.rs +++ b/src/lib.rs | |||
| @@ -1071,13 +1071,15 @@ where | |||
| 1071 | } | 1071 | } |
| 1072 | 1072 | ||
| 1073 | #[allow(unused)] | 1073 | #[allow(unused)] |
| 1074 | async fn bp_read(&mut self, mut addr: u32, mut data: &mut [u32]) { | 1074 | async fn bp_read(&mut self, mut addr: u32, mut data: &mut [u8]) { |
| 1075 | // It seems the HW force-aligns the addr | 1075 | // It seems the HW force-aligns the addr |
| 1076 | // to 2 if data.len() >= 2 | 1076 | // to 2 if data.len() >= 2 |
| 1077 | // to 4 if data.len() >= 4 | 1077 | // to 4 if data.len() >= 4 |
| 1078 | // To simplify, enforce 4-align for now. | 1078 | // To simplify, enforce 4-align for now. |
| 1079 | assert!(addr % 4 == 0); | 1079 | assert!(addr % 4 == 0); |
| 1080 | 1080 | ||
| 1081 | let mut buf = [0u32; BACKPLANE_MAX_TRANSFER_SIZE / 4]; | ||
| 1082 | |||
| 1081 | while !data.is_empty() { | 1083 | while !data.is_empty() { |
| 1082 | // Ensure transfer doesn't cross a window boundary. | 1084 | // Ensure transfer doesn't cross a window boundary. |
| 1083 | let window_offs = addr & BACKPLANE_ADDRESS_MASK; | 1085 | let window_offs = addr & BACKPLANE_ADDRESS_MASK; |
| @@ -1097,15 +1099,17 @@ where | |||
| 1097 | bus.read(&mut junk).await?; | 1099 | bus.read(&mut junk).await?; |
| 1098 | 1100 | ||
| 1099 | // Read data | 1101 | // Read data |
| 1100 | bus.read(&mut data[..len / 4]).await?; | 1102 | bus.read(&mut buf[..(len + 3) / 4]).await?; |
| 1101 | Ok(()) | 1103 | Ok(()) |
| 1102 | }) | 1104 | }) |
| 1103 | .await | 1105 | .await |
| 1104 | .unwrap(); | 1106 | .unwrap(); |
| 1105 | 1107 | ||
| 1108 | data[..len].copy_from_slice(&slice8_mut(&mut buf)[..len]); | ||
| 1109 | |||
| 1106 | // Advance ptr. | 1110 | // Advance ptr. |
| 1107 | addr += len as u32; | 1111 | addr += len as u32; |
| 1108 | data = &mut data[len / 4..]; | 1112 | data = &mut data[len..]; |
| 1109 | } | 1113 | } |
| 1110 | } | 1114 | } |
| 1111 | 1115 | ||
