6767#define APPLE_RTKIT_SYSLOG_MSG_SIZE GENMASK_ULL(31, 24)
6868
6969#define APPLE_RTKIT_OSLOG_TYPE GENMASK_ULL(63, 56)
70- #define APPLE_RTKIT_OSLOG_INIT 1
71- #define APPLE_RTKIT_OSLOG_ACK 3
70+ #define APPLE_RTKIT_OSLOG_BUFFER_REQUEST 1
71+ #define APPLE_RTKIT_OSLOG_SIZE GENMASK_ULL(55, 36)
72+ #define APPLE_RTKIT_OSLOG_IOVA GENMASK_ULL(35, 0)
7273
7374#define APPLE_RTKIT_MIN_SUPPORTED_VERSION 11
7475#define APPLE_RTKIT_MAX_SUPPORTED_VERSION 12
@@ -260,15 +261,20 @@ static int apple_rtkit_common_rx_get_buffer(struct apple_rtkit *rtk,
260261 struct apple_rtkit_shmem * buffer ,
261262 u8 ep , u64 msg )
262263{
263- size_t n_4kpages = FIELD_GET (APPLE_RTKIT_BUFFER_REQUEST_SIZE , msg );
264264 u64 reply ;
265265 int err ;
266266
267+ if (ep == APPLE_RTKIT_EP_OSLOG ) {
268+ buffer -> size = FIELD_GET (APPLE_RTKIT_OSLOG_SIZE , msg );
269+ buffer -> iova = FIELD_GET (APPLE_RTKIT_OSLOG_IOVA , msg ) << 12 ;
270+ } else {
271+ buffer -> size = FIELD_GET (APPLE_RTKIT_BUFFER_REQUEST_SIZE , msg ) << 12 ;
272+ buffer -> iova = FIELD_GET (APPLE_RTKIT_BUFFER_REQUEST_IOVA , msg );
273+ }
274+
267275 buffer -> buffer = NULL ;
268276 buffer -> iomem = NULL ;
269277 buffer -> is_mapped = false;
270- buffer -> iova = FIELD_GET (APPLE_RTKIT_BUFFER_REQUEST_IOVA , msg );
271- buffer -> size = n_4kpages << 12 ;
272278
273279 dev_dbg (rtk -> dev , "RTKit: buffer request for 0x%zx bytes at %pad\n" ,
274280 buffer -> size , & buffer -> iova );
@@ -293,11 +299,21 @@ static int apple_rtkit_common_rx_get_buffer(struct apple_rtkit *rtk,
293299 }
294300
295301 if (!buffer -> is_mapped ) {
296- reply = FIELD_PREP (APPLE_RTKIT_SYSLOG_TYPE ,
297- APPLE_RTKIT_BUFFER_REQUEST );
298- reply |= FIELD_PREP (APPLE_RTKIT_BUFFER_REQUEST_SIZE , n_4kpages );
299- reply |= FIELD_PREP (APPLE_RTKIT_BUFFER_REQUEST_IOVA ,
300- buffer -> iova );
302+ /* oslog uses different fields */
303+ if (ep == APPLE_RTKIT_EP_OSLOG ) {
304+ reply = FIELD_PREP (APPLE_RTKIT_OSLOG_TYPE ,
305+ APPLE_RTKIT_OSLOG_BUFFER_REQUEST );
306+ reply |= FIELD_PREP (APPLE_RTKIT_OSLOG_SIZE , buffer -> size );
307+ reply |= FIELD_PREP (APPLE_RTKIT_OSLOG_IOVA ,
308+ buffer -> iova >> 12 );
309+ } else {
310+ reply = FIELD_PREP (APPLE_RTKIT_SYSLOG_TYPE ,
311+ APPLE_RTKIT_BUFFER_REQUEST );
312+ reply |= FIELD_PREP (APPLE_RTKIT_BUFFER_REQUEST_SIZE ,
313+ buffer -> size >> 12 );
314+ reply |= FIELD_PREP (APPLE_RTKIT_BUFFER_REQUEST_IOVA ,
315+ buffer -> iova );
316+ }
301317 apple_rtkit_send_message (rtk , ep , reply , NULL , false);
302318 }
303319
@@ -494,25 +510,18 @@ static void apple_rtkit_syslog_rx(struct apple_rtkit *rtk, u64 msg)
494510 }
495511}
496512
497- static void apple_rtkit_oslog_rx_init (struct apple_rtkit * rtk , u64 msg )
498- {
499- u64 ack ;
500-
501- dev_dbg (rtk -> dev , "RTKit: oslog init: msg: 0x%llx\n" , msg );
502- ack = FIELD_PREP (APPLE_RTKIT_OSLOG_TYPE , APPLE_RTKIT_OSLOG_ACK );
503- apple_rtkit_send_message (rtk , APPLE_RTKIT_EP_OSLOG , ack , NULL , false);
504- }
505-
506513static void apple_rtkit_oslog_rx (struct apple_rtkit * rtk , u64 msg )
507514{
508515 u8 type = FIELD_GET (APPLE_RTKIT_OSLOG_TYPE , msg );
509516
510517 switch (type ) {
511- case APPLE_RTKIT_OSLOG_INIT :
512- apple_rtkit_oslog_rx_init (rtk , msg );
518+ case APPLE_RTKIT_OSLOG_BUFFER_REQUEST :
519+ apple_rtkit_common_rx_get_buffer (rtk , & rtk -> oslog_buffer ,
520+ APPLE_RTKIT_EP_OSLOG , msg );
513521 break ;
514522 default :
515- dev_warn (rtk -> dev , "RTKit: Unknown oslog message: %llx\n" , msg );
523+ dev_warn (rtk -> dev , "RTKit: Unknown oslog message: %llx\n" ,
524+ msg );
516525 }
517526}
518527
@@ -729,6 +738,7 @@ int apple_rtkit_reinit(struct apple_rtkit *rtk)
729738
730739 apple_rtkit_free_buffer (rtk , & rtk -> ioreport_buffer );
731740 apple_rtkit_free_buffer (rtk , & rtk -> crashlog_buffer );
741+ apple_rtkit_free_buffer (rtk , & rtk -> oslog_buffer );
732742 apple_rtkit_free_buffer (rtk , & rtk -> syslog_buffer );
733743
734744 kfree (rtk -> syslog_msg_buffer );
@@ -916,6 +926,7 @@ void apple_rtkit_free(struct apple_rtkit *rtk)
916926
917927 apple_rtkit_free_buffer (rtk , & rtk -> ioreport_buffer );
918928 apple_rtkit_free_buffer (rtk , & rtk -> crashlog_buffer );
929+ apple_rtkit_free_buffer (rtk , & rtk -> oslog_buffer );
919930 apple_rtkit_free_buffer (rtk , & rtk -> syslog_buffer );
920931
921932 kfree (rtk -> syslog_msg_buffer );
0 commit comments