On Fri, Jun 20, 2014 at 6:29 PM, Harold André <harold.andre@gmx.fr> wrote:
Le Fri, 20 Jun 2014 16:36:58 +0530, Pranay Srivastava <pranjas@gmail.com> a écrit :
You say here you will define the function else where if TEST_FUNCTION is defined
#ifdef TEST_FUNCTION void test(int *value); #else static inline void test(int *value) { } #endif
test_ifdef.c:
#include "test_ifdef.h"
But here you do on and define it any way. You must stick to the rule you created earlier. If you are defining it here then this must also be under the test of ifdef TEST_FUNCTION
void test(int *value) { *value += 1; }
Thank you Pranay for your answer. I understand this now.
But when i look at the kernel code, i don't see ifdef test around the definition of the function. For example, i look for the function "hiddev_hid_event":
In include/linux/hiddev.h: #ifdef CONFIG_USB_HIDDEV ... void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value); ... #else ... static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value) { } ... #endif
In drivers/hid/usbhid/hiddev.c: /* * This is where hid.c calls into hiddev to pass an event that occurred over
That's right but the magic doesn't happen here :-) if you see usbhid/Makefile you'll understand what I mean :-). If not , please do ask.
* the interrupt pipe */ void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value) { unsigned type = field->report_type; struct hiddev_usage_ref uref;
uref.report_type = (type == HID_INPUT_REPORT) ? HID_REPORT_TYPE_INPUT : ((type == HID_OUTPUT_REPORT) ? HID_REPORT_TYPE_OUTPUT : ((type == HID_FEATURE_REPORT) ? HID_REPORT_TYPE_FEATURE : 0)); uref.report_id = field->report->id; uref.field_index = field->index; uref.usage_index = (usage - field->usage); uref.usage_code = usage->hid; uref.value = value;
hiddev_send_event(hid, &uref); } EXPORT_SYMBOL_GPL(hiddev_hid_event);
And in drivers/hid/hid-core.c: ...
if (hid->claimed & HID_CLAIMED_INPUT) hidinput_hid_event(hid, field, usage, value); if (hid->claimed & HID_CLAIMED_HIDDEV && interrupt && hid->hiddev_hid_event) hid->hiddev_hid_event(hid, field, usage, value); ...
If i'm right. The function "hiddev_hid_event" is always defined in "hiddev.c" whatever "CONFIG_USB_HIDDEV" is defined or not ? How is it possible ?
-- ---P.K.S