aux: increase max payload size
This commit is contained in:
parent
5abd274060
commit
fa6fc1cee9
|
@ -77,11 +77,9 @@ where F: FnOnce(&[u8]) -> Result<T, Error> {
|
|||
let read_ptr = (DRTIOAUX[linkidx].aux_read_pointer_read)() as usize;
|
||||
let ptr = (DRTIOAUX_MEM[linkidx].base + DRTIOAUX_MEM[linkidx].size / 2 + read_ptr * 0x400) as *mut u32;
|
||||
// work buffer to accomodate axi burst reads
|
||||
// buffer at maximum proto packet size, not maximum gateware supported size
|
||||
// to minimize copying time
|
||||
const LEN: usize = 512;
|
||||
let mut buf: [u8; LEN] = [0; LEN];
|
||||
copy_work_buffer(ptr, buf.as_mut_ptr() as *mut u32, LEN as isize);
|
||||
let len = Packet::get_aligned_size(*(ptr as *mut u8));
|
||||
let mut buf: [u8; 1024] = [0; 1024];
|
||||
copy_work_buffer(ptr, buf.as_mut_ptr() as *mut u32, len);
|
||||
let result = f(&buf);
|
||||
(DRTIOAUX[linkidx].aux_rx_present_write)(1);
|
||||
Ok(Some(result?))
|
||||
|
|
|
@ -41,11 +41,9 @@ where F: FnOnce(&[u8]) -> Result<T, Error> {
|
|||
let read_ptr = (DRTIOAUX[linkidx].aux_read_pointer_read)() as usize;
|
||||
let ptr = (DRTIOAUX_MEM[linkidx].base + DRTIOAUX_MEM[linkidx].size / 2 + read_ptr * 0x400) as *mut u32;
|
||||
// work buffer to accomodate axi burst reads
|
||||
// buffer at maximum proto packet size, not maximum gateware supported size
|
||||
// to minimize required copying time
|
||||
const LEN: usize = 512;
|
||||
let mut buf: [u8; LEN] = [0; LEN];
|
||||
copy_work_buffer(ptr, buf.as_mut_ptr() as *mut u32, LEN as isize);
|
||||
let len = Packet::get_aligned_size(*(ptr as *mut u8));
|
||||
let mut buf: [u8; 1024] = [0; 1024];
|
||||
copy_work_buffer(ptr, buf.as_mut_ptr() as *mut u32, len);
|
||||
let result = f(&buf);
|
||||
(DRTIOAUX[linkidx].aux_rx_present_write)(1);
|
||||
Ok(Some(result?))
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
use core_io::{Error as IoError, Read, Write};
|
||||
use io::proto::{ProtoRead, ProtoWrite};
|
||||
|
||||
const MAX_PACKET: usize = 1024;
|
||||
|
||||
// maximum size of arbitrary payloads
|
||||
// used by satellite -> master analyzer, subkernel exceptions
|
||||
pub const SAT_PAYLOAD_MAX_SIZE: usize = /*max size*/512 - /*CRC*/4 - /*packet ID*/1 - /*last*/1 - /*length*/2;
|
||||
pub const SAT_PAYLOAD_MAX_SIZE: usize = /*max size*/MAX_PACKET - /*CRC*/4 - /*packet ID*/1 - /*last*/1 - /*length*/2;
|
||||
// used by DDMA, subkernel program data (need to provide extra ID and destination)
|
||||
pub const MASTER_PAYLOAD_MAX_SIZE: usize = SAT_PAYLOAD_MAX_SIZE - /*source*/1 - /*destination*/1 - /*ID*/4;
|
||||
|
||||
|
@ -962,4 +964,60 @@ impl Packet {
|
|||
_ => true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_aligned_size(first_byte: u8) -> isize {
|
||||
// returns length of the packet given first byte, for work buffer
|
||||
let unaligned_size = match first_byte {
|
||||
0x00 => 1, // Packet::EchoRequest
|
||||
0x01 => 1, // Packet::EchoReply
|
||||
0x02 => 1, // Packet::ResetRequest
|
||||
0x03 => 1, // Packet::ResetAck
|
||||
0x04 => 1, // Packet::TSCAck
|
||||
0x20 => 2, // Packet::DestinationStatusRequest
|
||||
0x21 => 1, // Packet::DestinationDownReply
|
||||
0x22 => 1, // Packet::DestinationOkReply
|
||||
0x23 => 3, // Packet::DestinationSequenceErrorReply
|
||||
0x24 => 3, // Packet::DestinationCollisionReply
|
||||
0x25 => 3, // Packet::DestinationBusyReply
|
||||
0x30 => 34, // Packet::RoutingSetPath
|
||||
0x31 => 2, // Packet::RoutingSetRank
|
||||
0x32 => 1, // Packet::RoutingAck
|
||||
0x40 => 5, // Packet::MonitorRequest
|
||||
0x41 => 9, // Packet::MonitorReply
|
||||
0x50 => 6, // Packet::InjectionRequest
|
||||
0x51 => 5, // Packet::InjectionStatusRequest
|
||||
0x52 => 2, // Packet::InjectionStatusReply
|
||||
0x80 => 3, // Packet::I2cStartRequest
|
||||
0x81 => 3, // Packet::I2cRestartRequest
|
||||
0x82 => 3, // Packet::I2cStopRequest
|
||||
0x83 => 4, // Packet::I2cWriteRequest
|
||||
0x84 => 3, // Packet::I2cWriteReply
|
||||
0x85 => 4, // Packet::I2cReadRequest
|
||||
0x86 => 3, // Packet::I2cReadReply
|
||||
0x87 => 2, // Packet::I2cBasicReply
|
||||
0x88 => 5, // Packet::I2cSwitchSelectRequest
|
||||
0x90 => 7, // Packet::SpiSetConfigRequest
|
||||
0x92 => 7, // Packet::SpiWriteRequest
|
||||
0x93 => 3, // Packet::SpiReadRequest
|
||||
0x94 => 6, // Packet::SpiReadReply
|
||||
0x95 => 2, // Packet::SpiBasicReply
|
||||
0xa0 => 2, // Packet::AnalyzerHeaderRequest
|
||||
0xa1 => 14, // Packet::AnalyzerHeader
|
||||
0xa2 => 2, // Packet::AnalyzerDataRequest
|
||||
0xb1 => 8, // Packet::DmaAddTraceReply
|
||||
0xb2 => 7, // Packet::DmaRemoveTraceRequest
|
||||
0xb3 => 3, // Packet::DmaRemoveTraceReply
|
||||
0xb4 => 15, // Packet::DmaPlaybackRequest
|
||||
0xb5 => 3, // Packet::DmaPlaybackReply
|
||||
0xb6 => 20, // Packet::DmaPlaybackStatus
|
||||
0xc1 => 2, // Packet::SubkernelAddDataReply
|
||||
0xc4 => 8, // Packet::SubkernelLoadRunRequest
|
||||
0xc5 => 3, // Packet::SubkernelLoadRunReply
|
||||
0xc8 => 8, // Packet::SubkernelFinished
|
||||
0xc9 => 2, // Packet::SubkernelExceptionRequest
|
||||
0xcc => 2, // Packet::SubkernelMessageAck
|
||||
_ => MAX_PACKET-4
|
||||
} + 4 /*CRC*/;
|
||||
(unaligned_size + 7) as isize & -8 as isize
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue