Exemplo n.º 1
0
_spdk_scsi_dev *
spdk_scsi_dev_construct(const char *name, char *lun_name_list[], int *lun_id_list, int num_luns)
{
	struct spdk_scsi_dev *dev;
	struct spdk_bdev *bdev;
	struct spdk_scsi_lun *lun;
	int i;

	if (num_luns == 0) {
		SPDK_ERRLOG("device %s: no LUNs specified\n", name);
		return NULL;
	}

	if (lun_id_list[0] != 0) {
		SPDK_ERRLOG("device %s: no LUN 0 specified\n", name);
		return NULL;
	}

	for (i = 0; i < num_luns; i++) {
		if (lun_name_list[i] == NULL) {
			SPDK_ERRLOG("NULL spdk_scsi_lun for LUN %d\n",
				    lun_id_list[i]);
			return NULL;
		}
	}

	dev = allocate_dev();
	if (dev == NULL) {
		return NULL;
	}

	strncpy(dev->name, name, SPDK_SCSI_DEV_MAX_NAME);

	dev->num_ports = 0;
	dev->maxlun = 0;

	for (i = 0; i < num_luns; i++) {
		bdev = spdk_bdev_get_by_name(lun_name_list[i]);
		if (bdev == NULL) {
			free_dev(dev);
			return NULL;
		}

		lun = spdk_scsi_lun_construct(bdev->name, bdev);
		if (lun == NULL) {
			free_dev(dev);
			return NULL;
		}

		spdk_scsi_dev_add_lun(dev, lun, lun_id_list[i]);
	}

	return dev;
}
Exemplo n.º 2
0
static int prepare_tsc_input_device(uint16_t ind,
				struct usf_type *usf_info,
				struct us_input_info_type *input_info,
				const char *name)
{
	struct input_dev *in_dev = allocate_dev(ind, name);

	if (in_dev == NULL)
		return -ENOMEM;

	usf_info->input_ifs[ind] = in_dev;

#ifdef SKY_ULTRASOUNDPEN_FEATURE
	set_bit(CAMERA_KEY, in_dev->keybit);
	set_bit(CAPTURE_KEY, in_dev->keybit);
#endif

	in_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);

	in_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
	input_set_abs_params(in_dev, ABS_X,
			     input_info->tsc_x_dim[MIN_IND],
			     input_info->tsc_x_dim[MAX_IND],
			     0, 0);
	input_set_abs_params(in_dev, ABS_Y,
			     input_info->tsc_y_dim[MIN_IND],
			     input_info->tsc_y_dim[MAX_IND],
			     0, 0);
	input_set_abs_params(in_dev, ABS_DISTANCE,
			     input_info->tsc_z_dim[MIN_IND],
			     input_info->tsc_z_dim[MAX_IND],
			     0, 0);

	input_set_abs_params(in_dev, ABS_PRESSURE,
			     input_info->tsc_pressure[MIN_IND],
			     input_info->tsc_pressure[MAX_IND],
			     0, 0);

	input_set_abs_params(in_dev, ABS_TILT_X,
			     input_info->tsc_x_tilt[MIN_IND],
			     input_info->tsc_x_tilt[MAX_IND],
			     0, 0);
	input_set_abs_params(in_dev, ABS_TILT_Y,
			     input_info->tsc_y_tilt[MIN_IND],
			     input_info->tsc_y_tilt[MAX_IND],
			     0, 0);

	input_mt_init_slots(in_dev, NUM_TRK_ID);	

	return 0;
}
Exemplo n.º 3
0
static int prepare_keyboard_input_device(
    uint16_t ind,
    struct usf_type *usf_info,
    struct us_input_info_type *input_info,
    const char *name)
{
    struct input_dev *in_dev = allocate_dev(ind, name);

    if (in_dev == NULL)
        return -ENOMEM;

    usf_info->input_ifs[ind] = in_dev;
    in_dev->evbit[0] |= BIT_MASK(EV_KEY);
    /* All keys are permitted */
    memset(in_dev->keybit, 0xff, sizeof(in_dev->keybit));

    return 0;
}
Exemplo n.º 4
0
static int prepare_tsc_input_device(uint16_t ind,
				struct usf_type *usf_info,
				struct us_input_info_type *input_info,
				const char *name)
{
	struct input_dev *in_dev = allocate_dev(ind, name);

	if (in_dev == NULL)
		return -ENOMEM;

	usf_info->input_ifs[ind] = in_dev;
	in_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
	in_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
	input_set_abs_params(in_dev, ABS_X,
			     input_info->tsc_x_dim[MIN_IND],
			     input_info->tsc_x_dim[MAX_IND],
			     0, 0);
	input_set_abs_params(in_dev, ABS_Y,
			     input_info->tsc_y_dim[MIN_IND],
			     input_info->tsc_y_dim[MAX_IND],
			     0, 0);
	input_set_abs_params(in_dev, ABS_DISTANCE,
			     input_info->tsc_z_dim[MIN_IND],
			     input_info->tsc_z_dim[MAX_IND],
			     0, 0);

	input_set_abs_params(in_dev, ABS_PRESSURE,
			     input_info->tsc_pressure[MIN_IND],
			     input_info->tsc_pressure[MAX_IND],
			     0, 0);

	input_set_abs_params(in_dev, ABS_TILT_X,
			     input_info->tsc_x_tilt[MIN_IND],
			     input_info->tsc_x_tilt[MAX_IND],
			     0, 0);
	input_set_abs_params(in_dev, ABS_TILT_Y,
			     input_info->tsc_y_tilt[MIN_IND],
			     input_info->tsc_y_tilt[MAX_IND],
			     0, 0);

	return 0;
}
Exemplo n.º 5
0
static int prepare_mouse_input_device(uint16_t ind, struct usf_type *usf_info,
                                      struct us_input_info_type *input_info,
                                      const char *name)
{
    struct input_dev *in_dev = allocate_dev(ind, name);

    if (in_dev == NULL)
        return -ENOMEM;

    usf_info->input_ifs[ind] = in_dev;
    in_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);

    in_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
                                          BIT_MASK(BTN_RIGHT) |
                                          BIT_MASK(BTN_MIDDLE);
    in_dev->relbit[0] =  BIT_MASK(REL_X) |
                         BIT_MASK(REL_Y) |
                         BIT_MASK(REL_Z);

    return 0;
}
Exemplo n.º 6
0
static int prepare_tsc_input_device(uint16_t ind,
                                    struct usf_type *usf_info,
                                    struct us_input_info_type *input_info,
                                    const char *name)
{
    int i = 0;

    int num_buttons = min(ARRAY_SIZE(s_button_map),
                          sizeof(input_info->req_buttons_bitmap) *
                          BITS_IN_BYTE);
    uint16_t max_buttons_bitmap = ((1 << ARRAY_SIZE(s_button_map)) - 1);

    struct input_dev *in_dev = allocate_dev(ind, name);
    if (in_dev == NULL)
        return -ENOMEM;

    if (input_info->req_buttons_bitmap > max_buttons_bitmap) {
        pr_err("%s: Requested buttons[%d] exceeds max buttons available[%d]\n",
               __func__,
               input_info->req_buttons_bitmap,
               max_buttons_bitmap);
        return -EINVAL;
    }

    usf_info->input_ifs[ind] = in_dev;
    usf_info->req_buttons_bitmap =
        input_info->req_buttons_bitmap;
    in_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
    in_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);

    for (i = 0; i < num_buttons; i++)
        if (input_info->req_buttons_bitmap & (1 << i))
            in_dev->keybit[BIT_WORD(s_button_map[i])] |=
                BIT_MASK(s_button_map[i]);

    input_set_abs_params(in_dev, ABS_X,
                         input_info->tsc_x_dim[MIN_IND],
                         input_info->tsc_x_dim[MAX_IND],
                         0, 0);
    input_set_abs_params(in_dev, ABS_Y,
                         input_info->tsc_y_dim[MIN_IND],
                         input_info->tsc_y_dim[MAX_IND],
                         0, 0);
    input_set_abs_params(in_dev, ABS_DISTANCE,
                         input_info->tsc_z_dim[MIN_IND],
                         input_info->tsc_z_dim[MAX_IND],
                         0, 0);

    input_set_abs_params(in_dev, ABS_PRESSURE,
                         input_info->tsc_pressure[MIN_IND],
                         input_info->tsc_pressure[MAX_IND],
                         0, 0);

    input_set_abs_params(in_dev, ABS_TILT_X,
                         input_info->tsc_x_tilt[MIN_IND],
                         input_info->tsc_x_tilt[MAX_IND],
                         0, 0);
    input_set_abs_params(in_dev, ABS_TILT_Y,
                         input_info->tsc_y_tilt[MIN_IND],
                         input_info->tsc_y_tilt[MAX_IND],
                         0, 0);

    return 0;
}