|
67 | 67 | #define APPLE_RTKIT_SYSLOG_MSG_SIZE GENMASK_ULL(31, 24) |
68 | 68 |
|
69 | 69 | #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, 48) |
| 72 | +#define APPLE_RTKIT_OSLOG_IOVA GENMASK_ULL(47, 0) |
72 | 73 |
|
73 | 74 | #define APPLE_RTKIT_MIN_SUPPORTED_VERSION 11 |
74 | 75 | #define APPLE_RTKIT_MAX_SUPPORTED_VERSION 12 |
@@ -260,10 +261,15 @@ static int apple_rtkit_common_rx_get_buffer(struct apple_rtkit *rtk, |
260 | 261 | struct apple_rtkit_shmem *buffer, |
261 | 262 | u8 ep, u64 msg) |
262 | 263 | { |
263 | | - size_t n_4kpages = FIELD_GET(APPLE_RTKIT_BUFFER_REQUEST_SIZE, msg); |
| 264 | + size_t n_4kpages; |
264 | 265 | u64 reply; |
265 | 266 | int err; |
266 | 267 |
|
| 268 | + if (ep == APPLE_RTKIT_EP_OSLOG) |
| 269 | + n_4kpages = FIELD_GET(APPLE_RTKIT_OSLOG_SIZE, msg); |
| 270 | + else |
| 271 | + n_4kpages = FIELD_GET(APPLE_RTKIT_BUFFER_REQUEST_SIZE, msg); |
| 272 | + |
267 | 273 | buffer->buffer = NULL; |
268 | 274 | buffer->iomem = NULL; |
269 | 275 | buffer->is_mapped = false; |
@@ -293,11 +299,20 @@ static int apple_rtkit_common_rx_get_buffer(struct apple_rtkit *rtk, |
293 | 299 | } |
294 | 300 |
|
295 | 301 | 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, n_4kpages); |
| 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, n_4kpages); |
| 313 | + reply |= FIELD_PREP(APPLE_RTKIT_BUFFER_REQUEST_IOVA, |
| 314 | + buffer->iova); |
| 315 | + } |
301 | 316 | apple_rtkit_send_message(rtk, ep, reply, NULL, false); |
302 | 317 | } |
303 | 318 |
|
@@ -494,25 +509,18 @@ static void apple_rtkit_syslog_rx(struct apple_rtkit *rtk, u64 msg) |
494 | 509 | } |
495 | 510 | } |
496 | 511 |
|
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 | | - |
506 | 512 | static void apple_rtkit_oslog_rx(struct apple_rtkit *rtk, u64 msg) |
507 | 513 | { |
508 | 514 | u8 type = FIELD_GET(APPLE_RTKIT_OSLOG_TYPE, msg); |
509 | 515 |
|
510 | 516 | switch (type) { |
511 | | - case APPLE_RTKIT_OSLOG_INIT: |
512 | | - apple_rtkit_oslog_rx_init(rtk, msg); |
| 517 | + case APPLE_RTKIT_OSLOG_BUFFER_REQUEST: |
| 518 | + apple_rtkit_common_rx_get_buffer(rtk, &rtk->oslog_buffer, |
| 519 | + APPLE_RTKIT_EP_OSLOG, msg); |
513 | 520 | break; |
514 | 521 | default: |
515 | | - dev_warn(rtk->dev, "RTKit: Unknown oslog message: %llx\n", msg); |
| 522 | + dev_warn(rtk->dev, "RTKit: Unknown oslog message: %llx\n", |
| 523 | + msg); |
516 | 524 | } |
517 | 525 | } |
518 | 526 |
|
@@ -761,6 +769,7 @@ int apple_rtkit_reinit(struct apple_rtkit *rtk) |
761 | 769 |
|
762 | 770 | apple_rtkit_free_buffer(rtk, &rtk->ioreport_buffer); |
763 | 771 | apple_rtkit_free_buffer(rtk, &rtk->crashlog_buffer); |
| 772 | + apple_rtkit_free_buffer(rtk, &rtk->oslog_buffer); |
764 | 773 | apple_rtkit_free_buffer(rtk, &rtk->syslog_buffer); |
765 | 774 |
|
766 | 775 | kfree(rtk->syslog_msg_buffer); |
@@ -948,6 +957,7 @@ void apple_rtkit_free(struct apple_rtkit *rtk) |
948 | 957 |
|
949 | 958 | apple_rtkit_free_buffer(rtk, &rtk->ioreport_buffer); |
950 | 959 | apple_rtkit_free_buffer(rtk, &rtk->crashlog_buffer); |
| 960 | + apple_rtkit_free_buffer(rtk, &rtk->oslog_buffer); |
951 | 961 | apple_rtkit_free_buffer(rtk, &rtk->syslog_buffer); |
952 | 962 |
|
953 | 963 | kfree(rtk->syslog_msg_buffer); |
|
0 commit comments