/* *------------------------------------------------------------------ * cj.h * * Copyright (c) 2013 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *------------------------------------------------------------------ */ #ifndef __included_cj_h__ #define __included_cj_h__ typedef struct { f64 time; u32 cpu; u32 type; u64 data[2]; } cj_record_t; typedef struct { volatile u64 tail; cj_record_t *records; u32 num_records; volatile u32 enable; vlib_main_t *vlib_main; } cj_main_t; void cj_log (u32 type, void *data0, void *data1); /* * Supply in application main, so we can log from any library... * Declare a weak reference in the library, off you go. */ #define DECLARE_CJ_GLOBAL_LOG \ void cj_global_log (unsigned type, void * data0, void * data1) \ __attribute__ ((weak)); \ \ unsigned __cj_type; \ void * __cj_data0; \ void * __cj_data1; \ \ void \ cj_global_log (unsigned type, void * data0, void * data1) \ { \ __cj_type = type; \ __cj_data0 = data0; \ __cj_data1 = data1; \ } #define CJ_GLOBAL_LOG_PROTOTYPE void cj_global_log (unsigned type, void *data0, void *data1) __attribute__ ((weak)); void cj_stop (void); #endif /* __included_cj_h__ */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */