26 if(buffpos + size < LOG_BUFFER_SIZE){ |
26 if(buffpos + size < LOG_BUFFER_SIZE){ |
27 memcpy(&LogBuff[level][buffpos], buf, size); |
27 memcpy(&LogBuff[level][buffpos], buf, size); |
28 }else{ |
28 }else{ |
29 uint32_t remaining = LOG_BUFFER_SIZE - buffpos - 1; |
29 uint32_t remaining = LOG_BUFFER_SIZE - buffpos - 1; |
30 memcpy(&LogBuff[level][buffpos], buf, remaining); |
30 memcpy(&LogBuff[level][buffpos], buf, remaining); |
31 memcpy(LogBuff[level], buf + remaining, size - remaining); |
31 memcpy(LogBuff[level], (char*)buf + remaining, size - remaining); |
32 } |
32 } |
33 } |
33 } |
34 void inline copy_from_log(uint8_t level, uint32_t buffpos, void* buf, uint32_t size){ |
34 void inline copy_from_log(uint8_t level, uint32_t buffpos, void* buf, uint32_t size){ |
35 if(buffpos + size < LOG_BUFFER_SIZE){ |
35 if(buffpos + size < LOG_BUFFER_SIZE){ |
36 memcpy(buf, &LogBuff[level][buffpos], size); |
36 memcpy(buf, &LogBuff[level][buffpos], size); |
37 }else{ |
37 }else{ |
38 uint32_t remaining = LOG_BUFFER_SIZE - buffpos; |
38 uint32_t remaining = LOG_BUFFER_SIZE - buffpos; |
39 memcpy(buf, &LogBuff[level][buffpos], remaining); |
39 memcpy(buf, &LogBuff[level][buffpos], remaining); |
40 memcpy(buf + remaining, LogBuff[level], size - remaining); |
40 memcpy((char*)buf + remaining, LogBuff[level], size - remaining); |
41 } |
41 } |
42 } |
42 } |
43 |
43 |
44 /* Log buffer structure |
44 /* Log buffer structure |
45 |
45 |
82 new_cursor = ((uint64_t)(tail.msgidx + 1)<<32) |
82 new_cursor = ((uint64_t)(tail.msgidx + 1)<<32) |
83 | (uint64_t)((buffpos + size + sizeof(mTail)) & LOG_BUFFER_MASK); |
83 | (uint64_t)((buffpos + size + sizeof(mTail)) & LOG_BUFFER_MASK); |
84 }while(AtomicCompareExchange64( |
84 }while(AtomicCompareExchange64( |
85 (long long*)&LogCursor[level], |
85 (long long*)&LogCursor[level], |
86 (long long)old_cursor, |
86 (long long)old_cursor, |
87 (long long)new_cursor)!=old_cursor); |
87 (long long)new_cursor)!=(long long)old_cursor); |
88 |
88 |
89 copy_to_log(level, buffpos, buf, size); |
89 copy_to_log(level, buffpos, buf, size); |
90 copy_to_log(level, (buffpos + size) & LOG_BUFFER_MASK, &tail, sizeof(mTail)); |
90 copy_to_log(level, (buffpos + size) & LOG_BUFFER_MASK, &tail, sizeof(mTail)); |
91 |
91 |
92 return 1; /* Success */ |
92 return 1; /* Success */ |