forked from M-Labs/artiq
1
0
Fork 0

firmware: simplify drtioaux function names

This commit is contained in:
Sebastien Bourdeauducq 2018-09-14 20:32:09 +08:00
parent ae72e3a51e
commit d19550daf8
6 changed files with 69 additions and 69 deletions

View File

@ -80,7 +80,7 @@ fn receive<F, T>(linkno: u8, f: F) -> Result<Option<T>, Error<!>>
} }
} }
pub fn recv_link(linkno: u8) -> Result<Option<Packet>, Error<!>> { pub fn recv(linkno: u8) -> Result<Option<Packet>, Error<!>> {
if has_rx_error(linkno) { if has_rx_error(linkno) {
return Err(Error::GatewareError) return Err(Error::GatewareError)
} }
@ -104,11 +104,11 @@ pub fn recv_link(linkno: u8) -> Result<Option<Packet>, Error<!>> {
}) })
} }
pub fn recv_timeout_link(linkno: u8, timeout_ms: Option<u64>) -> Result<Packet, Error<!>> { pub fn recv_timeout(linkno: u8, timeout_ms: Option<u64>) -> Result<Packet, Error<!>> {
let timeout_ms = timeout_ms.unwrap_or(10); let timeout_ms = timeout_ms.unwrap_or(10);
let limit = clock::get_ms() + timeout_ms; let limit = clock::get_ms() + timeout_ms;
while clock::get_ms() < limit { while clock::get_ms() < limit {
match recv_link(linkno)? { match recv(linkno)? {
None => (), None => (),
Some(packet) => return Ok(packet), Some(packet) => return Ok(packet),
} }
@ -131,7 +131,7 @@ fn transmit<F>(linkno: u8, f: F) -> Result<(), Error<!>>
} }
} }
pub fn send_link(linkno: u8, packet: &Packet) -> Result<(), Error<!>> { pub fn send(linkno: u8, packet: &Packet) -> Result<(), Error<!>> {
transmit(linkno, |buffer| { transmit(linkno, |buffer| {
let mut writer = Cursor::new(buffer); let mut writer = Cursor::new(buffer);

View File

@ -11,7 +11,7 @@ mod remote_i2c {
use drtioaux; use drtioaux;
fn basic_reply(linkno: u8) -> Result<(), ()> { fn basic_reply(linkno: u8) -> Result<(), ()> {
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::I2cBasicReply { succeeded }) => { Ok(drtioaux::Packet::I2cBasicReply { succeeded }) => {
if succeeded { Ok(()) } else { Err(()) } if succeeded { Ok(()) } else { Err(()) }
} }
@ -31,7 +31,7 @@ mod remote_i2c {
destination: destination, destination: destination,
busno: busno busno: busno
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
basic_reply(linkno) basic_reply(linkno)
@ -42,7 +42,7 @@ mod remote_i2c {
destination: destination, destination: destination,
busno: busno busno: busno
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
basic_reply(linkno) basic_reply(linkno)
@ -53,7 +53,7 @@ mod remote_i2c {
destination: destination, destination: destination,
busno: busno busno: busno
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
basic_reply(linkno) basic_reply(linkno)
@ -65,10 +65,10 @@ mod remote_i2c {
busno: busno, busno: busno,
data: data data: data
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::I2cWriteReply { succeeded, ack }) => { Ok(drtioaux::Packet::I2cWriteReply { succeeded, ack }) => {
if succeeded { Ok(ack) } else { Err(()) } if succeeded { Ok(ack) } else { Err(()) }
} }
@ -89,10 +89,10 @@ mod remote_i2c {
busno: busno, busno: busno,
ack: ack ack: ack
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::I2cReadReply { succeeded, data }) => { Ok(drtioaux::Packet::I2cReadReply { succeeded, data }) => {
if succeeded { Ok(data) } else { Err(()) } if succeeded { Ok(data) } else { Err(()) }
} }
@ -113,7 +113,7 @@ mod remote_spi {
use drtioaux; use drtioaux;
fn basic_reply(linkno: u8) -> Result<(), ()> { fn basic_reply(linkno: u8) -> Result<(), ()> {
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::SpiBasicReply { succeeded }) => { Ok(drtioaux::Packet::SpiBasicReply { succeeded }) => {
if succeeded { Ok(()) } else { Err(()) } if succeeded { Ok(()) } else { Err(()) }
} }
@ -137,7 +137,7 @@ mod remote_spi {
div: div, div: div,
cs: cs cs: cs
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
basic_reply(linkno) basic_reply(linkno)
@ -149,7 +149,7 @@ mod remote_spi {
busno: busno, busno: busno,
data: data data: data
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
basic_reply(linkno) basic_reply(linkno)
@ -160,10 +160,10 @@ mod remote_spi {
destination: destination, destination: destination,
busno: busno busno: busno
}; };
if drtioaux::send_link(linkno, &request).is_err() { if drtioaux::send(linkno, &request).is_err() {
return Err(()) return Err(())
} }
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::SpiReadReply { succeeded, data }) => { Ok(drtioaux::Packet::SpiReadReply { succeeded, data }) => {
if succeeded { Ok(data) } else { Err(()) } if succeeded { Ok(data) } else { Err(()) }
} }

View File

@ -57,14 +57,14 @@ mod remote_moninj {
channel: channel, channel: channel,
probe: probe probe: probe
}; };
match drtioaux::send_link(linkno, &request) { match drtioaux::send(linkno, &request) {
Ok(_) => (), Ok(_) => (),
Err(e) => { Err(e) => {
error!("aux packet error ({})", e); error!("aux packet error ({})", e);
return 0; return 0;
} }
} }
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::MonitorReply { value }) => return value, Ok(drtioaux::Packet::MonitorReply { value }) => return value,
Ok(_) => error!("received unexpected aux packet"), Ok(_) => error!("received unexpected aux packet"),
Err(e) => error!("aux packet error ({})", e) Err(e) => error!("aux packet error ({})", e)
@ -79,7 +79,7 @@ mod remote_moninj {
overrd: overrd, overrd: overrd,
value: value value: value
}; };
match drtioaux::send_link(linkno, &request) { match drtioaux::send(linkno, &request) {
Ok(_) => (), Ok(_) => (),
Err(e) => error!("aux packet error ({})", e) Err(e) => error!("aux packet error ({})", e)
} }
@ -91,14 +91,14 @@ mod remote_moninj {
channel: channel, channel: channel,
overrd: overrd overrd: overrd
}; };
match drtioaux::send_link(linkno, &request) { match drtioaux::send(linkno, &request) {
Ok(_) => (), Ok(_) => (),
Err(e) => { Err(e) => {
error!("aux packet error ({})", e); error!("aux packet error ({})", e);
return 0; return 0;
} }
} }
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::InjectionStatusReply { value }) => return value, Ok(drtioaux::Packet::InjectionStatusReply { value }) => return value,
Ok(_) => error!("received unexpected aux packet"), Ok(_) => error!("received unexpected aux packet"),
Err(e) => error!("aux packet error ({})", e) Err(e) => error!("aux packet error ({})", e)

View File

@ -93,9 +93,9 @@ pub mod drtio {
if count > 200 { if count > 200 {
return 0; return 0;
} }
drtioaux::send_link(linkno, &drtioaux::Packet::EchoRequest).unwrap(); drtioaux::send(linkno, &drtioaux::Packet::EchoRequest).unwrap();
io.sleep(100).unwrap(); io.sleep(100).unwrap();
let pr = drtioaux::recv_link(linkno); let pr = drtioaux::recv(linkno);
match pr { match pr {
Ok(Some(drtioaux::Packet::EchoReply)) => return count, Ok(Some(drtioaux::Packet::EchoReply)) => return count,
_ => {} _ => {}
@ -112,7 +112,7 @@ pub mod drtio {
if clock::get_ms() > max_time { if clock::get_ms() > max_time {
return Err("timeout"); return Err("timeout");
} }
match drtioaux::recv_link(linkno) { match drtioaux::recv(linkno) {
Ok(Some(packet)) => return Ok(packet), Ok(Some(packet)) => return Ok(packet),
Ok(None) => (), Ok(None) => (),
Err(_) => return Err("aux packet error") Err(_) => return Err("aux packet error")
@ -139,7 +139,7 @@ pub mod drtio {
fn load_routing_table(io: &Io, linkno: u8, routing_table: &drtio_routing::RoutingTable) fn load_routing_table(io: &Io, linkno: u8, routing_table: &drtio_routing::RoutingTable)
-> Result<(), &'static str> { -> Result<(), &'static str> {
for i in 0..drtio_routing::DEST_COUNT { for i in 0..drtio_routing::DEST_COUNT {
drtioaux::send_link(linkno, &drtioaux::Packet::RoutingSetPath { drtioaux::send(linkno, &drtioaux::Packet::RoutingSetPath {
destination: i as u8, destination: i as u8,
hops: routing_table.0[i] hops: routing_table.0[i]
}).unwrap(); }).unwrap();
@ -152,7 +152,7 @@ pub mod drtio {
} }
fn set_rank(io: &Io, linkno: u8, rank: u8) -> Result<(), &'static str> { fn set_rank(io: &Io, linkno: u8, rank: u8) -> Result<(), &'static str> {
drtioaux::send_link(linkno, &drtioaux::Packet::RoutingSetRank { drtioaux::send(linkno, &drtioaux::Packet::RoutingSetRank {
rank: rank rank: rank
}).unwrap(); }).unwrap();
let reply = recv_aux_timeout(io, linkno, 200)?; let reply = recv_aux_timeout(io, linkno, 200)?;
@ -176,7 +176,7 @@ pub mod drtio {
} }
fn process_unsolicited_aux(linkno: u8) { fn process_unsolicited_aux(linkno: u8) {
match drtioaux::recv_link(linkno) { match drtioaux::recv(linkno) {
Ok(Some(packet)) => warn!("[LINK#{}] unsolicited aux packet: {:?}", linkno, packet), Ok(Some(packet)) => warn!("[LINK#{}] unsolicited aux packet: {:?}", linkno, packet),
Ok(None) => (), Ok(None) => (),
Err(_) => warn!("[LINK#{}] aux packet error", linkno) Err(_) => warn!("[LINK#{}] aux packet error", linkno)
@ -219,7 +219,7 @@ pub mod drtio {
let linkno = hop - 1; let linkno = hop - 1;
if up_destinations[destination] { if up_destinations[destination] {
if link_up(linkno) { if link_up(linkno) {
drtioaux::send_link(linkno, &drtioaux::Packet::DestinationStatusRequest { drtioaux::send(linkno, &drtioaux::Packet::DestinationStatusRequest {
destination: destination as u8 destination: destination as u8
}).unwrap(); }).unwrap();
match recv_aux_timeout(io, linkno, 200) { match recv_aux_timeout(io, linkno, 200) {
@ -243,7 +243,7 @@ pub mod drtio {
} }
} else { } else {
if link_up(linkno) { if link_up(linkno) {
drtioaux::send_link(linkno, &drtioaux::Packet::DestinationStatusRequest { drtioaux::send(linkno, &drtioaux::Packet::DestinationStatusRequest {
destination: destination as u8 destination: destination as u8
}).unwrap(); }).unwrap();
match recv_aux_timeout(io, linkno, 200) { match recv_aux_timeout(io, linkno, 200) {
@ -309,9 +309,9 @@ pub mod drtio {
for linkno in 0..csr::DRTIO.len() { for linkno in 0..csr::DRTIO.len() {
let linkno = linkno as u8; let linkno = linkno as u8;
if link_up(linkno) { if link_up(linkno) {
drtioaux::send_link(linkno, drtioaux::send(linkno,
&drtioaux::Packet::ResetRequest { phy: false }).unwrap(); &drtioaux::Packet::ResetRequest { phy: false }).unwrap();
match drtioaux::recv_timeout_link(linkno, None) { match drtioaux::recv_timeout(linkno, None) {
Ok(drtioaux::Packet::ResetAck) => (), Ok(drtioaux::Packet::ResetAck) => (),
Ok(_) => error!("[LINK#{}] reset failed, received unexpected aux packet", linkno), Ok(_) => error!("[LINK#{}] reset failed, received unexpected aux packet", linkno),
Err(e) => error!("[LINK#{}] reset failed, aux packet error ({})", linkno, e) Err(e) => error!("[LINK#{}] reset failed, aux packet error ({})", linkno, e)

View File

@ -74,7 +74,7 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
// and u16 otherwise; hence the `as _` conversion. // and u16 otherwise; hence the `as _` conversion.
match packet { match packet {
drtioaux::Packet::EchoRequest => drtioaux::Packet::EchoRequest =>
drtioaux::send_link(0, &drtioaux::Packet::EchoReply), drtioaux::send(0, &drtioaux::Packet::EchoReply),
drtioaux::Packet::ResetRequest { phy } => { drtioaux::Packet::ResetRequest { phy } => {
info!("resetting RTIO"); info!("resetting RTIO");
if phy { if phy {
@ -89,7 +89,7 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
error!("failed to issue RTIO reset ({})", e); error!("failed to issue RTIO reset ({})", e);
} }
} }
drtioaux::send_link(0, &drtioaux::Packet::ResetAck) drtioaux::send(0, &drtioaux::Packet::ResetAck)
}, },
drtioaux::Packet::DestinationStatusRequest { destination } => { drtioaux::Packet::DestinationStatusRequest { destination } => {
@ -109,7 +109,7 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
channel = csr::drtiosat::sequence_error_channel_read(); channel = csr::drtiosat::sequence_error_channel_read();
csr::drtiosat::rtio_error_write(1); csr::drtiosat::rtio_error_write(1);
} }
drtioaux::send_link(0, drtioaux::send(0,
&drtioaux::Packet::DestinationSequenceErrorReply { channel })?; &drtioaux::Packet::DestinationSequenceErrorReply { channel })?;
} else if errors & 2 != 0 { } else if errors & 2 != 0 {
let channel; let channel;
@ -117,7 +117,7 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
channel = csr::drtiosat::collision_channel_read(); channel = csr::drtiosat::collision_channel_read();
csr::drtiosat::rtio_error_write(2); csr::drtiosat::rtio_error_write(2);
} }
drtioaux::send_link(0, drtioaux::send(0,
&drtioaux::Packet::DestinationCollisionReply { channel })?; &drtioaux::Packet::DestinationCollisionReply { channel })?;
} else if errors & 4 != 0 { } else if errors & 4 != 0 {
let channel; let channel;
@ -125,11 +125,11 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
channel = csr::drtiosat::busy_channel_read(); channel = csr::drtiosat::busy_channel_read();
csr::drtiosat::rtio_error_write(4); csr::drtiosat::rtio_error_write(4);
} }
drtioaux::send_link(0, drtioaux::send(0,
&drtioaux::Packet::DestinationBusyReply { channel })?; &drtioaux::Packet::DestinationBusyReply { channel })?;
} }
else { else {
drtioaux::send_link(0, &drtioaux::Packet::DestinationOkReply)?; drtioaux::send(0, &drtioaux::Packet::DestinationOkReply)?;
} }
} }
@ -143,14 +143,14 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
destination: destination destination: destination
}) { }) {
Ok(()) => (), Ok(()) => (),
Err(drtioaux::Error::LinkDown) => drtioaux::send_link(0, &drtioaux::Packet::DestinationDownReply)?, Err(drtioaux::Error::LinkDown) => drtioaux::send(0, &drtioaux::Packet::DestinationDownReply)?,
Err(e) => { Err(e) => {
drtioaux::send_link(0, &drtioaux::Packet::DestinationDownReply)?; drtioaux::send(0, &drtioaux::Packet::DestinationDownReply)?;
error!("aux error when handling destination status request: {}", e); error!("aux error when handling destination status request: {}", e);
}, },
} }
} else { } else {
drtioaux::send_link(0, &drtioaux::Packet::DestinationDownReply)?; drtioaux::send(0, &drtioaux::Packet::DestinationDownReply)?;
} }
} }
} }
@ -166,7 +166,7 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
error!("failed to set path ({})", e); error!("failed to set path ({})", e);
} }
} }
drtioaux::send_link(0, &drtioaux::Packet::RoutingAck) drtioaux::send(0, &drtioaux::Packet::RoutingAck)
} }
#[cfg(has_drtio_routing)] #[cfg(has_drtio_routing)]
drtioaux::Packet::RoutingSetRank { rank } => { drtioaux::Packet::RoutingSetRank { rank } => {
@ -183,16 +183,16 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
info!("rank: {}", rank); info!("rank: {}", rank);
info!("routing table: {}", _routing_table); info!("routing table: {}", _routing_table);
drtioaux::send_link(0, &drtioaux::Packet::RoutingAck) drtioaux::send(0, &drtioaux::Packet::RoutingAck)
} }
#[cfg(not(has_drtio_routing))] #[cfg(not(has_drtio_routing))]
drtioaux::Packet::RoutingSetPath { destination, hops } => { drtioaux::Packet::RoutingSetPath { destination, hops } => {
drtioaux::send_link(0, &drtioaux::Packet::RoutingAck) drtioaux::send(0, &drtioaux::Packet::RoutingAck)
} }
#[cfg(not(has_drtio_routing))] #[cfg(not(has_drtio_routing))]
drtioaux::Packet::RoutingSetRank { rank } => { drtioaux::Packet::RoutingSetRank { rank } => {
drtioaux::send_link(0, &drtioaux::Packet::RoutingAck) drtioaux::send(0, &drtioaux::Packet::RoutingAck)
} }
drtioaux::Packet::MonitorRequest { destination, channel, probe } => { drtioaux::Packet::MonitorRequest { destination, channel, probe } => {
@ -210,7 +210,7 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
value = 0; value = 0;
} }
let reply = drtioaux::Packet::MonitorReply { value: value as u32 }; let reply = drtioaux::Packet::MonitorReply { value: value as u32 };
drtioaux::send_link(0, &reply) drtioaux::send(0, &reply)
}, },
drtioaux::Packet::InjectionRequest { destination, channel, overrd, value } => { drtioaux::Packet::InjectionRequest { destination, channel, overrd, value } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
@ -235,39 +235,39 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
{ {
value = 0; value = 0;
} }
drtioaux::send_link(0, &drtioaux::Packet::InjectionStatusReply { value: value }) drtioaux::send(0, &drtioaux::Packet::InjectionStatusReply { value: value })
}, },
drtioaux::Packet::I2cStartRequest { destination, busno } => { drtioaux::Packet::I2cStartRequest { destination, busno } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
let succeeded = i2c::start(busno).is_ok(); let succeeded = i2c::start(busno).is_ok();
drtioaux::send_link(0, &drtioaux::Packet::I2cBasicReply { succeeded: succeeded }) drtioaux::send(0, &drtioaux::Packet::I2cBasicReply { succeeded: succeeded })
} }
drtioaux::Packet::I2cRestartRequest { destination, busno } => { drtioaux::Packet::I2cRestartRequest { destination, busno } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
let succeeded = i2c::restart(busno).is_ok(); let succeeded = i2c::restart(busno).is_ok();
drtioaux::send_link(0, &drtioaux::Packet::I2cBasicReply { succeeded: succeeded }) drtioaux::send(0, &drtioaux::Packet::I2cBasicReply { succeeded: succeeded })
} }
drtioaux::Packet::I2cStopRequest { destination, busno } => { drtioaux::Packet::I2cStopRequest { destination, busno } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
let succeeded = i2c::stop(busno).is_ok(); let succeeded = i2c::stop(busno).is_ok();
drtioaux::send_link(0, &drtioaux::Packet::I2cBasicReply { succeeded: succeeded }) drtioaux::send(0, &drtioaux::Packet::I2cBasicReply { succeeded: succeeded })
} }
drtioaux::Packet::I2cWriteRequest { destination, busno, data } => { drtioaux::Packet::I2cWriteRequest { destination, busno, data } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
match i2c::write(busno, data) { match i2c::write(busno, data) {
Ok(ack) => drtioaux::send_link(0, Ok(ack) => drtioaux::send(0,
&drtioaux::Packet::I2cWriteReply { succeeded: true, ack: ack }), &drtioaux::Packet::I2cWriteReply { succeeded: true, ack: ack }),
Err(_) => drtioaux::send_link(0, Err(_) => drtioaux::send(0,
&drtioaux::Packet::I2cWriteReply { succeeded: false, ack: false }) &drtioaux::Packet::I2cWriteReply { succeeded: false, ack: false })
} }
} }
drtioaux::Packet::I2cReadRequest { destination, busno, ack } => { drtioaux::Packet::I2cReadRequest { destination, busno, ack } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
match i2c::read(busno, ack) { match i2c::read(busno, ack) {
Ok(data) => drtioaux::send_link(0, Ok(data) => drtioaux::send(0,
&drtioaux::Packet::I2cReadReply { succeeded: true, data: data }), &drtioaux::Packet::I2cReadReply { succeeded: true, data: data }),
Err(_) => drtioaux::send_link(0, Err(_) => drtioaux::send(0,
&drtioaux::Packet::I2cReadReply { succeeded: false, data: 0xff }) &drtioaux::Packet::I2cReadReply { succeeded: false, data: 0xff })
} }
} }
@ -275,21 +275,21 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
drtioaux::Packet::SpiSetConfigRequest { destination, busno, flags, length, div, cs } => { drtioaux::Packet::SpiSetConfigRequest { destination, busno, flags, length, div, cs } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
let succeeded = spi::set_config(busno, flags, length, div, cs).is_ok(); let succeeded = spi::set_config(busno, flags, length, div, cs).is_ok();
drtioaux::send_link(0, drtioaux::send(0,
&drtioaux::Packet::SpiBasicReply { succeeded: succeeded }) &drtioaux::Packet::SpiBasicReply { succeeded: succeeded })
}, },
drtioaux::Packet::SpiWriteRequest { destination, busno, data } => { drtioaux::Packet::SpiWriteRequest { destination, busno, data } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
let succeeded = spi::write(busno, data).is_ok(); let succeeded = spi::write(busno, data).is_ok();
drtioaux::send_link(0, drtioaux::send(0,
&drtioaux::Packet::SpiBasicReply { succeeded: succeeded }) &drtioaux::Packet::SpiBasicReply { succeeded: succeeded })
} }
drtioaux::Packet::SpiReadRequest { destination, busno } => { drtioaux::Packet::SpiReadRequest { destination, busno } => {
forward!(_routing_table, destination, *_rank, _repeaters, &packet); forward!(_routing_table, destination, *_rank, _repeaters, &packet);
match spi::read(busno) { match spi::read(busno) {
Ok(data) => drtioaux::send_link(0, Ok(data) => drtioaux::send(0,
&drtioaux::Packet::SpiReadReply { succeeded: true, data: data }), &drtioaux::Packet::SpiReadReply { succeeded: true, data: data }),
Err(_) => drtioaux::send_link(0, Err(_) => drtioaux::send(0,
&drtioaux::Packet::SpiReadReply { succeeded: false, data: 0 }) &drtioaux::Packet::SpiReadReply { succeeded: false, data: 0 })
} }
} }
@ -304,7 +304,7 @@ fn process_aux_packet(_repeaters: &mut [repeater::Repeater],
fn process_aux_packets(repeaters: &mut [repeater::Repeater], fn process_aux_packets(repeaters: &mut [repeater::Repeater],
routing_table: &mut drtio_routing::RoutingTable, rank: &mut u8) { routing_table: &mut drtio_routing::RoutingTable, rank: &mut u8) {
let result = let result =
drtioaux::recv_link(0).and_then(|packet| { drtioaux::recv(0).and_then(|packet| {
if let Some(packet) = packet { if let Some(packet) = packet {
process_aux_packet(repeaters, routing_table, rank, packet) process_aux_packet(repeaters, routing_table, rank, packet)
} else { } else {
@ -463,7 +463,7 @@ pub extern fn main() -> i32 {
error!("failed to sync TSC ({})", e); error!("failed to sync TSC ({})", e);
} }
} }
if let Err(e) = drtioaux::send_link(0, &drtioaux::Packet::TSCAck) { if let Err(e) = drtioaux::send(0, &drtioaux::Packet::TSCAck) {
error!("aux packet error: {}", e); error!("aux packet error: {}", e);
} }
} }

View File

@ -51,7 +51,7 @@ impl Repeater {
} }
RepeaterState::SendPing { ping_count } => { RepeaterState::SendPing { ping_count } => {
if rep_link_rx_up(self.repno) { if rep_link_rx_up(self.repno) {
drtioaux::send_link(self.auxno, &drtioaux::Packet::EchoRequest).unwrap(); drtioaux::send(self.auxno, &drtioaux::Packet::EchoRequest).unwrap();
self.state = RepeaterState::WaitPingReply { self.state = RepeaterState::WaitPingReply {
ping_count: ping_count + 1, ping_count: ping_count + 1,
timeout: clock::get_ms() + 100 timeout: clock::get_ms() + 100
@ -63,7 +63,7 @@ impl Repeater {
} }
RepeaterState::WaitPingReply { ping_count, timeout } => { RepeaterState::WaitPingReply { ping_count, timeout } => {
if rep_link_rx_up(self.repno) { if rep_link_rx_up(self.repno) {
if let Ok(Some(drtioaux::Packet::EchoReply)) = drtioaux::recv_link(self.auxno) { if let Ok(Some(drtioaux::Packet::EchoReply)) = drtioaux::recv(self.auxno) {
info!("[REP#{}] remote replied after {} packets", self.repno, ping_count); info!("[REP#{}] remote replied after {} packets", self.repno, ping_count);
self.state = RepeaterState::Up; self.state = RepeaterState::Up;
if let Err(e) = self.sync_tsc() { if let Err(e) = self.sync_tsc() {
@ -113,7 +113,7 @@ impl Repeater {
} }
fn process_unsolicited_aux(&self) { fn process_unsolicited_aux(&self) {
match drtioaux::recv_link(self.auxno) { match drtioaux::recv(self.auxno) {
Ok(Some(packet)) => warn!("[REP#{}] unsolicited aux packet: {:?}", self.repno, packet), Ok(Some(packet)) => warn!("[REP#{}] unsolicited aux packet: {:?}", self.repno, packet),
Ok(None) => (), Ok(None) => (),
Err(_) => warn!("[REP#{}] aux packet error", self.repno) Err(_) => warn!("[REP#{}] aux packet error", self.repno)
@ -162,7 +162,7 @@ impl Repeater {
if clock::get_ms() > max_time { if clock::get_ms() > max_time {
return Err(drtioaux::Error::TimedOut); return Err(drtioaux::Error::TimedOut);
} }
match drtioaux::recv_link(self.auxno) { match drtioaux::recv(self.auxno) {
Ok(Some(packet)) => return Ok(packet), Ok(Some(packet)) => return Ok(packet),
Ok(None) => (), Ok(None) => (),
Err(e) => return Err(e) Err(e) => return Err(e)
@ -174,9 +174,9 @@ impl Repeater {
if self.state != RepeaterState::Up { if self.state != RepeaterState::Up {
return Err(drtioaux::Error::LinkDown); return Err(drtioaux::Error::LinkDown);
} }
drtioaux::send_link(self.auxno, request).unwrap(); drtioaux::send(self.auxno, request).unwrap();
let reply = self.recv_aux_timeout(200)?; let reply = self.recv_aux_timeout(200)?;
drtioaux::send_link(0, &reply).unwrap(); drtioaux::send(0, &reply).unwrap();
Ok(()) Ok(())
} }
@ -206,7 +206,7 @@ impl Repeater {
return Ok(()); return Ok(());
} }
drtioaux::send_link(self.auxno, &drtioaux::Packet::RoutingSetPath { drtioaux::send(self.auxno, &drtioaux::Packet::RoutingSetPath {
destination: destination, destination: destination,
hops: *hops hops: *hops
}).unwrap(); }).unwrap();
@ -228,7 +228,7 @@ impl Repeater {
if self.state != RepeaterState::Up { if self.state != RepeaterState::Up {
return Ok(()); return Ok(());
} }
drtioaux::send_link(self.auxno, &drtioaux::Packet::RoutingSetRank { drtioaux::send(self.auxno, &drtioaux::Packet::RoutingSetRank {
rank: rank rank: rank
}).unwrap(); }).unwrap();
let reply = self.recv_aux_timeout(200)?; let reply = self.recv_aux_timeout(200)?;
@ -242,7 +242,7 @@ impl Repeater {
if self.state != RepeaterState::Up { if self.state != RepeaterState::Up {
return Ok(()); return Ok(());
} }
drtioaux::send_link(self.auxno, &drtioaux::Packet::ResetRequest { drtioaux::send(self.auxno, &drtioaux::Packet::ResetRequest {
phy: phy phy: phy
}).unwrap(); }).unwrap();
let reply = self.recv_aux_timeout(200)?; let reply = self.recv_aux_timeout(200)?;