_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; }
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; }
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; }
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; }
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; }
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; }