Le Fri, 20 Jun 2014 16:36:58 +0530,
Pranay Srivastava <[email protected]> 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
 * 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 ?

_______________________________________________
Kernelnewbies mailing list
[email protected]
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to