[PATCH 1/5]:hidbus prototype 070409:core headers
"Li Yu" <[email protected]>
| Newsgroups | gmane.linux.usb.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, Jiri. These are the splited patches of hid bus prototype 070409. I remember I posted them in attachment form ago ;) Now they are splited in some separable patches. I am afraid I can not receive in Labor Day. Good luck. - Li Yu Signed-off-by: Li Yu <[email protected]> diff -Naurp linux-2.6.21-rc6-mm1.orig/include/linux/hiddev.h linux-2.6.21-rc6-mm1.new/include/linux/hiddev.h --- linux-2.6.21-rc6-mm1.orig/include/linux/hiddev.h 2007-02-05 02:44:54.000000000 +0800 +++ linux-2.6.21-rc6-mm1.new/include/linux/hiddev.h 2007-04-11 09:05:29.000000000 +0800 @@ -218,23 +218,5 @@ struct hid_usage; struct hid_field; struct hid_report; -#ifdef CONFIG_USB_HIDDEV -int hiddev_connect(struct hid_device *); -void hiddev_disconnect(struct hid_device *); -void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, - struct hid_usage *usage, __s32 value); -void hiddev_report_event(struct hid_device *hid, struct hid_report *report); -int __init hiddev_init(void); -void hiddev_exit(void); -#else -static inline int hiddev_connect(struct hid_device *hid) { return -1; } -static inline void hiddev_disconnect(struct hid_device *hid) { } -static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field, - struct hid_usage *usage, __s32 value) { } -static inline void hiddev_report_event(struct hid_device *hid, struct hid_report *report) { } -static inline int hiddev_init(void) { return 0; } -static inline void hiddev_exit(void) { } -#endif - #endif #endif diff -Naurp linux-2.6.21-rc6-mm1.orig/include/linux/hid.h linux-2.6.21-rc6-mm1.new/include/linux/hid.h --- linux-2.6.21-rc6-mm1.orig/include/linux/hid.h 2007-04-10 09:16:50.000000000 +0800 +++ linux-2.6.21-rc6-mm1.new/include/linux/hid.h 2007-04-16 13:09:51.000000000 +0800 @@ -35,6 +35,7 @@ #include <linux/timer.h> #include <linux/workqueue.h> #include <linux/input.h> +#include <asm/bitops.h> /* * USB HID (Human Interface Device) interface class code @@ -270,6 +271,7 @@ struct hid_item { #define HID_QUIRK_LOGITECH_DESCRIPTOR 0x00100000 #define HID_QUIRK_DUPLICATE_USAGES 0x00200000 #define HID_QUIRK_RESET_LEDS 0x00400000 +#define HID_QUIRK_SKIP 0x80000000 /* * This is the global environment of the parser. This information is @@ -403,55 +405,112 @@ struct hid_input { struct input_dev *input; }; -struct hid_device { /* device report descriptor */ +struct hid_driver; +struct hid_device { /* device report descriptor */ + struct device device; + struct module *module; + struct hid_driver *driver; + unsigned long sticky_driver; + unsigned long flags; + void *tl_data; /* Transports layer data. */ + void *hidraw; /* It will be remove soon. */ + int quirks; + __u8 *rdesc; unsigned rsize; - struct hid_collection *collection; /* List of HID collections */ - unsigned collection_size; /* Number of allocated hid_collections */ - unsigned maxcollection; /* Number of parsed collections */ - unsigned maxapplication; /* Number of applications */ - unsigned short bus; /* BUS ID */ - unsigned short vendor; /* Vendor ID */ - unsigned short product; /* Product ID */ - unsigned version; /* HID version */ - unsigned country; /* HID country */ + struct hid_collection *collection; /* List of HID collections */ + unsigned collection_size; /* Number of allocated hid_collections */ + unsigned maxcollection; /* Number of parsed collections */ + unsigned maxapplication; /* Number of applications */ + unsigned short bus; /* BUS ID */ + unsigned short vendor; /* Vendor ID */ + unsigned short product; /* Product ID */ + unsigned version; /* HID version */ + unsigned country; /* HID country */ + int open; /* Is the device open by anyone? */ struct hid_report_enum report_enum[HID_REPORT_TYPES]; + void *private; /* Data for specific driver */ - struct device *dev; /* device */ - - unsigned claimed; /* Claimed by hidinput, hiddev? */ - unsigned quirks; /* Various quirks the device can pull on us */ + void (*shutdown)(struct hid_device *dev); - struct list_head inputs; /* The list of inputs */ - void *hiddev; /* The hiddev structure */ - void *hidraw; - int minor; /* Hiddev minor number */ - - wait_queue_head_t wait; /* For sleeping */ - - int open; /* is the device open by anyone? */ - char name[128]; /* Device name */ - char phys[64]; /* Device physical location */ - char uniq[64]; /* Device unique identifier (serial #) */ - - void *driver_data; - - /* device-specific function pointers */ - int (*hidinput_input_event) (struct input_dev *, unsigned int, unsigned int, int); - int (*hid_open) (struct hid_device *); - void (*hid_close) (struct hid_device *); - - /* hiddev event handler */ - void (*hiddev_hid_event) (struct hid_device *, struct hid_field *field, - struct hid_usage *, __s32); - void (*hiddev_report_event) (struct hid_device *, struct hid_report *); - - /* handler for raw output data, used by hidraw */ - int (*hid_output_raw_report) (struct hid_device *, __u8 *, size_t); -#ifdef CONFIG_USB_HIDINPUT_POWERBOOK - unsigned long pb_pressed_fn[NBITS(KEY_MAX)]; - unsigned long pb_pressed_numlock[NBITS(KEY_MAX)]; -#endif + struct device *dev; /* Physical device(USB, Bluetooth, etc.) */ + char name[128]; /* Device name */ + char phys[64]; /* Device physical location */ + char uniq[64]; /* Device unique identifier (serial #) */ + struct list_head inputs; /* The list of inputs */ +}; +#define to_hid_device(dev) container_of(dev, struct hid_device, device); + +#define HID_IGNORE_VENDOR 1 +#define HID_IGNORE_PRODUCT 2 +#define HID_IGNORE_VERSION 4 +#define HID_IGNORE_COUNTRY 8 + +struct skip_id { + struct list_head node; + unsigned int vendor; + unsigned int product; + unsigned int version; + unsigned int country; + unsigned int mask; +}; + +struct hid_hook; +struct hid_driver { + char name[64]; + char version[64]; + struct module *module; + struct device_driver driver; + unsigned long flags; + + unsigned short bus; + struct hid_hook *hook; + struct list_head skip_table; + + void *private; + + int (*match)(struct hid_driver *, struct hid_device *); + int (*probe)(struct hid_device *); + void (*remove)(struct hid_device *); + void (*shutdown)(struct hid_device *); + int (*event)(struct input_dev *, unsigned int, unsigned int, int); + int (*open)(struct hid_device *); + void (*close)(struct hid_device *); +}; +#define to_hid_driver(drv) container_of(drv, struct hid_driver, driver); + +struct hid_transport { + struct module *module; + unsigned short bus; + void (*update_busid)(struct hid_device *); + int (*event)(struct input_dev *, unsigned int, unsigned int, int); + int (*open)(struct hid_device *); + void (*close)(struct hid_device *); + int (*raw_report)(struct hid_device *, u8 *, size_t); + void *private; +}; + +struct usage_page_block; +struct hid_hook { + void (*setup_usage)(struct hid_field*, struct hid_usage*); + void (*register_inputdev)(struct input_dev*); + int (*hid_event)(struct hid_field*, struct hid_usage*, __s32, int); + int (*pre_report_event)(struct hid_report*, int); + int (*report_event)(struct hid_report*, int); + int (*raw_event)(struct hid_device *, int, u8 *, int, int); + int (*raw_report)(struct hid_device *, u8 *, size_t); + struct usage_page_block *usage_page_table; +}; + +struct usage_block { + int usage; /* usage code */ + int event; /* input event type, e.g. EV_KEY. */ + int code; /* input subsystem code, e.g. KEY_F1. */ +}; + +struct usage_page_block { + int page; /* usage page code */ + struct usage_block *usage_blockes; }; #define HID_GLOBAL_STACK_SIZE 4 @@ -500,22 +559,38 @@ void hid_output_report(struct hid_report void hid_free_device(struct hid_device *device); struct hid_device *hid_parse_report(__u8 *start, unsigned size); -#ifdef CONFIG_HID_FF -int hid_ff_init(struct hid_device *hid); - -int hid_lgff_init(struct hid_device *hid); -int hid_plff_init(struct hid_device *hid); -int hid_tmff_init(struct hid_device *hid); -int hid_zpff_init(struct hid_device *hid); -#ifdef CONFIG_HID_PID -int hid_pidff_init(struct hid_device *hid); -#else -static inline int hid_pidff_init(struct hid_device *hid) { return -ENODEV; } -#endif +#define hid_flag_accessor(DD, name, FLAG) \ +static inline void set_##DD##_##name(struct DD* dd)\ +{\ + set_bit(FLAG, &dd->flags);\ +}\ +static inline void clear_##DD##_##name(struct DD* dd)\ +{\ + clear_bit(FLAG, &dd->flags);\ +}\ +static inline int is_##DD##_##name(struct DD* dd)\ +{\ + return test_bit(FLAG, &dd->flags);\ +} + +/* set_hid_driver_sticky()/is_hid_driver_sticky() */ +#define HID_DRV_STICKY (0x1UL) +hid_flag_accessor(hid_driver, sticky, HID_DRV_STICKY) + +static inline struct hid_device *hid_new_device(int gfp) +{ + return kzalloc(sizeof(struct hid_device), gfp); +} + +extern int hid_register_transport(struct hid_transport *); +extern void hid_unregister_transport(struct hid_transport *); +extern int hid_register_device(struct hid_device *); +extern void hid_unregister_device(struct hid_device *); +extern int hid_register_driver(struct hid_driver *); +extern void hid_unregister_driver(struct hid_driver *); +extern int hid_open(struct hid_device *); +extern void hid_close(struct hid_device *); -#else -static inline int hid_ff_init(struct hid_device *hid) { return -1; } -#endif #ifdef DEBUG #define dbg(format, arg...) printk(KERN_DEBUG "%s: " format "\n" , \ __FILE__ , ## arg) diff -Naurp linux-2.6.21-rc6-mm1.orig/include/linux/hidraw.h linux-2.6.21-rc6-mm1.new/include/linux/hidraw.h --- linux-2.6.21-rc6-mm1.orig/include/linux/hidraw.h 2007-04-10 09:16:50.000000000 +0800 +++ linux-2.6.21-rc6-mm1.new/include/linux/hidraw.h 2007-04-11 09:05:31.000000000 +0800 @@ -67,20 +67,6 @@ struct hidraw_list { struct mutex read_mutex; }; -#ifdef CONFIG_HIDRAW -int hidraw_init(void); -void hidraw_exit(void); -void hidraw_report_event(struct hid_device *, u8 *, int); -int hidraw_connect(struct hid_device *); -void hidraw_disconnect(struct hid_device *); -#else -static inline int hidraw_init(void) { return 0; } -static inline void hidraw_exit(void) { } -static inline void hidraw_report_event(struct hid_device *hid, u8 *data, int len) { } -static inline int hidraw_connect(struct hid_device *hid) { return -1; } -static inline void hidraw_disconnect(struct hid_device *hid) { } -#endif - #endif #endif diff -Naurp linux-2.6.21-rc6-mm1.orig/include/linux/input.h linux-2.6.21-rc6-mm1.new/include/linux/input.h --- linux-2.6.21-rc6-mm1.orig/include/linux/input.h 2007-04-10 09:16:50.000000000 +0800 +++ linux-2.6.21-rc6-mm1.new/include/linux/input.h 2007-04-10 10:24:51.000000000 +0800 @@ -679,7 +679,7 @@ struct input_absinfo { #define BUS_I2C 0x18 #define BUS_HOST 0x19 #define BUS_GSC 0x1A - +#define BUS_MAX (BUS_GSC+1) /* * Values describing the status of a force-feedback effect */ ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ [email protected] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel