linux/drivers/uwb/i1480/i1480-est.c
<<
>>
Prefs
   1/*
   2 * Intel Wireless UWB Link 1480
   3 * Event Size tables for Wired Adaptors
   4 *
   5 * Copyright (C) 2005-2006 Intel Corporation
   6 * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License version
  10 * 2 as published by the Free Software Foundation.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  20 * 02110-1301, USA.
  21 *
  22 *
  23 * FIXME: docs
  24 */
  25
  26#include <linux/init.h>
  27#include <linux/module.h>
  28#include <linux/usb.h>
  29#include <linux/uwb.h>
  30#include "dfu/i1480-dfu.h"
  31
  32
  33/** Event size table for wEvents 0x00XX */
  34static struct uwb_est_entry i1480_est_fd00[] = {
  35        /* Anybody expecting this response has to use
  36         * neh->extra_size to specify the real size that will
  37         * come back. */
  38        [i1480_EVT_CONFIRM] = { .size = sizeof(struct i1480_evt_confirm) },
  39        [i1480_CMD_SET_IP_MAS] = { .size = sizeof(struct i1480_evt_confirm) },
  40#ifdef i1480_RCEB_EXTENDED
  41        [0x09] = {
  42                .size = sizeof(struct i1480_rceb),
  43                .offset = 1 + offsetof(struct i1480_rceb, wParamLength),
  44        },
  45#endif
  46};
  47
  48/** Event size table for wEvents 0x01XX */
  49static struct uwb_est_entry i1480_est_fd01[] = {
  50        [0xff & i1480_EVT_RM_INIT_DONE] = { .size = sizeof(struct i1480_rceb) },
  51        [0xff & i1480_EVT_DEV_ADD] = { .size = sizeof(struct i1480_rceb) + 9 },
  52        [0xff & i1480_EVT_DEV_RM] = { .size = sizeof(struct i1480_rceb) + 9 },
  53        [0xff & i1480_EVT_DEV_ID_CHANGE] = {
  54                .size = sizeof(struct i1480_rceb) + 2 },
  55};
  56
  57static int __init i1480_est_init(void)
  58{
  59        int result = uwb_est_register(i1480_CET_VS1, 0x00, 0x8086, 0x0c3b,
  60                                      i1480_est_fd00,
  61                                      ARRAY_SIZE(i1480_est_fd00));
  62        if (result < 0) {
  63                printk(KERN_ERR "Can't register EST table fd00: %d\n", result);
  64                return result;
  65        }
  66        result = uwb_est_register(i1480_CET_VS1, 0x01, 0x8086, 0x0c3b,
  67                                  i1480_est_fd01, ARRAY_SIZE(i1480_est_fd01));
  68        if (result < 0) {
  69                printk(KERN_ERR "Can't register EST table fd01: %d\n", result);
  70                return result;
  71        }
  72        return 0;
  73}
  74module_init(i1480_est_init);
  75
  76static void __exit i1480_est_exit(void)
  77{
  78        uwb_est_unregister(i1480_CET_VS1, 0x00, 0x8086, 0x0c3b,
  79                           i1480_est_fd00, ARRAY_SIZE(i1480_est_fd00));
  80        uwb_est_unregister(i1480_CET_VS1, 0x01, 0x8086, 0x0c3b,
  81                           i1480_est_fd01, ARRAY_SIZE(i1480_est_fd01));
  82}
  83module_exit(i1480_est_exit);
  84
  85MODULE_AUTHOR("Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>");
  86MODULE_DESCRIPTION("i1480's Vendor Specific Event Size Tables");
  87MODULE_LICENSE("GPL");
  88
  89/**
  90 * USB device ID's that we handle
  91 *
  92 * [so we are loaded when this kind device is connected]
  93 */
  94static struct usb_device_id __used i1480_est_id_table[] = {
  95        { USB_DEVICE(0x8086, 0xdf3b), },
  96        { USB_DEVICE(0x8086, 0x0c3b), },
  97        { },
  98};
  99MODULE_DEVICE_TABLE(usb, i1480_est_id_table);
 100