11use crate :: mptf:: * ;
2+ use core:: borrow:: { Borrow , BorrowMut } ;
3+ pub use embedded_services:: { comms, ec_type:: message:: AcpiMsgComms } ;
24
35pub const CURRENT_VERSION : u8 = 1 ;
46
5- /// Raw MCTP Payload
6- pub type Payload = ( [ u8 ; 69 ] , usize ) ;
7-
87/// MCTP Payload Error
98pub struct PayloadError {
109 command : u8 ,
@@ -17,16 +16,18 @@ impl PayloadError {
1716 }
1817}
1918
20- impl TryFrom < Payload > for Request {
19+ impl TryFrom < AcpiMsgComms < ' _ > > for Request {
2120 type Error = PayloadError ;
22- fn try_from ( payload : Payload ) -> Result < Self , Self :: Error > {
23- let payload_len = payload. 1 ;
21+ fn try_from ( acpi : AcpiMsgComms < ' _ > ) -> Result < Self , Self :: Error > {
22+ let access = acpi. payload . borrow ( ) ;
23+ let payload: & [ u8 ] = access. borrow ( ) ;
24+
2425 let ( version, _rsvd, _status, command, data) = (
25- payload. 0 [ 0 ] ,
26- payload. 0 [ 1 ] ,
27- payload. 0 [ 2 ] ,
28- payload. 0 [ 3 ] ,
29- & payload. 0 [ 4 ..payload_len] ,
26+ payload[ 0 ] ,
27+ payload[ 1 ] ,
28+ payload[ 2 ] ,
29+ payload[ 3 ] ,
30+ & payload[ 4 ..acpi . payload_len ] ,
3031 ) ;
3132 if version != CURRENT_VERSION {
3233 return Err ( PayloadError :: new ( command, Status :: UnsupportedRevision ) ) ;
@@ -109,15 +110,17 @@ impl TryFrom<Payload> for Request {
109110 }
110111}
111112
112- impl From < Response > for Payload {
113+ impl From < Response > for AcpiMsgComms < ' _ > {
113114 fn from ( response : Response ) -> Self {
114- let mut payload = [ 0 ; 69 ] ;
115- payload[ 0 ] = CURRENT_VERSION ; // Version
116- payload[ 1 ] = 0 ; // Reserved
117- payload[ 2 ] = u8:: from ( response. status ) ; // Status
118- payload[ 3 ] = response. data . into ( ) ; // Command
119-
115+ let mut access = crate :: get_mctp_buf ( ) . borrow_mut ( ) ;
116+ let payload: & mut [ u8 ] = access. borrow_mut ( ) ;
120117 let ( header, data) = payload. split_at_mut ( 4 ) ;
118+
119+ header[ 0 ] = CURRENT_VERSION ; // Version
120+ header[ 1 ] = 0 ; // Reserved
121+ header[ 2 ] = u8:: from ( response. status ) ; // Status
122+ header[ 3 ] = response. data . into ( ) ; // Command
123+
121124 let header_len = header. len ( ) ;
122125
123126 let data_len = match response. data {
@@ -151,17 +154,28 @@ impl From<Response> for Payload {
151154 }
152155 } ;
153156
154- ( payload, header_len + data_len)
157+ AcpiMsgComms {
158+ payload : crate :: context:: mctp_buf:: get ( ) ,
159+ payload_len : header_len + data_len,
160+ endpoint : comms:: EndpointID :: Internal ( comms:: Internal :: Thermal ) ,
161+ }
155162 }
156163}
157164
158- impl From < PayloadError > for Payload {
165+ impl From < PayloadError > for AcpiMsgComms < ' _ > {
159166 fn from ( mctp_error : PayloadError ) -> Self {
160- let mut payload = [ 0 ; 69 ] ;
167+ let mut access = crate :: get_mctp_buf ( ) . borrow_mut ( ) ;
168+ let payload: & mut [ u8 ] = access. borrow_mut ( ) ;
169+
161170 payload[ 0 ] = CURRENT_VERSION ; // Version
162171 payload[ 1 ] = 0 ; // Reserved
163172 payload[ 2 ] = u8:: from ( mctp_error. error ) ; // Status
164173 payload[ 3 ] = mctp_error. command ; // Command
165- ( payload, 4 )
174+
175+ AcpiMsgComms {
176+ payload : crate :: context:: mctp_buf:: get ( ) ,
177+ payload_len : 4 ,
178+ endpoint : comms:: EndpointID :: Internal ( comms:: Internal :: Thermal ) ,
179+ }
166180 }
167181}
0 commit comments