1// 2// MsgTrace.c 3// AppleCDC 4// 5// Created by test on 8/19/12. 6// 7// 8 9#include <sys/systm.h> 10#include <sys/malloc.h> 11#include <sys/syslog.h> 12#include <sys/kernel.h> 13#include <sys/fslog.h> 14#include <IOKit/IOLib.h> 15 16 17/* Message Tracing Defines */ 18#define CDC_ASL_MAX_FMT_LEN 1024 19#define CDC_ASL_MSG_LEN " 0" 20#define CDC_ASL_LEVEL_NOTICE 5 21#define CDC_ASL_KEY_DOMAIN "com.apple.message.domain" 22#define CDC_ASL_KEY_SIG "com.apple.message.signature" 23#define CDC_ASL_KEY_SIG2 "com.apple.message.signature2" 24#define CDC_ASL_KEY_SIG3 "com.apple.message.signature3" 25#define CDC_ASL_KEY_SUCCESS "com.apple.message.success" 26#define CDC_ASL_SUCCESS_VALUE 1 27#define CDC_ASL_KEY_VALUE "com.apple.message.value" 28#define CDC_ASL_KEY_MSG "Message" 29 30#define CDC_ASL_DOMAIN "com.apple.commssw.cdc.device" 31#define CDC_LOG_KEY_LEVEL "Level" 32 33/* 34 * Log a message for MessageTracer. 35 */ 36__private_extern__ void cdc_LogToMessageTracer(const char *domain, const char *signature, const char *signature2, const char *signature3, u_int64_t optValue, int optSucceeded) 37{ 38 char *fmt = NULL; /* Format string to use with vaddlog */ 39 char *temp = NULL; 40 41 if ( (domain == NULL) || (signature == NULL) ) { 42 /* domain and signature are required */ 43 return; 44 } 45 46 fmt = (char *)IOMalloc(CDC_ASL_MAX_FMT_LEN); 47 if (fmt == NULL) 48 return; 49 50 temp = (char *)IOMalloc(CDC_ASL_MAX_FMT_LEN); 51 if (temp == NULL) { 52 IOFree(fmt, CDC_ASL_MAX_FMT_LEN); 53 return; 54 } 55 56 if ((signature3 != NULL) && (signature2 != NULL)) 57 { 58 snprintf(fmt, CDC_ASL_MAX_FMT_LEN, "%s [%s %d] [%s %s] [%s %s] [%s %s] [%s %s]", 59 CDC_ASL_MSG_LEN, 60 CDC_LOG_KEY_LEVEL, CDC_ASL_LEVEL_NOTICE, 61 CDC_ASL_KEY_DOMAIN, domain, 62 CDC_ASL_KEY_SIG, signature, 63 CDC_ASL_KEY_SIG2, signature2, 64 CDC_ASL_KEY_SIG3, signature3); 65 } 66 else 67 if ((signature3 == NULL) && (signature2 != NULL)) 68 { 69 snprintf(fmt, CDC_ASL_MAX_FMT_LEN, "%s [%s %d] [%s %s] [%s %s] [%s %s]", 70 CDC_ASL_MSG_LEN, 71 CDC_LOG_KEY_LEVEL, CDC_ASL_LEVEL_NOTICE, 72 CDC_ASL_KEY_DOMAIN, domain, 73 CDC_ASL_KEY_SIG, signature, 74 CDC_ASL_KEY_SIG2, signature2); 75 } 76 else 77 snprintf(fmt, CDC_ASL_MAX_FMT_LEN, "%s [%s %d] [%s %s] [%s %s]", 78 CDC_ASL_MSG_LEN, 79 CDC_LOG_KEY_LEVEL, CDC_ASL_LEVEL_NOTICE, 80 CDC_ASL_KEY_DOMAIN, domain, 81 CDC_ASL_KEY_SIG, signature); 82 83 if (optSucceeded == 1) { 84 /* Optional mark successes as such. (Don't mark failures.) */ 85 snprintf(temp, CDC_ASL_MAX_FMT_LEN, " [%s %d]", CDC_ASL_KEY_SUCCESS, CDC_ASL_SUCCESS_VALUE); 86 strlcat(fmt, temp, CDC_ASL_MAX_FMT_LEN); 87 } 88 89 if (optValue != 0) { 90 /* Optional value */ 91 snprintf(temp, CDC_ASL_MAX_FMT_LEN, " [%s %lld]", CDC_ASL_KEY_VALUE, optValue); 92 strlcat(fmt, temp, CDC_ASL_MAX_FMT_LEN); 93 } 94 95 /* Print the key-value pairs in ASL format */ 96 IOLog("%s\n", fmt); 97 98 if (fmt != NULL) 99 IOFree(fmt, CDC_ASL_MAX_FMT_LEN); 100 if (temp != NULL) 101 IOFree(temp, CDC_ASL_MAX_FMT_LEN); 102} 103 104